AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Watch

skill-thecraighewitt-skills-watch · by TheCraigHewitt

When the user wants to read, transcribe, summarize, or research a video — YouTube link, podcast clip, Loom, TikTok, X/Twitter video, local file, or any URL yt-dlp supports. Use when they paste a video URL, say 'transcribe this,' 'summarize this video,' 'what does this video say about X,' 'pull the transcript,' 'analyze this YouTube video,' or hand you a video for content research. Default is fast…

No reviews yet
0 installs
22 views
0.0% view→install

Install

$ agentstack add skill-thecraighewitt-skills-watch

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-thecraighewitt-skills-watch)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Watch? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Watch — read a video like a PDF

You don't have a video input. This skill bundles a Python script that fetches the timestamped transcript (and optionally frames) so you can answer questions about video content.

Default mode is transcript-only. No video download, no frame extraction — just captions pulled via yt-dlp in a few seconds. That covers ~every YouTube video and is the right default for research, summarization, and content analysis.

Opt into --with-frames only when the visual layer matters: debugging a screen recording, breaking down a thumbnail/hook visually, reading on-screen text, analyzing UI behavior.

Requirements

Locally installed:

  • yt-dlpbrew install yt-dlp (macOS) / pipx install yt-dlp (Linux) / winget install yt-dlp.yt-dlp (Windows)
  • ffmpeg + ffprobebrew install ffmpeg / sudo apt install ffmpeg / winget install Gyan.FFmpeg. Only required for --with-frames and the Whisper audio fallback. Transcript-only on a captioned YouTube video does not need ffmpeg.

If the user's missing one, tell them the install command and stop. Do not auto-install.

How to invoke

The script lives next to this SKILL.md. Invoke it with the absolute path or ${CLAUDE_SKILL_DIR}/watch.py:

python3 "${CLAUDE_SKILL_DIR}/watch.py" ""

If ${CLAUDE_SKILL_DIR} isn't set in this agent, resolve the path yourself — it's the directory holding this SKILL.md file.

Default (transcript-only)

python3 "${CLAUDE_SKILL_DIR}/watch.py" "https://youtu.be/abc123"

Returns a markdown report with title, channel, duration, and a timestamped transcript like:

[00:01] All right, so here we are, in front of the elephants
[00:05] the cool thing about these guys is that they have really...

With frames (visual layer)

python3 "${CLAUDE_SKILL_DIR}/watch.py" "" --with-frames

Returns frame paths + transcript. Read each frame path in parallel with the Read tool so you see the full chronological visual flow alongside the transcript.

Focus on a section

python3 "${CLAUDE_SKILL_DIR}/watch.py" "" --start 1:30 --end 2:00

Works in both modes. Times accept SS, MM:SS, or HH:MM:SS. In transcript-only mode it filters the transcript. In --with-frames mode it also limits frame extraction and switches to a denser frame budget.

Other flags

| Flag | Purpose | |------|---------| | --no-whisper | Don't fall back to Whisper if captions are missing. Fail with a clear error instead. | | --whisper groq\|openai | Force a Whisper backend. Default: prefer Groq, fall back to OpenAI. | | --max-frames N | (frames mode) Cap on frame count. Default 80, hard max 100. | | --resolution W | (frames mode) Frame width in px. Default 512. Bump to 1024 only if reading on-screen text matters. | | --fps F | (frames mode) Override auto-fps (clamped to 2 fps). | | --out-dir DIR | Keep working files somewhere specific (default: tmp). | | --json | (transcript mode) Emit machine-readable JSON instead of markdown. |

When the script needs Whisper

If a video has no captions (rare for YouTube, common for Loom / Instagram / local files) and you didn't pass --no-whisper, the script will:

  1. Download audio only (transcript-only mode) or extract from the downloaded video (--with-frames)
  2. Upload it to Groq's whisper-large-v3 (preferred — cheap, fast) or OpenAI's whisper-1
  3. Return the same [MM:SS] timestamped format

To enable Whisper, set one of these (script reads env vars or ~/.config/watch/.env):

GROQ_API_KEY=...        # console.groq.com/keys
OPENAI_API_KEY=...      # platform.openai.com/api-keys

If neither key is set and captions are missing, the script exits 2 with a clear message — tell the user how to enable Whisper or that this particular video can't be transcribed.

Output flow

Transcript-only (default). The script prints a self-contained markdown report. Quote timestamps when citing claims. Don't re-print the full transcript back to the user — summarize, extract, or answer their question.

--with-frames. Same report plus a list of frame paths. After running:

  1. Read every frame path in a single parallel batch — you need them all to follow the visual flow.
  2. Combine frames with the transcript when answering. If the user asked about the hook, look at frames 1-3 + transcript 0:00–0:15.

Cleanup

The script prints a working directory. If the user isn't going to ask follow-ups about this video, rm -rf when you're done. Otherwise leave it in place — re-runs can reuse it via --out-dir.

Common research workflows

Hook deconstruction. python3 watch.py "" --start 0 --end 15 --with-frames → analyze cold open: words said, what's on screen, pattern interrupt timing.

Channel research. Run transcript-only on 5-10 competitor videos. Compare structure, topic mix, CTA placement, transcript length-to-duration ratio.

Quote extraction. Transcript-only + grep for a topic in the report (use Bash on the printed work dir).

UI bug repro. --with-frames on a screen recording, then ask which frame the bug appears. Frames mode shines here.

Don't

  • Don't re-run the script on a video you already watched this session — you have the transcript in context. Just answer.
  • Don't pass --with-frames for pure-text research. It downloads the full video and burns image tokens for no benefit.
  • Don't write API keys into the repo or to stdout. They live in ~/.config/watch/.env (mode 0600).

Security

The script runs yt-dlp and ffmpeg locally — no third-party server in the middle. Audio only leaves the machine when Whisper is needed AND a key is configured (Groq or OpenAI endpoint, whichever matches). The video itself never gets uploaded.

Inspect watch.py before first run if you want to verify.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.