vidgrid — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited vidgrid (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
LLMs can't watch video, but they can read a single image. vidgrid samples one frame per second from a video file, tiles them into a numbered storyboard with timestamps, and (optionally) returns the spoken transcript. The result is close to "my model just watched a video" for the price of a few image uploads.
Each cell is numbered globally (1, 2, 3…) and tagged with its timestamp, so you can point at an exact moment ("the dialog appears at frame 14, ~0:14").
Input is a local video file you provide. vidgrid does not fetch URLs — if you have a link, download it yourself first, then hand the file to vidgrid.
You need a Vidgrid API key. The user can get one in ~20 seconds at https://vidgrid.site/api (enter an email → click the link → a key vg_live_… with starter credits arrives by email; or buy credits with the slider). Then:
export VIDGRID_API_KEY="vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Credits never expire. 1 render = 1 credit. Failed renders are never charged.
npx @vidgridapp/cli clip.mp4 # → grid.png (+ grid-transcript.txt), prints credits left
npx @vidgridapp/cli talk.mp4 --grid 4x4 --out talk
npx @vidgridapp/cli screen.mov --no-transcribenpx @vidgridapp/cli <file> uploads the file to the render API and writes the numbered grid PNG(s) next to you. Read the PNG(s) to "watch" the video; combine with the transcript to answer. Needs VIDGRID_API_KEY in the environment.
POST https://api.vidgrid.site/v1/render — multipart file upload:
curl -X POST https://api.vidgrid.site/v1/render \
-H "Authorization: Bearer $VIDGRID_API_KEY" \
-F [email protected] \
-F transcribe=trueForm fields:
| field | type | default | notes |
|---|---|---|---|
file | file (required) | — | The video. Max 5 minutes, max 200 MB. |
grid | string | auto | "2x2", "3x3", "4x4", "5x5". Omit to auto-pick the most legible grid that fits in ≤10 boards. |
transcribe | bool | true | Return the Whisper transcript alongside the frames. |
Response (200):
{
"boards": [{ "index": 0, "layout": "3x3", "png_base64": "iVBORw0KGgo..." }],
"transcript": [ { "text": "hello", "startMs": 0, "endMs": 500 } ],
"duration_seconds": 19.0,
"source": { "width": 640, "height": 480, "fps": 30.0 },
"render_ms": 4200,
"credits_remaining": 99,
"render_id": "a1b2c3..."
}Decode each boards[].png_base64 and look at it — the numbered cells ARE the video, one cell per second. Correlate with the transcript via the timestamps on each cell. Long videos return several boards; cells stay numbered continuously across them (board 1 = cells 1–9, board 2 = cells 10–18, …).
| status | error | meaning |
|---|---|---|
| 400 | empty_file / invalid_grid | No file, or a bad grid value. |
| 400 | video_too_long | Over the 5-minute cap. Trim first: ffmpeg -ss 0 -t 300 in.mp4 out.mp4. |
| 413 | file_too_large | Over 200 MB. Re-encode smaller or trim. |
| 401 | missing_key / invalid_key | Set/refresh VIDGRID_API_KEY. |
| 402 | insufficient_credits | Top up at https://vidgrid.site/api. |
| 429 | rate_limited | Back off; honor Retry-After. |
Check remaining credits anytime: GET /v1/usage with the same Bearer key.
If you have ffmpeg and want to render locally without the API:
uvx vidgrid clip.mp4 -o grid.png # zero-install (uv)
# or: pip install vidgrid && vidgrid clip.mp4 -o grid.png
vidgrid talk.mp4 --transcribe --ask "list the decisions and who owns each"The Python CLI (MIT, on PyPI) renders entirely on your machine — use it when you have ffmpeg; use npx @vidgridapp/cli / the API when you want server-side rendering.
(the model reading this) do the analysis.
and render each; cite frames by chunk.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.