Loading...
Loading...
Install and use crv (claude-real-video) — a tool that lets any AI agent watch videos by extracting scene-aware keyframes, deduplicating them, and transcribing audio. Use when the user shares a video URL or file and wants it analyzed, summarized, or discussed.
npx skill4agent add huangchihhungleo/claude-real-video claude-real-video-for-agentscrv--grid# macOS
brew install ffmpeg
# Linux
sudo apt install ffmpeg
# Windows
winget install Gyan.FFmpeg# Recommended: with audio transcription support
pip install "claude-real-video[whisper]"
# Core only (frames + dedup)
pip install claude-real-video[whisper]crv --help
ffmpeg -versionbash install-skill.sh# Claude Code
cp -r skills/claude-real-video-for-agents ~/.claude/skills/
# Codex
cp -r skills/claude-real-video-for-agents ~/.codex/skills/
# OpenCode
cp -r skills/claude-real-video-for-agents ~/.opencode/skills/
# Gemini CLI
cp -r skills/claude-real-video-for-agents ~/.gemini/skills/crv "https://www.youtube.com/watch?v=VIDEO_ID"crv-out/frames/transcript.txtMANIFEST.txtcrv "https://youtu.be/VIDEO_ID" -o crv-out --grid --why "what the user wants to know"--grid--whycrv lecture.mp4 -o out --lang encrv clip.mp4 --no-transcribecrv "https://..." --cookies cookies.txt
crv "https://..." --cookies-from-browser chromecrv tutorial.mp4 --adaptivecrv "https://youtu.be/..." --why "pricing strategy" --kb ~/notescrv video.mp4 --viewer
# Opens viewer.html — video + keyframes + transcript, fully offline--grid--whycrv "<url-or-path>" -o crv-out --grid --why "<user's question>"--max-frames 60-o crv-out/<slug>--overwriteMANIFEST.txttranscript.jsoncrv-out/grids/crv-out/frames/*.jpgtranscript.json| Flag | Default | Description |
|---|---|---|
| — | Video URL or local file path |
| | Output directory |
| off | Replace a previous analysis living in the output directory (without this, a non-empty output dir is refused to avoid mixing videos) |
| | Scene-change sensitivity (0-1, lower = more frames) |
| | Guarantee at least one frame every N seconds |
| | Hard cap on total frames |
| off | Adaptive scene detection for slow-changing content |
| off | Force frames at subtitle-cue timestamps — needs a sidecar |
| | Whisper language ( |
| — | Netscape cookie file for login-gated sources |
| — | Read cookies from browser ( |
| off | Skip audio transcription |
| off | Write a local |
| | Whisper model size ( |
| | % of pixels that must change for a new frame (higher = fewer frames kept) |
| | Compare against last N kept frames (1 = consecutive-only) |
| off | Keep dropped frames + write |
| — | Viewing intent, e.g. |
| off | Tile frames into 3x3 contact sheets |
| — | Save as dated markdown note to knowledge-base folder |
| off | Save full soundtrack as |
from claude_real_video import process
result = process("https://youtu.be/...", "out", lang="en")
print(result.frame_count, result.transcript_path)crv-out/
├── MANIFEST.txt # Summary for the LLM
├── frames/ # Deduplicated keyframes
├── transcript.txt # Plain-text transcript
├── grids/ # 3x3 contact sheets (with --grid)
├── audio.m4a # Full soundtrack (with --keep-audio)
├── viewer.html # Local viewer (with --viewer)
├── report.html # Dedup report (with --report)
└── dropped/ # Dropped frames (with --report)--grid--why--max-frames 60--no-transcribe--keep-audio--adaptiveMANIFEST.txttranscript.json--overwrite--cookies