# Scene Detector

Find every cut in a video and get the shot list with timecodes and quality scores.

Runs entirely in the browser through WebCodecs and WebAssembly. No upload, no account, no size limit
imposed by a plan, no watermark — because there is no server involved.

Page: https://life2film.com/tools/scene-detector/

## What matters

- Exports to EDL (Resolve, Premiere), OTIO (Resolve, Avid, Premiere), FCPXML, Audacity labels, CSV and JSON.
- Markers land on whole frames, so the export frame rate changes where they sit, a grid at 25 fps sits up to 20 ms off in a 30 fps sequence.
- Ten-minute ceiling: each sample is a seek, costing tens of milliseconds.

## From code

```js
const engine = await import('https://life2film.com/wasm/va_wasm.js');
await engine.default({ module_or_path: 'https://life2film.com/wasm/va_wasm_bg.wasm' });

// 31 features per frame, from RGB24 pixels
const scored = JSON.parse(engine.score_frame(width, height, rgb24, timestamp, null));
```

## Questions

**Does the video get uploaded?**

No. The browser decodes it locally, a canvas reads the pixels, and WebAssembly compares them. Nothing is sent anywhere, the page has no endpoint to send it to. That is also why there is no file-size limit and no queue.

**How does it find the cuts?**

It samples frames across the video and watches how much the picture changes from one sample to the next. A cut is a discontinuity, colour and luminance jump in a single step, rather than drifting the way they do during a pan or a fade. The detector looks for those steps and reports the boundaries between them.

**Will it catch dissolves and fades?**

Partly. A hard cut is unambiguous and gets found reliably. A slow dissolve is, by construction, a gradual change: the same shape as a camera move, so it may be reported a little early, a little late, or merged with its neighbour. Fast whip-pans can also read as cuts. Treat the result as a shot list to check, not a verdict.

**What is the quality score next to each shot?**

The same per-frame scoring the Life2Film app uses when deciding what to keep: sharpness, exposure, contrast, colourfulness and entropy, combined into one number. It is a rough ranking of which shots are worth a second look, not a judgement of what is interesting.

**Which files work?**

Anything the browser can play. MP4 and MOV with H.264, and WebM. Formats a browser cannot decode, such as most ProRes or raw camera files, will not open here; transcode a proxy first.

**How long does it take?**

It steps through the video seeking to each sample point, which costs tens of milliseconds each time. A one-minute clip takes a few seconds. Long videos are sampled more coarsely so the wait stays reasonable, the shot list stays accurate to roughly half a second either way.

## Related

- [Trim Video](https://life2film.com/tools/video-trimmer/): Drag the handles to the part you want, preview it, save it. Audio stays in sync.
- [Compress Video](https://life2film.com/tools/video-compressor/): Make a file smaller and see exactly what it cost. No size limit, because there is no server.
- [Video to MP3](https://life2film.com/tools/video-to-mp3/): Pull the audio out of a video and keep it as MP3, WAV or OGG.
- [Convert Video](https://life2film.com/tools/video-converter/): MP4, WebM and MOV in any direction, or pull the audio out as WAV.
- [Video Splitter](https://life2film.com/tools/video-splitter/): Cut a long video into Reels or Shorts that start on a shot change instead of every 30 seconds, ranked by picture quality.
- [BPM Detector](https://life2film.com/tools/bpm-detector/): Find a track’s tempo and the time of every beat, then send the grid to Resolve, Premiere, Final Cut or Audacity as markers.

- The engine as a package: https://life2film.com/engine/
- Site overview for agents: https://life2film.com/llms.txt
- Every tool page is available as markdown by appending `.md` to its address, or by requesting it
  with `Accept: text/markdown`.

---
Life2Film — on-device video montage. https://life2film.com/
