brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Use when the user mentions a video file (.mp4, .mov, .avi, .mkv, .webm), a YouTube URL, asks to watch/analyze/review a video, or references video content in conversation
Claude Code
$ npx -y skills add jordanrendric/claude-video-vision --skill video-perception --agent claude-code
Codex
$ npx skills add jordanrendric/claude-video-vision --skill video-perception -a codex -y
Cursor
$ npx skills add jordanrendric/claude-video-vision --skill video-perception -a cursor -y
Gemini CLI
$ npx skills add jordanrendric/claude-video-vision --skill video-perception -a gemini-cli -y
GitHub Copilot
$ npx skills add jordanrendric/claude-video-vision --skill video-perception -a github-copilot -y
OpenCode
$ npx skills add jordanrendric/claude-video-vision --skill video-perception -a opencode -y
Windsurf
$ npx skills add jordanrendric/claude-video-vision --skill video-perception -a windsurf -y
name: video-perception description: Use when the user mentions a video file (.mp4, .mov, .avi, .mkv, .webm), a YouTube URL, asks to watch/analyze/review a video, or references video content in conversation
You have access to video understanding tools via the claude-video-vision MCP server.
**IMPORTANT: You MUST follow these steps in order. Do NOT skip step 2.**
1. Always start with `video_info` to get duration, resolution, and audio presence. If the user gives a YouTube URL, pass the URL directly as `path`. The MCP server downloads it with `yt-dlp`, prefers YouTube subtitles/auto-captions for transcription, and falls back to the configured audio backend only when captions are missing, empty, or suspiciously incomplete.
2. **REQUIRED for videos > 30s:** Call `video_analyze` BEFORE extracting any frames. This is NOT optional — it gives you structural data to make smart extraction decisions. Select filters relevant to the user's question:
| User intent | Filters to select | |---|---| | "What happens in this video?" | scene_changes, silence, transcription | | "Find the scene transitions" | scene_changes, black_intervals | | "Are there frozen/stuck parts?" | freeze, blur | | "Is this a talking head or action?" | motion | | "When does the music start?" | silence, loudness | | "Analyze the lighting" | exposure | | "Summarize this lecture" | transcription, scene_changes, silence | | General / unclear intent | scene_changes, silence, transcription |
Always include `transcription: true` when the video has audio — the transcription tells you WHERE to look visually.
`scene_changes: true` reports hard cuts (scdet score >= 8). If the user needs softer transitions (dissolves, slow fades), pass `scene_changes: { threshold: 4 }`; if handheld or fast-moving footage floods the list, raise it (e.g. `{ threshold: 15 }`).
3. Use the analysis results and transcription to plan your frame extraction strategy:
referenced in speech ("look at this", "as you can see", "let me show you")
4. Call `video_watch` to extract frames:
5. Use `video_detail` to drill into specific moments:
6. When the user asks follow-up questions about the same video, consult the manifest already in your context. Do not re-extract frames you already have at the same resolution. Do not re-request frames you already have in context.
**fps:** `"auto"` for general overview. Use the video's original fps (from `video_info`) for frame-by-frame detail. Use 5-10 for analyzing specific short moments. Use 0.1-0.5 for long videos.
**resolution:** 256-512 for quick scans. 512-768 for normal analysis. 1024+ when reading on-screen text or fine details.
**segments:** Use when you have analysis data. Each segment can have its own fps and resolution. Overrides global fps/start_time/end_time.
**view_sample:** Returns N evenly spaced frames from the extracted set. Use this to avoid flooding context with too many images.
**skip_audio:** Set to true when you only need visual analysis.
**YouTube URLs:** Pass supported YouTube URLs directly as `path`. Treat `transcription_source: "youtube_subtitles"` as stronger than `youtube_auto_captions`; auto-captions can still have recognition errors.
You receive:
Combine all sources to form a complete understanding. Use analysis + transcription to guide where you look visually. The analysis tells you WHEN things happen; the frames tell you WHAT happens.
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).
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.