agentleFS
itqanlabitqanlab/agent-toolkit/.agents/skills/video-watch/SKILL.md

video-watch

Skill1 starsChanged 34 days agoMITView on GitHub

Watch / analyze a video or audio source the agent cannot natively play. Triggers: 'watch this video', 'analyze this short/reel/clip', 'what happens in this video', 'reverse-engineer this video', 'read the frames of', 'transcribe this video', '/video-watch'. A URL from YouTube, TikTok, Instagram, X, Facebook, Vimeo, Reddit, Twitch, LinkedIn or 1750+ other sites, or a local file. Downloads it, pulls captions (or transcribes locally when there are none), and extracts frames so the agent can Read the transcript + frames and describe pacing, hooks, on-screen text, format, or answer questions about the content. No API key needed.

10 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 3 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 7 edited versions we read keep these.

  • 3

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Check and install what this skill needs:

    line 25
  2. Distinctive:

    If a dependency is missing when you run the main script, it will point you here.

    line 36
  3. Distinctive:

    Run the script. It prints a manifest with the transcript path and frame paths:

    line 40
  4. Very specific:

    Comparing several videos: Run once per URL into separate --outdir directories, then read across the frame sets.

    line 77
  5. Very specific:

    If a source that used to work stops downloading, the usual cause is an out-of-date yt-dlp.

    line 87

“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

video-watch

Let the agent "watch" a video by turning it into a transcript plus frames it can Read.

When to use

  • Someone shares a video URL or a local file and wants it watched, analyzed, summarized, or reverse-engineered — hook, pacing, on-screen text, editing style, format.
  • You need the visual or spoken content of a video, not just its metadata.
  • Also works on audio-only sources, in which case you get a transcript and no frames.

Setup

Check and install what this skill needs:

bash scripts/setup.sh --check          # report only, installs nothing
bash scripts/setup.sh                  # shows a plan, asks, then installs
bash scripts/setup.sh --yes            # non-interactive, for agent use
bash scripts/setup.sh --with-whisper   # add free offline speech-to-text

It detects the platform and package manager (Homebrew, apt, dnf, pacman, zypper, apk, pipx/pip) and prints every command before running it. Nothing installs without a confirmation or an explicit --yes.

If a dependency is missing when you run the main script, it will point you here.

How to use

  1. Run the script. It prints a manifest with the transcript path and frame paths:
    bash scripts/watch.sh "<url-or-path>" [options]
  2. Read the transcript — the .srt path in the manifest, if present.
  3. Read the frames in order (frame_001.jpg, frame_002.jpg, …) — the visual track.
  4. Synthesize: answer the question, or describe the hook (first ~1s), pacing and cuts, on-screen text, format (letterbox vs full-bleed), branding, and anything notable.

Options

OptionDefaultWhat it does
--frames N30 (max 60)Target frame count
--width W480Frame width in px
--start SEC / --end SEC—Sample a time range only
--lang CODEen.*Caption language, e.g. ar.*, all
--scenesoffOne frame per visual cut
--no-whisperoffSkip local transcription even if an engine is installed
--whisper-model MbaseSpeed vs accuracy, e.g. large-v3
--yesoffAccept prompts, including installing a transcriber
--cookies BROWSER—Login-gated videos, e.g. chrome
--playlist NsingleAllow a playlist, take first N
--outdir DIRtempWhere output lands
--keep-videooffKeep the download

Choosing options

Short clips (under 60s). The default 30 frames is roughly one every 1–2s. Plenty.

Long videos. Raise --frames, or better, use --start/--end to sample the section that matters. The whole file downloads before framing, so narrowing the range does not skip the download but does keep the frame count meaningful.

Edited video with cuts. --scenes gives one frame per visual cut, so you see the shots that actually exist rather than arbitrary samples across them. It falls back to even sampling automatically when a source has too few cuts to be useful, such as a static screencast or a single-shot talking head.

No captions. Many sources ship none. The script then looks for captions in any language, and if there are still none it transcribes locally — automatically, whenever a whisper engine is installed. Installing one is the opt-in; --no-whisper skips it, and --whisper-model large-v3 trades speed for accuracy.

Login-gated or age-restricted. --cookies chrome reuses a browser session you are already signed into. Only use it on accounts and content you have access to.

Comparing several videos. Run once per URL into separate --outdir directories, then read across the frame sets.

What it accepts

Any source yt-dlp supports — 1750+ sites including YouTube, TikTok, Instagram, X, Facebook, Vimeo, Reddit, Twitch, Dailymotion, Bilibili, SoundCloud and LinkedIn — plus direct media URLs and local files. Audio-only sources return a transcript with no frames.

Notes

  • Reads publicly accessible media. It does not bypass paywalls or DRM. --cookies reuses your own session; it does not defeat access control.
  • A playlist URL downloads a single video unless you pass --playlist N.
  • Downloaded video is deleted after framing unless you pass --keep-video. Frames and transcript remain.
  • If a source that used to work stops downloading, the usual cause is an out-of-date yt-dlp. scripts/setup.sh will update it.

Updates

This skill is versioned. Its version is metadata.version in the header of this file. CHANGELOG.md in this folder lists what changed in each version, newest first.

To check for a newer version, open the address on the Latest: line of CHANGELOG.md and compare its top version with the installed one. If the newer one is ahead, read every entry between the two and tell the user what changed before anything is updated. A Breaking section means the user has to do something. To update, reinstall the skill from its source repository, the same way it was installed.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.