Skip to main content
decktalk build is safe to run after every edit, because each stage reuses what has not changed. This page says what is reused, and how to limit a build to one section when you want to save time or credits.

What an edit costs

The narration cache is build/audio/manifest.json. Each entry carries a hash of the provider, the voice settings, and the exact text sent, and narrate skips a section whose hash, file, and words file are all present. The recording stage has no cache of its own, so --only is how a recording is spared.

Limit a build to one section

With --only, the record, measure, and check stages touch only the sections named. Narration still runs for every section, which costs nothing for the cached ones, and assemble still cuts every section, because the final mp4 needs all of them. Name every section whose text or page changed. A section left out keeps its old recording even if its words moved.

Run the stages by hand

Each stage is also a command, and the sequence below is what build --only 3 does for the recording.
After a page edit with no script change, record --only N, measure --only N, and assemble are enough. After replacing a clip file, assemble alone is enough.

Force a fresh synthesis

A forced run spends credits on every section. decktalk narrate --dry-run prints what would be sent, section by section, and the character count follows from it.

A silent build and a voiced build

The manifest records whether its entries are silent placeholders. A voiced build after a silent one starts from an empty cache, and a silent build after a voiced one does the same, so switching between them never mixes the two. Neither overwrites the other’s final mp4 until it finishes, and a timestamped copy of every finished video sits beside build/out/<name>.mp4.

Next

How it works explains why a section’s recording stays valid when its neighbours change.