ITQAN LAB

MIT · verified 2026-08-11

catalog / skill

watch-video

Watch / analyze a video or audio source the agent cannot natively play — 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.

version
1.1.0
works in
every conformant agent
needs
ffmpeg · yt-dlp
cost
free · no API key
license
MIT

Install pick your agent

Say this the agent matches on its own

  • “watch this video”
  • “analyze this short/reel/clip”
  • “what happens in this video”
  • “reverse-engineer this video”
  • “read the frames of”
  • “transcribe this video”
  • “/watch-video”

Requirements what to install, and why

bash scripts/setup.sh --check          # what's installed, what's missing
bash scripts/setup.sh                  # shows a plan, asks, installs
bash scripts/setup.sh --yes            # non-interactive
bash scripts/setup.sh --with-whisper   # add free offline speech-to-text

Detects your platform and package manager — Homebrew, apt, dnf, pacman, zypper, apk, pipx/pip — and prints every command before it runs. Nothing is installed without a confirmation or an explicit --yes, and anything needing root is shown in full first.

Tool Needed for Notes
ffmpeg always Frames and media metadata
yt-dlp URLs only Installed via pip where distro packages go stale
a whisper engine optional Free and local. Used automatically when a source has no captions. setup.sh picks mlx-whisper on Apple Silicon, whisper-ctranslate2 elsewhere

Options every flag

Option Default Meaning
--frames N 30 (max 60) Target frame count
--width W 480 Frame width in px
--start SEC / --end SEC Sample a time range only
--lang CODE en.* Caption language, e.g. ar.*, all
--scenes off One frame per visual cut
--no-whisper off Skip local transcription even if an engine is installed
--whisper-model M base Speed vs accuracy, e.g. large-v3
--yes off Accept prompts, including installing a transcriber
--cookies BROWSER Login-gated videos, e.g. chrome
--playlist N single Allow a playlist, take first N
--outdir DIR temp Where output lands
--keep-video off Keep the download

Examples copy and go

How it works step by step

  1. yt-dlp fetches the media (capped at 1920px tall) plus auto or uploaded subtitles, converted to .srt. Local files skip this step. Playlists are refused unless --playlist N is given, so one URL means one video.
  2. ffprobe reads duration and dimensions. A source with no video stream is handled as audio-only: transcript, no frames.
  3. If the requested language has no captions, it retries for captions in any language. If there are still none, an installed whisper engine transcribes locally — free and offline, no API key.
  4. ffmpeg extracts frames, either at an even interval or on scene changes with --scenes. Scene mode falls back to even sampling when a source has too few cuts to be useful.
  5. A manifest prints the transcript path, frame paths and source metadata for the agent to read.

Limits what it will not do

  • Reads publicly accessible media. It does not bypass paywalls or DRM. --cookies reuses a session you are already signed into; it does not defeat access control.
  • Long videos download in full before framing. Prefer --start / --end.
  • Local transcription is accurate but much slower than downloading a caption file, so captions are always tried first. --no-whisper skips it entirely.
  • If a source that used to work stops downloading, yt-dlp is usually out of date — setup.sh updates it.

Source on GitHub ↗

Itqan Lab

Built at Itqan Lab, a design and technology studio.

إتقانitqan, the Arabic word for mastery: doing a thing precisely, and completely.

Open source under MIT · agent paths re-verified 2026-08-11 · this site is generated from the repository on every push.