Cut dead air out of a recording.
vcut finds the silences, filler words, and technical faults in a raw take, proposes an edit as data, and renders it only after a human approves.
npm install -g @crafter/vcut npx @crafter/vcut recording.mp4 npx skills add Railly/vcut $ vcut recording.mp4
recording.mp4 6m 22s
dead air ###......... 16.5% (1m 03s)
net of margin ##.......... 10.3% (~39s)
silences 119 spans
fillers not scanned, see vcut semantic
review 1 (never cut)
clipping: peak -0.24 dB
Next:
vcut detect recording.mp4 --jsonCutting silence is mechanical. Deciding what stays is not.
Trimming pauses out of a talking-head recording is work an agent should do. What an agent should not do is decide which of your mistakes stay in, or overwrite the only copy of a take.
vcut splits those. It proposes cuts as data you can read, and every destructive step is gated behind a human. The thresholds are not invented either: they come from a pipeline that ran in production on published video.
vcut detect
Silences by preset, clipping, black and frozen frames. Writes candidates, decides nothing. Filler words are a judgement, not a word list, so they belong to the semantic pass.
vcut detect recording.mp4 --preset clean --lang esvcut suspects
Where to look first, ranked, from the pauses detect already measured. Hesitant material fires five to six times a minute, a take read from a script fires once. It says where, never what.
vcut suspects --detect detect.jsonvcut edl build
Inverts the cuts into the spans worth keeping. Every segment is born proposed, the EDL draft.
vcut edl build --detect detect.json \
--output master.mp4 --campaign my-videovcut render
Preview accepts proposals. Master needs an approved EDL, matching source hashes, and a free output path.
vcut render --edl edl.json --mode previewvcut converge
Where a repeated phrase stops coming back. Every attempt at a retake says the same words, so a window opened inside one reads like a clean start: three runs each verified a boundary and each was wrong by about 1772ms.
vcut converge take.mp4 --phrase "a la que conocemos" \
--from 59 --lang esvcut schema
The JSON contract per command, versioned. An agent introspects it instead of parsing help text.
vcut schema detectThe renderer checks its own work
After rendering, vcut probes the file it just produced and compares it against the EDL: dimensions, pixel format, colour metadata, decoded frame count within one frame, and the audio contract. A render that quietly produced two extra frames is a bug, and without this check it ships as a working file.
Renders are reproducible
The same EDL produces a byte-identical file. The sha256 in the result exists so you can verify that yourself rather than take it on faith. It is also how the port from one runtime to another was checked: same EDL, same hash, byte for byte.
Unimplemented fields are rejected
The EDL schema has room for external audio, sync offset, and noise reduction. The renderer does not implement them, so it refuses an EDL that sets them instead of rendering something that quietly ignores half the instruction.
Start with one file.
npx @crafter/vcut recording.mp4
Needs ffmpeg and ffprobe on your PATH. Run vcut doctor to check.