narrate: body_md_tts column + narrate_prep pass + Kokoro routing
Two new things working together: 1. Migration 0005 adds chapters.body_md_tts (nullable). Narrate path prefers it over body_md when present — that's the annotated-for- audiobook variant. Falls back to body_md if not set. 2. New Forge::narrate_prep pass: author (or House) annotates prose with [breath] / [pause:Xs] / [scene] beat markers AND occasional humanizing narrator stumbles (em-dash repetition, self-correction, hesitation — sparingly, 1-3 per chapter). Apart from stumbles, the prose is verbatim. Author voice threads through. 3. New CLI: 'skald prepare-narration --chapter <uuid> [--author slug] [--overwrite]'. Records as generation_runs row kind=narrate_prep. 4. skald narrate now routes by voice.source — kokoro_* voices hit KOKORO_URL (Apache 2.0 stack, audiobook-tuned with the v0.2 render- and-stitch server), everything else hits F5_TTS_URL (voice-cloning path). Voice DB row carries source as the dispatch key. Why no new tag for narrator stumbles: em-dash repetition and self- correction are just prose patterns Kokoro reads correctly because of its punctuation cues. No new server-side machinery.
This commit is contained in:
parent
3c159d8d75
commit
1f1d63dd1b
6 changed files with 413 additions and 88 deletions
15
migrations/0005_chapter_body_md_tts.sql
Normal file
15
migrations/0005_chapter_body_md_tts.sql
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
-- Annotated TTS variant of each chapter's prose. NULL = not yet
|
||||
-- generated; renderers fall back to body_md when this is NULL.
|
||||
-- Otherwise this column carries the same prose with control tags
|
||||
-- inline: [pause:Xs] / [breath] / [scene] — the kokoro server
|
||||
-- interprets these into silence beats during synth.
|
||||
--
|
||||
-- Why a separate column instead of mutating body_md: the human-
|
||||
-- readable version stays clean for web inspection + future plain-
|
||||
-- text export. The TTS version is production output, regeneratable
|
||||
-- whenever the author's beat-placement taste shifts.
|
||||
ALTER TABLE chapters
|
||||
ADD COLUMN body_md_tts text;
|
||||
|
||||
-- generation_runs.kind already accepts any string; no check
|
||||
-- constraint to update. The new pass kind is 'narrate_prep'.
|
||||
Loading…
Add table
Add a link
Reference in a new issue