Skip to main content
Each project has one decktalk.toml. Every path in it is relative to the project directory. An unknown top-level table fails the load, so a typo cannot silently do nothing, and a value of the wrong type fails with the table and key named. The file has two kinds of content. The document tables on this page describe the presentation. The tuning tables change how DeckTalk renders and are rarely needed.
decktalk.toml

[project]

[voice]

The voice settings for this presentation. The voice id and the API key are secrets, so they live in .env as ELEVENLABS_VOICE_ID and ELEVENLABS_API_KEY, or in the environment. A change to any of these changes the cache key of every section, so the next build synthesizes everything again.

[[section]]

Write one table per ## N. section of the script. The order in the file does not matter, because DeckTalk sorts them by number, and a duplicate number fails the load. Every script section must have one. A section is either a page or a clip, and a table with both keys fails. A missing clip is not an error unless you pass --strict. A titled slate plays for slate_seconds in its place, so a project builds before every asset exists.

[transition]

[mix]

The mix is optional. Without this table the video carries narration and clip audio only. Sound explains how the parts fit together.

[[mix.sfx]]

One table per one-shot effect. Put a sound effect on a cue walks through one.

[mix.loudnorm]

The targets for the loudness pass, which How it works describes. The keys are accepted in upper or lower case.

[soundscape]

These tables hold the prompts for decktalk soundscape, which generates sound with ElevenLabs. Ambience and music write to the ambience and underscore paths named in [mix]. When [mix] names none, they write to build/sfx/ambience.mp3 and build/music/underscore.mp3. Each effect writes to build/sfx/<name>.mp3 unless its out key says otherwise.

[soundscape.ambience]

[soundscape.sfx.<name>]

[soundscape.music]

Tuning tables

Any settings section can be overridden per project with a table of the same name, such as [video] or [record], or per shell with a DECKTALK_<SECTION>_<FIELD> variable. Configuration lists every field with its default.