Skip to content

Peepshow

Turn a video — or an animated GIF, APNG, or WebP — into a timeline of still frames so an LLM can "watch" it as a series of images.

Install

$claude plugin install peepshow@peepshow-marketplace

Install command taken from the project's README or registry entry. Always review code before running it.

peepshow.dev · Sinks · Agents · @tom_taylor

peepshow

video → frames → LLM. Any LLM CLI. Any storage backend. Zero glue code.

Turn a video — or an animated GIF, APNG, or WebP — into a timeline of still frames plus an extracted audio track and its transcript, so an LLM can "watch" and "listen" to what's inside.

Static images (JPG, PNG, static WebP) are already handled natively by most LLMs — drag, drop, done. peepshow only steps in for things that have multiple frames across time: videos and animated images, which today's LLMs can't consume directly.

Same drag-and-drop UX as images. Drop a .mp4 / .mov / .gif into the Claude Code prompt and a UserPromptSubmit hook auto-invokes /peepshow:slides behind the scenes — Claude extracts frames, reads them, and answers. No slash command, no Bash call, no copy-paste. Works with natural-language prompts too ("what's in ~/Desktop/bug.mov?") and with every other CLI entry point (explicit /peepshow:slides, shell peepshow ..., pipes into --sink).

Pluggable sink backends — write your own, or use the built-ins. Every run can fan out to downstream systems via --sink <name> or --sink-cmd <shell>. A sink is any executable that reads a JSON payload on stdin — write one in bash, Node, Python, Go, whatever. The full video + tags + frames + audio + extraction payload (same as --emit json) flows to each sink, so they receive the full context, not just the frame paths. 95 sinks ship built-in across SQL (SQLite · Postgres · MongoDB), vector + AI memory (Chroma · Qdrant · Pinecone · pgvector · Weaviate · Milvus · MemPalace · Zep · Mem0 · Letta), object + file storage (S3-compatible · GCS · Firebase Storage · Azure Blob · Supabase · Dropbox · Google Drive · Box · OpenAI Files), chat (Slack · Discord · MS Teams · Telegram · WhatsApp · iMessage · Mattermost · Rocket.Chat · Zulip · Matrix), issue trackers (Linear · Height · GitHub Issues · Jira · Asana · ClickUp · Shortcut · Trello), whiteboards (Miro · Figma), wiki/notes (Notion · Obsidian · Logseq · Outline · Confluence · Apple Notes · Bear), product analytics (PostHog · Plausible · Mixpanel/Amplitude/Segment), observability (Sentry · Datadog · New Relic · Honeycomb · PagerDuty · Opsgenie · Grafana Oncall), and workflow glue (Webhook · GraphQL · IDE · Aider · Continue · Cody · Raycast · Pipedream · Zapier · Shortcuts · Apple Reminders · Things 3). Browse docs/sinks/ or use the use-case finder. Full spec: docs/PLUGINS.md.

Audio is extracted too, not just frames. When the input has an audio track (MP4 / MOV / WebM / MKV), peepshow runs a second ffmpeg pass that emits a compact mono 16 kHz AAC track next to the frames and probes loudness peak + silence ratio. Animated GIF, APNG, and animated WebP inputs skip this cleanly — they can't carry audio at the format level. The extracted audio.m4a + its analysis fields land in the JSON payload alongside video + frames, so any downstream sink sees the full picture. Opt out with --no-audio.

Audio transcription

Similar plugs

Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local…

Why use many token when few token do trick. Viral skill + proxy for coding agents that cuts 65% of tokens by talking like a caveman.

The 1st Collaborative AI Design Agent Workspace. Local-first and open source. Create prototypes, websites, apps, dashboards, presentations, images, and videos with your team…