Projects / Creative Tools

SnipSnap

Can something find the good bits in hours of footage for me?

SnipSnap is a video curation pipeline. It transcribes raw video locally, asks an LLM to pick out the segments that match a plain-language prompt, and exports the resulting cut list in formats that professional editing software can open.

ForEditors and creators with hours of raw footage and a rough idea of what they are looking for.
SolvesFinding the usable moments in long recordings means scrubbing through all of it by hand.

What is SnipSnap?

SnipSnap turns a folder of video files and a sentence like “find the funniest moments” into an edit decision list. You describe what you want, and it produces a cut list ready to open in an NLE.

ELI5: you tell it what you are looking for, it listens to all the footage, and it hands your editing program a list of where to cut.

Three stages

  1. Transcribe. Speech is extracted from each video with faster-whisper, running locally and offline. Whisper model size is configurable from tiny up to large-v3.
  2. Curate. Transcriptions go to an LLM through OpenRouter along with your prompt. A multi-pass chunking strategy lets it handle hours of source material in one run.
  3. Export. The cut list is converted to EDL (CMX 3600), FCPXML 1.8, or a DaVinci Resolve script, with a configurable frame rate for timecode conversion.

snipsnap run ./footage --prompt "..." does all three in one command. Each stage is also available on its own, and snipsnap status shows what has been transcribed and which cut lists exist.

Two interfaces, one pipeline

The CLI and a web dashboard are both thin layers over the same pipeline and the same JSON storage on disk. The dashboard is served with uvicorn and built with Alpine.js and UnoCSS, and it walks through the same transcribe, curate, export flow in the browser.

Setup

snipsnap init is a short wizard that writes a .env file with your OpenRouter key, the LLM model, and a data directory. The default curation model is Gemini 2.5 Flash Lite. Python 3.11 or newer is required.