Give any AI eyes for video. 4 intelligent modes: 40x faster keyframe skim, scene-aware frames, deictic detection, duplicate dedup. YouTube/TikTok/Instagram/1800+ sites.
Project description
🎬 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file camel_watch-2.0.0.tar.gz.
File metadata
- Download URL: camel_watch-2.0.0.tar.gz
- Upload date:
- Size: 28.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64897bb1d5d5489b7bd6d8ac4cd7a0ba259ea0b76b30f06c86f8bb49dafc173d
|
|
| MD5 |
b58a14009fef6b3718c8e08efbc15f54
|
|
| BLAKE2b-256 |
0baee4a884bea48a2a8c5a243150951e65a84855c404debe239d32cb692cb6e0
|
File details
Details for the file camel_watch-2.0.0-py3-none-any.whl.
File metadata
- Download URL: camel_watch-2.0.0-py3-none-any.whl
- Upload date:
- Size: 32.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
270d8f89702dda786558cbc939dbacee0cd947f1155ba3c326d0e9b1dfc0e97e
|
|
| MD5 |
f94ba117e7285b6aecb8f70029b84466
|
|
| BLAKE2b-256 |
78274d762e1cb7315b02e7709a0186432483eafead26e9b74aa475e3aad50c73
|