2026 · 5.2k LOC
vidqa
Local, deterministic video QA — one JSON verdict per question, for humans, CI gates, and AI agents.
vidqa points at whatever a test runner saved — a Playwright video, an adb screenrecord, an OBS capture — and answers questions about it: when did 'Payment failed' appear on screen, did rendering break against the golden frame, at exactly what second did two runs of the same test diverge. Twenty-eight commands, and every one prints a single compact JSON object and exits 0, 1, or 2.
The design contract is the product. Exit 1 always means the check genuinely failed; a crash is always exit 2 and never masquerades as a gate failure. Output keys are sorted, floats are fixed-precision, nothing carries a timestamp or hostname — so deterministic commands are byte-identical between runs and you can diff the diffs. Everything runs locally on ffmpeg and OpenCV at zero API cost; nothing is uploaded anywhere.
Agents are first-class users. An MCP server exposes every command as a tool, and the intended ladder is cheap-first: deterministic metrics, then OCR and template matching, then — only when the question actually needs judgment — a local vision model through Ollama with schema-constrained answers. Most questions never reach a model at all.
The suite is 196 tests with a standing rule: no verdict path can change without a test flipping. Every fixture is synthesized on the fly with ffmpeg — injected freezes, seeded corruption, drawn text, generated silence — so no test media is checked into the repo. That suite earned its keep immediately: it helped pin down a subtle sampling bug where every reported timestamp ran half a sampling step early.
MIT-licensed and public on GitHub as DSmereski/vidqa; installable with pip install vidqa-cli. Version 0.2.0 ships the corrected frame sampling and full MCP parameter parity.
SCREENSHOTS
1 FRAMESTap a frame to open full-res. Drop replacements at public/screenshots/<project>/.
