peepshow/ how-to/ gif-to-llm

Reel #H-01 Animated GIF → frames → any LLM

peepshow how-to / gif-to-llm

Send an animated GIF to Claude, GPT, Gemini — properly

Most LLMs read animated GIFs as the first frame only — the rest of the loop is invisible. peepshow extracts every motion frame, drops near-duplicates, and emits a JPEG sequence any vision model accepts.

Steps

  1. Install peepshow

    Install the CLI globally.

    npm install -g peepshow
  2. Run on the GIF

    peepshow auto-detects animated formats — no flags needed.

    peepshow ./meme.gif
  3. 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/
  4. 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.

Works with these LLMs