FilmCraft: an editor written by agents
Definition
FilmCraft is an open-source nonlinear video editor in pure Rust, built to feel like Adobe Premiere: same panels, same shortcuts. It ships its own decoders and encoders written from the public specs, runs natively on macOS, Windows and Linux, and has a WebAssembly build. MIT or Apache-2.0.
What makes it worth a page is how it was made. The first commit is dated 30 September 2026. Four weeks later the repository has 2,424 commits, about 343,000 lines of Rust in 45 crates and 2,520 tests. In a sample of 100 commits, 61 are co-authored by Claude. The project’s own roadmap measures the remaining work in “agent-hours”: 400 to 700 to beta.
Numbers
- Decoders are real. HEVC Main and Main 10 decode bit-exact on 41 conformance streams; ProRes in all six profiles; also H.264, AV1, VP8/VP9, MPEG-2, AAC, Opus, AC-3. HEVC 1080p runs at about 75 fps on one thread and 225 on fourteen.
- Encoders are fewer. H.264, ProRes, DNxHR and AAC in software; HEVC only through the hardware encoder. Their H.264 encoder exported a 9.5-minute 1080p timeline in 793 s, against 311 s through VideoToolbox.
- Alpha by its own count: “feature breadth ~86%, ready for real work ~56%”. No real-camera test corpus yet; test CI on pull requests only since 20 October.
Rule
An agent-built editor at this scale is now a month of work. Feature breadth stops being a moat. For project-life2film that settles the positioning question: FilmCraft gives an agent about 650 low-level commands (place a clip, set an effect parameter), so the agent has to be the editor. Life2Film gives an agent judgment: what is in every shot, which frames are sharp, where the beats and the words are, and a cut written as a script (creative-video-agent-cut). One is an open Premiere for professionals; the other is for someone with a day of phone and drone footage and no editing skill. They complement each other: our cut can open in theirs for manual finishing.
What we take
- Interchange, without their code. Their CLI (
filmcraft-cli run, headless) converts OTIO into FCPXML, FCP7 XML, EDL and AAF. Measured on a 10-shot Life2Film plan: FCPXML and EDL in one command, score markers kept. The first run also caught a bug on our side: the plan stored its media as./fixtures/x.mp4, relative to the folder the CLI ran in, and editors resolve a relative path against the OTIO file’s folder, so the footage opened offline. Making the writer store absolute paths broke our own core, which uses that string as a key to match moments to shots, so the fix lives at the boundary: the export writes an absolute copy for the editor and leaves the plan alone. In video-analyzer this ismake otio-export OTIO=plan.otio FORMAT=fcpxml; the same plan now links its media, and the command fails loudly when any clip is still offline. - Container crates, carefully. Their MP4 muxer is pure Rust and builds for WebAssembly, but it
writes one sample description per track, the same limit that broke our outro join on 10-bit DJI
footage the same week (creative-video-shipping). A camera clip plus a card from another encoder
still needs
hev1with parameter sets in-band. - Colour and scopes, as crates.
filmcraft-color(crates.io, serde only) decodes HLG, PQ and camera log curves, DJI D-Log and Apple Log among them;filmcraft-scopes(git only) turns a frame into numbers an agent can read: clipped and crushed share, luma percentiles, skin-tone hue against the 123° line. Life2Film’s analysis now decodes HDR in the frame decoder, so scoring, scene detection and the feature space all see SDR. Before that an iPhone HLG white wall scored 0.749, the brightness of a 75% grey. The tone map is deliberately not theirs: we publish SDR for the web, so the scorer uses the same hable curve as our render and sees what the viewer will see; a test holds the two within 3 levels. - Denoise and dereverb, ported into our own audio crate. Their
audio-dspspectral subtraction and dereverb became the Spectral and Dereverb modes of SuperDuper Denoise (project-superduper-dsp), next to a Neural mode on RNNoise. Their loudness meter we did not need: ours already passes EBU Tech 3341 within 0.1 LU, so it moved into a zero-dependency crate instead. - Not taken: their Whisper on candle (the phone uses Apple’s on-device recogniser, the Mac mlx-whisper), the broadcast caption formats (YouTube needs SRT), and their tick time. We measured our own timing first: OTIO cuts were already whole frames; the drift was in two plan writers that summed seconds while the render lays whole frames, 3.6 s over an hour-long film of 1385 pieces. Counting in frames fixed it without a new time type.
- Agent rules worth copying. “Never crash”: clippy denies
unwrap,expectandpanic, every number from a file is treated as hostile, every crash fix ships with a test that crashed before it. “Report progress honestly”: every number labelled measured or estimated, a stub counted as a stub. And agents ask a human only about licences, money, publishing, personal data and destructive git; everything else they decide and write down.
Exceptions
- Trade dress is theirs to defend. The UI is measured against Premiere’s own menu dump and names Adobe features (Lumetri, Ultra Key). Do not copy their naming.
- Codec patents. Apache-2.0 gives no cover for H.264, HEVC or AAC pools. Reading containers is fine; shipping their software encoders is a separate decision.
- Bit-exact on conformance streams is not tested on cameras. DJI and iPhone files are exactly what their gaps list says is missing.