prompt-lookup
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
SLASH-COMMAND-ONLY. Invoke ONLY when the user explicitly types the literal `/watch-video` slash command. Never auto-trigger on phrases like "watch this video," "summarize this video," "take notes on this video," or on a bare YouTube URL. For ad-hoc YouTube questions, fetch the
Claude Code
$ npx -y skills add Newuxtreme/watch-video-skill --skill watch-video-skill --agent claude-code
Codex
$ npx skills add Newuxtreme/watch-video-skill --skill watch-video-skill -a codex -y
Cursor
$ npx skills add Newuxtreme/watch-video-skill --skill watch-video-skill -a cursor -y
Gemini CLI
$ npx skills add Newuxtreme/watch-video-skill --skill watch-video-skill -a gemini-cli -y
GitHub Copilot
$ npx skills add Newuxtreme/watch-video-skill --skill watch-video-skill -a github-copilot -y
OpenCode
$ npx skills add Newuxtreme/watch-video-skill --skill watch-video-skill -a opencode -y
Windsurf
$ npx skills add Newuxtreme/watch-video-skill --skill watch-video-skill -a windsurf -y
name: watch-video description: SLASH-COMMAND-ONLY. Invoke ONLY when the user explicitly types the literal `/watch-video` slash command. Never auto-trigger on phrases like "watch this video," "summarize this video," "take notes on this video," or on a bare YouTube URL. For ad-hoc YouTube questions, fetch the transcript directly (YouTube page or yt-dlp) and skim — do not run this heavyweight pipeline.
Claude can't stream video directly. This skill fakes it: a Python pipeline (vendored from [bradautomates/claude-video](https://github.com/bradautomates/claude-video) under `scripts/`) downloads the video, extracts auto-scaled JPEG frames with ffmpeg, pulls a timestamped transcript (native captions first, Whisper API fallback), and prints a markdown report listing every frame path. Claude then `Read`s each frame, aligns it to the spoken text, and writes a structured notes file.
**Slash-command only.** Run this skill ONLY when the user literally types `/watch-video`. That is the sole trigger.
Do NOT invoke on:
**Default for YouTube questions without the slash command:** pull the transcript the fastest way available — fetch the YouTube page / use yt-dlp captions / a transcript site — skim it, and answer from that. The frame-extraction pipeline is overkill unless the user explicitly asks for it via `/watch-video`.
> If you'd rather have auto-trigger behavior, edit the `description:` line above to match the keywords you want Claude to fire on (e.g. "Use when the user wants Claude to watch, analyze, or take notes on a video"). Slash-only is the default in this repo because explicit invocation prevents accidental token burn on long videos.
Run `python scripts/setup.py --check` to verify dependencies, or `python scripts/setup.py` to scaffold the `.env` and check binaries. On macOS, the installer auto-installs missing binaries via Homebrew. On Linux/Windows, it prints exact install commands.
The work happens in `scripts/watch.py`. It downloads, extracts, transcribes, and prints a markdown report to stdout that lists every frame path. The pipeline auto-scales the frame budget by duration (hard cap 100 frames / 2 fps), so no manual interval tuning.
python scripts/watch.py "<youtube-url-or-local-path>" [flags]
Flags worth knowing:
Auto-fps budgets (full-video mode):
Default invocation, no flags:
python scripts/watch.py "<source>"
For long videos where the user asked about a specific moment, pass `--start`/`--end`:
python scripts/watch.py "<source>" --start 2:15 --end 2:45
The script writes everything to a tmp working directory and prints a markdown report to stdout. Capture the stdout — it contains:
Read all the listed frame paths in a single message (parallel `Read` tool calls). The Read tool renders JPEGs as images. Each frame's filename + `t=MM:SS` from the report tells you when it occurred — pair each frame with the matching transcript line at that timestamp.
For very long videos (>10 min, sparse mode): the budget already capped at 100 frames, so reading all of them is fine.
Output file: `<work-dir>/<slug>-notes.md` by default. If the user said "save notes somewhere permanent," ask where.
Structure the markdown like this:
# <Title> **Source:** <URL or local path> **Duration:** <mm:ss> **Uploader:** <if from YouTube> **Transcript source:** <captions / whisper (groq) / whisper (openai) / none> ## One-line summary <≤20 words — the core claim or hook of the video> ## TL;DR <3–5 bullet points capturing the main arguments, moments, or beats> ## Timeline - **[00:00]** <what's happening visually + the key line being said> - **[00:15]** ... <one row per meaningful beat, not per frame> ## Key quotes > "<verbatim quote>" — [mm:ss] ## Visual notes <what the video shows that the transcript alone would miss — setting, B-roll, on-screen text, graphics, transitions, subje
A Claude skill that lets Claude "watch" videos by extracting a time-synced transcript plus auto-scaled still frames, then reading them together to produce structured markdown notes.
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…