
Claude Real Video
io.github.HUANGCHIHHUNGLeo由 GitHub 帳號 HUANGCHIHHUNGLeo 發布v0.10.5更新於 Oct 24, 2026
Let any LLM watch a video locally — and search everything it has ever watched.
發布方自己的服務:Claude Platform Docs
概覽
一個本機 MCP 伺服器,把影片連結或檔案轉成依場景挑選的關鍵影格與帶時間戳的逐字稿,並讓助理檢索所有看過的影片。
- 可以做什麼
- 觀看來自連結或本機檔案的影片,回傳帶時間戳的逐字稿以及第一批關鍵影格影像,並可分頁取得其餘影格。只取得逐字稿而不帶影像,以便在長影片上節省影像 token。在本機索引中跨所有已觀看影片搜尋,並在重複處理前列出已經看過的內容。
- 適用情境
- 當你希望 Claude 或其他 MCP 用戶端真正「看」影片而不只是讀字幕時,或想跨整個已分析影片庫提問時使用。適合在本機私密地分析演講、螢幕錄影、訪談和短片。
- 執行需求
- 以本機程序執行,從 PyPI 安裝 mcp 附加套件,透過 crv-mcp 指令啟動。需要 Python 3.10+ 以及 PATH 中的 ffmpeg/ffprobe;轉錄需要 whisper 附加套件或 openai-whisper。下載連結內容使用 yt-dlp;選用附加套件提供 faster-whisper、MLX GPU 轉錄和講者分離(需下載模型)。不需要 API 金鑰或帳號。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Claude Real Video,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
claude-real-video
[PyPI] [Python 3.10+] [License: MIT] [HN front page]
[Can Claude watch a video? Same question to ChatGPT, Gemini and Claude]
▶ 100-second demo: ChatGPT and Gemini can watch video, Claude can't. Here's what Claude answers once crv turns the video into frames plus a timestamped transcript.
[LLM Real Video — Give Your LLM Eyes (60-second film)]
▶ The 60-second pixel film — sound on (mp4 on GitHub) · an AI agent searches "how can an LLM truly understand video?", finds a key, and unlocks vision.
60-second real demo — real install, real run, real viewer.
Let Claude — or any LLM — actually watch a video.
Claude Code plugin marketplace (enable auto-update in /plugin → Marketplaces if you want it):
Then paste a video link into your agent and ask about it. (CLI-only use? crv "<url>" works with just the pip install.)
Naming: crv is the short name for claude-real-video (the PyPI package). The paid add-on, crv Pro, is sold on Capafy under the listing name "llm-real-video Pro".
▶ New: the 40-second film — my AI agent learned to watch videos (and stopped working)
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.
This free version lets your AI see the video. crv Pro lets it understand it — how it was shot (cut rhythm, camera moves) plus a timestamped timeline of what frames can't show: gestures, expressions, voice pitch shifts, emotion, sound events. One-time price $29 — get it on Capafy or buy with card via Lemon Squeezy.
On Codex CLI? ▶ 36-second demo · Real Video for Codex is a self-contained build for it. You ask Codex about a video, it runs one command, then reads a
SUMMARY.mdwith chapters, a timecoded transcript and the text that was on screen, which this free edition leaves out. So it can quote the config block on the slide at 12:40, not only what the speaker said about it, and it answers you inhh:mm:ss. Download, frames, transcription and text recognition all run on your machine, and the tool itself needs no API key and no account. Ships with the Codex skill and acrv-easy doctorself-check. Python 3.10 to 3.14, macOS or Windows 11 native. One-time $9.90: get it on Capafy or buy with card via Lemon Squeezy.
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 the processing runs 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.
No terminal needed — run crv-web and a local page opens (Traditional Chinese / Simplified Chinese / English): paste a YouTube or Reels link or a file path, click Analyze, open the result viewer. Video analysis and output generation run on your machine — the source video never gets uploaded. (If you then paste the extracted frames or transcript into a cloud LLM, that data goes to that provider.)
Want to eyeball what the model will see first? Add --viewer — it writes a local viewer.html (video + keyframe grid + transcript) you can double-click open. No network, no extra installs.
Only part of a video matters (a 10-minute screen share inside a 90-minute call): --from 28:00 --to 43:00. ffmpeg seeks instead of decoding the whole file, Whisper only hears the window, and the frame budget is spent inside it — but every timestamp crv reports is still a source timecode you can quote to a colleague.
The meaning is small text (a terminal, a spreadsheet, an IDE): --frame-width 1600. Frame selection is the hard part and crv already does it; at 640px on a 1920-wide screen recording the right moment gets found and then the detail that made it worth finding is thrown away.
Slow-changing content (animation tutorials, gradual morphs, slow pans): add --adaptive — frames are picked against their rolling neighbourhood instead of a fixed threshold, so a 2-3s squash-and-stretch that never spikes any single frame still gets captured.
Text-heavy content (lecture slides, screen recordings, talking-head explainers): add --text-anchors — extra frames are forced at subtitle-cue timestamps, so each spoken segment gets a matching visual even when the scene barely changes. Needs a sidecar .srt/.vtt or an embedded subtitle track — captions burned into the pixels can't be detected. At most one forced frame per second; scene detection is untouched.
Multi-speaker content (interviews, podcasts, meetings): add --speakers — every transcript line gets a speaker label ([SPEAKER_00], [SPEAKER_01], …) so the model can follow who said what. Runs a local diarization model (45 MB, downloads once, no account or token needed). Install with pip install "claude-real-video[speakers]".
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 — or any coding agent? One command installs the skill (works with Claude Code, Cursor, Codex, Copilot, Gemini CLI and other agentskills.io-compatible hosts):
Then just paste a video link into your agent and ask about it.
Manual install (clone + copy)
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.
New in 0.10.x — analyse only the part that matters:
--from / --to cut a window out of a long video: ffmpeg seeks instead of decoding
the whole file, the transcript and frame budget follow the window, and every reported
timestamp is still a source timecode you can quote back to the original.
Measured numbers
Real run on a 3-minute 640x360 video (benchmark/jfk-rice.mp4), Mac mini M4, local CPU, frames + dedup only (--no-transcribe). Image tokens estimated with Anthropic's (width x height) / 750 — 307 tokens/frame at 640x360.
Dedup v0.7.16 — small-subject fast action no longer disappears. A percentage comparator is structurally blind to a subject that covers <1% of the frame (it can never change 8% of the pixels). Found in a user's 2,181-video batch run; fixed with a third "action channel". Synthetic repro — static 1280x720 shot, a 40x90 px subject (0.4% of frame) moves fast only in the last 10 of 65 frames:
Why not just sample frames?
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:
You feed the model fewer, more meaningful frames — cheaper context, better understanding.
Install
pip extras never install themselves — without [whisper] there is no speech-to-text
(videos that ship their own subtitles still get a transcript).
System requirement: ffmpeg
ffmpeg / ffprobe are used for frame extraction and audio, and aren't
pip-installable. Install them once:
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.
Faster + hallucination-proof transcripts (recommended): install the [fast]
extra and crv automatically switches to
faster-whisper — same models, same
output files, several times faster, and gated by Silero VAD (voice-activity
detection): music-only or silent audio yields an honest "no speech" note instead
of whisper's classic invented caption. No new flags to learn:
If both are installed, faster-whisper wins; if it ever fails, crv falls back
to the whisper CLI on its own.
Apple Silicon (M1–M4): GPU transcription. Install the [mlx] extra and crv
runs Whisper on the Mac's GPU through
mlx-whisper —
a 21-minute talk that takes ~6 minutes on faster-whisper finishes in about a
minute on an M4, with the same transcript. The Silero VAD gate still runs
first, so music or silence never turns into invented captions; if the gate or
mlx cannot run, crv drops back to faster-whisper, then the CLI. Contributed by
@blazejp83 (#28).
Works on macOS, Windows, and Linux — Python 3.10+.
Usage
python -m claude_real_video ... works as an alias for crv too.
Options
What --grid output looks like
One contact sheet = nine consecutive keyframes, in order, filenames on each cell — the model reads a sequence, not scattered stills:
Memory — ask across everything you've watched
Every analysis is indexed locally (transcript lines + on-screen text, with timestamps), so a question can span your whole library instead of one output folder:
Re-running the same source with the same options doesn't re-process — crv says
"already watched" and points at the existing analysis (0.04s vs several seconds
measured). Different options, or --overwrite, re-analyse as usual.
Everything stays local: one SQLite file at ~/.crv/memory.db (override with
CRV_MEMORY_DB), user-only permissions, no embeddings, no network. The first time
anything is indexed, crv prints one line saying so. Don't want it at all?
CRV_NO_MEMORY=1.
MCP server (Claude Desktop / Cursor / any MCP client)
crv also ships as an MCP server, so MCP clients can ask for a video to be
watched directly — same local pipeline, zero cloud. Five tools: watch_video,
get_frames, search_memory (ask across every watched video), list_watched
(check before re-watching), and get_transcript (words only — no frames, so a
long talk doesn't cost image tokens).
Claude Code:
Claude Desktop — add to claude_desktop_config.json:
Tools: watch_video(source, max_frames, language, transcribe) returns the
timestamped transcript plus the first batch of keyframes as images;
get_frames(source, start_index, count) pages through the rest. Analyses are
cached under ~/.cache/crv-mcp, so follow-up questions about the same video
are instant.
mcp-name: io.github.HUANGCHIHHUNGLeo/claude-real-video
Verified end-to-end on Claude Code (the model described a test video's frames correctly through the tool). Claude Desktop and Cursor speak the same MCP stdio protocol — config above; open an issue if anything misbehaves.
Use it from Python
How it works
- Fetch —
yt-dlpfor URLs (optional cookies), or copy a local file. - Extract — one chronological
ffmpeg selectpass grabs every scene change plus a density floor (at least one frame every--fps-floorseconds), so fast cuts and slow screencasts are both covered. - Dedup — three channels against a sliding window of the last
--dedup-windowkept frames, so an A-B-A cutaway doesn't re-send a shot the model has already seen. A global channel measures real pixel difference (downscaled RGB, not a perceptual hash — hashes go blind on flat colours and equal-luma hue changes);--dedup-thresholdis the % of it that must change. A settled-local channel (v0.7.4) catches what the global one can't see: thin pen strokes, caption/text-card swaps and small UI updates that average out to ~0% globally. It looks, on a finer signature, for a region that differs strongly from every recent kept frame (with 1px shift tolerance, so film grain and frame jitter don't trigger) and is no longer changing — a settled new state, not motion mid-flight — with a cooldown so continuous motion that pauses every second (a waving flag, drifting smoke) can't keep re-firing. The final frame is evaluated even if still in motion (so a video's closing state is never lost), but it must clear both contrast gates like any other frame.--reportwritesreport.htmlshowing every keep/drop decision with its diff % (settled-local keeps are labelled), for tuning. - Text — if the video already has subtitles (a sidecar
.srt/.vttnext 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). - Audio (optional,
--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. - Timestamps — every kept frame's source-video time survives the whole
pipeline (extraction → dedup →
--max-framesthinning → renaming) and is written toframes.json(file/timestamp_sec/timestamp/selection_reason). Cite visual evidence asframe_012 @ 00:03:41, align frames withtranscript.jsonsegments, or feed the map to a video-RAG pipeline. Inviewer.html, click any keyframe → "play video from here". - Manifest —
MANIFEST.txtsummarises 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.
Notes
- Only download content you have the right to. The
--cookiesoption is for your own, authorised access — don't ship credentials in a repo. - Use one output folder per video. Re-running into a folder that already holds
an analysis is refused (so two videos never mix); pass
--overwriteto replace it.
crv Pro — understand how a video was shot
The free tool gives your AI keyframes and a transcript — enough to know what a video is about. crv Pro adds everything else: how it's shot, how it's cut, how it's spoken, what it feels like. All computed on your machine, written as plain text any LLM can read.
- Camera & pacing (
--motion) — every shot auto-labelled: static, pan, tilt, zoom, handheld. Full shot table: per-shot duration, cuts per minute, pacing across open/middle/close. High-motion shots get 0.2s-apart burst frames. - Sound & emotion (
--senses) — voice emotion, tone curves and audio events (laughter, SFX, ambience) timestamped segment by segment. Vocals and music auto-separated: emotion reads the clean voice, music gets its own BPM + energy track. No-dialogue footage (MVs, film) falls back to reading mood from color and light. - Interactive viewer (
--viewer) — one self-contained web page per analysis: the video, a clickable event timeline that jumps to the second, a transcript that highlights along with playback. EN / 繁中 / 简中. - Two reports, one flag (
--ai-report) — with your own API key: one report on how it's shot, one on what it says. - Breakdown report (
--breakdown) — hook analysis, pacing curve, camera language, and a rubric your own LLM completes into a full teardown. - Memory across your library (
crv-pro-ask) — search everything Pro has watched by what the camera and the voice did:--camera zoom(every zoom you've ever watched),--track emotion --label angry,--rhythm(cuts/min ranked). The freecrv-asksearches words; these search measurements the free edition never takes.
One-time price $29:
- Buy on Capafy (instant download, license key included): https://capafy.ai/agent/llm-real-video-pro-let-any-llm-watch-videos/5451082151
- Buy with credit card (Lemon Squeezy checkout, instant download): https://leoaido.lemonsqueezy.com/checkout/buy/ff552000-adc0-49f1-8eec-5e8ada1905a1
- Product page & demo: https://leoaido.com/crv-pro/
Following the build? I'm documenting the road from open-source tool to first paying customer, in public — @LeoAidoAI on X.
FAQ
What is the best tool to let an LLM watch or analyze a video?
It depends on what "watch" means for you. If you just want one answer about one clip and don't mind uploading it, a hosted multimodal model (e.g. Gemini) is the shortest path. If you want any LLM — Claude, GPT, Gemini or a local model — to analyze video reproducibly and locally, you want a preprocessing pipeline: scene-aware keyframes + a timestamped transcript, handed to the model as evidence it can cite. That pipeline is exactly what claude-real-video does, in one command, with nothing leaving your machine. Uniform frame sampling (1 fps) either misses cuts or floods the context window; scene-aware extraction keeps the frames that carry information.
How can I make Claude understand a video?
Claude cannot ingest video files directly. The working approach:
Then in Claude Code: Analyze this video: /path/to/video.mp4. The skill extracts scene-aware keyframes, a timestamped transcript (transcript.json), a frame→timestamp map (frames.json) and a MANIFEST.txt that tells the model how to read the folder — so Claude can cite frame_012 @ 00:03:41 instead of guessing.
What is claude-real-video?
An MIT-licensed Python CLI (crv) that turns a video into what an LLM can actually read: scene-aware keyframes (with real source timestamps that survive dedup and renaming), sliding-window deduplication so small-subject motion isn't thrown away, and local Whisper transcription with optional speaker labels. Works with YouTube URLs or local files, runs 100% locally. It exists because subtitles alone are not watching — models that only read the transcript hallucinate everything visual.
Who makes this
Built by Leo Huang — a one-person company running on AI. I post what actually breaks and what works while building tools like this: https://x.com/LeoAidoAI
License
MIT
來源:README.md,提交 ab4b9b2
工具
0版本歷史
1- v0.10.5最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Claude 整合
Claude Platform Docs
com.claude.platform官方發布者
遠端 MCP 伺服器,讓助理搜尋並閱讀 Claude 平台文件與 API 參考。

Insta Edits for Claude
由 GitHub 帳號 faisalkhanzemi 發布
讓 Claude 驅動 Mac 版 Instagram Edits 完整 274 個工具編輯器的橋接服務,並隨專案開啟同步工具清單。

Claude Checkpoint Mcp
由 GitHub 帳號 daniel-munoz 發布
本機 MCP 伺服器,把 Claude Code 工作階段狀態存成專案內的檢查點檔案,並可重新載入為精簡的續接摘要。

Qwen DAP MCP — C/C++ Debugger for Claude Code, Codex & Qwen
由 GitHub 帳號 spk-c 發布
通過 GDB、LLDB 和 MCP 為 Claude Code、Codex 和 Qwen 提供 C/C++ 崩潰、掛起和轉儲除錯AI 翻譯

AVE for Claude Code — Local Video Editing
由 GitHub 帳號 lemberalla 發布
僅適用於 Claude Code 的本機 AVE 時間軸編輯與匯出。需要現有 AVE 連接。AI 翻譯