The pipeline
A raw take goes in. A finished cut comes out.
An agent-driven studio for one person with a full-time job and two kids. Every stage is resumable, state is JSON on disk, and there is no database.
- 24Python modules
- 5,667lines
- 243tests, across 20 files
- 16CLI subcommands
The stages
ingest- ffprobe, transcode, carry sidecar transcripts across
transcribe- four-level fallback: cache, sidecar, hosted Whisper, local Whisper
cut- remove fillers on word boundaries, split dead air
vo- split a voiceover at fuzzy-matched beat anchors, fill B-roll to speech length
overlay- deterministic PNG composition, so a cloud render matches a local one
captions- burn through libass, always the last pass
render- the finished cut, plus a genuinely separate vertical when one is worth posting
What it refuses to do
Each one is a scar with a measurement attached.
A render with no audible audio is not "done".
A valid AAC track at −91 dB is silence. The check measures peak, not presence, so the board shows SILENT rather than ready.
Captions will not burn without libass.
Homebrew’s core ffmpeg is a slim build. The pipeline fails with the fix rather than an unparseable filterchain 200 lines later.
Status is never typed.
It is derived from what exists on disk, which is why the board cannot flatter the work.
Media never enters the repo.
Enforced by extension, repo-wide, after 206 MB of camera originals walked into the index in one commit.
The uncomfortable part
I built an eval harness and pointed it at my own tooling. Two of the skills I wrote scored measurably worse than using no skill at all.The numbers are here, including the exact means and what it cost to find out.
The source is on GitHub.
One email when something ships, or when a rule changes.
That is the entire trigger list. No weekly cadence I can't keep with a full-time job and two kids. Some months that is zero emails.