Skip to main content
A silent build needs no API key and no network once the tools are cached, so a project can be built and verified on every push. This is how DeckTalk’s own repository does it.

The commands

On Linux, setup passes --with-deps to Playwright so that Chromium’s system libraries are installed too. The verify command with a list of SECTION:CUE checks is the test: build verifies section starts and cuts, and the cue checks measure each reveal in the finished mp4. A silent build’s placeholder track carries a click at every word start, so the cue table also reports an a/v column, the picture’s first change measured against the click nearest the cue, and the job fails when the finished file’s audio and picture disagree by more than max_offset_frames. That makes a silent build a test of the whole chain, not only of the cues. How it works explains the columns.

A GitHub Actions job

.github/workflows/video.yml
Chromium lives in Playwright’s cache, which is ~/.cache/ms-playwright on Linux, ~/Library/Caches/ms-playwright on macOS, and %LOCALAPPDATA%\ms-playwright on Windows. KaTeX lives in DeckTalk’s own cache, which follows the same platform rule under a decktalk directory, and DECKTALK_CACHE_DIR moves it. ffmpeg arrives with the static-ffmpeg package, so it is cached with the Python environment. To build a voiced video in CI, put ELEVENLABS_API_KEY and ELEVENLABS_VOICE_ID in the job’s secrets and export them. DeckTalk never prints either.

Two flags that do not mix

The --strict flag makes a missing clip, a missing recording, or a loudness miss an error. A silent build’s mix is clicks and silence, so its loudness report is meaningless and --strict would fail on it. Use --strict on voiced builds only.

The project directory

Every project command takes --project DIR, and the DECKTALK_PROJECT variable sets the default, so a job can run from the repository root.

Offline

After decktalk setup, nothing needs the network. decktalk init copies the cached KaTeX into deck/katex/, and the scaffold’s page loads it from there. A project created before setup ran loads KaTeX from a CDN instead, which fails offline and leaves every equation as plain text with a KATEX? verdict in the check table. Run setup, then either run init again into a fresh directory or copy the cached katex directory into deck/ and point the two tags at it.
deck/index.html
A corporate proxy that blocks Playwright’s download can be pointed elsewhere with PLAYWRIGHT_DOWNLOAD_HOST, as Playwright documents.

Next

The CLI reference lists every exit code, and Troubleshooting explains each verdict that a check can print.