video-watch.
Two Claude Code / agent skills that watch videos for you: Whisper transcript plus one page of findings with timestamps, for YouTube videos, podcasts and local recordings. An optional server pipeline turns a YouTube playlist into transcripts in your inbox.
#What it is
Two skills and one optional component in a single repo. video-watch takes a YouTube or podcast URL: yt-dlp fetches the audio, ffmpeg shrinks it to 16 kHz mono opus, a Whisper endpoint transcribes it, the agent writes a findings page. audio-transcribe takes local files (voice memos, meeting recordings, the audio track of a video) through the same pipeline, imported from video-watch rather than duplicated, which is why the two ship together. The pipeline component is the hands-off version for an always-on box: add a video to a designated playlist from your phone, cron polls the playlist RSS without an API key, and transcript plus findings arrive by mail.
The Whisper endpoint is yours to pick, configured in .env: a Groq key (whisper-large-v3, about $0.111 per audio hour as of 2026-07), an OpenAI key, or a self-hosted server. The scripts are standard-library Python with zero pip dependencies. MIT licensed.
#The itch
A 40-minute video usually carries about five minutes of substance. These skills let an agent extract that substance and reduce it to a page you read in one minute, with (mm:ss) timestamps so you can jump into the original where it matters. Follow-up questions ("what exactly does he say about X?") are answered from the transcript on disk instead of by watching anything again.
#How it works
The point of shipping scripts instead of a prompt is that the failure modes are already handled:
| Problem | What the script does |
|---|---|
| APIs cap uploads at 25 MB | converts to 16 kHz mono opus, chunks above 20 MB, re-offsets timestamps on merge |
| Whisper garbles proper nouns | primes the model with title, channel, description and your --vocab terms |
| Transient network failures | retries per chunk; hard API errors abort with the server's message |
| Frame extraction front-loads the intro | picks frame times from transcript pointer cues first ("as you can see"), then even coverage, snapped to scene changes |
| 30 near-identical talking-head frames | a grayscale-thumbnail dedup pass drops them |
| Transcript folders pile up | after 90 days (configurable) the retention sweep keeps findings and metadata, deletes the rest |
An honest pointer for people comparing options: claude-video is a much more popular project covering similar ground, interactive and caption-first. This repo differs in where the work lands: everything becomes files on disk that follow-up questions are answered from, the endpoint is yours to pick, and the optional pipeline watches a playlist unattended. The frame dedup approach here is adapted from claude-video.
#In real use
Transcription quality is Whisper's quality: music-heavy segments, crosstalk and thick accents produce errors, and hallucinated fragments on long silences are a known Whisper behavior. Findings quality is the agent's quality; the scripts only guarantee the transcript. YouTube blocks many datacenter IPs, so from rented servers downloads may be refused; the pipeline parks such videos and makes no attempt to evade blocks. Frame cue detection is English-only for now. Developed and used on Windows; macOS/Linux should work but not all combinations are tested. The findings example in the repo is synthetic and labelled as such; the repo ships no transcripts of real runs.
Version 1.0.0 shipped on 2026-07-17. Version 1.0.1 (2026-08-02) fixed a config bug where a custom retention window was silently ignored and the sweep deleted transcripts it was configured to keep.
#Install
$ git clone --depth=1 https://github.com/belschak/video-watch.git video-watch-repo
$ mkdir -p ~/.claude/skills
$ cp -r video-watch-repo/video-watch video-watch-repo/audio-transcribe ~/.claude/skills/
Then configure the endpoint once: cp video-watch-repo/.env.example ~/.claude/skills/video-watch/.env, pick one backend block, paste your key. You need yt-dlp and ffmpeg on PATH and Python 3.9+.