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 4 hits
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, filler words by language, clipping, black and frozen frames. Writes candidates, decides nothing.
vcut detect recording.mp4 --preset clean --lang esvcut 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 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.