
Vidgrid — eyes for video
io.github.pawvej由 GitHub 账号 pawvej 发布v0.1.0更新于 Oct 24, 2026
Give an AI agent eyes for video: turn a clip into a numbered frame grid + transcript.
概览
Vidgrid 把视频片段转成带编号的画面网格和转录文本,让助手借助视觉模型“看”视频。
- 可以做什么
- 渲染视频为带注释的图像网格:默认每秒取一帧,拼成带时间戳的编号格子,并自动选择网格尺寸与图片数量。
- 用 Whisper 转录音频,读写 JSON、SRT、TXT 三种字幕格式,也可把字幕烧录进网格图。
- 把网格图加转录文本连同提示词发送给 Claude、GPT 或 Gemini,并返回回答。
- 以 Python API 形式提供同一套渲染流程,便于脚本化批量处理。
- 适用场景
- 适合让助手在不亲自观看的情况下总结演讲或会议、在录屏中定位某个具体时刻,或按镜头清单对一批短片进行排序和筛选。
- 运行要求
- 以本地 Python 包运行(需 Python 3.9+),并要求 ffmpeg 在 PATH 中;转录需安装 transcribe 附加组件,调用模型需安装 anthropic、openai 或 google-genai 附加组件及对应服务商凭据。Vidgrid API 密钥通过环境变量 VIDGRID_API_KEY 提供。
安装
在 SourceWeft 中
- 打开 控制台中的 Vidgrid — eyes for video,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
vidgrid
[PyPI] [Python] [License: MIT] [Downloads]
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.
The model
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 size determines how many seconds fit in one photo
- Default sampling is 1fps; drops below 1fps only when needed to stay under the max-boards cap
- Videos over 5 minutes are rejected (chop them up first)
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.
How many photos a video produces
At 1fps sampling, the board count at each grid size:
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.
Install
Requires Python 3.9+ and ffmpeg on your PATH.
Quick start
Three things you can do with it
1. Summarize a talk without watching it
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.
2. Find a specific moment in a screen recording
Because cells are globally numbered (1, 2, 3...) and tagged with timestamps, the model can point you at the exact moment. No scrubbing.
3. Rank a pile of stock footage
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.
Portrait vs landscape
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.
Two-layer captions (default)
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:
- Frames keep their pixels for actual content
- Text is higher fidelity as tokens than as baked-in pixels
- The grid stays clean and shareable
Add --burn-captions if you want a self-contained image (useful for sharing
or offline analysis).
Caption file formats
vidgrid reads and writes three caption formats. The --captions flag
auto-detects from the file extension. The --transcript-format flag
controls what --transcribe writes.
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.
Python API
Modules: vidgrid.probe, vidgrid.sample, vidgrid.compose,
vidgrid.captions, vidgrid.llm, vidgrid.presets.
Output structure
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.
Limits and caveats
- 5-minute hard cap on video length. Longer videos are rejected. Chop
them up with
ffmpeg -ss START -t 300 input.mp4 chunk.mp4. - No scene detection. v1 samples strictly 1 frame per second, uniform. No dedupe, no shifting — the spacing is always exactly 1 second.
- Variable-framerate videos may have sub-frame seek drift (≤1 frame), which is acceptable at 1fps sampling.
- Bigger grids hurt legibility. A 5×5 grid has cells ~300px wide; fine for people and objects, marginal for dense text or code. Stick with 3×3.
- LLM integration uses the official SDKs (anthropic, openai, google-genai) and won't be installed unless you request them as extras.
Prior art
- IG-VLM — research paper proving the grid trick works
- llm-video-frames — Simon Willison's per-frame approach
- vcsi — contact sheets without LLMs
- byjlw/video-analyzer — whisper + sequential frames
vidgrid's differentiator: 1 cell = 1 second, numbered cells, simple CLI, multi-provider LLM integration in one package.
License
MIT. The bundled Source Sans 3 font is licensed under SIL OFL 1.1.
来源:README.md,提交 f4f35bd
工具
0版本历史
1- v0.1.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分