decktalk build turns your script and pages into one mp4 in seven stages. To build your first video, follow the
Quickstart.
Each panel names the pipeline stages it runs, in order.
- You write four files:
script.md,decktalk.toml,cues.json, and the page. - The speech provider voices the script and returns a start and an end time for every word.
- Headless Chromium records each page section, and each reveal fires at its cue time.
- ffmpeg cuts each recording to its section and joins the sections into one mp4.
verifymeasures the final mp4, so an early or late reveal shows as a number.
Stages
The seven stages always run in this order. Each stage reads files that the stages before it wrote.
Each stage is also a command with the same name, and the CLI reference lists them.
Build artifacts gives the fields of every file.
assemble also runs the
loudness pass.
Why the cuts are exact
Each reveal starts on its word because DeckTalk finds narration t=0 inside every recording, to the frame.The bowl and the ball each appear whole in the first frame after their words.
The recorder removes the cover only when the page is ready. The handshake
shows each wait.
measure looks for the cover only in the first [align] scan_seconds of each recording, 4 s by
default. The alignment never depends on wall-clock time.
The silent build
A silent build replaces the voice with a click track, so it needs no account and no API key.- The click track has a soft click at the start of every estimated word, at -24 dBFS.
narratespaces the estimated words evenly atsilent_words_per_minute, 150 by default. It adds each pause, beat, and tail. script.md gives the length rule.- Every other stage runs as usual. A silent build therefore tests the cues, the pages, the recording, the cut, and the checks.
- The
narrateandbeatstables mark their times as estimated. - The clicks let
verifycompare the picture with the sound in the final mp4. Verify explains the check. - A silent build skips the loudness pass, so the clicks keep their level.
Clips and the narration
A clip section plays a video with its own audio.narrate, record, and measure skip it, and the narration
pauses for a clip between two page sections.
The narration pauses for each clip and resumes with the next page section.
Caching
narrate keeps each section’s audio and a hash of its text in build/audio/manifest.json. After an edit,
decktalk build voices again only the sections whose text changed. A plain build still records every page
section, and decktalk build --only N records only section N. A recording stays valid when a neighbor section
changes length, because cue times count from the start of their own section.
Rebuild one section says what each edit runs again.
What verify checks
verify checks the final mp4 in three ways.
- Section starts: the frame 0.2 s after each section start has a pixel brighter than luma 60.
- Cuts: the narration is at or below -40 dBFS in the last 0.15 s before each cut.
- Cues: the picture changes within 80 ms of each cue time. After a silent build, it also changes within 120 ms of the click plus the offset key.
decktalk build checks section starts and cuts, and cut continuity for a section that sets carries_previous. decktalk verify also checks the cues.
Verify defines every measurement, limit, and result.
Terms
Next
- Build your first video: Quickstart
- Rebuild after an edit: Rebuild one section
- Read a verify table: Verify