AI agent skill · by @dp-archive
Media Downloader
Download videos and audio from 1500+ websites including YouTube, Bilibili, TikTok, Twitter/X, Instagram, Vimeo, and more using yt-dlp. Use when the user wants to download videos, save media from social platforms, download with specific resolution (720p/1080p/4K), get subtitles, or download entire playlists. Triggers on requests like 'download this video', 'save this YouTube video', 'download in 1080p', 'download with subtitles', 'download this playlist'.
Archived 2026-10-23 · Source updated 2026-03-04 · License: Apache-2.0. Check the original repository for the latest version.
SKILL.md instructions
# Media Downloader
Download video/audio from 1500+ websites using yt-dlp. Supports format selection, subtitles, playlists, and custom output naming.
## Quick Start
```bash
# Basic download (best quality)
yt-dlp "URL"
# Specific resolution
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" "URL"
# With subtitles
yt-dlp --write-subs --sub-langs "en,zh" "URL"
# Audio only
yt-dlp -f "bestaudio" "URL"
```
## Format Selection
### Resolution Presets
| Request | Command |
|---------|---------|
| Best quality | `-f "bestvideo+bestaudio/best"` |
| 4K | `-f "bestvideo[height<=2160]+bestaudio/best"` |
| 1080p | `-f "bestvideo[height<=1080]+bestaudio/best"` |
| 720p | `-f "bestvideo[height<=720]+bestaudio/best"` |
| 480p | `-f "bestvideo[height<=480]+bestaudio/best"` |
### List Available Formats
```bash
yt-dlp -F "URL" # Show all formats with codes
```
### Advanced Format Selection
```bash
# Prefer MP4 container
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" "URL"
# Specific format code (from -F output)
yt-dlp -f 137+140 "URL"
# Merge to specific container
yt-dlp --merge-output-format mkv "URL"
```
## Subtitles
### Download Subtitles
```bash
# Manual subtitles (human-created)
yt-dlp --write-subs --sub-langs "en,zh,ja" "URL"
# Auto-generated subtitles
yt-dlp --write-auto-subs --sub-langs "en" "URL"
# Both manual and auto
yt-dlp --write-subs --write-auto-subs --sub-langs "en,zh" "URL"
# Embed subtitles in video (MP4/MKV/WebM)
yt-dlp --write-subs --embed-subs "URL"
```
### List Available Subtitles
```bash
yt-dlp --list-subs "URL"
```
### Subtitle Format
```bash
# Convert to SRT
yt-dlp --write-subs --sub-format srt "URL"
# Available: srt, ass, vtt, lrc
```
## Output Naming
### Template Variables
| Variable | Description | Example |
|----------|-------------|---------|
| `%(title)s` | Video title | My Video |
| `%(id)s` | Video ID | dQw4w9WgXcQ |
| `%(ext)s` | File extension | mp4 |
| `%(upload_date)s` | Upload date | 20231215 |
| `%(uploader)s` | Channel name | Rick Astley |
| `%(playlist)s` | Playlist name | Best Songs |
| `%(playlist_index)s` | Position in playlist | 01 |
| `%(resolution)s` | Video resolution | 1920x1080 |
### Common Patterns
```bash
# Default: title + extension
yt-dlp -o "%(title)s.%(ext)s" "URL"
# Date prefix
yt-dlp -o "%(upload_date)s - %(title)s.%(ext)s" "URL"
# Organized by uploader
yt-dlp -o "%(uploader)s/%(title)s.%(ext)s" "URL"
# Playlist with numbering
yt-dlp -o "%(playlist)s/%(playlist_index)02d - %(title)s.%(ext)s" "URL"
# Sanitize title (remove special chars)
yt-dlp -o "%(title).100B.%(ext)s" "URL" # Limit to 100 bytes
```
## Playlist Handling
```bash
# Download entire playlist
yt-dlp "PLAYLIST_URL"
# Only video (not playlist)
yt-dlp --no-playlist "URL"
# Specific items (1-indexed)
yt-dlp -I 1:5 "PLAYLIST_URL" # First 5
yt-dlp -I 1,3,5 "PLAYLIST_URL" # Items 1, 3, 5
yt-dlp -I -3: "PLAYLIST_URL" # Last 3
# Skip already downloaded
yt-dlp --download-archive downloaded.txt "PLAYLIST_URL"
```
## Platform-Specific Notes
### YouTube
- Supports: videos, playlists, channels, shorts, live streams
- Cookies may be needed for age-restricted/member content
### Bilibili
- Use `--cookies-from-browser` for premium content
- Subtitles: `--write-subs --sub-langs "zh-Hans"`
### TikTok / Douyin
- Direct URL download works
- Watermark may be present in some cases
### Twitter/X
- Supports video tweets and spaces
- Use `--cookies-from-browser` for private content
### Instagram
- Stories require login
- Use `--cookies-from-browser firefox` or `--cookies cookies.txt`
## Authentication
```bash
# Browser cookies (recommended)
yt-dlp --cookies-from-browser firefox "URL"
yt-dlp --cookies-from-browser chrome "URL"
# Cookie file
yt-dlp --cookies cookies.txt "URL"
# Username/password (limited support)
yt-dlp -u USERNAME -p PASSWORD "URL"
```
## Troubleshooting
### Common Issues
| Issue | Solution |
|-------|----------|
| "Video unavailable" | Try `--cookies-from-browser` |
| Slow download | Add `--concurrent-fragments 4` |
| Format merge fails | Install ffmpeg |
| Geo-blocked | Use `--geo-bypass` or proxy |
### Update yt-dlp
```bash
yt-dlp -U # Update to latest stable
```
## Complete Examples
**Download YouTube video in 1080p with Chinese subtitles:**
```bash
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best" \
--write-subs --sub-langs "zh" \
-o "%(title)s.%(ext)s" \
"https://youtube.com/watch?v=..."
```
**Download TikTok video:**
```bash
yt-dlp -o "%(uploader)s - %(title)s.%(ext)s" \
"https://tiktok.com/@user/video/..."
```
**Download Bilibili playlist:**
```bash
yt-dlp --cookies-from-browser chrome \
-o "%(playlist)s/%(playlist_index)02d - %(title)s.%(ext)s" \
"https://bilibili.com/video/BV..."
```
**Download Twitter video:**
```bash
yt-dlp --cookies-from-browser firefox \
"https://twitter.com/user/status/..."
```