/watch
Ask a video.
Skip the parts you don't need.
Blind judges: 18/18 for this fork, 17/18 for the original, at 23–83% fewer tokens. Ask a video a question and /watch retrieves only the sections, spoken details, and screenshots that answer it, instead of making the AI read everything. Ten videos blind-judged so far; this fork has never scored below the original. Risk-free by construction: on any problem it silently runs the original method instead. A grateful fork of Brad Bonanno's claude-video.
/plugin install watch@claude-video-plus COPIED
Current status: the latest release is stable. No API key, ever; audio never leaves your machine by accident; short videos route to the original method automatically; and every number on this page links to raw, published data. Per-release detail lives in the changelog.
★ Star it on GitHub Download watch.skillIt reads less video before answering.
On a 38-minute test video, the original method sent the AI 100 screenshots plus the full transcript: 50,941 tokens. Evidence mode read the question first, chose the sections that answer it, and kept a receipt for every choice: 11,505 tokens, same answer.
Question type: specific // summaries still keep the full transcript
Useful section [00:12–03:36] GPT-5.6 announcement
Useful section [34:02–38:16] GPT-5.6 compared with Fable
Numbers found [23:05–23:25] API pricing $5/$30 · $2.50/$15 · $1/$6 + screenshot of the table
Screen checked [06:50] speaker says "you can see" → save that screenshot
Material sent to AI: 11,505 tokens instead of 50,941 77% less
It keeps complete ideas
It selects whole relevant sections, not random sentences. That helps when the speaker explains something without using the exact words in your question.
It looks for hard facts
Prices, benchmark scores, and specifications are kept even when they appear somewhere unexpected. It also saves the matching screenshot when the important numbers are shown on screen.
It checks what is on screen
The AI is told to read tables and pages instead of relying only on speech. In our test, that helped catch a pricing statement that contradicted the presenter's own list.
It has a safe backup
If there are no captions or the smarter search fails, /watch switches back to the original method instead of returning an incomplete result.
Blind-judged against the original it forks.
Nine fresh videos: a TED talk, Karpathy's hour on LLMs, screencasts, shorts, and two music-video stress tests. Answer keys were written from the videos and hash-committed before any pipeline ran, the reports were anonymized, and the judges were blind. The comparison target is the untouched upstream repo at its pinned control commit.
| Blind-judged result | Original | This fork |
|---|---|---|
| Answer quality, five substantive videos (max 18) | 17/18 | 18/18 |
| 96-minute podcast, four questions | 8/8 | 8/8, at 42% fewer tokens |
| Tokens, default mode, equal frame budget | 100% | 58–77% (23–42% less) |
| Tokens, evidence mode (videos over 9 min) | no such mode | 12–61% (39–88% less) |
| Worst uncovered stretch on the podcast | 11m 08s | 6m 26s |
The original's dropped point tells the whole story. Asked which repo the video covered, its caption-only pipeline returned a garbled name ("maltbot"). This fork read the author's description, a surface the original never touches, and returned the exact name. The losses are published too: on music videos this fork can cost 7% more (nothing to retrieve, and the description adds bulk), and the one retrieval miss this benchmark surfaced was root-caused, fixed, re-judged 4/4 the same day, and kept as a regression test.
Four things it does that the original does not.
Cheaper is the headline, but it is not the only difference. These shipped after the sealed run, so the numbers above do not account for them.
It reads the description, because speech recognition cannot spell
A name the model has never heard comes out of the audio mangled: OmniRoute becomes "Omniroot", strix becomes "stricks". On a video about 13 GitHub repos, the transcript recovered 1 of the 13 names the video was about. The author's description carried all 13, verbatim, and it was already on disk, downloaded and thrown away. Now it is read on every run, for about 600 tokens.
It is bounded, labeled untrusted, and never authoritative for what happens: the video still owns that. The description owns exact spellings, product names, and the author's own links. Answering from the description alone is precisely what a hostile uploader would want, so it is not allowed.
No API key. Your audio never leaves your machine.
It never asks you for a key, and a key on its own does nothing. Transcription exhausts every local option first: a same-name subtitle sidecar, a loopback speech server, YAP on macOS, and the openai-whisper CLI on any platform. All are detected, never installed.
Cloud Whisper exists and is doubly opt-in: it needs both a key and --allow-remote-transcription. Nothing is uploaded by accident, and on Linux there is now a real local model rather than a fall-through to the cloud.
Half the transcript, losslessly
YouTube's auto-captions restate the tail of each line in the next one. Collapsing that overlap cut a 43-minute transcript from 27,814 to 14,766 tokens with every spoken line still present (99.7% recall against an independent reconstruction; the remainder are speaker-change markers, not words).
This lands on plain summaries and the four original detail modes, the paths that ask no question and therefore cannot benefit from evidence mode at all.
Anything the video says is treated as hostile
The description, title, uploader name, chapter titles, and transcript are all written by whoever uploaded the video. Every one of them is neutralized before the model reads it: none can forge the report's trust markers or break out of its code fences to impersonate instructions. Of the six video skills we code-reviewed in July 2026, only one other treats video text as an injection surface at all, and it covers the transcript only.
Don't take our word for it: run the 30-second fixture against any video tool, including ours. The local speech server is held to the same standard: it is refused if it tries to redirect your audio somewhere else.
Ready to use, verified end to end.
The code includes resilient video fetching, local-first transcription, safe reuse, portable evidence, optional semantic search, and dependency-free visual scoring. It keeps secrets outside agent conversations, marks media-derived content as untrusted evidence, and passes the complete local suite, hosted macOS/Linux matrix, isolated installation lifecycle, and deterministic bundle audit.
main, live from CISame original every time
The harness refuses a modified checkout, changed executable, mismatched source, unsupported setting, or dirty output directory.
Captions cannot quietly change
Caption files are copied and hashed immediately after each download call, before the original code continues, so a later overwrite cannot rewrite what the test says the AI read.
Secrets stay outside the test
The original runs with an isolated home and configuration. API keys, browser cookies, Git overrides, and unrelated environment variables are not inherited.
Failures leave evidence
Commands, versions, hashes, raw output, exit status, timeouts, and integrity failures are kept in machine-readable receipts.
It is promising, not magic.
- You need to ask a question. Without one, /watch runs the original method, unchanged. Evidence mode is pure opt-in.
- When anything goes wrong, it reverts by itself. No captions, a local file, or any internal error → the original pipeline runs and you get the original result. There is no failure mode where you get less than the original.
- Short videos are handled for you. Development testing showed evidence mode is not worth it under ~9 minutes, so videos shorter than that now use the original method automatically. You don't have to think about it.
- It's actually faster than the default, not slower. Measured: about 14 seconds faster end-to-end than the standard mode on both test videos, because extracting a handful of chosen screenshots costs less than extracting 100. Only transcript-only mode is quicker.
- Full summaries still keep the transcript. Throwing away most of a transcript is risky when you asked about the entire video; summary savings come from smarter screenshot selection instead.
- The default path mostly matches words. A question phrased very differently from the video can miss a section. Optional semantic search is available but not required, and the fallback still catches the rest.
- The judges are AIs, and the sample is honest but modest. Ten sealed questions, twelve development questions, and the nine-video head-to-head corpus, all graded blind against answer keys frozen and hash-committed before any run. Real measurements you can audit, not a large-scale trial.
Built on someone else's good decisions.
This fork exists because Brad Bonanno built and openly shared claude-video. Its caption-first design, simple installation, and reliable backup behavior made this project possible. The upstream history, MIT license, and authorship are preserved. Brad makes content about building with AI on YouTube, check them out. The media tools are FFmpeg and yt-dlp. Transcription is local-first: a loopback STT server, YAP on macOS, or the openai-whisper CLI anywhere, all run before Groq or OpenAI, which need explicit authorization before any audio leaves your machine. Research credits and links are in the improvement plan.
Other projects whose ideas are being evaluated and credited
No credit here implies that code was copied or that a listed feature shipped. The provenance record documents whether each source inspired a design, contributed an adapted mechanism, was deferred, or was rejected after testing: taeloautomates/claude-video, thedirektor/claude-video, RadoslavSheytanov/claude-video, Tigertycoon/claude-video, manojbadam/claude-video, CJNA/claude-video, sciencemj/claude-video-local, troyshelton/claude-video, jsstn/claude-video, joweiser/claude-video, JoseBallestas/claude-video, danielfrey63/claude-video, and finnvoor/yap.