Write your whole episode as one plain-text file. Podscript compiles it — speech, music
beds, sound effects, fades, and ducking — into the same finished audio every time.
podscript: "0.2.0"
voices:
sam: { voice: Adam, preset: host }
assets:
intro: music/intro_theme.mp3
scene cold_open:
bed intro gain-3dbfade-outover4sat8s
sam [with intro.fade-out]: Hey everyone — welcome to the show. Today we're digging into...
That renders intro music at −3 dB, fading out over four seconds starting at 8s, with Sam’s
narration beginning exactly as the fade starts and continuing over the tail.
Generation vs. rendering
A produced podcast is normally three disconnected stages — scripting, text-to-speech,
mixing. Podscript draws a hard line: an LLM or a person writes the script
(non-deterministic); Podscript compiles it to identical audio every run (deterministic).
Timing is relational
You never write timestamps for fades, effects, or ducking — a spoken line’s length isn’t
known until it’s synthesized. You describe timing by relationship (“as the fade begins”,
“after Sam”, “under the speech”) and the compiler resolves it to absolute time.
Written by LLMs or people
The syntax is dense enough to fit in an LLM’s context and robust to both human typing and
machine generation. Describe an episode in prose; the model writes a valid script.
Diff-able & reproducible
One human-readable, version-controllable file. It carries no behavioural logic — it
describes a fixed production, so the output stays reproducible, diff-able, and debuggable.
This project is the specification, its conformance suite, and examples — not an
implementation. The normative document is the specification.