Give an AI agent eyes for video: turn a clip into a numbered frame grid + transcript.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Convert video clips into annotated image grids for vision LLM analysis. One cell = one second, by default.

LLMs can't watch video, but they can analyze a single image. vidgrid samples
one frame per second from a video, tiles them into a numbered storyboard with
timestamps, and optionally sends the result to Claude, GPT, or Gemini with a
prompt. The result is something close to "my LLM just watched a video" for
the cost of a handful of image uploads.
Don't want to install? Use the hosted version at vidgrid.site β drop a file, get the grid in the browser. 3 free renders, $5 lifetime after that. Free for ever on the CLI.
One cell = one second, by default. The auto-picker chooses the smallest
grid (biggest, most-legible cells) whose board count stays under
--max-boards (default 10). When that's not enough for a long clip, it
bumps the grid up; as a last resort, it reduces the sampling rate. Override
with --fps and --max-boards for full control.
| Grid | Cells | Seconds per photo | Best for |
|---|---|---|---|
2x2 | 4 | 4 | Very short clips (2β4s) |
3x3 | 9 | 9 | Default β best overall readability |
4x4 | 16 | 16 | More compact, cells get smaller |
5x5 | 25 | 25 | Experimental β cells small, LLM accuracy drops |
Quality degrades with bigger grids. Cells shrink, detail is lost, and the LLM has a harder time reading fine content like text or UI elements. Stick with 3Γ3 unless you specifically need to pack more seconds into one photo. 5Γ5 exists mostly as a "let me see what happens" option.
At 1fps sampling, the board count at each grid size:
| Video length | 2Γ2 | 3Γ3 | 4Γ4 | 5Γ5 |
|---|---|---|---|---|
| 3s | 1 (partial) | 1 (partial) | 1 (partial) | 1 (partial) |
| 9s | 3 | 1 | 1 (partial) | 1 (partial) |
| 25s | 7 | 3 | 2 | 1 |
| 60s | 15 | 7 | 4 | 3 |
| 186s (3 min) | 47 | 21 | 12 | 8 |
| 300s (5 min, cap) | 75 | 34 | 19ΒΉ | 12 |
Bold = what auto picks β the smallest grid (biggest cells) that
keeps the board count under --max-boards (default 10).
ΒΉ At the 5-min cap, even 4Γ4 exceeds 10 boards at 1fps, so auto drops
the sampling rate (β1 cell per 1.9s) to land at the 10-board limit. Use
--fps 1.0 --max-boards 20 to preserve 1fps and accept more boards.
Most vision LLMs accept ~10β20 images per request, so auto's default ceiling of 10 keeps a full video inside a single model call.
Requires Python 3.9+ and ffmpeg on your PATH.
vidgrid samples one frame per second, runs Whisper on the audio, sends the grid + transcript to Claude, and prints the answer. The model correlates frames and words via the burned-in timestamps.
Because cells are globally numbered (1, 2, 3...) and tagged with timestamps, the model can point you at the exact moment. No scrubbing.
Send the PNGs to Claude in a single request and ask it to rank or reject clips against your shot list. This is the workflow vidgrid was built for.
vidgrid keeps the grid shape square (NΓN) regardless of source orientation and preserves the source aspect inside each cell. Landscape sources produce wide boards; portrait sources produce tall boards. Cells are never cropped.
The default mode gives the LLM two correlated inputs: the rendered grid image AND the Whisper transcript as separate text. The model correlates them via the timestamps printed on each cell.
This beats burning captions into the image because:
Add --burn-captions if you want a self-contained image (useful for sharing
or offline analysis).
vidgrid reads and writes three caption formats. The --captions flag
auto-detects from the file extension. The --transcript-format flag
controls what --transcribe writes.
| Format | Extension | Size (36 words) | When to use |
|---|---|---|---|
json | .json | ~4.8 KB | Remotion pipelines, tools that need word confidence |
srt | .srt | ~1.4 KB | Video editors, universal subtitle format |
txt | .txt | ~0.4 KB | Smallest, grep-friendly, trivial to parse |
JSON (default, Remotion-compatible):
SRT (SubRip subtitles):
TXT (plain timestamped text, one word per line):
Use any format as input, output, or both. You can mix β read an .srt and
write a .txt with --captions foo.srt --transcript-format txt.
Modules: vidgrid.probe, vidgrid.sample, vidgrid.compose,
vidgrid.captions, vidgrid.llm, vidgrid.presets.
Single-board run:
Multi-board run:
Cells are numbered globally across boards. A 3-board run has cells 1β27 so the LLM can reference any frame without ambiguity.
ffmpeg -ss START -t 300 input.mp4 chunk.mp4.vidgrid's differentiator: 1 cell = 1 second, numbered cells, simple CLI, multi-provider LLM integration in one package.
MIT. The bundled Source Sans 3 font is licensed under SIL OFL 1.1.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/vidgrid-eyes-for-video)<a href="https://allmcps.com/mcp/vidgrid-eyes-for-video"><img src="https://allmcps.com/api/badge/vidgrid-eyes-for-video?style=directory" alt="Vidgrid β eyes for video on AllMCPs" /></a>