Skip to main content

version license python sites modes

🎬 watch-video

Give any AI eyes for video.

40x faster keyframe skim · Scene-aware frames · "Look here" detection · Zero API key option

YouTube · TikTok · Instagram · X/Twitter · Vimeo · Loom · Local files · 1800+ sites


🚀 What is this?

watch-video lets any AI (Claude, OpenAI, Gemini, or just you) watch a video instead of just guessing from the title. It downloads the video, extracts the most intelligent frames, pulls a timestamped transcript, and hands everything over for analysis.

Old way: "I can't watch videos, but based on the title..." New way: "Here's what happened at 1:23, what was said at 3:45, and what was on screen."

✨ Features

Feature Description
🚀 Efficient Mode 40x faster — extracts only keyframes (I-frames), skips delta decode. Perfect for daily use.
⚖️ Balanced Mode Scene-change detection — one frame per shot cut. Intelligent, token-efficient.
🔥 Token Burner Maximum coverage — 2 fps uniform + all scene changes merged. For when you need to see everything.
⚡ Transcript Mode Zero frames, just the transcript. Fastest option for podcasts/talking heads.
👁️ Deictic Detection Scans for "look here", "as you can see", "watch this" — grabs a frame at that exact moment.
🧹 Duplicate Dedup Compares 32×32 thumbnails, discards near-identical frames. Solves the "talking head" problem.
🎙️ Multi-Engine Transcript Captions → Local Whisper (free, private) → Groq → OpenAI. Falls through automatically.
🍪 Login-Gated Sources Instagram, X/Twitter, private YouTube — borrow cookies from your browser.

📦 One-Command Install

pip install camel-watch

Then:

# Quick vibe check (40x faster)
watch "https://youtu.be/dQw4w9WgXcQ" --mode efficient

# Deep scene-aware analysis
watch "recording.mp4" --mode balanced

# Maximum coverage (expensive, use sparingly)
watch "https://youtu.be/..." --mode token-burner

# Just the transcript (fastest)
watch "https://youtu.be/..." --mode transcript

# Focus on a specific section
watch "talk.mp4" --start 10:00 --end 15:00 --mode token-burner

🔧 How It Works

You paste a URL or path
        │
        ▼
   yt-dlp downloads video + captions (1800+ sites)
        │
        ▼
   ffmpeg extracts frames in your chosen mode
   ├── transcript → 0 frames
   ├── efficient  → keyframes only (40x faster)
   ├── balanced   → scene-change detection
   └── token-burner → 2fps + all scenes merged
        │
        ▼
   Deictic detection: "look here" → grab that frame
        │
        ▼
   Duplicate dedup: discard near-identical frames
        │
        ▼
   Transcript pipeline:
   captions → local Whisper (private!) → Groq → OpenAI
        │
        ▼
   🎯 AI can now answer anything about the video

🎯 Use Cases

  • Summarize a 2-hour interview in 5 seconds
  • Analyze YouTube hooks — what's on screen in the first 3 seconds?
  • Diagnose a bug from a screen recording someone sent you
  • Extract quotes from a webinar with timestamps
  • Catalog visual moments — "when does the slide change?"
  • Competitor analysis — what visuals do top creators use?

📊 Mode Comparison

                   Frames    Speed    Cost    Best For
transcript        0         ⚡⚡⚡    Free    Podcasts, talking heads
efficient (40x)   ~100      🚀       Low     Everyday use, long videos
balanced          ~80       ⚖️       Med     Default — scene-aware
token-burner      ~600      🔥       High    Forensics, critical analysis

🔌 Use with Any AI

Claude Code

/plugin marketplace add watch-video/watch-video
/plugin install watch@watch-video

Pi (coding agent)

The skill auto-discovers from ~/.pi/agent/skills/watch/.

Direct API

from watch_video.core.orchestrator import run_watch

result = run_watch("https://youtu.be/...", mode="balanced")
print(result["frames_total"])  # Number of frames
print(result["transcript_segments"])  # Transcript

CLI with JSON output

watch "https://youtu.be/..." --mode efficient --json > analysis.json

🛠️ Requirements

  • Python 3.9+
  • ffmpeg + yt-dlp — auto-installed on macOS (brew), or:
    # Windows
    winget install Gyan.FFmpeg
    pip install yt-dlp
    
    # Linux
    sudo apt install ffmpeg
    pip install yt-dlp
    

For local transcription (no API key, audio never leaves your machine):

pip install camel-watch[local]

For full features:

pip install camel-watch[all]

No API key needed for local transcription. For API fallback, set:

export GROQ_API_KEY="gsk_..."   # Cheaper, faster
# or
export OPENAI_API_KEY="sk-..."  # Universal fallback

🍪 Login-Gated Sources

Instagram, X/Twitter, and private YouTube videos need your browser cookies:

watch "https://www.instagram.com/reel/..." --cookies-from-browser chrome

Or export a cookies.txt from a browser extension and pass --cookies cookies.txt.

🔒 Your cookies are read live and piped into yt-dlp. Never stored or transmitted.

📋 All Options

usage: watch [-h] [--mode {transcript,efficient,balanced,token-burner}]
             [--max-frames N] [--resolution W] [--fps F]
             [--start T] [--end T] [--intent STR]
             [--no-whisper] [--whisper {local,groq,openai}]
             [--no-dedup] [--no-deictic] [--json]
             [--cookies-from-browser B] [--cookies FILE]
             source

positional arguments:
  source                Video URL or local file path

options:
  --mode MODE           Frame extraction mode (default: balanced)
  --max-frames N        Cap on frame count
  --resolution W        Frame width in pixels (default: 512)
  --fps F               Override fps
  --start T             Start time (SS, MM:SS, HH:MM:SS)
  --end T               End time (SS, MM:SS, HH:MM:SS)
  --intent STR          Why you're watching (shapes analysis)
  --no-whisper          Disable whisper fallback
  --whisper BACKEND     Force whisper backend
  --no-dedup            Disable frame deduplication
  --no-deictic          Disable deictic detection
  --json                Output JSON
  --cookies-from-browser B  Browser cookies (chrome, firefox, etc.)
  --cookies FILE        Path to cookies.txt

📈 Token Efficiency

Mode 5 min 30 min 2 hr
transcript ~2k ~10k ~40k
efficient ~15-30k img ~30-60k img ~60-120k img
balanced ~30-60k img ~50-80k img ~80-100k img
token-burner ~60-120k img ~150-300k img ~300-600k img

Image tokens at 512px. 1024px roughly quadruples — use --resolution 1024 only when reading on-screen text.

🔒 Privacy

  • Local transcription — audio never leaves your machine
  • No telemetry — zero data collection
  • No accounts — no signup needed
  • Cookies stay local — read live, never stored

🧠 Philosophy

Most AI video tools are black boxes — you upload a video to their servers and hope for the best. watch-video runs everything locally. The only network traffic is downloading the video itself (which you'd do anyway if you were watching it manually).

📄 License

MIT — do whatever you want with it.

⭐ Support

If this saved you time, drop a star on GitHub. It helps more people find it.


Made with ❤️ for everyone who's tired of skipping through videos

Metadata

Release files for camel-watch 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for camel-watch 2.0.0
File Size Uploaded
camel_watch-2.0.0.tar.gz 28.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for camel-watch 2.0.0
File Interpreter ABI Platform
camel_watch-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 60.6 kB

Release files / camel_watch-2.0.0.tar.gz

Download URL camel_watch-2.0.0.tar.gz
Size 28.1 kB
Tags Source
SHA-256 checksum
How to use checksums
64897bb1d5d5489b7bd6d8ac4cd7a0ba259ea0b76b30f06c86f8bb49dafc173d
BLAKE2b-256 checksum
How to use checksums
0baee4a884bea48a2a8c5a243150951e65a84855c404debe239d32cb692cb6e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Release files / camel_watch-2.0.0-py3-none-any.whl

Download URL camel_watch-2.0.0-py3-none-any.whl
Size 32.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
270d8f89702dda786558cbc939dbacee0cd947f1155ba3c326d0e9b1dfc0e97e
BLAKE2b-256 checksum
How to use checksums
78274d762e1cb7315b02e7709a0186432483eafead26e9b74aa475e3aad50c73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page