peepshow/ how-to

peepshow how-to

Concrete workflows

Single-task pages. Copy-paste commands. Each one solves a specific problem end-to-end: a format an LLM won't read, a source on the web, a destination your team uses.

Animated GIF

GIF to LLM

Most LLMs read animated GIFs as a single still frame. peepshow extracts the full frame sequence so Claude, GPT-4o, Gemini, and local vision

Animated GIF → frames → any LLM
YouTube link

YouTube to LLM

Pair yt-dlp with peepshow to summarise YouTube videos in any LLM. Scene-change frames + local transcript = full understanding without watchi

YouTube link → frames + transcript → LLM
MP4 / MOV / MKV

Transcribe video locally

Transcribe video locally with peepshow + whisper.cpp — no cloud, no API key, no PII leaving the machine. Works on MP4, MOV, MKV, WebM, GIF a

MP4 / MOV / MKV → text transcript, fully offline
Hours of footage

CCTV → LLM analysis

Analyse CCTV with an LLM — peepshow scene-detect + perceptual dedup compress 12 hours of footage into ~30 motion frames any vision model can

Hours of footage → minutes of signal
IP camera / HLS / DASH / RTSP

Live stream → LLM

Sample HLS, DASH, and RTSP live streams into LLM-ready frames. peepshow reads .m3u8 / .mpd / rtsp:// URLs natively — no temp download — and

IP camera / HLS / DASH / RTSP → frames an LLM can read
Drop a video, get a Notion page with frames + transcript

Video → Notion

Send video to Notion automatically. peepshow's Notion sink creates a page per run with frames, transcript, metadata properties, and a thumbn

Drop a video, get a Notion page with frames + transcript
Drop a video, get a Slack message with the highlight frames

Video → Slack

Post video highlights to Slack automatically. peepshow's Slack sink emits a webhook message per run with title, thumbnails, and a deep link.

Drop a video, get a Slack message with the highlight frames
Loom recording

Loom → LLM

Send Loom recordings to Claude / GPT / Gemini. peepshow extracts scene frames + transcript from the downloaded .mp4 — predictable token cost

Loom recording → frames + transcript → LLM
Animated PNG

APNG → LLM

Send animated PNG (APNG) files to LLMs — peepshow extracts every motion frame so the whole loop reaches Claude, GPT-4o, Gemini, or local vis

Animated PNG → frames → any LLM
Animated WebP

Animated WebP → LLM

Send animated WebP files to Claude / GPT / Gemini. peepshow extracts every motion frame as a JPEG sequence — the whole animation reaches the

Animated WebP → frames → any LLM
QuickTime / OBS / Screen Studio

Screen recording → LLM

Send screen recordings to LLMs. peepshow extracts UI-change frames so Claude / GPT / Gemini reviews bug repros, design walkthroughs, QA evid

QuickTime / OBS / Screen Studio → LLM
Drop a video, get an Obsidian note with frames + transcript

Video → Obsidian

Save video to Obsidian as markdown notes. peepshow's Obsidian sink writes a per-run note with embedded frames, transcript, and an index back

Drop a video, get an Obsidian note with frames + transcript
Drop a video, query its frames with SQL

Video → SQLite

Index video into SQLite — peepshow's SQLite sink writes a queryable archive of frames, transcripts, and metadata. Datasette-ready out of the

Drop a video, query its frames with SQL
Dashcam clip

Dashcam → LLM

Analyse dashcam footage with peepshow — scene detect + perceptual dedup isolate incident frames so Claude / GPT / Gemini reviews only what m

Dashcam clip → incident review by LLM
Drop a video, POST a GraphQL mutation

Video → GraphQL

Send video runs to a GraphQL endpoint. peepshow's GraphQL sink emits a typed mutation per run with frames, transcript, and metadata — works

Drop a video, POST a GraphQL mutation
peepshow run

Video → Graphify

Index video into Graphify — peepshow extracts frames + transcript into a folder, Graphify builds a knowledge graph from it. Persistent seman

peepshow run → Graphify knowledge graph
Video frames

OCR video frames

Run Tesseract OCR on every peepshow frame. Recognised text attaches to each frame for searchable archives, text-only LLM consumption, and bu

Video frames → recognised text → LLM
Only keep frames containing X

Object-gated frames

Filter peepshow frames by YOLO11-detected objects. Drop everything except frames containing people, cars, animals — the classes you specify.

Only keep frames containing X
Per-frame CLIP/SigLIP vectors

Frame embeddings → vector search

Pre-compute CLIP/SigLIP embeddings on peepshow frames. Vector sinks (Chroma, Qdrant, Pinecone, pgvector, Redis, Weaviate, Milvus) ingest the

Per-frame CLIP/SigLIP vectors → vector DB
EgoBlur redacts faces + plates

Blur PII in frames

Blur faces and license plates in peepshow frames before they leave the box. EgoBlur per-frame redaction. GDPR-friendly cloud-LLM pipelines.

EgoBlur redacts faces + plates
Who said what — labelled segments per speaker

Speaker diarisation

Per-speaker transcript segments. Local diarisation via WhisperX; cloud via Deepgram (`?diarize=true`) and AssemblyAI (`speaker_labels:true`)

Who said what — labelled segments per speaker

Pick by destination

Each how-to ends with the relevant LLM guide and sink pages. Same pipeline, different output. Start here, branch out: