claude-video-vision
Video perception for Claude Code: ffmpeg frames plus timestamped audio transcripts
Turns a video link or local file into keyframes and a timestamped transcript an assistant can read
By HUANGCHIHHUNG (individual) Python Local · stdio MediaKnowledge and memory
64 popularity score ★ 2.3k ↓ 3.4k/mo
Opens the app, which asks before it adds the server.
pip install 'claude-real-video[mcp]'claude mcp add claude-real-video -- crv-mcp{
"mcpServers": {
"claude-real-video": {
"command": "crv-mcp",
"args": []
}
}
}{
"mcpServers": {
"claude-real-video": {
"command": "crv-mcp",
"args": []
}
}
}{
"servers": {
"claude-real-video": {
"type": "stdio",
"command": "crv-mcp",
"args": []
}
}
}[mcp_servers.claude-real-video]
command = "crv-mcp"
args = []gemini mcp add --scope user claude-real-video crv-mcpCRV_MCP_CACHE |
Optional: Folder where analyses are cached; defaults to ~/.cache/crv-mcp. |
|---|---|
CRV_MEMORY_DB |
Optional: Path of the SQLite search index; defaults to ~/.crv/memory.db. |
CRV_NO_MEMORY |
Optional: Set to 1 to stop watched videos being indexed for search. |
claude-real-video (short name crv) is a Python video tool whose crv-mcp program runs as a local stdio MCP server. Given a video URL (fetched with yt-dlp, so YouTube, Instagram, TikTok and similar sites) or a path on disk, it picks keyframes by scene-change detection, drops repeated shots, and builds a timestamped transcript. It uses the video's own subtitles when it has them and falls back to Whisper when it does not. All of this runs on your machine. The assistant gets the transcript and the first batch of frames back as images, so a model without video input can still answer questions about a clip.
Every analysis is cached under ~/.cache/crv-mcp (moved with CRV_MCP_CACHE) and indexed in a local SQLite file at ~/.crv/memory.db. The assistant can then page through more frames, pull only the words of a long talk, list what has been watched, or search spoken and on-screen text across every video it has seen. Asking about the same source again reuses the cached analysis and does not download it a second time.
The v0.10.7 source (src/claude_real_video/mcp_server.py) sets limits the README does not list. watch_video and get_frames return 12 frames per call by default and at most 24. Frames are resized to 768 px on the longest side. The transcript inside watch_video is cut at 20,000 characters, while get_transcript takes max_chars from 1,000 up to 200,000. search_memory returns 12 hits by default, up to 50.
The same package also installs a command-line tool (crv), a local web page (crv-web) and a search command (crv-ask). Its makers sell a paid add-on, crv Pro, for deeper analysis; the free package and this server do not need it.
| Runtime | Python 3.10+ |
|---|
Python 3.10 or later, with the package installed with the mcp extra (pip install 'claude-real-video[mcp]'). ffmpeg and ffprobe must be on PATH (brew, apt, winget or choco); pip does not install them. Speech-to-text needs the whisper extra (or faster-whisper with the fast extra, or mlx-whisper on Apple Silicon), which the mcp extra does not bring. Without one of them, only videos that carry their own subtitles get a transcript. Works on macOS, Windows and Linux.
The MCP tools take no cookies, so videos behind a login, which the crv command line fetches with --cookies or --cookies-from-browser, cannot be watched through the server. CLI options such as --from/--to, --frame-width and --speakers are not exposed: watch_video accepts only source, max_frames, language and transcribe. Frames come back 24 per call at most, the inline transcript stops at 20,000 characters, and list_watched shows the newest 100 videos. URL downloads depend on yt-dlp keeping up with the sites. The README says it was tested end to end on Claude Code only; Claude Desktop and Cursor are expected to work but were not verified.
Suits someone who wants an assistant without video input (Claude, for instance) to answer questions about a clip, a lecture or a screen recording, and who is happy to install ffmpeg and a Whisper engine locally. Processing stays on the machine, and the local search over past videos helps when you go back to the same material. It is not a fit when the videos sit behind a login (use the crv command line with cookies instead) or when you need a hosted service: there is no remote endpoint, and transcribing long videos with Whisper on a CPU takes time.
watch_videoget_framessearch_memorylist_watchedget_transcript