The agent has eyes
get_frame, skim_asset (a contact-sheet montage) and
preview_timeline (the composited cut) return real images the model
sees — so it finds the right moment and confirms the cut, not guesses from
metadata.
Kerf is a cross-platform desktop editor with an embedded MCP server, so an LLM can analyze your footage and assemble the cut through the same engine the GUI uses, on the same live project — and it can actually see the frames it edits. Nothing is re-encoded until you export.
The same Project is exposed twice — as the GUI you click and as
Model Context Protocol
tools an agent calls. It doesn't script a black box; it drives the identical engine,
and every edit shows up live for you to review.
get_frame, skim_asset (a contact-sheet montage) and
preview_timeline (the composited cut) return real images the model
sees — so it finds the right moment and confirms the cut, not guesses from
metadata.
The MCP server and the webview hold the same project behind one lock. When the agent trims a clip, your GUI re-renders it instantly — no import/export round-trip, no second copy of the truth.
Work is handed back through a task queue: you enqueue plain-language tasks, the agent marks one ready, and you apply or dismiss. Kerf never edits on its own, and every change is revertible.
Everything below is wired to real backend state and renders from a pure,
unit-tested export graph. Clip positions, gaps, track layering, effects, keyframes,
overlays, ducking and loudnorm all come out of one filter_complex.
Bespoke timeline: video / audio / text tracks, free positioning with gaps, drag across tracks, edge-drag trim, razor split, ripple delete, snapping to edges, the playhead and beats.
Real Web-Audio playback with J/K/L shuttle and scrub; volume, fades, speed and reverse are auralized and the playhead follows the audio clock.
FFmpeg silence detection, scene detection, an audio energy / beat grid and waveforms — all CLI-driven. Optional local Whisper transcription.
Per-clip video (blur / sharpen / hue / negate / vignette / chroma-key) and audio (highpass / lowpass / EQ / compressor / gate) chains, plus transform and color grade.
Animated zoom, position, rotation and opacity via piecewise-linear keyframes — the Transform panel auto-keyframes at the playhead.
Text overlays and lower-thirds with their own keyframes, plus one-click captions from a transcript and SRT export.
Per-track ducking dips music under dialogue via sidechain, and a single-pass loudnorm brings the final mix to −14 LUFS on export.
Positional, multi-track filter_complex with progress and cancel; range export renders just the region between your in / out marks.
The desktop app hosts the server over streamable HTTP. Point a client at it and ask in plain language — “skim the interview, cut the dead air, drop in captions.” It claims a task, works, and hands back a reviewable result.
claude mcp add --transport http \
kerf http://127.0.0.1:7777/mcp{
"mcpServers": {
"kerf": {
"type": "http",
"url": "http://127.0.0.1:7777/mcp"
}
}
}Installers for macOS, Linux and Windows are published on every release.
macOS / Linux expect a system FFmpeg on PATH; the Windows build bundles it.
git clone https://github.com/OrellBuehler/kerf
cd kerf/frontend && bun install && cd ..
cargo run -p kerf-appNeeds Rust ≥ 1.82, Bun ≥ 1.2, and (for media) the FFmpeg dev libraries.
Builds without them via --no-default-features.