youtube-downloader
Skill584 starsChanged 59 days agoMITView on GitHub
Download YouTube videos or extract audio using yt-dlp + ffmpeg in the Linux shell. Trigger when the user shares a YouTube URL and wants to download, save, rip, extract, or convert it — to video or audio (MP3/M4A). Also trigger for phrases like "download this video", "save this YouTube", "rip audio from", "grab this video", or when a YouTube link is shared with intent to save it locally. Works with youtube.com/watch, youtu.be/, and youtube.com/shorts/ URLs.
- Installs packages
We split this skill into the rules it gives an agent
10 rules. 0 are common, 3 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 30 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 35
If onboarded: true, skip to Normal Operation.
- Very specific: line 39
If yt-dlp: no or ffmpeg: no in the status output, install them:
- Very specific: line 68
Check if the Downloads mount already exists via the status command.
- Very specific: line 77
After the user confirms, re-run the status check to verify downloads_mount: yes.
- Distinctive: line 112
If the user specified a quality in their message ("just the audio", "1440p", etc.), use that
- Distinctive: line 113
If the user specified where to save ("save to photos", "put it in files"), pass that as save_mode
- Very specific: line 118
If SAVED_TO_FILES: "Saved to your Files app → Downloads folder.
- Very specific: line 119
If SAVED_TO_PHOTOS: "Saved to the 'YouTube Downloads' album in your Photos app."
- Very specific: line 120
If KEPT_IN_ATTACHMENTS: The file is at /var/minis/attachments/<filename>.
- Distinctive: line 121
Always include the video title and file size.
“Common” is measured: kept by at least 6 in 10 of the 30 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
YouTube Downloader
Download YouTube videos or extract audio. Files are named after the video title, saved to the user's preferred location, and remuxed to play correctly as video on iOS.
How This Skill Works
This skill runs yt-dlp + ffmpeg inside the Minis Linux sandbox (iSH). Two iSH-specific workarounds are required:
- Manual DASH merge: yt-dlp's built-in video+audio merger crashes in iSH. For high-quality formats (1080p, 1440p), the script downloads video and audio separately using
-k(keep video), lets the merger fail, then merges them with a direct ffmpeg call. - iOS container fix: YouTube's MP4 files use the
mp42brand, which iOS may treat as audio-only. The script remuxes to M4V (for H.264) or standard mp4 (for AV1/VP9) with+faststartso iOS Files plays them as video.
First Run — Onboarding
On the FIRST time this skill triggers, run onboarding before downloading anything.
Step 1: Check status
sh /var/minis/skills/youtube-downloader/scripts/yt-config.sh statusIf onboarded: true, skip to Normal Operation. If onboarded: false (or config doesn't exist), continue onboarding.
Step 2: Install dependencies
If yt-dlp: no or ffmpeg: no in the status output, install them:
apk add yt-dlp ffmpeg py3-pip
pip install --upgrade --break-system-packages yt-dlpThe pip upgrade is essential — Alpine's yt-dlp package is stale and YouTube's player changes frequently. This takes ~30 seconds.
Step 3: Ask the user two questions
Present as a friendly numbered list. Wait for answers.
Question 1 — Quality preference:
What quality do you want by default?
- 1080p video — Full HD, best balance of quality and size (default)
- 1440p video — 2K, highest quality, large files (~300 MB per 10 min)
- 720p video — HD, smaller file size
- Audio only — best for music/podcasts, smallest file
- Ask me every time — no default, I'll pick per video
Question 2 — Where to save:
Where should I save your downloads?
- iOS Files app (Downloads folder) — appears in Files → Downloads
- iOS Photos (YouTube Downloads album) — appears in Photos
- Keep in Minis — stays in the app's attachments folder
Step 4: Set up Files mount (if user chose option 1)
Check if the Downloads mount already exists via the status command. If downloads_mount: yes, skip. If downloads_mount: no, tell the user:
To save videos to your Files app, I need you to mount your Downloads folder:
- Tap this link: Mount External Folders
- Tap "Add Mount"
- Navigate to the folder you want (e.g., iCloud Drive → Downloads, or On My iPhone → Downloads)
- Name it "Downloads"
- Come back here and tell me when you're done
After the user confirms, re-run the status check to verify downloads_mount: yes.
Step 5: Save config
sh /var/minis/skills/youtube-downloader/scripts/yt-config.sh set quality "<chosen_quality>"
sh /var/minis/skills/youtube-downloader/scripts/yt-config.sh set save_mode "<chosen_save_mode>"
sh /var/minis/skills/youtube-downloader/scripts/yt-config.sh complete- Quality: "1080p", "1440p", "720p", "360p", "audio", or "" (empty string for "ask every time")
- save_mode: "files", "photos", or "minis"
Step 6: Offer a test download
Tell the user setup is complete. Offer to download a short test video at 360p so they can verify the flow:
sh /var/minis/skills/youtube-downloader/scripts/yt-download.sh "https://www.youtube.com/watch?v=aqz-KE-bpKQ" 360p <save_mode>Replace <save_mode> with whatever the user chose (files, photos, or minis). 360p is used for the test because it's the most reliable quality — higher quality works the same way once configured.
Confirm the file appeared where they expected. Then proceed with whatever they originally asked for.
Normal Operation
sh /var/minis/skills/youtube-downloader/scripts/yt-download.sh "<URL>" [quality] [save_mode]- Quality is optional — if omitted, uses the saved default from config
- save_mode is optional — if omitted, uses the saved default from config (files, photos, or minis)
- If the user specified a quality in their message ("just the audio", "1440p", etc.), use that
- If the user specified where to save ("save to photos", "put it in files"), pass that as save_mode
After download, report to the user
The script prints one of three status lines. Read it and tell the user:
- If
SAVED_TO_FILES: "Saved to your Files app → Downloads folder. Pull to refresh if you don't see it yet." - If
SAVED_TO_PHOTOS: "Saved to the 'YouTube Downloads' album in your Photos app." - If
KEPT_IN_ATTACHMENTS: The file is at/var/minis/attachments/<filename>. Display it inline and tell the user it's available in Minis. - Always include the video title and file size.
Quality Reference
| Quality | Format | Approx size (10-min video) | Reliability |
| 1080p | DASH H.264 + AAC, manually merged | ~256 MB | ✅ Works (M4V container) |
| 1440p | DASH AV1 or VP9 + AAC, manually merged | ~300-460 MB | ✅ Works (mp4 container) |
| 720p | MP4 pre-merged (format 22) | ~80 MB | ✅ Always works |
| 360p | MP4 pre-merged (format 18) | ~27 MB | ✅ Always works |
| audio | M4A 128kbps (format 140) | ~10 MB | ✅ Always works |
DASH formats (1080p, 1440p) download video and audio separately, then merge with ffmpeg (yt-dlp's built-in merger fails in iSH). H.264 streams go into the Apple M4V container; AV1/VP9 streams go into standard mp4. Both play as video on iOS. All video downloads are remuxed with +faststart and the correct container brand.
Troubleshooting
403 Forbidden on DASH streams: YouTube transiently blocks DASH downloads when using the android vr client fallback (no JS runtime available). Retry — it usually works within 1-2 attempts. Pre-merged formats (360p, 720p) bypass this entirely.
"No supported JavaScript runtime": iSH has no Deno/Node, so yt-dlp can't do YouTube's nsig extraction. Pre-merged formats (18, 22) and audio (140) work without JS. DASH formats work via the android vr client fallback but may intermittently 403.
yt-dlp out of date: YouTube breaks extraction often. Run pip install --upgrade --break-system-packages yt-dlp.
Downloads mount disappears: The mount may disconnect if iCloud sync state changes. Run yt-config.sh status to check. If broken, guide the user to re-mount via Mount External Folders.
Large files: 1440p files can exceed 450 MB. If the app crashes or becomes unstable, stick to 1080p or lower.
Other versions32 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 32
- ComposioHQ/awesome-claude-skills★ 75ksame name
- ComposioHQ/awesome-codex-skills★ 17ksame name
- composio-community/awesome-codex-skills★ 16ksame name
- daymade/claude-code-skills★ 1.5ksame name
- wlzh/skills★ 694same name
- ArogyaReddy/ComposioHQ-awesome-claude-skills★ 45same name
- frostant/awesome-claude-skills★ 44same name
- crazynomad/skills★ 27same name
- Hassaan146/claude-skills★ 18same name
- Engineer1999/A-Curated-List-of-Awesome-Claude-Skills★ 4same name
22 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use agent-deep-links, helium-mcp and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ComposioHQSkillagent-deep-links
Build, validate, and troubleshoot deep links for Codex, Cursor, VS Code, Visual Studio, and similar tools. Use when users ask for clickable links (especially in Slack) that open threads, files, folders, or app settings.
Also in 3 projects that use this
ComposioHQSkillhelium-mcp
Search real-time news with bias scoring, get live stock/ETF/crypto data with AI analysis, ML options pricing, balanced news synthesis, and meme search via the Helium MCP server.
Also in 3 projects that use this
trendinuxSkilltwitter-algorithm-optimizer
Analyze and optimize tweets for maximum reach using Twitter's open-source algorithm insights. Rewrite and edit user tweets to improve engagement and visibility based on how the recommendation system ranks content.
Also in 12 projects that use this
petestewartSkilldatadog-logs
Query Datadog logs via the Logs Search API v2. Use when the user asks to "check the logs", "search logs", "find errors in Datadog", "look up logs for", "show me production logs", "check for errors", "search Datadog", or any request involving log search, error investigation, or production debugging that requires Datadog log data.
Also in 3 projects that use this
MicrosoftSkilldeploy-pipeline
Triggers a Power Platform Pipeline deployment run for a Power Pages solution. Selects a target stage, validates the package, optionally configures deployment settings (environment variables, connection references), then deploys and polls for completion. Use when asked to: "deploy pipeline", "run pipeline", "trigger deployment", "deploy to staging", "deploy to production", "run power platform pipeline", "deploy solution via pipeline", "promote solution", "push to staging", "push to production".
Also in 3 projects that use this
- +7 more from ComposioHQ
In this repository56 other files it gives its agents.
- android-devSkill
- android-ui-automationSkill
- apple-remindersSkill
- appstoreprice-hubSkill
- asc-cliSkill
- bilibili-hubSkill
- Clash 控制器Skill
- cloudflare-dnsSkill
- codex-imageSkill
- codex-on-ishSkill
- contact-vcard-extractorSkill
- coredevice-toolkitSkill
- deepseek-usageSkill
- doubao-ttsSkill
- douyin-downloaderSkill
- evidence-chain-builderSkill
- exa-searchSkill
- free-ttsSkill
- fucai3d-latestSkill
- generative-ui-minisSkill
- github-sync-helperSkill
- health-sleep-analysisSkill
- health-training-checkinSkill
- hyperframes-cliSkill
- hyperframesSkill
- ios-devSkill
- korea-stockSkill
- maimai-hubSkill
- memos-apiSkill
- nano-bananaSkill
- notion-hubSkill
- openstreetmap-markerSkill
- pdf-converterSkill
- production-agent-publicSkill
- qbt-hubSkill
- quark-hubSkill
- reverse-dcfSkill
- self-improving-agentSkill
- shortcuts-builderSkill
- shortcut-share-fileSkill
- spotify-hubSkill
- stock-fund-flowSkill
- stock-priceSkill
- tavily-searchSkill
- tg-hubSkill
- todoocardSkill
- twitter-downloaderSkill
- twitter-x-hubSkill
- us-stockSkill
- web-content-extractorSkill
- web-searchSkill
- weibo-hubSkill
- whenpeakSkill
- xianyu-hubSkill
- xiaohongshu-hubSkill
- ytmusic-hubSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

