You edit the video by editing its transcript — a struck-out word is a cut. Dead air comes from ffmpeg reading the waveform, not from the transcript, because whisper stretches word ends across silence.
An agent-driven editor for short-form video. It transcribes every word, cuts the dead air, draws motion graphics, animates captions and mixes music, then exports a portrait master. The CLI is deterministic and never calls a model — the judgment lives in markdown skills, so the same folder runs on whichever coding agent you already use.
Why it works
The CLI never calls a model
Every command is a pure function of disk state and flags. The intelligence is markdown in .claude/skills/, which is why it is model-agnostic by construction: running it on a different agent means pointing that agent at the same folder, with no code change, no SDK and no API key in the repo.
All state is JSON on disk
The edit decision list is the source of truth and the agent writes only that plus the graphics. Derived files are never hand-edited, so a fresh session resumes from one status command.
Content-addressed render cache
Re-exporting an unchanged segment is a cache hit, which took one test clip from 54s to 4.4s.
Dead air comes from the audio, not the transcript
Whisper stretches word end times across silence, so word ends are useless as cut boundaries. Silence is detected from the waveform instead — the bug that finding cost is now the design.
Run it
shell
git clone https://github.com/openwarehq/kve
cd kve
docker compose up
Then open the app and connect a model — pick a provider, paste a free key, done. It also reads a repo-root .env if you prefer a file.
Measured
Tests green
41
Test clip, cut
18.5s → 15.5s
Re-export with cache
54s → 4.4s
LLM calls made by the CLI
0
What it doesn’t do
Stated up front, because scope discovered at 2am is a betrayal.
It is a folder you drive with a coding agent, not an app. There is no GUI and no timeline to scrub.
Portrait output. The pipeline targets 1080×1920 short-form, not 16:9 long-form.
You install ffmpeg and whisper-cpp yourself. Both are one brew command, but they are not bundled.
First draft. It has been run end to end on a real clip, not across a wide range of footage — treat the edge cases as unexplored.
It cannot judge what is interesting. The agent decides what to cut from a transcript; a bad take stays a bad take.