需要 Node.js 24+ 和 ffmpeg,YouTube 链接还需另装 yt-dlp;本地 Whisper 首次使用会自动下载模型到 ~/.claude-video-vision/models/;Windows 上 npx 版本过旧会导致 MCP 服务器连接失败,需升级 npm 或全局安装。
claude-video-vision
jordanrendricMIT活跃维护给 Claude Code 装上视频理解能力:用 ffmpeg 抽帧、Whisper 转写音轨,再交给多模态模型分析画面与声音,让 Agent 能直接看懂视频内容。
Give Claude the ability to watch and understand videos — Claude Code plugin with frame extraction and multimodal audio analysis
/plugin marketplace add https://github.com/jordanrendric/claude-video-vision
/plugin install claude-video-visionREADME 未说明显存或 GPU 要求;本地 Whisper 后端按内存自动选择模型,可完全离线运行,云端后端则依赖对应 API。
给 Claude Code 加上看视频的能力,用 ffmpeg 抽帧加音频转写,让 Claude 直接理解视频内容
给 Claude Code 装上视频理解能力:用 ffmpeg 抽帧、Whisper 转写音轨,再交给多模态模型分析画面与声音,让 Agent 能直接看懂视频内容。
核心能力
- 用 ffmpeg 抽帧后以 base64 图片交给 Claude 直接看画面
- 音频转写带时间戳,支持 Gemini、本地 Whisper、OpenAI 三种后端
- 可直接传 YouTube URL,用 yt-dlp 下载并优先复用字幕
- Claude 按问题自适应调整 fps、时间范围和分辨率
- 提供 6 个 MCP 工具,含元数据查询、细节下钻和依赖检查
容易踩的坑
- v1.4.0最新正式版2026-10-06 · 2026-10-06 01:52 UTC
Changed
- Node.js 24 LTS is now the minimum (
engines.node: >=24). Node 20 reached end-of-life on 2026-04-30. CI runs on Node 24 and 26. Users on Node 22 will see anEBADENGINEwarning fromnpx. video_analyzescene detection defaults to a scdet score of 8 (was 2). Scores below 8 are mostly handheld motion and fast pans, not cuts, soscene_changes: truenow returns far fewer and more accurate scenes. Passscene_changes: { threshold: 2 }to get the old behavior back (#45).- Dependencies:
openai4 → 7,@google/genai1 → 2,zod3 → 4,@modelcontextprotocol/sdk1.29 → 1.32, TypeScript 5 → 7. No changes to tool schemas or backend behavior. - Tool descriptions now state that
start_time/end_timeand segmentstart/endare absolute timestamps, not durations (#35).
Added
scene_changes: { threshold: N }onvideo_analyze(0–100) to tune scene detection per call (#45).analysis.incompleteonvideo_analyze: when the ffmpeg pass stops early, the result says how far the analysis got (analyzed_until) instead of silently returning partial data (#47).- README troubleshooting section for the Windows
Unknown command: "claude-video-vision@latest"MCP startup failure.
Fixed
video_watch/video_detailtime ranges:end_timeand segmentendwere read by ffmpeg as a duration from the start time, so a01:29 → 01:30segment extracted 90 seconds of frames. Segments also shared one output directory, mixing frames between segments and with stale files. Each segment now returns exactly its own frames (#46).video_analyzetruncated long videos: the single ffmpeg pass had a flat 10-minute timeout, so on long or 4K sources it was killed mid-file and the partial result was returned as if complete (e.g. no scenes after 01:09 in a 2.5h film). The timeout now scales with the video length, and an early stop is reported viaanalysis.incomplete(#47).video_analyzestderr fallback never matched thescore: X, time: Ylog format of current ffmpeg builds; it now parses both formats, and the scdet filter and both parsers use the same threshold (#45).- Session cache: with
enable_index,video_watchsegments stored rawframe_XXXXpaths in the manifest, which later runs overwrote. Frames are now cached under timestamp-named files (#46). video_watchnow always removes its temporary/tmp/cvv-*work dir, including when session indexing is on and when extraction fails.- Security: transitive dependency updates clear all runtime
npm auditfindings (1 critical, 4 high).
Upgrade notes
- If you used
video_watchwithsegmentsandenable_index: truebefore this release, your session cache may point to wrong frames. Clear it withvideo_configure→clear_sessions, or delete~/.claude-video-vision/sessions/.
Full changelog: https://github.com/jordanrendric/claude-video-vision/compare/v1.3.2...v1.4.0
Thanks to @jorboyd for the detailed reports behind #45, #46 and #47, and to @gaurav-init for #35.
- Node.js 24 LTS is now the minimum (
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Claude Code Video Vision
Give Claude the ability to watch and understand videos.
A Claude Code plugin that extracts frames via ffmpeg and processes audio via multiple backends (Gemini API, local Whisper, or OpenAI API). Claude receives frames as images and audio transcription with timestamps — the plugin is a perception layer, not an interpretation layer.
Features
- Multimodal perception — Claude sees video frames directly and reads audio transcriptions with timestamps
- YouTube URL support — Pass a YouTube URL directly; the MCP server downloads it with
yt-dlp, preserving source metadata and captions for context - Flexible backends — Choose between cloud APIs or fully local processing
- Adaptive extraction — Claude adjusts fps, time range, and resolution based on your question
- Auto-installation — Whisper models download automatically on first use
- Interactive setup wizard —
/setup-video-visionwalks you through configuration
Quick Start
1. Install the plugin
Inside Claude Code, run these commands one at a time:
/plugin marketplace add https://github.com/jordanrendric/claude-video-vision
Then:
/plugin install claude-video-vision
The MCP server will auto-install via npx from npm on first use — no build step required.
Alternative: local development
git clone https://github.com/jordanrendric/claude-video-vision.git
claude --plugin-dir /path/to/claude-video-vision
2. Configure
Inside Claude Code, run the interactive wizard:
/claude-video-vision:setup-video-vision
It will walk you through backend selection, whisper configuration (if local), frame options, and dependency verification.
Usage
Slash command
/watch-video path/to/video.mp4
/watch-video tutorial.mp4 "what language is used in this tutorial?"
/watch-video https://www.youtube.com/watch?v=... "summarize this video"
Conversational
Just mention a video file or YouTube URL — Claude will detect it:
"analyze this video for me: ~/Downloads/demo.mp4"
"take a look at the first second of ~/videos/bug-report.mov"
"summarize this YouTube Short: https://www.youtube.com/shorts/..."
Claude adapts parameters automatically:
- "the first second" → extracts at original fps from
00:00:00to00:00:01 - "summarize this 1h lecture" → low fps, full duration
- "what text is on screen at 1:30?" → high resolution, narrow time window
Backends
| Backend | Audio processing | Cost | Setup |
|---|---|---|---|
| Gemini API | Native (speech + non-speech events) | Free tier: 1500 req/day | GEMINI_API_KEY env var |
| Local (Whisper) | whisper.cpp or Python openai-whisper | Free, fully offline | brew install whisper-cpp + auto model download |
| OpenAI API | OpenAI Whisper API | Paid per usage | OPENAI_API_KEY env var |
All backends extract video frames via ffmpeg — Claude always has direct visual access.
Architecture
┌───────────────────────────────────────────────────────┐
│ Claude Code (your session) │
│ │
│ /watch-video ──→ Skill: video-perception │
│ │ │
│ ▼ │
│ MCP tool: video_watch │
│ │ │
└────────────────────────┼──────────────────────────────┘
│
▼
┌────────────────────────────────────┐
│ MCP Server (Node.js) │
│ │
│ ┌──────────┐ ┌──────────────┐ │
│ │ ffmpeg │ │ Audio backend│ │
│ │ frames │ ║ │ (parallel) │ │
│ └──────────┘ └──────────────┘ │
│ │ │ │
└───────┼─────────────────┼──────────┘
▼ ▼
base64 images transcription
+ timestamps + audio events
│ │
└────────┬────────┘
▼
Claude receives both
Requirements
- Node.js 24+ (for the MCP server)
- ffmpeg (auto-detected, install instructions provided by setup wizard)
- yt-dlp (optional, required only for YouTube URLs;
brew install yt-dlpon macOS) - Backend-specific:
- Gemini API: free API key from ai.google.dev
- Local:
brew install whisper-cpp(macOS) or equivalent - OpenAI: API key from OpenAI
MCP Tools
The plugin exposes 6 MCP tools:
video_watch— Extract frames + process audio (main tool)video_analyze— Analyze video structure with ffmpeg filters before extractionvideo_detail— Drill into specific cached or newly extracted momentsvideo_info— Get video metadata without processingvideo_configure— Change settingsvideo_setup— Check and guide dependency installation
Slash Commands
/watch-video <path> [question]— Analyze a video/setup-video-vision— Interactive configuration wizard
Configuration
Settings are stored in ~/.claude-video-vision/config.json:
{
"backend": "local",
"whisper_engine": "cpp",
"whisper_model": "auto",
"whisper_at": false,
"frame_mode": "images",
"frame_format": "jpeg",
"frame_resolution": 512,
"default_fps": "auto",
"max_frames": 100,
"frame_describer_model": "sonnet",
"enable_index": false,
"session_max_age_days": 7,
"downloads_max_age_days": 7
}
frame_format can be jpeg, png, or webp. jpeg remains the default for backwards compatibility; png is useful for screen recordings where text and sharp UI edges should stay lossless.
Whisper models auto-download to ~/.claude-video-vision/models/ on first use. Available: tiny, base, small, medium, large-v3-turbo, large-v3, auto (picks best for your RAM).
YouTube Transcripts
For YouTube URLs, the server uses this transcript order:
- Manual YouTube subtitles when an English track is available.
- YouTube automatic captions when manual subtitles are not available.
- The configured audio backend when captions are missing, empty, or cover too little of a longer video.
Audio results label provenance with transcription_source, for example youtube_subtitles or youtube_auto_captions, so Claude can treat manual subtitles as stronger evidence than auto-captions.
Troubleshooting
Windows: MCP server fails to connect with Unknown command: "claude-video-vision@latest"
The plugin starts its MCP server with npx -y claude-video-vision@latest. If claude mcp list shows the server as failed and running that command yourself prints Unknown command: "claude-video-vision@latest" followed by a hint about npm help, then npm received the package name as if it were a subcommand. That points to a broken or outdated npx on your machine, not to the plugin.
-
Check your npm install in PowerShell:
npx --version npm --version where.exe npxBoth versions should match (7 or newer), and
where.exe npxshould point tonpx.cmdinside your Node.js install directory. -
Fix it by updating npm (
npm install -g npm@latest) or reinstalling Node.js 24+ LTS, then restart Claude Code. -
Workaround if it still fails: install the server globally and register it yourself.
npm install -g claude-video-vision claude mcp add --scope user claude-video-vision -- claude-video-visionThe plugin's own server entry will keep showing as failed; you can ignore it. A global install does not update itself, so re-run
npm install -g claude-video-visionto pick up new releases.
Status
v1.4.0 — see the CHANGELOG for release history. CI runs on Ubuntu and macOS with Node.js 24 and 26.
License
MIT — see LICENSE.
Author
Jordan Vasconcelos
- GitHub: @jordanrendric
- LinkedIn: jordanvasconcelos
- Instagram: @jordanvasconcelos__
- X/Twitter: @jordanrendric