Grain.
A tiny, fast video editor for social teams — A cut-grade-export editor that opens in two seconds — GPU-graded previews in the browser, renders handled by an FFmpeg pipeline compiled to WASM with a Rust core for the hot paths.
Overview
Social teams don't need a Premiere licence to ship a 40-second reel. Grain is the 20% of an NLE that covers 95% of social work: trim, sequence, grade, caption, export — with a UI a producer learns in one sitting.
The build
The timeline is a custom React renderer over a Rust document core; colour grades are WebGL shaders applied in real time; export runs FFmpeg in a Web Worker (WASM) with multipart uploads straight to S3 — no render farm, no waiting room.
- Rust edit-graph core, deterministic undo
- WebGL LUT grading at 60fps preview
- FFmpeg-WASM export pipeline in Workers
- Electron shell sharing 100% of the web code
The outcome
Median project-to-export time is under nine minutes. The pilot team retired two tools and their render queue — the export bar is now the slowest thing in the room, at ninety seconds.
It feels like a game, renders like a pipeline.
Under the hood
The edit graph is a Rust core compiled to WASM with deterministic undo; React renders the timeline, WebGL shaders grade the preview at 60fps, and FFmpeg-WASM in Workers exports with multipart S3 uploads.
- Rust document core: every edit replayable
- WebGL LUT pipeline, zero-copy frame path
- Export in Workers — UI never blocks
- Electron shell reuses 100% of the web build
Also considered Remotion/server rendering — great for templates, wrong for a hands-on editor's latency budget.