VidSnatch
YouTube toolkit for humans and AI agents β CLI, web UI, and MCP server. Search, download, trim clips, stitch compilations, and extract transcripts. Works natively with Claude, Cursor, and GitHub Copilot.
Ask AI about VidSnatch
Powered by Claude Β· Grounded in docs
I know everything about VidSnatch. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
VidSnatch π
The future of YouTube video downloading - Web App, CLI & MCP Server
VidSnatch is a futuristic YouTube video downloader with a sleek web interface, a full-featured CLI, and a Model Context Protocol (MCP) server for AI assistants and programmatic access. Built for the next generation with a stunning UI that appeals to Gen Z and Gen Alpha users.
Install
Recommended β pipx (installs CLI tools globally, no venv needed)
pipx install vidsnatch
Don't have pipx? Install it first:
brew install pipx # macOS
pipx ensurepath
Alternative β pip (inside a virtual environment)
pip install vidsnatch
Upgrade
pipx upgrade vidsnatch # if installed via pipx
pip install --upgrade vidsnatch # if installed via pip
Global commands installed
After installation, these four commands are available anywhere in your terminal:
| Command | Description |
|---|---|
vidsnatch | Main CLI β search, download, trim, list |
vidsnatch-web | Start the web UI on http://localhost:8080 |
vidsnatch-mcp | Start the MCP stdio server (for AI assistants) |
vidsnatch-mcp-http | Start the MCP HTTP server on port 8090 |
Prerequisites
- Python 3.10+
ffmpegβ required for high-quality video downloads and trimming
brew install ffmpeg # macOS
Features
- π YouTube Search: Search YouTube by keyword and browse results before downloading
- π Futuristic Web Interface: Beautiful glassmorphism UI with aurora background
- π± Mobile-First Design: Responsive design that works on all devices
- π₯ High-Quality Downloads: Support for up to 4K video downloads with automatic audio merging
- π΅ Audio Extraction: Download audio-only files as MP3, M4A, or WAV
- π Transcript Download: Extract video transcripts with timestamps
- βοΈ Video Trimming: Download specific segments of videos with precise timestamp control
- π¬ Stitch clips: Join multiple downloaded clips into a single compilation video
- β‘ Real-Time Processing: Live video info fetching and download progress
- π» Full-Featured CLI: Subcommand-based CLI (
vidsnatch info/download/trim/list) for automation, scripting, and LLM skill usage - π€ MCP Server: Model Context Protocol server (stdio & HTTP) for AI assistants and programmatic access
- π§ LLM Skill Integration: Ships with a skill file for Claude Code, Cursor, and GitHub Copilot β install with
vidsnatch install --skills - π Modern Tech Stack: Built with UV, FastAPI, Click, and Tailwind CSS
Local Development Setup
Clone the repo and install dependencies with UV:
git clone https://github.com/sahajamit/VidSnatch.git
cd VidSnatch
curl -LsSf https://astral.sh/uv/install.sh | sh # install UV if needed
uv sync
Releasing a New Version
Use the /release slash command inside Claude Code to bump the version, commit, tag, and push in one step (triggers the GitHub Action that publishes to PyPI):
/release # patch bump: 0.1.3 β 0.1.4
/release minor # minor bump: 0.1.3 β 0.2.0
/release major # major bump: 0.1.3 β 1.0.0
/release 0.2.5 # explicit version
The command updates pyproject.toml, asks for confirmation, then runs git commit β git push origin main β git tag β git push origin <tag>.
Testing
To run the test suite:
# Run all tests
uv run python -m pytest tests/ -v
# Run specific test file
uv run python -m pytest tests/test_transcript.py -v
Usage
π³ Running with Docker
You can run VidSnatch using the pre-built Docker image from Docker Hub.
-
Pull the Docker image:
docker pull sahajamit/vidsnatch:0.3 -
Run the Docker container:
docker run -p 8080:8080 sahajamit/vidsnatch:0.3 -
Open your browser: Navigate to
http://localhost:8080
π Web Interface (Recommended)
VidSnatch features a stunning futuristic web interface that's perfect for everyday use:

Launch the Web App
-
Start the server:
vidsnatch serve webOr alternatively:
uv run python web_app.py -
Open your browser: Navigate to
http://localhost:8080 -
Start downloading:
- Paste any YouTube URL into the input field and click "Snatch", or
- Toggle to "Search YouTube" to find videos by keyword, then click a result
- Select your desired video quality or transcript language
- Click "Download Video", "Download MP3", or "Download Transcript"
βοΈ Video Trimming Feature
VidSnatch now supports precise video trimming to download specific segments:
- Load a video: Paste a YouTube URL and click "Snatch Video Info"
- Navigate to Trim Video section: Scroll down to the "βοΈ Trim Video" panel
- Select time range using sliders:
- Start Time Slider: Drag to set the beginning of your segment
- End Time Slider: Drag to set the end of your segment
- Visual Timeline: See your selection highlighted on the progress bar
- Time Display: View exact start/end times and segment duration
- Choose quality: Select video quality for the trimmed segment
- Download: Click "Download Trimmed Video" to get your custom segment
Features:
- Precise Control: Frame-accurate trimming with visual feedback
- Real-time Preview: See exact timestamps and duration as you adjust
- Quality Selection: Choose from available video qualities
- Smart Validation: Prevents invalid time ranges automatically
The web interface features:
- Real-time video info fetching
- Quality selection with visual feedback
- Video trimming with interactive sliders
- Transcript download with timestamps
- Fancy loading animations
- Automatic file downloads
- Mobile-responsive design
π» As a Python module
from youtube_downloader import YouTubeDownloader
# Create downloader instance
downloader = YouTubeDownloader()
# Download video
downloader.download_video("https://www.youtube.com/watch?v=VIDEO_ID", output_path="./downloads")
# Download audio only
downloader.download_audio("https://www.youtube.com/watch?v=VIDEO_ID", output_path="./downloads")
# Download transcript with timestamps
downloader.download_transcript("https://www.youtube.com/watch?v=VIDEO_ID", output_path="./downloads")
# Download a trimmed video segment (start_time and end_time in seconds)
downloader.download_video_segment("https://www.youtube.com/watch?v=VIDEO_ID",
start_time=30, end_time=120,
output_path="./downloads", quality="720p")
β‘ Command Line Interface
VidSnatch provides a full-featured CLI covering all download operations. Install with pip install vidsnatch (or uv sync for local development), then use the vidsnatch command directly.
Command Overview
vidsnatch search "query" [--sort relevance|date|views] # search YouTube videos
vidsnatch info <url> # video metadata, formats, duration
vidsnatch download video <url> [--quality LEVEL] # download video file
vidsnatch download audio <url> [--format mp3|m4a|wav] # extract audio
vidsnatch download transcript <url> [--language LANG] # get timestamped transcript
vidsnatch trim <url> --start HH:MM:SS --end HH:MM:SS # download a clip
vidsnatch stitch <file1> <file2> [<file3>...] # join clips into one video
vidsnatch list [--output DIR] # list downloaded files
vidsnatch serve web [--port PORT] # start the web app
vidsnatch serve mcp # start MCP stdio server
vidsnatch serve mcp-http [--port PORT] # start MCP HTTP server
vidsnatch install --skills # install LLM skill files
vidsnatch uninstall --skills # remove LLM skill files
Global options available on all commands:
--output DIRβ save to a specific directory (overrides config default)--jsonβ output structured JSON instead of human-readable text--helpβ show command help
Examples
Search YouTube:
vidsnatch search "python tutorial"
vidsnatch search "lo-fi music" --sort views
vidsnatch search "react hooks" --sort date --json
Search then download:
# Step 1: search for videos
vidsnatch search "python tutorial" --sort views
# Step 2: pick a result URL and download
vidsnatch download video "https://youtube.com/watch?v=RESULT_ID" --quality high
Inspect a video before downloading:
vidsnatch info "https://www.youtube.com/watch?v=VIDEO_ID"
Download video:
# Highest quality (default)
vidsnatch download video "https://www.youtube.com/watch?v=VIDEO_ID"
# Specific quality level, custom output directory
vidsnatch download video "https://www.youtube.com/watch?v=VIDEO_ID" --quality high --output ./my_videos
Download audio only:
# MP3 (default format)
vidsnatch download audio "https://www.youtube.com/watch?v=VIDEO_ID"
# Specific format
vidsnatch download audio "https://www.youtube.com/watch?v=VIDEO_ID" --format m4a
Download transcript:
vidsnatch download transcript "https://www.youtube.com/watch?v=VIDEO_ID"
# Different language
vidsnatch download transcript "https://www.youtube.com/watch?v=VIDEO_ID" --language es
Trim a specific segment:
vidsnatch trim "https://www.youtube.com/watch?v=VIDEO_ID" --start 00:01:30 --end 00:03:00
Stitch clips together:
# Join two trimmed clips into one video
vidsnatch stitch ./downloads/clip1.mp4 ./downloads/clip2.mp4
# Stitch three clips with a custom output filename
vidsnatch stitch clip1.mp4 clip2.mp4 clip3.mp4 --filename my_compilation.mp4
# Save to a specific output directory
vidsnatch stitch clip1.mp4 clip2.mp4 --output ./final/
# JSON output for scripting
vidsnatch stitch clip1.mp4 clip2.mp4 --json
AI-powered topic compilation:
# 1. Search for videos on a topic
vidsnatch search "Python async programming" --json
# 2. Get transcripts to find relevant timestamps
vidsnatch download transcript <url1> --json
vidsnatch download transcript <url2> --json
# 3. Download the relevant segments
vidsnatch trim <url1> --start 00:02:10 --end 00:03:45
vidsnatch trim <url2> --start 00:05:00 --end 00:07:20
# 4. Stitch the clips into a compilation
vidsnatch stitch ./downloads/clip1.mp4 ./downloads/clip2.mp4
List downloaded files:
vidsnatch list
vidsnatch list --output ~/Videos --json
Quality levels: highest (default), high, medium, low
Audio formats: mp3 (default), m4a, wav
JSON output
Add --json to any command for machine-readable output, useful for scripting:
vidsnatch info "https://www.youtube.com/watch?v=VIDEO_ID" --json
vidsnatch download video "https://www.youtube.com/watch?v=VIDEO_ID" --json
LLM Skill Integration
VidSnatch ships with a skill file that teaches AI coding assistants (Claude Code, Cursor, GitHub Copilot) how to use the CLI. Install it with:
vidsnatch install --skills
# Remove skill files from all directories
vidsnatch uninstall --skills
This copies SKILL.md into the appropriate directory for each detected tool:
- Claude Code β
~/.claude/skills/vidsnatch/SKILL.md - OpenClaw β
~/.openclaw/workspace/skills/vidsnatch/SKILL.md - Copilot β
~/.copilot/skills/vidsnatch/SKILL.md - Cursor β
~/.cursor/rules/vidsnatch.md - GitHub Copilot β
.github/copilot-instructions.md(appended in current repo)
Building and Publishing Docker Images
To build and push multi-platform Docker images:
-
Create or use a buildx builder:
# Option 1: Create new builder (remove existing if needed) docker buildx rm multiplatform 2>/dev/null || true docker buildx create --name multiplatform --use # Option 2: Use existing builder docker buildx use multiplatform # Option 3: Use default builder docker buildx use default -
Build and push for multiple platforms:
docker buildx build --platform linux/amd64,linux/arm64 -t sahajamit/vidsnatch:latest -t sahajamit/vidsnatch:0.3 --push . -
Build for linux/amd64 only (cloud platform compatible):
docker buildx build --platform linux/amd64 -t sahajamit/vidsnatch:latest -t sahajamit/vidsnatch:0.3 --push . -
Clean up Docker system (optional):
docker system prune -a
π€ Model Context Protocol (MCP) Server
VidSnatch can also run as an MCP server, allowing AI assistants and other MCP clients to download YouTube videos and audio programmatically.
MCP Features
The MCP server exposes the following tools:
- search_videos: Search YouTube for videos by keyword
- get_video_info: Get detailed information about a YouTube video
- download_video: Download video with specified quality/resolution
- download_audio: Download audio in various formats and qualities
- download_transcript: Download video transcripts in different languages
- download_video_segment: Download specific time segments from videos
- stitch_videos: Join multiple local clips into a single compilation video
- list_downloads: List all downloaded files
- get_config: View current server configuration
Starting the MCP Server
VidSnatch supports both stdio and HTTP transports for maximum flexibility:
stdio Transport (Local)
# Start stdio MCP server via the unified CLI
vidsnatch serve mcp
# Or using the legacy script
vidsnatch-mcp
HTTP Transport (Local & Remote)
# Start HTTP MCP server via the unified CLI
vidsnatch serve mcp-http
# With a custom port
vidsnatch serve mcp-http --port 9090
# Or using the legacy script
vidsnatch-mcp-http
The HTTP server provides:
- Remote accessibility - Run on one machine, access from another
- SSE streaming - Real-time progress updates for downloads
- Web compatibility - CORS support for browser-based clients
- Multiple clients - Handle concurrent connections
Default HTTP endpoint: http://localhost:8090/mcp
MCP Configuration
The MCP server can be configured in two ways:
1. Configuration File (mcp_config.json)
{
"download_directory": "./downloads",
"default_video_quality": "highest",
"default_audio_quality": "highest",
"max_file_size_mb": 500,
"allowed_formats": ["mp4", "webm", "mp3", "m4a"],
"create_subdirs": true
}
2. Environment Variables (Override config file)
VIDSNATCH_DOWNLOAD_DIR- Custom download directoryVIDSNATCH_VIDEO_QUALITY- Default video quality (e.g., "1080p", "720p", "highest")VIDSNATCH_AUDIO_QUALITY- Default audio quality (e.g., "highest", "128kbps")VIDSNATCH_MAX_FILE_SIZE_MB- Maximum file size in MB
Environment variables take precedence over the config file, allowing client-level customization.
MCP Client Integration
Claude Desktop Configuration
To use VidSnatch with Claude Desktop, add this to your Claude Desktop configuration file:
Location of config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Recommended Configuration (after pip install vidsnatch):
{
"mcpServers": {
"vidsnatch": {
"command": "vidsnatch",
"args": ["serve", "mcp"]
}
}
}
Alternative with UV (for development):
{
"mcpServers": {
"vidsnatch": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--directory",
"/path/to/VidSnatch",
"vidsnatch",
"serve",
"mcp"
],
"cwd": "/path/to/VidSnatch"
}
}
}
With custom download directory and settings:
{
"mcpServers": {
"vidsnatch": {
"command": "vidsnatch",
"args": ["serve", "mcp"],
"env": {
"VIDSNATCH_DOWNLOAD_DIR": "/Users/you/Downloads/VidSnatch",
"VIDSNATCH_VIDEO_QUALITY": "1080p",
"VIDSNATCH_AUDIO_QUALITY": "highest"
}
}
}
}
Other MCP Clients
For other MCP clients, use the general configuration format:
{
"mcpServers": {
"vidsnatch": {
"command": "vidsnatch",
"args": ["serve", "mcp"]
}
}
}
MCP Tool Examples
Download Video:
# Download highest quality video
result = download_video("https://youtube.com/watch?v=VIDEO_ID")
# Download specific resolution
result = download_video("https://youtube.com/watch?v=VIDEO_ID", resolution="720p")
Download Audio:
# Download highest quality audio as MP3
result = download_audio("https://youtube.com/watch?v=VIDEO_ID")
# Download specific quality
result = download_audio("https://youtube.com/watch?v=VIDEO_ID", quality="128kbps")
Download Video Segment:
# Download 30-second clip from 1:00 to 1:30
result = download_video_segment(
"https://youtube.com/watch?v=VIDEO_ID",
start_time=60,
end_time=90
)
Multiple Running Modes
The vidsnatch CLI is the universal entry point for all three channels:
- CLI Mode:
vidsnatch <command>β download, search, trim, and more from the terminal - Web App Mode:
vidsnatch serve webβ interactive web interface on port 8080 - MCP Server Mode (stdio):
vidsnatch serve mcpβ for AI assistants (local) - MCP Server Mode (HTTP):
vidsnatch serve mcp-httpβ for remote AI assistants and web clients
All modes can run independently without interference. Legacy scripts (vidsnatch-web, vidsnatch-mcp, vidsnatch-mcp-http) are still available for backward compatibility.
π For detailed HTTP transport documentation, see MCP_HTTP_README.md
Requirements
- Python 3.10+ (3.8+ for web app only)
- pytubefix library
- youtube-transcript-api library
- mcp library (for MCP server functionality)
- UV package manager
- ffmpeg (for audio conversion and video merging)
License
MIT License
