Open Source
Open Source

claude-video: The /watch Skill That Lets Claude Actually Watch Any Video

A 14,204-star Claude Code skill where a single /watch command downloads a video, extracts frames, transcribes it, and hands everything to Claude, so the AI finally sees the picture instead of only reading captions. #20 on GitHub weekly trending, MIT, Python.

Published August 6, 20268 min read
<!-- claude-video-resource | open-source | claude-video: The /watch Skill That Lets Claude Actually Watch Any Video -->

Claude can read a webpage, run a script, browse a repo. What it cannot do, out of the box, is watch a video. Paste a YouTube link and it either guesses from the title or pulls a transcript that misses 90% of what is on screen. claude-video closes that gap with a single command, /watch, that downloads the video, extracts frames, transcribes the audio, and hands everything to Claude so it finally sees the picture.

1. What It Is

claude-video (github.com/bradautomates/claude-video) is an open-source Agent Skill. It has 14,204 GitHub stars (as of 2026-08-06, subject to real-time change), 1,363 forks, primary language Python, MIT license, created on 2026-04-24, with its latest push on 2026-07-01. This week it ranks #20 on the GitHub weekly trending list with a gain of 3,359 stars. The official one-liner: "Give Claude the ability to watch any video" - /watch downloads a video, extracts frames, transcribes it, and hands it all to Claude.

It is not a standalone app. It ships as a Skill: a plugin in Claude Code, a global skill in Codex, Cursor, Copilot, Gemini CLI, and 50+ other Agent Skills hosts. Under the hood it leans on yt-dlp (download + native captions), ffmpeg (frame extraction), and optional Whisper (transcription when captions are absent). Author Brad Bonanno packages the whole pipeline into a self-contained skills/watch/ folder that every installer copies as a unit.

2. The Pain Point It Solves

One sentence: Claude natively cannot watch video.

Give Claude a YouTube link and it has no way to "watch." Best case, the video has captions and Claude pulls a transcript - but a transcript only captures what is spoken. Everything on screen - the UI, the code, the charts, the slides, the demo, the presenter's actions - is gone. The README puts it bluntly: a transcript is "missing 90% of what's on screen."

That blocks several real workflows:

  • Analyzing someone else's content. You want to break down a viral video's opening hook, pacing, cuts. Reading the transcript cannot tell you "at second 3 the frame hard-cuts to a product close-up."
  • Diagnosing a bug from a screen recording. A teammate sends a recording saying "it crashes here." You cannot ask the AI to watch the recording and find the frame where the issue appears.
  • Summarizing a long video fast. Even at 2x speed it costs time, and an AI summarizing from captions alone misses every on-screen demonstration.
  • Stripping hype from an update video. A "game-changer" launch has ten minutes of intro and overselling. You want the few things that actually changed, and captions cannot tell you "this frame is the real feature demo."

/watch solves this by splitting the video into two modalities Claude can consume - frames (images) + transcript (text) - and letting Claude read every frame like a picture before it answers.

3. How /watch Works

The README breaks /watch into six steps. It is a pipeline: download -> extract frames -> transcribe -> hand to Claude.

  1. You paste a video and a question. A URL (anything yt-dlp supports: YouTube, Loom, TikTok, X, Instagram, and a few hundred more) or a local path (.mp4, .mov, .mkv, .webm).
  2. yt-dlp checks captions first. In transcript mode, captioned URLs return without downloading video. It only downloads when audio is needed, and only what the run needs.
  3. ffmpeg extracts frames at the chosen detail. efficient decodes keyframes only (near-instant); balanced/token-burner prefer scene-change frames and fall back to a duration-aware uniform sampler. JPEGs are 512px wide by default, clamped to 1998px tall for Claude Read compatibility.
  4. The transcript comes from one of two places. First try: yt-dlp pulls native captions (manual or auto-generated) - free, instant, accurate-ish. Fallback: extract a mono 16 kHz 64 kbps mp3 clip (~480 kB/min) and send it to Whisper - Groq's whisper-large-v3 (preferred, cheaper and faster) or OpenAI's whisper-1.
  5. Frames + transcript are handed to Claude. The script prints frame paths with t=MM:SS markers and a timestamped transcript. Claude Reads each frame in parallel - JPEGs render directly as images in its context.
  6. Claude answers grounded in what it actually saw and heard. Not "based on the description" or "according to the title," but the way someone who watched the video would. The temp directory is cleaned up afterward unless you plan follow-up questions.

The critical design choice is the frame budget. Every frame is an image, and image tokens add up fast, so the script runs auto-fps logic to stop you blowing your context budget on a sparse scan of a 30-minute video:

DurationDefault frame budgetWhat you get
≤30 s~30 framesDense - basically every key moment
30 s – 1 min~40 framesStill dense
1 – 3 min~60 framesComfortable
3 – 10 min~80 framesSparse but workable
>10 min100 frames (capped modes)"Sparse scan" warning - re-run focused, or use --start/--end

A second token-saver is frame deduplication. A screen recording that holds one slide for 90 seconds produces a dozen near-identical frames, each billed as a separate image. Dedup runs by default (--no-dedup turns it off): each frame is scaled to a 16×16 grayscale thumbnail, the mean absolute difference is computed against the last kept frame, and anything at or below threshold 2.0 is dropped. Comparing against the last kept frame (not the previous one) catches slow fades. The frame cap applies after dedup, so the budget is spent on distinct frames.

4. Up and Running in Three Minutes

Claude Code (recommended - auto-updates via marketplace):

text
/plugin marketplace add bradautomates/claude-video
/plugin install watch@claude-video

Codex / Cursor / Copilot / Gemini CLI and 50+ hosts:

bash
npx skills add bradautomates/claude-video -g

-g installs globally (~/.codex/skills, ~/.cursor/skills, etc.); drop it to scope per-project.

First run: On the first /watch, scripts/setup.py --check verifies ffmpeg/yt-dlp on your PATH and whether a Whisper key is set. If missing, it walks you through it - macOS auto-runs brew install, Linux/Windows print the exact apt/dnf/winget/pip commands. The check is a sub-100ms lookup, silent on subsequent runs.

Use it:

text
/watch https://youtu.be/dQw4w9WgXcQ what happens at the 30 second mark?
/watch https://www.tiktok.com/@user/video/123 summarize this
/watch ~/Movies/screen-recording.mp4 when does the UI break?

Focus a section (denser frames, lower token cost):

text
/watch https://youtu.be/abc --start 2:15 --end 2:45
/watch video.mp4 --start 50 --end 60
/watch "$URL" --start 1:12:00            # from 1h12m to end

Do you need an API key? Most public videos have native captions and run free. The Whisper fallback only triggers when a video genuinely has no caption track (local files, some TikToks/Vimeos, the occasional caption-less YouTube upload). Then grab a GROQ_API_KEY (preferred) from the Groq Console or an OPENAI_API_KEY from OpenAI and drop it in ~/.config/watch/.env. Add --no-whisper to skip transcription entirely. Use placeholders like sk-xxx in docs; never commit real keys.

Common knobs:

FlagWhat it does
--detail transcript|efficient|balanced|token-burnerSpeed/fidelity dial, see table below
--start / --endFocus a time range, denser frames
--timestamps T1,T2,…Force a frame at each absolute timestamp
--max-frames NLower the frame cap for a tighter token budget
--resolution 1024Widen to 1024px to read slides/terminals/code
--no-whisperFrames only, no transcription
--no-dedupKeep near-duplicate frames

The four detail modes, measured by the README against a real 49:08 YouTube screen recording (1280×720, English auto-captions):

ModeEngineFramesCapExtraction timeEst. image tokens
transcriptnone (captions)0-~4.5s (one yt-dlp call, no download)0 (~26.6k text tokens)
efficientkeyframe5050~0.5s~9.8k
balancedscene-change100100~20.9s~19.7k
token-burnerscene-change116uncapped~21.0s~22.8k

efficient is the speed tier (it only reconstructs keyframes, ~40× faster than the scene modes); token-burner only diverges from balanced past the cap - this clip had 116 cuts, so balanced sampled 100 and token-burner kept them all.

5. Who It Is For, and the Gotchas

Who it is for:

  • Content analysts. Breaking down viral hooks, ad creative, competitor launches, podcast intros - anywhere the how matters as much as the what.
  • Developers debugging from recordings. A teammate sends a "it breaks here" screen recording; Claude watches it, finds the frame, and often pinpoints the cause.
  • Note-takers from long video. Run /watch summarize this to a note across a course or channel and turn hours of video into a searchable note set.
  • Hype filters. what's actually new - skip the hype strips a launch down to the few things that matter.

Gotchas:

  1. Long-video token cost. The biggest one. Frames are images; image tokens add up fast. balanced caps at 100 frames, and past ~10 minutes coverage thins out - the script prints a "sparse scan" warning. Either re-run focused with --start/--end, or --detail token-burner to lift the cap (tokens climb faster). --resolution 1024 roughly 4×'s per-frame tokens; only use it when you need to read on-screen text.
  2. ffmpeg / yt-dlp are hard dependencies. No install, no run. macOS auto-installs via brew on first run; Linux/Windows print commands you have to run yourself. On claude.ai web you must enable "Code execution and file creation" under Capabilities first, because the skill shells out to ffmpeg.
  3. Transcription accuracy. Native captions are "free, instant, accurate-ish" - auto-generated ones can be wrong. Whisper is more accurate but costs money and time. Videos with no caption track at all (some TikToks, occasional Vimeos, local files) can only go through Whisper; without a key, fall back to --no-whisper for frames only.
  4. Whisper key setup. ~/.config/watch/.env is scaffolded at 0600 with commented placeholders for GROQ_API_KEY (preferred) and OPENAI_API_KEY. Use placeholders like sk-xxx in docs; never commit real keys.
  5. Dedup edge cases. The threshold (2.0) is deliberately low and measures brightness, not structure, so a one-line code diff or a terminal scrolling one row survives. But two frames with large structural differences but similar brightness could in theory be dropped - if you notice missing detail, --no-dedup keeps everything.

6. Compared to Alternatives

Only verifiable claims, no invented competitors.

ApproachSees framesReads captionsManual workNotes
Claude native (no /watch)NoPartial (if available)LowREADME: transcript "missing 90% of what's on screen"
Manual scrub + screenshot + pasteYesManualHighWorks, but slow; Claude gets scattered screenshots with no timeline
Plain yt-dlp captionsNoYesLowText only, all visual information lost
claude-video /watchYesYesLowFrames carry t=MM:SS markers; Claude Reads every frame in parallel

/watch is not replacing yt-dlp or Whisper. It is the orchestration layer that adds ffmpeg frame extraction and a token economics (frame budget + dedup + detail modes) on top, then hands Claude a bundle of images and text with timestamps it can consume directly. The differentiation is giving Claude both modalities at once so its answer is grounded in the picture and the audio, not a caption-only guess.

Verdict

claude-video targets an underrated gap. Everyone talks about multimodal models, but the everyday job of letting a coding agent like Claude Code actually "watch" a video has had no systematic answer. 14,204 stars and a #20 weekly rank suggest the point landed - developers really do need an AI that watches a recording to debug, watches a launch to extract updates, watches a competitor to break down structure.

The engineering is deliberately restrained. It does not reinvent downloading or transcription; it bets entirely on the mature yt-dlp + ffmpeg + Whisper stack and concerns itself only with the token economics (frame budget, dedup, detail modes) and the output format Claude can Read. That "don't reinvent the wheel, just fill the gap" stance is why it stays lightweight under MIT with pure Python stdlib.

There are barriers: you manage token cost on long videos, you install ffmpeg/yt-dlp, and caption-less videos need a Whisper key. But once the pipeline runs, what you save is the time you would have spent scrubbing through video yourself.


References

This article is AI-assisted and human-edited. Last updated: 2026-08-06

Related

Open Source

book-to-skill: Turn Any Technical Book Into an AI Agent Skill (16.2K Stars)

book-to-skill (virgiliojr94/book-to-skill, 16.2K GitHub stars, Python, MIT) distills technical books/PDFs/EPUBs/doc folders into structured agent skills following the open Agent Skills standard - install once, works across GitHub Copilot CLI, Amp, and Claude Code. Generates SKILL.md + per-chapter files + glossary + patterns + cheatsheet, with chapters loaded on-demand so they don't count against your token budget. Ships a benchmark tool measuring 24-51x fewer tokens than dumping the full book into context (tested on 3 real books). Beyond books: internal docs, brand systems, research clusters, specs. Includes a copyright-compliance note.

Aug 4, 20267 min read
Open Source

diagram-design: AI diagrams as deliverable static files

The GitHub repo cathrynlavery/diagram-design ranked second on the OpenGithubs weekly momentum chart dated 2026-09-14, gaining 7,208 stars that week; verified on 2026-09-15 it holds 39,807 stars, 2,528 forks, HTML as its main language, an MIT license, created 2026-04-16, last pushed 2026-09-10, with only 44 open issues. It is a diagram skill pack for Agent Skills compatible hosts including Claude Code, Codex, Factory Droid, Pi, GitHub Copilot, Kiro and OpenCode, and the official README claims 39 editorial diagram types, while the weekly chart blurb says 38, a discrepancy this piece resolves in favor of the README. Its output is self-contained HTML with inline SVG: no build step, no JavaScript, no external image dependency, openable offline by double-click, with each type shipping three static variants, minimal light, minimal dark and full-editorial. The design system is what defeats the AI look: a single accent color, one or two focal elements per diagram, 1px hairline borders, no shadows, a 10px border-radius ceiling, and every coordinate and gap divisible by four. It can redraw draw.io, Mermaid and Excalidraw sources into that system through four dials, format, size, detail and audience, emitting a fidelity ledger; it inherits components, relationships, grouping and direction but never source coordinates, palette or fonts. Its tagline is No Mermaid slop, yet it ships a Mermaid import path, a tension worth reading closely. The piece also covers brand onboarding that reads your homepage for palette and font stack, maps them to semantic tokens like paper, ink, muted and accent, checks WCAG AA contrast and emits a fidelity receipt; multi-client profile isolation; and the genuinely serious engineering: CI across three platforms, clipping detected by pixel diffing rather than geometry, plus gates for Sankey conservation, waterfall running totals, treemap area error and label collision, all built to catch diagrams that lie.

Sep 15, 202610 min read
Open Source

AI Agents Want Group Chats Too: cumora by the avante Author Puts Claude Code and Codex on the Same Roster (1.4k Stars in One Day)

yetone/cumora (1,460 stars / 158 forks, MIT, TypeScript; created Aug 17, API same-day snapshot): the avante.nvim author's team chat for AI agents - agents as first-class teammates with personas, memory, atomic work claims, real email, and shared Kanban/calendar. Two brain paths: Cumora Cloud (per-agent K8s pods on the OpenAI Responses API) or BYOA (npx cumora agent computer - your local Claude Code/Codex on your own subscription; the server never sees keys). Anti-collision trio (seen-cursor freshness gate / atomic claims / small-brain triage), an llm_calls cost ledger, and a CI big-model guard. Five minutes local: Postgres + Redis + OPENAI_API_KEY. Five cautions include day-one maturity and cloud token burn.

Aug 18, 20268 min read