🇨🇳 中文 • 🇯🇵 日本語 • 🇰🇷 한국어 • 🇪🇸 Español • 🇩🇪 Deutsch • 🇫🇷 Français • 🇧🇷 Português • 🇷🇺 Русский • 🇸🇦 العربية • 🇮🇹 Italiano • 🇳🇱 Nederlands • 🇹🇷 Türkçe • 🇻🇳 Tiếng Việt • 🇮🇳 हिन्दी
An agent skill that gives any coding agent the ability to watch and understand video. Works with Claude Code, Codex, and any MCP-compatible agent.
Quick Start • How It Works • MCP Tools • Transcription • Configuration • Troubleshooting • License
Popcorn enables AI agents to watch and understand long-form videos by extracting transcripts, detecting scene changes, and returning key frames. Everything runs locally—no external APIs, no fees, complete privacy.
# Install FFmpeg (required)
brew install ffmpeg # macOS
sudo apt install ffmpeg # Ubuntu/Debian
# Install Popcorn
git clone https://github.com/anthropics/popcorn.git
cd popcorn && npm install && npm run build
# Optional: Install a transcription backend
pip install mlx-whisper # Apple Silicon (fastest)
pip install openai-whisper # Any platformAdd to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"popcorn": {
"command": "node",
"args": ["/path/to/popcorn/dist/index.js"]
}
}
}Key Features:
- Scene Detection — Captures frames at visual transitions, not fixed intervals
- Local Transcription — 4 backend options (mlx-whisper, faster-whisper, whisper-cpp, whisper)
- Inline Images — Returns key frames directly in MCP responses
- Smart Presets — Auto-configures for screencasts, presentations, movies, interviews
- Zero Config — Just pass a video path and it works
- Privacy First — Everything runs locally, no data leaves your machine
- Quick Start — Installation & setup
- Tutorial — Step-by-step usage guide
- MCP Tools — Available tools reference
- Transcription Backends — Choose the best backend for your system
- Video Types & Objectives — Presets for different content
- Configuration — Advanced parameters
- Troubleshooting — Common issues & solutions
- Agent Skill — Instructions for AI agents
- API Reference — Tool schemas & responses
Core Components:
- FFprobe — Extracts video metadata (duration, resolution, codecs)
- FFmpeg Scene Detection — Finds visual transitions using
select='gt(scene,N)'filter - Parallel Frame Extraction — Captures JPEGs at scene change timestamps
- Multi-Backend Transcription — Whisper variants convert audio to timestamped text
- Analysis Bundle — Results saved to
.popcorn/directory - MCP Response — Returns metadata + inline base64 images
Video File ──▶ FFprobe ──▶ FFmpeg ──▶ Whisper ──▶ Analysis Bundle
│ │ │ │
▼ ▼ ▼ ▼
metadata frames transcript MCP Response
| Tool | Description |
|---|---|
popcorn_analyze |
Main analysis — extracts frames, transcribes audio, returns results |
popcorn_suggest |
Probe video metadata and get recommended settings |
popcorn_presets |
List available video types and objectives |
popcorn_backends |
Detect your system and show transcription options |
popcorn_read |
Read transcript slices with time filtering |
{
"tool": "popcorn_analyze",
"arguments": {
"path": "/path/to/video.mp4"
}
}{
"tool": "popcorn_analyze",
"arguments": {
"path": "/path/to/video.mp4",
"videoType": "screencast",
"objective": "detailed"
}
}| Type | Best For | Scene Detection |
|---|---|---|
screencast |
Tutorials, coding sessions, UI demos | Low threshold |
presentation |
Slides, lectures, keynotes | Slide transitions |
movie |
Films, TV shows | Balanced |
interview |
Podcasts, talking heads | Transcription priority |
surveillance |
Security footage, dashcam | High threshold |
sports |
Live events, fast action | High frame rate |
| Objective | Use When |
|---|---|
summary |
Quick overview needed |
detailed |
Don't miss anything |
find_moment |
Searching for specific content |
transcribe |
Audio/speech is most important |
visual_only |
Only care about visuals |
quick_scan |
Fast preview needed |
Popcorn auto-detects your system and recommends the best backend.
| Backend | Speed | Best For | Install |
|---|---|---|---|
| mlx-whisper | Fastest | Apple Silicon (M1/M2/M3/M4) | pip install mlx-whisper |
| faster-whisper | Fast | NVIDIA GPUs | pip install faster-whisper |
| whisper-cpp | Moderate | Cross-platform | brew install whisper-cpp |
| whisper | Slow | Most compatible | pip install openai-whisper |
| Backend | Time |
|---|---|
| mlx-whisper | 3-8 min |
| faster-whisper | 5-10 min |
| whisper-cpp | 10-20 min |
| whisper | 30-60 min |
{
"tool": "popcorn_analyze",
"arguments": {
"path": "/path/to/video.mp4",
"backend": "mlx-whisper"
}
}| Parameter | Type | Description |
|---|---|---|
path |
string | Required. Absolute path to video file |
videoType |
string | Video type preset |
objective |
string | Analysis objective preset |
transcribe |
boolean | Enable/disable transcription |
backend |
string | Transcription backend |
model |
string | Whisper model (tiny, base, small, medium, large) |
language |
string | Language code (e.g., en, es, fr) |
frameMode |
string | scene or interval |
sceneThreshold |
number | Scene sensitivity (0-1) |
maxFrames |
number | Maximum frames to extract |
inlineFrames |
number | Frames to return as base64 |
.popcorn/<video>_<timestamp>/
├── analysis.json # Full metadata
├── transcript.txt # Plain text
├── transcript.json # Timestamped segments
├── transcript.chunks.json # LLM-friendly chunks
└── assets/
├── audio.wav
└── frames/
├── scene_000001.jpg
└── ...
brew install ffmpeg # macOS
sudo apt install ffmpeg # Ubuntu/Debianpip install mlx-whisper # Apple Silicon
pip install openai-whisper # Any platform{ "sceneThreshold": 0.15, "minSceneInterval": 2 }{ "sceneThreshold": 0.5, "minSceneInterval": 10 }See Troubleshooting Guide for more solutions.
npm install # Install dependencies
npm run build # Build
npm run dev # Development mode
npm start # Run serverpopcorn/
├── src/
│ ├── index.ts # MCP server
│ ├── analyze.ts # Analysis pipeline
│ ├── ffmpeg.ts # Video processing
│ ├── transcribe.ts # Multi-backend transcription
│ ├── presets.ts # Video type presets
│ └── commands.ts # Shell execution
├── docs/ # Documentation
└── skills/ # Agent skills
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing) - Open a Pull Request
MIT License — see LICENSE for details.
- OpenAI Whisper — Speech recognition
- whisper.cpp — C++ port
- MLX Whisper — Apple Silicon
- faster-whisper — CTranslate2
- FFmpeg — Video processing
- Model Context Protocol — MCP spec
Made with 🍿 for AI agents everywhere