Table Canon tries to solve TTRPG session memory with an AI
The state-delta approach is the right architectural call
Re-feeding 20 prior transcripts into context windows every session is a cost and noise disaster. The author's solution — each session emits an atomic state delta (NPC dossier updates, new locations, resolved promises) written to a database — keeps context bounded. That's the only way this scales past session 30. But the devil lives in the delta generation prompt. The repo doesn't show the exact JSON schema or the few-shot examples used to coerce the model into emitting only changes. Without seeing that, I can't evaluate whether the LLM reliably distinguishes "the party learned the baron's weakness" from "the baron's weakness changed." Those are different operations. One appends knowledge; the other mutates existing entity state. Conflating them corrupts the campaign bible.
Custom pre-lexicons help but aren't a silver bullet
Injecting a fantasy-term dictionary into the transcription prompt improves first-pass spelling on homebrew proper nouns. True. But Whisper's subword tokenization still mangles names that share phonemes with common English words — "Kaelthas" becomes "Kelsey," "Voryn" becomes "vorin." A pre-lexicon only biases the decoder; it doesn't constrain the vocabulary. The robust fix is a post-transcription correction pass that aligns hypothesized entities against the campaign's known-entity list with fuzzy matching, then rewrites the transcript before it hits the extraction stage. That's an extra LLM call per session. Worth it? Probably. Implemented here? Unclear.
VAD chunking is table stakes, not a lesson
"Pre-processing with VAD and deterministic chunking was necessary before touching the models" — yes, because feeding a 4-hour WAV directly into pyannote/Whisper OOMs on consumer GPUs. This isn't an engineering lesson; it's the bare minimum for any long-form audio pipeline. The real question: what chunk size, what overlap, and how are speaker embeddings stitched across chunk boundaries? Pyannote's clustering degrades when a speaker only appears in non-adjacent chunks. If the GM speaks for 10 minutes, vanishes for two hours, then returns, does the pipeline re-identify them correctly? The post doesn't say.
Entity alias resolution remains the hard problem
Matching "The Red Bishop" → "Arthur" → "that cult leader guy" across sessions without merging distinct NPCs is an open research problem in coreference resolution. The author admits partial success and falls back to manual edit/merge/split UI. That's honest. But it means the "automated memory engine" requires human curation after every session. At that point, how much time does the GM actually save versus just writing bullet notes? The break-even depends on session length and entity density. No numbers provided.
Quest/hook resolution logic needs more than prompt engineering
"Fine-tuning the LLM to reliably determine whether a promise has been resolved versus implicitly abandoned" — prompt engineering alone won't crack this. The signal lives in narrative causality, not lexical patterns. "We'll return for the artifact" followed by three sessions of side quests with zero mention of the artifact: abandoned or deferred? Humans infer from pacing and GM tone. An LLM needs either a formal state machine (quest: active → stalled → abandoned → resolved) with explicit transition triggers, or a fine-tuned classifier trained on annotated campaign logs. Neither is trivial.
The TTS/music layer feels like feature creep
Kokoro recaps and ACE-Step ballads are cute demos. They don't solve the core memory problem. Every GPU minute spent rendering a lyrical summary is a minute not spent improving alias resolution or delta accuracy. For a solo dev, that tradeoff deserves scrutiny.
Bottom line
The architecture is sound on the macro level: bounded context via state deltas, speaker-aware transcription, structured extraction. The micro-level execution gaps — delta schema design, cross-chunk speaker consistency, alias resolution without human-in-the-loop, quest-state formalization — are where the product lives or dies. If you're a GM with 50+ sessions of audio and zero notes, Table Canon might give you a searchable skeleton. If you expect a hands-off campaign historian, you'll be editing aliases at 2 AM. Try the 6-hour free tier before committing.