Let any LLM actually watch a video: scene-aware keyframes plus a timestamped transcript, local.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Let Claude β or any LLM β actually watch a video.

Same 58-second clip: fixed 1 fps sampling = 58 frames. crv keeps the 26 that actually differ β and
--gridpacks them into 3 contact sheets. Fewer tokens, nothing missed.
Most AI tools don't really see a video. Paste a YouTube link into ChatGPT and it reads the transcript, not the picture. Claude won't take a video file at all. Even Gemini, which can read video natively, has to send it up to Google and samples frames at a fixed interval (1 fps by default), so fast cuts slip past.
claude-real-video does it differently, and locally: point it at a URL or a
file, and it pulls the frames that actually matter (every scene change, not a
fixed quota), throws away the near-duplicates, transcribes the audio, and hands
you a clean folder any LLM can read. All the processing happens on your own machine β what gets sent anywhere is only the frames/text you choose to paste into an LLM afterwards.
Then drop the frames + MANIFEST.txt into Claude / ChatGPT / Gemini and ask away.
Not doing LLM work? It also works as a general-purpose video keyframe extractor β scene-change detection + dedup, no ML models to download.
Using Claude Code? Install it as a skill so Claude watches videos on its own:
Then just paste a video link into Claude Code and ask about it.
New in 0.3.0 β tell it why you're watching, and keep what it finds:
--why makes the analysis focus on what you care about instead of a generic summary;
--kb saves the result as a dated note in your own notes folder, so it doesn't die in crv-out.
Most "let an LLM watch a video" scripts (and Gemini's own pipeline) grab frames
at a fixed interval β e.g. one per second. That over-samples a static
screencast and under-samples a fast-cut reel. claude-real-video is smarter:
| fixed-interval sampling | claude-real-video | |
|---|---|---|
| Frame selection | every N seconds | scene-change detection + density floor |
| Repeated shots (A-B-A cuts) | sent again every time | sliding-window dedup sends each shot once |
| Static slide (10 min) | ~600 near-identical frames | collapses to 1 (dedup) |
| Fast-cut reel | misses frames between samples | catches each visual change |
| Audio | often ignored | Whisper transcript w/ language detect |
| Where the processing happens | often in someone's cloud | on your machine (you choose what to share with an LLM afterwards) |
| Input | usually local file only | URL (yt-dlp) or local file |
You feed the model fewer, more meaningful frames β cheaper context, better understanding.
ffmpeg / ffprobe are used for frame extraction and audio, and aren't
pip-installable. Install them once:
| OS | command |
|---|---|
| macOS | brew install ffmpeg |
| Linux | sudo apt install ffmpeg (or your distro's package manager) |
| Windows | winget install Gyan.FFmpeg β or choco install ffmpeg β or download a build and add its bin\ folder to your PATH |
Verify it's on your PATH:
Transcription uses the whisper CLI (installed by the [whisper] extra, or
pip install openai-whisper). Whisper also relies on ffmpeg.
Works on macOS, Windows, and Linux β Python 3.10+.
python -m claude_real_video ... works as an alias for crv too.
| flag | default | meaning |
|---|---|---|
-o, --out | crv-out | output directory |
--scene | 0.30 | scene-change sensitivity (lower = more frames) |
--fps-floor | 1.0 | at least one frame every N seconds |
--max-frames | 150 | hard cap on total frames |
--lang | auto | Whisper language (en, zh, auto, ...) |
--dedup-threshold | 8 | % of pixels that must change for a frame to count as new; higher = fewer frames |
--dedup-window | 4 | compare against the last N kept frames β a shot the model already saw doesn't come back after a cutaway (1 = consecutive-only) |
--report | off | keep dropped frames in ./dropped + write report.html visualising every keep/drop decision |
--no-transcribe | off | skip audio |
--keep-audio | off | also save the full soundtrack (audio.m4a) so audio models can hear it |
--why | β | why you're watching, e.g. --why "find the pricing strategy" β written into MANIFEST.txt so the model analyses with that lens instead of a generic summary |
--kb | β | also save the analysis as a dated markdown note into this folder (your Obsidian vault, notes dir, ...) β so it joins your knowledge base instead of dying in crv-out |
--cookies | β | Netscape cookie file for login-gated sources |
--grid output looks likeOne contact sheet = nine consecutive keyframes, in order, filenames on each cell β the model reads a sequence, not scattered stills:

yt-dlp for URLs (optional cookies), or copy a local file.ffmpeg select pass grabs every scene change
plus a density floor (at least one frame every --fps-floor seconds), so
fast cuts and slow screencasts are both covered.--dedup-window kept frames, so an A-B-A cutaway doesn't re-send a
shot the model has already seen. --report writes report.html showing every
keep/drop decision with its diff %, for tuning..srt/.vtt next to a
local file, or an embedded subtitle track), those are used as the transcript β
faster and more accurate than re-transcribing. Only when there are no subtitles
does it fall back to Whisper on the audio (skipped cleanly if there's no audio).--keep-audio) β save the full original soundtrack
(audio.m4a: music + speech + effects, copied losslessly when possible). The
transcript only has the words; the audio file lets a model that can listen
(Gemini, GPT-4o, β¦) actually hear the music and tone.MANIFEST.txt summarises everything for the model.So the model can see (key frames), read (transcript) and β with --keep-audio β
hear (full soundtrack) the video. The transcript is plain text any model can read;
the tool doesn't burn subtitles into the video β burning is a presentation choice,
not something needed to make a video AI-readable.
--cookies option is for
your own, authorised access β don't ship credentials in a repo.The free version tells your AI what's on screen. crv Pro tells it how it was shot β and why it works. Camera moves, editing rhythm, action bursts, plus a one-flag --breakdown report: hook analysis, pacing curve, camera language, Reels-algorithm lens, and a rubric your own LLM completes into a full video teardown.
This free tool tells an LLM what is on screen. A stack of keyframes can't tell it how the video moves β the camera work and the pacing.
crv Pro adds a --motion pass on top of everything here:
All as plain text in the same manifest, still 100% local. One-time $19 β https://leoaido.com/crv-pro/
MIT
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/claude-real-video)<a href="https://allmcps.com/mcp/claude-real-video"><img src="https://allmcps.com/api/badge/claude-real-video?style=directory" alt="Claude Real Video on AllMCPs" /></a>