- scripts/generate-weapon-images.js: AI image generation for weapon cards
supporting HuggingFace FLUX.1-schnell, OpenAI DALL-E 3, and Gemini Imagen;
images served from public/weapon-images/ via new static route in server.js
- public/cards.html: load manifest.json and show AI art on weapon cards
- scripts/scrape-rules-from-pdfs.py: PyMuPDF scraper extracting full rule
text from all five rulebook PDFs with bold-span heading detection
- scripts/tag-and-dedup-rules.js: standalone dedup helper (JS-side grouping)
- database/routes/rulesRoutes.js: remove content truncation in search/random,
add admin dedup endpoint (JS-side, fast), fix RulesTab to fetch full content
- src/components/RulesTab.jsx: fetch full rule content on modal open
- public/print.html: expanded quick reference with pre-gen character stat
blocks (Sepheran + Lucian), Astartes traits sheet with correct derived SBs
and TBs, full Critical Hit Tables for all 4 locations × 4 damage types
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Art box reduced from 32mm to 26mm height, icon enlarged to 22pt
- Stats font increased from 6pt to 7pt with more line spacing
- Replaced floating source pip with proper footer bar showing
renown requirement (left) and source book (right)
- Footer bar colour-coded by weapon category to match title bar
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Poker-card sized (63×88mm) cards matching the physical Deathwatch card format:
- Req cost badge top-left
- Title bar with weapon name
- Dark art box with category icon and class label
- Type line (Weapon – Melee, Weapon – Ranged, Equipment, etc.)
- Stats block (Dmg, Pen, Range, RoF, Clip, Rld, Special, Renown)
- Source abbreviation bottom-right
9 cards per A4 sheet, cut-ready.
Filter by category (Melee/Ranged/Grenade/Armour/Other).
Data loaded live from /api/weapons.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>