Side-by-side
| peepshow | Hand-rolled ffmpeg + bash + glue scripts | |
|---|---|---|
| Setup | `npm i -g peepshow` | Write + maintain ~500 lines of glue |
| Scene detection | ✅ tuned + duration-aware fallback | ffmpeg's select=gt(scene,T) — needs tuning per video |
| Perceptual dedup | ✅ phash + hamming threshold | Roll your own |
| Whisper integration | ✅ auto-detects whisper.cpp + 4 cloud providers | Wire up yourself |
| Sinks (SQL, vector, chat, etc.) | ✅ 71 built-in | Write each one |
| Run history + report | ✅ ndjson + report.html per run | Roll your own |
| Cross-platform | ✅ macOS / Linux / Windows tested | Watch for shell-quoting bugs |
| Telemetry / opt-out | ✅ opt-out via env or config | n/a |
| Maintenance | Updated regularly | On you — ffmpeg flag drift hurts |
| Flexibility | Pure-CLI — pipe to anything | Maximum — but you write everything |
Pick peepshow when…
- You want a working pipeline today.
- Multiple destinations (SQL, vector, chat, observability) need the same artifact.
- Whisper transcription is part of the workflow.
- Run history / audit trail / report HTML matter.
Pick Hand-rolled ffmpeg + bash + glue scripts when…
- You need extraction in a language without Node (pure Python / Go / Rust).
- Single-purpose pipeline with no future requirements.
- Want zero npm dependencies in the project.
- Need bleeding-edge ffmpeg features (latest filter graphs) that peepshow doesn't expose yet.
Verdict
Hand-rolled is fine for a one-off. peepshow exists because hand-rolling the same pipeline for the fifth time was the cue to build it once, correctly. If you're going to use video → LLM more than twice, install peepshow.