
Youtube Downloader
- 82 installs
- 44 repo stars
- Updated July 8, 2026
- aviz85/claude-skills-library
youtube-downloader is a Claude skill that downloads YouTube videos with quality presets using yt-dlp and ffmpeg.
About
youtube-downloader downloads YouTube videos with quality presets using yt-dlp and ffmpeg through a bundled Python script. A developer uses it to fetch a video at a chosen resolution, list formats, or extract audio-only MP3, with presets tuned for sharing sizes such as WhatsApp's 16MB video limit. It requires Python 3.9+, yt-dlp, and ffmpeg.
- Downloads YouTube videos with quality presets via yt-dlp and ffmpeg
- Presets from 144p WhatsApp-sized to best available, plus audio-only MP3
- Optimized for sharing on WhatsApp and other platforms
Youtube Downloader by the numbers
- 82 all-time installs (skills.sh)
- Ranked #891 of 2,719 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
youtube-downloader capabilities & compatibility
Free; requires local Python, yt-dlp, and ffmpeg with no API keys.
- Capabilities
- translate video · whatsapp · transcribe
- Platforms
- Windows · macOS · Linux
- Pricing
- Free
What youtube-downloader says it does
Download YouTube videos with quality control, optimized for sharing on WhatsApp and other platforms.
**This skill requires Python to be installed on your system.**
**16MB**: Direct video sharing limit
npx skills add https://github.com/aviz85/claude-skills-library --skill youtube-downloaderAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 82 |
|---|---|
| repo stars | ★ 44 |
| Last updated | July 8, 2026 |
| Repository | aviz85/claude-skills-library ↗ |
What it does
Download a YouTube video or its audio at a chosen quality preset, optimized for sharing sizes.
Who is it for?
Downloading a YouTube video at a target quality or extracting audio-only MP3, sized for sharing.
Skip if: Downloading from platforms other than YouTube.
When should I use this skill?
User asks to download youtube, do a yt download, get a video download, youtube to whatsapp, or youtube mp3.
What you get
A downloaded video file at the chosen quality, or an audio-only MP3.
- Downloaded video file
- Optional audio-only MP3
By the numbers
- Four quality presets (whatsapp/standard/high/best)
- WhatsApp direct video limit 16MB
Files
YouTube Video Downloader
First time? Ifsetup_complete: falseabove, run./SETUP.mdfirst, then setsetup_complete: true.
Download YouTube videos with quality control, optimized for sharing on WhatsApp and other platforms.
Requirements
This skill requires Python to be installed on your system.
- Python 3.9+ (required)
- yt-dlp (
pip install yt-dlp) - ffmpeg (for audio extraction)
First time setup? Read SETUP.md for detailed installation instructions for Windows, macOS, and Linux.
Quick Start
cd ~/.claude/skills/youtube-downloader/scripts
# Download for WhatsApp (144p, small file)
python download.py "https://www.youtube.com/watch?v=VIDEO_ID" --quality whatsapp
# Download standard quality (480p)
python download.py "https://www.youtube.com/watch?v=VIDEO_ID" --quality standard
# Download high quality (720p)
python download.py "https://www.youtube.com/watch?v=VIDEO_ID" --quality high
# Download best quality available
python download.py "https://www.youtube.com/watch?v=VIDEO_ID" --quality best
# List available formats
python download.py "https://www.youtube.com/watch?v=VIDEO_ID" --listQuality Presets
| Preset | Resolution | Max Size | Use Case |
|---|---|---|---|
whatsapp | 144p | ~10MB | WhatsApp sharing (default) |
standard | 480p | ~50MB | General use |
high | 720p | ~100MB | Good quality |
best | Best available | Varies | Maximum quality |
Options
| Option | Description |
|---|---|
--quality / -q | Quality preset (whatsapp/standard/high/best) |
--output / -o | Output directory (default: current dir) |
--list / -l | List available formats without downloading |
--audio-only / -a | Extract audio only (MP3) |
Examples
# Download and send to WhatsApp
python download.py "https://youtube.com/watch?v=xxx" -q whatsapp
# Then use WhatsApp skill to send
# Download to specific folder
python download.py "https://youtube.com/watch?v=xxx" -o ~/Downloads
# Audio only (for podcasts/music)
python download.py "https://youtube.com/watch?v=xxx" --audio-onlyWhatsApp Size Limits
- 16MB: Direct video sharing limit
- 2GB: Document sharing limit (preserves quality)
For videos over 16MB, either: 1. Use lower quality preset 2. Send as document (not video)
#!/usr/bin/env python3
"""
YouTube video downloader with quality presets.
Optimized for WhatsApp and other sharing platforms.
"""
import yt_dlp
import argparse
import os
import re
import sys
# Quality presets
QUALITY_PRESETS = {
'whatsapp': {
'format': 'best[height<=144][ext=mp4]/best[height<=240][ext=mp4]/worst[ext=mp4]/worst',
'description': '144p - Small file for WhatsApp (~10MB)',
},
'standard': {
'format': 'best[height<=480][ext=mp4]/best[height<=480]/bestvideo[height<=480]+bestaudio/best',
'description': '480p - Standard quality (~50MB)',
},
'high': {
'format': 'best[height<=720][ext=mp4]/best[height<=720]/bestvideo[height<=720]+bestaudio/best',
'description': '720p - High quality (~100MB)',
},
'best': {
'format': 'bestvideo+bestaudio/best',
'description': 'Best available quality',
},
}
def sanitize_filename(filename):
"""Remove special characters from filename."""
# Replace problematic characters with hyphens
sanitized = re.sub(r"['\"\\/:<>|*?]", "", filename)
sanitized = re.sub(r"\s+", "-", sanitized)
sanitized = re.sub(r"-+", "-", sanitized)
return sanitized.strip("-")
def list_formats(url):
"""List all available formats for the video."""
print(f"\n📋 Available formats for: {url}\n")
opts = {'listformats': True}
with yt_dlp.YoutubeDL(opts) as ydl:
ydl.download([url])
def download_video(url, quality='whatsapp', output_dir=None, audio_only=False):
"""Download video with specified quality preset."""
if output_dir is None:
output_dir = os.getcwd()
preset = QUALITY_PRESETS.get(quality, QUALITY_PRESETS['whatsapp'])
print(f"\n🎬 Downloading video...")
print(f"URL: {url}")
print(f"Quality: {quality} ({preset['description']})")
print(f"Output: {output_dir}\n")
# Base options
ydl_opts = {
'outtmpl': os.path.join(output_dir, '%(title)s.%(ext)s'),
'restrictfilenames': True, # Sanitize filenames
'windowsfilenames': True, # Extra safety
'quiet': False,
'no_warnings': False,
}
if audio_only:
# Audio extraction settings
ydl_opts['format'] = 'bestaudio/best'
ydl_opts['postprocessors'] = [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}]
print("🎵 Extracting audio only (MP3)\n")
else:
# Video settings
ydl_opts['format'] = preset['format']
ydl_opts['merge_output_format'] = 'mp4'
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
# Get info first
info = ydl.extract_info(url, download=False)
title = info.get('title', 'Unknown')
duration = info.get('duration', 0)
print(f"Title: {title}")
print(f"Duration: {duration // 60}:{duration % 60:02d}")
print(f"Format: {info.get('format', 'Unknown')}")
print()
# Download
ydl.download([url])
# Find the downloaded file
ext = 'mp3' if audio_only else 'mp4'
safe_title = sanitize_filename(title)
possible_files = [
os.path.join(output_dir, f"{safe_title}.{ext}"),
os.path.join(output_dir, f"{title}.{ext}"),
]
downloaded_file = None
for f in possible_files:
if os.path.exists(f):
downloaded_file = f
break
# Also check for any recent mp4/mp3 file
if not downloaded_file:
for f in os.listdir(output_dir):
if f.endswith(f'.{ext}'):
full_path = os.path.join(output_dir, f)
if os.path.getmtime(full_path) > os.path.getmtime(__file__) - 60:
downloaded_file = full_path
break
if downloaded_file and os.path.exists(downloaded_file):
size_mb = os.path.getsize(downloaded_file) / (1024 * 1024)
print(f"\n✅ Download complete!")
print(f"📁 File: {downloaded_file}")
print(f"📊 Size: {size_mb:.1f} MB")
# WhatsApp compatibility check
if size_mb <= 16:
print("✅ WhatsApp compatible (under 16MB)")
elif size_mb <= 100:
print("⚠️ Too large for WhatsApp video. Send as document instead.")
else:
print("❌ Very large file. Consider lower quality for sharing.")
return downloaded_file
else:
print("\n✅ Download complete!")
print(f"📁 Check output directory: {output_dir}")
except Exception as e:
print(f"\n❌ Error: {e}")
sys.exit(1)
def main():
parser = argparse.ArgumentParser(
description='Download YouTube videos with quality presets',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Quality Presets:
whatsapp 144p - Small file for WhatsApp (~10MB)
standard 480p - Standard quality (~50MB)
high 720p - High quality (~100MB)
best Best available quality
Examples:
%(prog)s "https://youtube.com/watch?v=xxx" -q whatsapp
%(prog)s "https://youtube.com/watch?v=xxx" -q high -o ~/Downloads
%(prog)s "https://youtube.com/watch?v=xxx" --audio-only
"""
)
parser.add_argument('url', help='YouTube video URL')
parser.add_argument('-q', '--quality',
choices=['whatsapp', 'standard', 'high', 'best'],
default='whatsapp',
help='Quality preset (default: whatsapp)')
parser.add_argument('-o', '--output',
help='Output directory (default: current directory)')
parser.add_argument('-l', '--list',
action='store_true',
help='List available formats')
parser.add_argument('-a', '--audio-only',
action='store_true',
help='Extract audio only (MP3)')
args = parser.parse_args()
if args.list:
list_formats(args.url)
else:
download_video(args.url, args.quality, args.output, args.audio_only)
if __name__ == '__main__':
main()
YouTube Downloader - Setup Guide
This guide will help you install all requirements for the YouTube Downloader skill.
Prerequisites
1. Python 3.9+ - Programming language 2. yt-dlp - YouTube download library 3. ffmpeg - Media converter (for audio extraction)
---
Step 1: Install Python
macOS
Option A: Using Homebrew (Recommended)
# Install Homebrew if not installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Python
brew install pythonOption B: Download from python.org 1. Go to https://www.python.org/downloads/macos/ 2. Download the latest Python 3.x installer 3. Run the .pkg file and follow instructions 4. Check "Add Python to PATH" during installation
Windows
Option A: Microsoft Store (Easiest) 1. Open Microsoft Store 2. Search for "Python 3.12" (or latest) 3. Click "Get" to install
Option B: Download from python.org 1. Go to https://www.python.org/downloads/windows/ 2. Download "Windows installer (64-bit)" 3. Run the installer 4. IMPORTANT: Check "Add Python to PATH" at the bottom! 5. Click "Install Now"
Option C: Using winget
winget install Python.Python.3.12Linux (Ubuntu/Debian)
sudo apt update
sudo apt install python3 python3-pipLinux (Fedora/RHEL)
sudo dnf install python3 python3-pipLinux (Arch)
sudo pacman -S python python-pip---
Step 2: Verify Python Installation
Open a new terminal/command prompt and run:
python3 --version
# or on Windows:
python --versionYou should see something like Python 3.12.x
---
Step 3: Install yt-dlp
pip install yt-dlp
# or
pip3 install yt-dlpIf you get permission errors, try:
pip install --user yt-dlp---
Step 4: Install ffmpeg
macOS
brew install ffmpegWindows
Option A: Using winget
winget install FFmpegOption B: Using Chocolatey
choco install ffmpegOption C: Manual Download 1. Go to https://ffmpeg.org/download.html 2. Click "Windows" -> "Windows builds from gyan.dev" 3. Download "ffmpeg-release-essentials.zip" 4. Extract to C:\ffmpeg 5. Add C:\ffmpeg\bin to your PATH:
- Search "Environment Variables" in Windows
- Edit "Path" under System variables
- Add
C:\ffmpeg\bin - Restart terminal
Linux (Ubuntu/Debian)
sudo apt install ffmpegLinux (Fedora)
sudo dnf install ffmpeg---
Step 5: Verify Everything Works
# Check Python
python3 --version
# Check yt-dlp
yt-dlp --version
# Check ffmpeg
ffmpeg -versionAll three commands should work without errors.
---
Troubleshooting
"python3 not found" (Windows)
- Use
pythoninstead ofpython3 - Or reinstall Python and check "Add to PATH"
"pip not found"
python3 -m pip install yt-dlp"Permission denied" errors
pip install --user yt-dlpffmpeg not in PATH (Windows)
- Make sure you added the bin folder to PATH
- Restart your terminal after adding to PATH
yt-dlp download fails
# Update yt-dlp to latest version
pip install -U yt-dlp---
Quick Test
After installation, test with:
cd ~/.claude/skills/youtube-downloader/scripts
python download.py "https://www.youtube.com/watch?v=dQw4w9WgXcQ" --listThis should list available formats without downloading.
Related skills
FAQ
What quality presets does youtube-downloader offer?
whatsapp (144p ~10MB), standard (480p ~50MB), high (720p ~100MB), and best (best available).
What does it require?
Python 3.9+, yt-dlp, and ffmpeg for audio extraction.