DND.chat Docs
Guides & Walkthroughs

Walkthrough: The PDF Shredder

Upload an adventure PDF on a DNDCards board and shred it into reusable cards — with optional scenes projected into the DND.chat Autopilot DM.

The PDF Shredder turns a homebrew or print-module PDF into a deck of reusable cards on your campaign board — NPCs, monsters, spells, items, locations, quests, and tables — and can optionally reconstruct the module's scenes for the DND.chat Autopilot DM. It lives on DNDCards.com, the family's account hub and builder; once shredded, the cards are usable family-wide.

What you'll need: a campaign board on DNDCards (you must be signed in), and a PDF that's text-based or scanned. The shred is an AI pass, so it runs against the server's OpenAI key — everything is free during beta.

Where it lives

The Shredder is a DNDCards feature, not a standalone tool. Open it from a campaign board:

  • The board's Import and tools overflow menu, or a list's import button, both labelled Shred PDF.
  • Or the More card sources overflow in the card picker, labelled Shred · PDF import.

Any of these opens the picker on the Shred tab. You must be signed in (the upload returns 401 otherwise), and the server needs an OpenAI key configured (500 if it isn't).

For comparison: DNDWar.com has no shredder — it only links out to DNDCards for this. And DND.chat has its own, simpler PDF ingest, covered in the Gotchas below.

Walkthrough: shred a PDF into board cards

  1. On a campaign board, open the import menu and choose Shred PDF to land on the Shred tab. The idle screen reads: "Drop a homebrew PDF — text or scanned. OCR runs automatically when needed (up to 120 pages per scan)."

  2. Click Choose a PDF and pick your file. The dropzone states the limits: Text or scanned · max 100MB · 300 pages · OCR cap 120p. A cost hint is shown — typically about $0.10–0.80 per PDF (more for long scanned books with OCR). That's an estimate, not a charged price.

  3. Optionally tick Also build an AI-DM adventure flow for DND.chat (extra AI pass) before uploading. This runs a second pass that reconstructs scenes (see below).

  4. The file uploads and the phases stream live with a chunk counter:

    • Read PDF — pdf.js reads the embedded text layer.
    • OCR (only if the scan is sparse — averaging under ~80 characters per page) — each page is rasterized and read by gpt-4o-mini vision, one page at a time. You'll see OCR page N of M….
    • Name the import — a short list-name suggestion is generated.
    • Extract cards — the text is chunked (~8,000 chars each) and each chunk is run through the extractor. Cards are deduped by category and title.
  5. Review the results in the split-pane: the card list is on the left (each with a gem icon, title, page reference, and any SRD badge), and the selected card's PDF source excerpt plus a live preview (subtype, stats, flavor) on the right. Toggle accept/reject per card, or use Accept all / Reject all. You can also Re-run shred or Start over.

  6. Edit the Import name — it becomes the prefix on every list created. The UI previews which category lists you'll get.

  7. Optionally tick Generate art for accepted cards without compendium art to draft images for cards that didn't match the compendium.

  8. Click Import N cards · M lists. Accepted cards are grouped into fixed category buckets, one list per non-empty bucket, named <Import name> · <Label>. They are now real cards in your campaign deck — reusable as standees on DNDWar's battlemap and conjurable in DND.chat.

What becomes a card (and what doesn't)

The extractor pulls gameable content and copies mechanical values literally — CR, HP, AC, damage, saves, spell levels, rarity — into a card's stats rows. It extracts:

CategoryExamples
npcnamed characters, faction contacts
monsterstatblocks with full combat rows
spellspell entries with level/school
itemgear and magic items
locationrooms, regions, landmarks
questhooks and objectives
notelore paragraphs; loot/encounter tables get subtype Table

It deliberately skips generic rules text, tables of contents, credits, and page headers/footers — and it does not invent content the text doesn't support. Maps and images are not extracted; attach those manually.

Accepted cards group into a fixed set of buckets, one list each:

Players & PCs  ·  NPCs  ·  Locations  ·  Items & Treasure  ·  Spells
Monsters & Enemies  ·  Plot & Quests  ·  Encounters & Tables  ·  Notes & Lore

SRD enrichment — extract once, play everywhere

For monster, spell, and item cards, the shredder looks each title up in the shared SRD compendium (srd_cards, preferring source SRD 5.1). On a case-insensitive match it overlays the canonical art, stats, flavor, and monster_data onto the card — keeping the PDF text as a fallback — and tags the source as <source> · <pdf> p.N.

The practical payoff: a shredded Goblin that matches the compendium arrives with real parsed attacks and AC, so it's immediately rollable in DNDWar combat and conjurable via /summon in DND.chat — no manual statblock entry. This is the same compendium the Invoke action and the Homebrew Forge draw on.

Re-importing: the diff

Re-shred the same PDF and the Shredder computes a diff against a baseline — first the board cards whose source matches the PDF filename, otherwise the last shred snapshot saved locally. Each card is marked new, changed, unchanged, or removed; new and changed cards default to accepted, unchanged ones to rejected. Removed cards are listed but never deleted from your board. Filter chips (All / New / Changed / Same) help you focus the review.

Adventure flow → the DND.chat Autopilot DM

If you ticked the adventure-flow option, a second AI pass reconstructs ordered scenes — each with a title, boxed read-aloud, NPCs, exits, and a page reference. On import, those scenes are written into your campaign's tavern as the Autopilot DM adventure (tagged source: "pdf"), and the footer confirms, e.g. "Adventure flow (N scenes) sent to your tavern." Scenes are capped: read-aloud at 10,000 characters, 12 NPCs and 8 exits each.

This needs a DND.chat tavern to land in. If the campaign doesn't have one yet, the save returns {saved:false, reason:"no_tavern"} — open the campaign once in DND.chat to create the tavern, then re-import. (See the Gotchas for the non-DM case.)

The legally-clean alternative

The PDF shred is an AI extraction of someone's PDF. If you wrote the adventure yourself, you can skip the AI entirely: author it in Markdown or JSON and import it deterministically — no LLM, no cost, parsed instantly on the DND.chat side — and it feeds the same downstream scene contract the shredder uses.

That deterministic path is documented in full, with copy-paste examples, in the Adventure Format reference.

Gotchas

  • Page and size limits. Over 300 pages is rejected before shredding (422). Over 100MB is rejected. A scanned book over 120 pages is partially read — only the first 120 are OCR'd, with a cap banner in review; the rest of the book is not read.
  • Nothing extractable. A PDF with no readable text returns "No extractable text in this PDF." (or, after OCR, "OCR could not read any text from this PDF."). Password-protected, corrupt, or truncated files return specific guidance (remove the password, re-export, etc.).
  • No gameable content. A rules-only or blank PDF yields zero cards with "No cards found — the PDF may be mostly rules or blank pages."
  • Adventure save needs the DM. Only the campaign's DM/owner can write the adventure flow; a non-DM save updates 0 rows and you'll see "Adventure flow could not be saved (you may not be this campaign's DM)."
  • DND.chat's own ingest is different. Inside DND.chat's Autopilot DM panel there's a separate, simpler PDF ingest that is text-layer only — no OCR and no card extraction — with a page-range control and a front-matter start-page suggestion. The OCR-plus-card-extraction Shredder described on this page is the DNDCards feature. DNDWar.com has no shredder at all.