Non-destructive · MCP-native · FFmpeg-backed

The video editor
your AI can drive.

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.

Illustrated: bin, preview, agent queue and a multi-track timeline — the agent is trimming a clip on V1.
The agent

Most tools bolt a chatbot onto an editor.
Kerf makes the editor an API.

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.

Youthe Kerf GUIOne live projectassets · timeline · tasksnothing re-encodedThe agentClaude — any MCP clientFFmpeg engineprobe · frames · exportTauri IPCMCP · HTTP
Two hands, one cut — you click the GUI, the agent calls tools, and both land in the same live project.
👁

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.

🔗

Same engine, same project

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.

🤝

You stay in control

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.

One loop of a real session: skim → cut → preview → hand back. You apply — or dismiss.
Under the hood

A real NLE — not a scaffold.

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.

sources — untouchedinterview.mp4b-roll.mp4timeline — just datainterviewb-roll
Non-destructive, literally: a clip is a source range at a timeline position. Cuts, effects and keyframes edit that data — sources are read once, at export.

Multi-track NLE

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.

Audible playback

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.

Analysis

FFmpeg silence detection, scene detection, an audio energy / beat grid and waveforms — all CLI-driven. Optional local Whisper transcription.

Effects & color

Per-clip video (blur / sharpen / hue / negate / vignette / chroma-key) and audio (highpass / lowpass / EQ / compressor / gate) chains, plus transform and color grade.

Keyframe animation

Animated zoom, position, rotation and opacity via piecewise-linear keyframes — the Transform panel auto-keyframes at the playhead.

Titles & captions

Text overlays and lower-thirds with their own keyframes, plus one-click captions from a transcript and SRT export.

Smart mixing

Per-track ducking dips music under dialogue via sidechain, and a single-pass loudnorm brings the final mix to −14 LUFS on export.

Export

Positional, multi-track filter_complex with progress and cancel; range export renders just the region between your in / out marks.

55 tools, one live project

Connect any MCP client
and start editing.

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.

get_frame skim_asset preview_timeline cut_clip split_at ripple_delete remove_silence set_video_effects add_keyframe captions_from_transcript set_track_duck export +43 more
connect with Claude Code
claude mcp add --transport http \
  kerf http://127.0.0.1:7777/mcp
…or any HTTP-capable client
{
  "mcpServers": {
    "kerf": {
      "type": "http",
      "url": "http://127.0.0.1:7777/mcp"
    }
  }
}
Get it

Download a build, or run from source.

Download

Installers for macOS, Linux and Windows are published on every release.

macOS / Linux expect a system FFmpeg on PATH; the Windows build bundles it.

Latest release ↗

Build from source

git clone https://github.com/OrellBuehler/kerf
cd kerf/frontend && bun install && cd ..
cargo run -p kerf-app

Needs Rust ≥ 1.82, Bun ≥ 1.2, and (for media) the FFmpeg dev libraries. Builds without them via --no-default-features.