| name | watch |
| description | Watch a video (URL or local path). Downloads with yt-dlp, extracts auto-scaled frames with ffmpeg, pulls the transcript from captions (or Whisper API fallback), and hands the result to Claude so it can answer questions about what's in the video. |
| argument-hint | <video-url-or-path> [question] |
| allowed-tools | Bash, Read, AskUserQuestion |
| homepage | https://github.com/bradautomates/claude-video |
| repository | https://github.com/bradautomates/claude-video |
| author | bradautomates |
| license | MIT |
| user-invocable | true |
/watch — Claude watches a video
You don't have a video input; this skill gives you one. A Python script downloads the video, extracts frames as JPEGs, gets a timestamped transcript (native captions first, then Whisper API as fallback), and prints frame paths. You then Read each frame path to see the images and combine them with the transcript to answer the user.
Step 0 — Setup (managed by GooseWorks — usually a no-op)
This is the GooseWorks-vendored build of /watch. In the GooseWorks agent sandbox the environment is pre-provisioned, so you normally skip setup entirely:
ffmpeg, ffprobe, and yt-dlp are baked into the sandbox image.
- Whisper transcription is pre-wired through the managed proxy — the backend injects
GW_WHISPER_PROXY_URL + GW_WHISPER_TOKEN, and the vendored whisper.py routes audio through it to OpenAI Whisper with the managed key. Never ask the user for a Groq/OpenAI key and never write one to disk — there's nothing for them to configure.
${CLAUDE_SKILL_DIR} below is this skill's folder (where this SKILL.md lives); if it isn't set in your environment, substitute the skill's directory path. A quick optional preflight:
python3 "${CLAUDE_SKILL_DIR}/scripts/setup.py" --check
On exit 0 (the expected case in the sandbox), emit nothing and proceed to Step 1. If it returns non-zero (binaries unexpectedly missing, or the Whisper proxy env isn't set), do not prompt the user or attempt to sudo-install — surface the failure briefly and fall back to --no-whisper (frames-only) so the run still produces something. A missing-binary exit here means the sandbox image is out of date and should be flagged to the team, not patched at runtime.
Within a single session, skip Step 0 on follow-up /watch calls.
When to use
- User pastes a video URL (YouTube, Vimeo, X, TikTok, Twitch clip, most yt-dlp-supported sites) and asks about it.
- User points at a local video file (
.mp4, .mov, .mkv, .webm, etc.) and asks about it.
- User types
/watch <url-or-path> [question].
Recommended limits