What it does
Push every peepshow run into a Chroma collection as a set of points: one per frame, embedding generated from the caption + container tags, path stored in metadata so you can fetch the JPG back.
When to reach for it
- RAG over your own video library — query by natural language, get frames back
- Cross-reference videos by semantic similarity instead of filename
- Pair a local LLM with a local Chroma for fully-offline video search
Install
npm i -g peepshowUse it
peepshow ./lecture.mp4 --sink chroma \
--sink-arg url=http://localhost:8000 \
--sink-arg collection=peepshowMake it automatic
Register the sink once — every run fires it afterward. Scope by--whenso it only runs for matching videos.
peepshow sinks add chroma
peepshow sinks add chroma --when extension=mp4,mov
peepshow sinks add chroma --when path=/Volumes/Work/Configuration
PEEPSHOW_CHROMA_URLChroma HTTP server URL.requiredPEEPSHOW_CHROMA_COLLECTIONCollection name. Default `peepshow`.
Write your own
A sink is any executable that reads the--emit jsonpayload on stdin. Shell, Node, Python, Go — the spec's indocs/PLUGINS.md. Register persistent ones withpeepshow sinks add-cmd 'your-command'.