claude-real-video

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

Connect your client

Local (PyPI)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
pip install 'claude-real-video[mcp]'
Claude CodeTerminal
claude mcp add claude-real-video -- crv-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "claude-real-video": {
      "command": "crv-mcp",
      "args": []
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "claude-real-video": {
      "command": "crv-mcp",
      "args": []
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "claude-real-video": {
      "type": "stdio",
      "command": "crv-mcp",
      "args": []
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.claude-real-video]
command = "crv-mcp"
args = []
Gemini CLITerminal
gemini mcp add --scope user claude-real-video crv-mcp

Settings 3

CRV_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.

What it does

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.

What it needs

RuntimePython 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.

Limits

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.

Who it suits

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.

Tools 5

watch_video
Downloads or opens a video, extracts keyframes and a transcript, and returns the transcript with the first frames
get_frames
Returns another batch of keyframes from a video already analysed
search_memory
Searches spoken and on-screen text across all watched videos, returning video, timestamp and line
list_watched
Lists previously watched videos, newest first, with length and line count
get_transcript
Returns the timestamped transcript of an analysed video with no frames

Similar servers