Claude Video

πŸš€ Description

bradautomates/claude-video β€” the /watch agent skill. Paste a URL or local path plus a question; Claude fetches captions, downloads only what it needs, extracts frames, pulls a timestamped transcript, and Reads every frame as an image. By the time it answers it has seen the video and heard the audio β€” not guessed from the title.

/watch https://youtu.be/dQw4w9WgXcQ what happens at the 30 second mark?

Installs as a self-contained skill across Claude Code (plugin marketplace), Codex / Cursor / Copilot / Gemini CLI (npx skills add), and claude.ai web (watch.skill bundle). MIT.

🧩 How it works

  1. You paste a video + a question. URL (anything yt-dlp supports β€” YouTube, Loom, TikTok, X, Instagram, +hundreds) or local .mp4/.mov/.mkv/.webm.
  2. yt-dlp checks captions first. At transcript detail, captioned URLs return without downloading video.
  3. ffmpeg extracts frames at the chosen detail; JPEGs 512px wide by default, clamped 1998px tall for Claude Read compatibility.
  4. Transcript from native captions (free, instant) or Whisper fallback β€” Groq whisper-large-v3 (preferred) or OpenAI whisper-1 β€” only when a video has no caption track.
  5. Frames + transcript handed to Claude; it reads each frame in parallel and answers grounded in what’s on screen and in the audio.
  6. Cleanup β€” script prints a working dir; Claude removes it if no follow-ups.

🧩 Detail dial (--detail)

Token cost is dominated by frames (each is an image). The auto-fps logic exists so a sparse scan of a 30-min video doesn’t blow the context budget.

ModeEngineCapUse
transcriptcaptions only, no framesβ€”cheapest; text-only
efficientkeyframes (-skip_frame nokey)50~0.5s extraction, fast scan
balanced (default)scene-change1002 fps max, general use
token-burnerscene-change, uncappedβ€”full coverage on long clips

Focus a section with --start / --end for a denser per-second budget (capped 2 fps) β€” far more useful than a sparse pass over the whole thing. A dedup pass (mean-absolute-difference vs last kept frame, threshold 2.0) drops near-identical held-slide frames before they reach Claude, so the budget is spent on distinct content (--no-dedup to disable).

Reasoning for

Fills a real gap: Claude can read a page or a repo but can’t watch a video out of the box. Uses in the wild: analyze someone else’s content (hooks, ad creative, competitor launches), diagnose a bug from a screen recording, summarize a long video faster than 2Γ— playback, cut the hype out of a launch video, or turn a playlist into per-video notes. Zero config β€” yt-dlp/ffmpeg install on first run; Whisper key only needed for caption-less videos.

Alternatives considered

  • Video Use β€” sibling in the video-for-agents space, but the opposite job: Video Use edits video and deliberately reads the transcript not frames (word-level cuts); Claude Video watches/understands and reads frames and transcript. Complementary, not competing.
  • HyperFrames β€” generates video (HTMLβ†’MP4); Claude Video consumes it.
  • Manual scrubbing in a player β€” what /watch replaces.

Template: tool