Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Download YouTube videos with customizable quality and format options. Use this skill when the user asks to download, save, or grab YouTube videos. Supports various quality settings (best, 1080p, 720p, 480p, 360p), multiple formats (mp4, webm, mkv), and audio-only downloads as MP3.
.claude/skills/davepoon-video-downloader/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 26% | 0% |
Download YouTube videos with full control over quality and format settings.
The simplest way to download a video:
bashpython scripts/download_video.py "https://www.youtube.com/watch?v=VIDEO_ID"
This downloads the video in best available quality as MP4 to /mnt/user-data/outputs/.
Use -q or --quality to specify video quality:
best (default): Highest quality available1080p: Full HD720p: HD480p: Standard definition360p: Lower qualityworst: Lowest quality availableExample:
bashpython scripts/download_video.py "URL" -q 720p
Use -f or --format to specify output format (video downloads only):
mp4 (default): Most compatiblewebm: Modern formatmkv: Matroska containerExample:
bashpython scripts/download_video.py "URL" -f webm
Use -a or --audio-only to download only audio as MP3:
bashpython scripts/download_video.py "URL" -a
Use -o or --output to specify a different output directory:
bashpython scripts/download_video.py "URL" -o /path/to/directory
bashpython scripts/download_video.py "https://www.youtube.com/watch?v=dQw4w9WgXcQ" -q 1080p
bashpython scripts/download_video.py "https://www.youtube.com/watch?v=dQw4w9WgXcQ" -a
bashpython scripts/download_video.py "https://www.youtube.com/watch?v=dQw4w9WgXcQ" -q 720p -f webm -o /custom/path
http:// links are rejected.youtube.com (and subdomains such as www, m, music), youtu.be, and youtube-nocookie.com (including www). Other sites are rejected.The script does not install packages into your system Python (no --break-system-packages).
yt-dlp is on your PATH, it is used.video-downloader/.venv, installs yt-dlp there with pip, and runs that binary.pipx install yt-dlp, brew install yt-dlp, or your OS package manager.The .venv directory is gitignored and stays inside the skill folder.
The skill uses yt-dlp, a robust YouTube downloader that:
yt-dlp via PATH or the skill-local .venv as described above/mnt/user-data/outputs/ by default| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 5,244 | 6,795 | +30% | 1 | 1 | 0% | 860 | 1,293 | +50% | 0 | 0 | — |
case-02 | fail→fail | 4,545 | 10,725 | +136% | 1 | 1 | 0% | 939 | 1,217 | +30% | 0 | 0 | — |
case-03 | fail→fail | 4,699 | 5,335 | +14% | 1 | 1 | 0% | 789 | 1,241 | +57% | 0 | 0 | — |
case-04 | fail→pass | 4,815 | 1,772 | -63% | 1 | 1 | 0% | 784 | 1,217 | +55% | 0 | 0 | — |
case-05 | fail→pass | 5,053 | 1,607 | -68% | 1 | 1 | 0% | 882 | 1,204 | +37% | 0 | 0 | — |
case-06 | fail→pass | 5,792 | 1,943 | -66% | 1 | 1 | 0% | 1,165 | 1,279 | +10% | 0 | 0 | — |
case-07 | fail→pass | 7,157 | 3,028 | -58% | 1 | 1 | 0% | 1,335 | 1,429 | +7% | 0 | 0 | — |
case-08 | fail→pass | 7,309 | 4,759 | -35% | 1 | 1 | 0% | 1,413 | 1,779 | +26% | 0 | 0 | — |
case-09 | fail→pass | 5,680 | 2,202 | -61% | 1 | 1 | 0% | 1,119 | 1,228 | +10% | 0 | 0 | — |
case-10 | fail→pass | 3,695 | 1,839 | -50% | 1 | 1 | 0% | 644 | 1,191 | +85% | 0 | 0 | — |
case-11 | fail→pass | 6,350 | 2,631 | -59% | 1 | 1 | 0% | 1,266 | 1,397 | +10% | 0 | 0 | — |
case-12 | fail→pass | 6,803 | 2,496 | -63% | 1 | 1 | 0% | 1,220 | 1,276 | +5% | 0 | 0 | — |
case-13 | fail→pass | 7,299 | 3,029 | -59% | 1 | 1 | 0% | 1,265 | 1,397 | +10% | 0 | 0 | — |
case-14 | pass→pass | 8,301 | 2,188 | -74% | 1 | 1 | 0% | 1,492 | 1,248 | -16% | 0 | 0 | — |
case-15 | fail→pass | 4,835 | 1,994 | -59% | 1 | 1 | 0% | 946 | 1,209 | +28% | 0 | 0 | — |
case-16 | fail→pass | 10,909 | 3,965 | -64% | 1 | 1 | 0% | 2,099 | 1,619 | -23% | 0 | 0 | — |
case-17 | fail→pass | 8,928 | 6,417 | -28% | 1 | 1 | 0% | 1,632 | 2,081 | +28% | 0 | 0 | — |
case-18 | fail→pass | 8,894 | 2,371 | -73% | 1 | 1 | 0% | 1,493 | 1,305 | -13% | 0 | 0 | — |
case-19 | pass→pass | 4,328 | 2,696 | -38% | 1 | 1 | 0% | 765 | 1,287 | +68% | 0 | 0 | — |
case-20 | fail→pass | 7,557 | 5,710 | -24% | 1 | 1 | 0% | 1,439 | 2,183 | +52% | 0 | 0 | — |
case-21 | fail→pass | 7,639 | 5,289 | -31% | 1 | 1 | 0% | 1,454 | 1,977 | +36% | 0 | 0 | — |
case-22 | pass→pass | 7,150 | 3,931 | -45% | 1 | 1 | 0% | 1,327 | 1,557 | +17% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.