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.
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 linkYouTube 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 / MKVTranscribe 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 footageCCTV → 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 / RTSPLive 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 + transcriptVideo → 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 framesVideo → 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 recordingLoom → 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 PNGAPNG → 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 WebPAnimated 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 StudioScreen 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 + transcriptVideo → 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 SQLVideo → 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 clipDashcam → 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 mutationVideo → 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 runVideo → 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 framesOCR 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 XObject-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 vectorsFrame 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 + platesBlur 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 speakerSpeaker 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 speakerPick by destination
Each how-to ends with the relevant LLM guide and sink pages. Same pipeline, different output. Start here, branch out: