# 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'. Use when this capability is needed.

- Skill: `tomevault-io/media-downloader` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/media-downloader`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/media-downloader/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/media-downloader

---


# 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/..."
```

---
> Source: [MemTensor/skills-vote](https://github.com/MemTensor/skills-vote) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-20 -->

