# Let Claude watch any video

> Source: <https://github.com/admjal/claude-watchall>
> Published: 2026-10-28 12:15:33+00:00

A Claude skill that lets Claude **see, hear and understand any video**: YouTube, TikTok,
Instagram Reels, X/Twitter, Facebook, Vimeo, Twitch, Reddit and 1800+ other sites via
yt-dlp, plus **every local video format** on your computer (mp4, mov, mkv, webm, avi, wmv,
m2ts, 3gp, ...). Ask for summaries, answers with timestamps, quotes, subtitles - or
**honest feedback on videos you made**, including AI-generated ones.

```
/watchall https://www.tiktok.com/@user/video/123  what makes this go viral?
/watchall my latest video - how can I improve the hook?
/watchall C:\Videos\ad-v3.mp4  check it for AI artifacts
/watchall https://youtu.be/xyz  summarise in Swedish with timestamps
URL / file ─► yt-dlp download (or local probe)
            ─► one low-res decode pass: scene cuts + black frames + frozen frames
            ─► smart frame picks: strongest cuts first, then fill the largest gaps
            ─► parallel extraction, near-duplicate removal (perceptual hash)
            ─► labelled contact sheets (12 frames per image, timestamps burned in)
            ─► 2 fps "hook" sheet for the first 5 s
            ─► one audio pass: LUFS, true peak, LRA, silences
            ─► transcript: platform captions → Groq → local faster-whisper → OpenAI
            ─► technical QA + platform fit + rule-based findings
            ─► report.md → Claude reads sheets + transcript and answers
```

|  | watchall | typical video skills | 
|---|---|---|
| Local videos | any format + **library search** ("my latest video") | path only, few formats | 
| Speech-to-text without captions | **free offline faster-whisper** (GPU/CPU), Groq, OpenAI | paid API key needed | 
| Frames per image read | **contact sheets** - 12 timestamped frames per image | 1 frame per read | 
| Duplicate frames | removed (static shots don't waste tokens) | kept | 
| Black / frozen frames, dead air | detected with timestamps | - | 
| Loudness, true peak, clipping | measured (EBU R128) | - | 
| Platform fit (TikTok / Reels / Shorts / YouTube / LinkedIn) | checked | - | 
| Creator + AI-video review rubric | included (hook, pacing, artifacts, prompts) | - | 
| Zoom into a moment | `frame --range 12-15 --fps 6` | re-run whole pipeline | 
| TikTok | works (browser impersonation) | often blocked | 
| Windows | first-class, auto installs ffmpeg via winget | manual | 
| Subtitles out | `.srt` for every video | - | 
| Cache | per video + options, instant follow-ups | re-download | 

**Claude Code (plugin):**

```
/plugin marketplace add admjal/claude-watchall
/plugin install watchall@watchall
```

**Claude Code (manual):**

```
git clone https://github.com/admjal/claude-watchall
cd claude-watchall
./install.ps1        # Windows
./install.sh         # macOS / Linux
```

The installer copies the skill to `~/.claude/skills/watchall` and installs ffmpeg, yt-dlp,
curl_cffi, Pillow and faster-whisper.

**claude.ai:** download `watchall.skill` from Releases (or `python tools/build_skill.py`) and
upload under *Settings → Capabilities → Skills* (code execution must be on).

Check anytime: `python ~/.claude/skills/watchall/scripts/watchall.py setup`

```
watchall.py <url|file> [--start 1:00 --end 1:30] [--res 1280] [--lang sv]
                       [--max-frames N] [--hook 5] [--no-transcript] [--fresh]
                       [--cookies-from-browser edge|chrome|firefox]
                       [--transcriber auto|captions|local|groq|openai] [--whisper-model small]
watchall.py frame   <media> --at 12.5 --at 1:03 | --range 10-14 --fps 4
watchall.py library [--dir PATH] [--name foo] [--days 7] [--probe] [--json]
watchall.py setup   [--install] [--whisper] [--update]
watchall.py clean   [--days 7 | --all]
```

Optional keys in `~/.config/watchall/.env`: `GROQ_API_KEY` (fast, cheap cloud Whisper),
`OPENAI_API_KEY`, `WATCHALL_WHISPER_MODEL` (tiny/base/small/medium/large-v3).

| Length | Frames | + hook | 
|---|---|---|
| ≤ 15 s | 24 | 10 @ 2 fps | 
| ≤ 30 s | 30 | 10 | 
| ≤ 1 min | 40 | 10 | 
| ≤ 3 min | 60 | 10 | 
| ≤ 10 min | 80 | 10 | 
| longer | 100 → then use `--start/--end` focus passes |  | 

- *Site errors* →`watchall.py setup --update` (sites change; yt-dlp updates fix it).
- *Instagram / private / age-gated* →`--cookies-from-browser edge` (or chrome/firefox).
- *No transcript* →`setup --install --whisper` , or set`GROQ_API_KEY` .
- *Small text unreadable* →`--res 1280` or`frame --at <t> --res 1920` .

Only analyse content you have the right to access. MIT licensed.
