Model or dataset
taoufik123-collab/claude-watch avatar
taoufik123-collab/claude-watch

claude-watch lets Claude watch any video, frame by frame

Give Claude the ability to watch any video — scene-change frames + transcript + a structured report, with a 0-10s hook microscope and optional Obsidian auto-save.

829 stars172 forksPythonMIT

At a glance

What is it?
claude-watch is a skill that gives Claude video input: scene-change frames, timestamped transcripts, and a structured report, with a microscope on the first ten seconds. This write-up covers the install surfaces, the frame budget, and the Obsidian integration.
Who is it for?
claude-watch fits people who already work in Claude Code or on claude.ai and want video treated as a real input, whether for content analysis or for diagnosing a bug from a screen recording. It is the wrong tool when captions alone would answer your question, since frames are what cost tokens.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 58 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap it closes: Claude could read everything except video

Claude reads webpages, runs scripts, and browses repositories, but a pasted YouTube link left it guessing from the title or working from a transcript that misses most of what is on screen. The /watch skill closes that gap: you paste a URL or a local file path with a question, and the skill downloads the video, extracts frames at an auto-scaled rate, pulls a timestamped transcript, and has Claude read every frame as an image. A typical ask looks like this:

bash
/watch https://youtu.be/iYG5tiFfK3E how does this creator hook the viewer in the first 45 seconds?

By the time the answer comes back, the model has seen the frames and heard the audio, so it answers the way someone who watched the video would. The README frames three use cases: analyzing how another creator structures a hook or an ad, diagnosing a bug from a screen recording such as bug-repro.mov, and summarizing a long video faster than watching it at double speed.

Installing the skill in Claude Code, claude.ai, or Codex

Three install surfaces are documented. In Claude Code, two commands do it:

bash
/plugin marketplace add taoufik123-collab/claude-watch
/plugin install watch@claude-watch

On claude.ai in the browser, you download the watch.skill file from the releases page and drop it into Settings, then Capabilities, then Skills. For Codex or any generic skills runtime, cloning the repository into ~/.codex/skills/watch is the documented route. Setup is zero-config to start: yt-dlp and ffmpeg install on first run through brew on macOS, while Linux and Windows get the exact commands printed for you. Captions cover most public videos at no cost, and a Whisper API key is only needed when a video has no captions at all.

Scene-change frames instead of a metronome

The frame strategy is the load-bearing design decision, because token cost is dominated by frames. scripts/frames.py uses the ffmpeg scene filter, select=gt(scene,...), to grab one frame per detected shot instead of a uniform tick every few seconds. That makes cost scale with the number of cuts rather than with duration, so a static lecture video and a fast-cut montage cost very different amounts. The budget is duration-aware: about 30 frames up to 30 seconds, around 40 for 30 to 60 seconds, 60 for 1 to 3 minutes, 80 for 3 to 10 minutes, and 100 sparsely beyond that, with hard ceilings of 2 frames per second and 100 frames total. Frames render as 512-pixel-wide JPEGs by default, and the --resolution 1024 flag exists for the cases where Claude needs to read on-screen text.

The 0-10 second hook microscope

scripts/hook.py spends extra attention where videos win or lose their audience: the opening ten seconds. It runs a dense frame pass over that window plus a word-level Whisper transcript, so the final report can say what was on screen as each word landed. The author describes the motivation plainly: the first ten seconds decide whether a video earns your attention, and analyzing a hook used to mean watching with a notepad. For content analysis this is the feature that separates the skill from a plain transcript pull, because the transcript alone cannot tell you that the visual changed three times before the first sentence finished. The hook breakdown lands in its own section of the report rather than buried in prose.

From frames to a structured report

scripts/report.py emits a fixed-schema report.md rather than free-form notes. The schema covers a TL;DR, key moments, the hook breakdown, an editorial profile, quotable moments, entities, concepts, and the transcript. The trick is in how the file is staged: narrative sections are explicit markers that read pending Claude fill, so Claude receives a job list to walk before the vault ingest instead of a blank document to improvise. That structure makes the output predictable enough to archive and search later, and it keeps the model from padding sections nobody asked for. If you have ever asked a model for a summary and gotten six paragraphs of throat-clearing, the fixed schema with fill markers is the specific fix this skill applies.

Transcripts: captions first, Whisper second

The transcript pipeline tries the cheap path first. yt-dlp pulls native captions, manual or auto-generated, from the source platform, which the README describes as free, instant, and accurate-ish. Only when captions are absent does the skill extract a mono 16 kHz audio clip and send it to a Whisper backend, with Groq whisper-large-v3 preferred for being cheaper and faster, and OpenAI whisper-1 as the alternative. The API key requirement lands only in that fallback path, which matters for anyone using the skill casually across a playlist: most public videos cost nothing beyond Claude tokens, and a podcast with no captions is the case that starts consuming Whisper credits. Combined with the --start and --end focused mode inherited from the original project, you can also scope a run to one segment instead of paying for the whole video.

Obsidian auto-save, cleanup, and where it came from

Step 4.4 of the flow stages the finished report into a vault at $VAULT_DIR/raw/watched/<slug>/ and opens it through the obsidian:// URL scheme, and step 4.5 offers to ingest it into the vault wiki as a connected entry. Both steps skip cleanly when no vault is detected. The vault path resolves from $WATCH_VAULT_DIR or by auto-detecting ~/Second brain/, ~/Documents/Obsidian/, or ~/Obsidian/. Cleanup is handled too: the script prints its working directory at the end, and Claude removes it when you are not asking follow-ups. Provenance is disclosed in the README: the core pipeline of yt-dlp download, ffmpeg frames, Groq and OpenAI Whisper backends, focused mode, a SessionStart hook, and the multi-surface install comes from the original claude-video project and works unchanged. The alternative to all of this is a transcript-only summarizer, which is cheaper but blind; the frame pipeline is what you add when the visuals carry information the words do not. The project is MIT-licensed at v0.2.0, with the last push on 2026-07-24.

Editorial conclusion

claude-watch fits people who already work in Claude Code or on claude.ai and want video treated as a real input, whether for content analysis or for diagnosing a bug from a screen recording. It is the wrong tool when captions alone would answer your question, since frames are what cost tokens. Verify yt-dlp and ffmpeg install on first run, then try one short video before handing it a two-hour lecture.

Frequently asked questions

How do I have Claude watch a YouTube video?

Install the skill, then paste /watch followed by the video URL and your question. Claude downloads the video, reads scene-change frames and a timestamped transcript, and answers from what was shown and said.

Does claude-watch need an API key?

A Whisper API key is only needed when a video has no captions. Otherwise yt-dlp pulls native captions for free, and yt-dlp plus ffmpeg install automatically on first run.

Which video sources does claude-watch support?

Anything yt-dlp supports, with YouTube, Loom, TikTok, X, and Instagram named in the README, plus local files in .mp4, .mov, .mkv, and .webm.

How many frames does claude-watch extract?

The budget scales with duration: about 30 frames up to 30 seconds, 40 for 30 to 60 seconds, 60 for 1 to 3 minutes, 80 for 3 to 10 minutes, and 100 sparsely beyond, with ceilings of 2 fps and 100 frames.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. taoufik123-collab/claude-watch on GitHub
Community notes

Community notes