Skip to main content
← All work

vodcut

Turns a long recording into a tight edit, automating the mechanical half and leaving the editorial half alone.

Status

Working end to end: transcript, packed editorial format, cut list, frame-accurate render, and motion graphics. Runs entirely on the machine — no cloud APIs at any stage.

Language
Python
Transcription
faster-whisper, CPU int8
Render
ffmpeg, frame-accurate
Tests
358 passing

The half that should not be automated

Most automatic editors score footage for how boring it is and cut on the score. This one deliberately does not. Cheap signals — silence gaps, words per minute, filler density, how hard chat was going — are good at narrowing attention and bad at judgement, so they are used only to point at candidate regions. Whether a moment stays is read off the packed transcript against a brief, by an LLM or a person.

What gets automated is everything mechanical around that decision, and that part is held to a standard: cuts never land inside a word, every edge gets 30 to 200 milliseconds of pad because transcript timestamps drift by about that much, and a checking pass enforces it rather than trusting it.

Matching somebody else's pacing

The tool can profile a finished video — cut rate, clip-length distribution, speech ratio — so a creator's published work becomes target numbers to edit against.

That measurement has a trap in it, which the tool now guards. A scene detector cannot tell your edit from the game cutting its own shot: gameplay changes frame wholesale on a camera swing, so action-dense footage profiles as fast even when almost nothing has been cut. Detected cuts are therefore split into the ones the edit list actually contains and the ones the content produced on its own, and only the first number means anything about your editing.

Render rules

Segments are re-encoded once, frame-accurately, with short audio fades at both ends so no boundary pops, and the final assembly is a lossless concatenation. Transcripts are cached against the file's path, size and modification time, because the transcript of an unchanged file is an unchanged transcript.

Motion graphics are written as HTML and rasterised through a headless browser, which means a new lower-third is a bit of markup rather than a new renderer.