About watch-video
watch-video is a skill for producing timestamped video analyses that distinguish visible evidence, spoken claims, and inferences. It guides frame sampling and evidence checks for local videos and accessible public URLs.
Key features
- 01Timestamped video findings
- 02Separate visual and speech evidence
- 03Coarse and dense frame sampling
- 04Caption and transcript handling
- 05Structured report validation
Use cases
- 01Checking whether footage supports a spoken claim
- 02Reviewing a video demonstration with timestamps
- 03Comparing captions with visible events
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ tomgranot/ watch-video --skill watch-videoAfter installing, type/watch-videoin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
LICENSErequirements-url.txtrequirements.txtTHIRD_PARTY_NOTICES.mdagents/openai.yamlreferences/analysis-protocol.mdscripts/acquire.pynormalize_transcript.pypackage_skill.pyrun.pysample_frames.pysetup_runtime.pysmoke_test.pyvalidate_report.pytests/test_regressions.pyDetails
From the project READMEWatch Video
Build a timestamped account of what the video shows, says, and supports. Keep observations, spoken claims, and inferences separate.
Requirements
Local files require ffmpeg, ffprobe, Python 3.10+, and Pillow. Public URLs also require yt-dlp. Resolve SKILL_DIR to the directory containing this file. Run commands through $SKILL_DIR/scripts/run.py so they use the private .venv when present. If the runtime is missing and local dependency installation is allowed, run python3 "$SKILL_DIR/scripts/setup_runtime.py". Never sign in, load browser cookies, bypass DRM or paywalls, or work around access controls.
Workflow
-
Create a dedicated analysis directory. Never modify the source video.
-
Acquire the source and platform captions:
python3 "$SKILL_DIR/scripts/run.py" acquire <video-path-or-url> \ --output-dir <analysis-dir> [--language en]Local files are primary. Only accept a public URL when
yt-dlpcan inspect and download it directly without sign-in, cookies, paywalls, DRM, or browser automation. If direct retrieval fails, ask for an authorized local copy. For URLs, prefer manual platform captions, then automatic captions. If neither exists, recordtranscript unavailableand continue visually; do not generate a transcript. For local files, detect same-name.vtt,.srt,.json, or.json3sidecars. -
Read
<analysis-dir>/source.jsonand<analysis-dir>/transcript.mdwhen present. Treat captions as speech evidence, not visual evidence. -
Build a coarse visual index:
python3 "$SKILL_DIR/scripts/run.py" sample-frames <video-path-from-source.json> \ --output-dir <analysis-dir>/visual-overview --mode overview --scene-threshold 0.32 -
Open every contact sheet listed in
visual-overview/index.md. Record visible events, demonstrations, slide changes, on-screen text, and notable mismatches with the transcript. -
Run targeted dense passes around important or ambiguous timestamps:
python3 "$SKILL_DIR/scripts/run.py" sample-frames <video> \ --output-dir <analysis-dir>/window-<start> \ --mode dense --start <seconds> --end <seconds> --fps 4Use
--mode every-frameonly for short forensic windows. It samples with FFmpeg at the reported source frame rate, so variable-frame-rate material may contain duplicated or dropped samples. The script caps output by default. Increase the cap only when the user needs the densest available inspection. -
Synthesize findings with timestamps. For each substantive claim, label its basis as:
observed: visible in sampled framesspoken: present in captions or supplied transcriptinferred: a reasoned conclusion from observed or spoken evidence
-
Mark support as
supported,conflicted, ornot_found. State what evidence is missing when confidence is low. -
For detailed work, save
report.jsonusing the schema in references/analysis-protocol.md, then validate it:python3 "$SKILL_DIR/scripts/run.py" validate-report <analysis-dir>/report.json \ --manifest <analysis-dir>/visual-overview/manifest.jsonRepeat
--manifest <path>for each dense window cited in the report.
Analysis rules
- Start coarse, then inspect important windows at higher temporal density.
- Never describe a transcript claim as something the video visibly proves.
- Quote captions sparingly; paraphrase by default.
- Attach timestamps to chapters, findings, discrepancies, and requested moments.
- Inspect frames at higher resolution when slides, code, diagrams, or small interface text matter.
- Say when captions are automatic, absent, incomplete, or out of sync.
- If the question spans many scattered facts, answer it in focused passes instead of one broad scan.
- Do not infer identity, intent, causation, or off-screen events without evidence.
Read references/analysis-protocol.md for sampling modes, the evidence schema, long-video handling, and failure cases.