Steps
- Install peepshow
Install the CLI globally.
npm install -g peepshow - Run on the GIF
peepshow auto-detects animated formats — no flags needed.
peepshow ./meme.gif - Open frame folder
Frames land in `~/.peepshow/<run-id>/frames/`. Each is a JPEG ready to feed any LLM.
open ~/.peepshow/$(peepshow runs latest --id-only)/frames/ - Feed the frames to your LLM
Drag the folder into Claude / ChatGPT / Gemini, or pipe the JSON manifest to an API call.
peepshow ./meme.gif --emit json > run.json
Why it works
Animated GIFs hit a long-standing gap in LLM vision APIs. The Gemini File API rejects them as video. OpenAI's vision endpoint reads the first frame. Claude takes the first frame too. peepshow probes the source, treats it as a frame sequence, and emits ordinary JPEGs that every vision model accepts. Dedup is on by default so identical frames don't bloat the input.
When it helps
- Memes, reactions, screen recordings exported as GIF.
- Tutorial GIFs where the action happens in the middle, not the first frame.
- Old documentation hosting animated explainers as GIF.
Pitfalls
- Huge GIFs (10MB+) may extract more frames than needed — pass `--max 12` to cap.
- Single-frame GIFs (static) extract one frame — the same as opening the GIF directly.