Background: Why Migrate from Downie
Downie is a well-regarded video downloader for macOS. It's polished, supports drag-and-drop, and is friendly to non-technical users. But if you're using it through a Setapp subscription, you may run into a few practical issues:
- Subscription dependency: Once you stop paying for Setapp, Downie stops working.
- Limited automation: Downie is built for manual, click-to-download workflows. It's not ideal for batch jobs or scripting.
- Slower site support updates: As closed-source commercial software, it often lags behind open-source tools when sites change their rules.
yt-dlp addresses exactly these gaps:
| Aspect | Downie | yt-dlp |
|---|---|---|
| Price | Setapp subscription / one-time purchase | Free and open source |
| Site support | 1000+ | 1000+, updated very fast |
| Automation | Limited | CLI, scriptable, batch-friendly |
| HD merging | Built-in | Requires ffmpeg |
| Learning curve | Low | Medium (a few commands to learn) |
If you're willing to spend half an hour getting comfortable with the command line, yt-dlp offers far more flexibility and long-term stability than Downie.
1. Installation
Install yt-dlp
On macOS, the recommended way is via Homebrew:
brew install yt-dlpIf you don't have Homebrew yet, install it first from brew.sh.
Install ffmpeg (strongly recommended)
ffmpeg isn't a hard dependency of yt-dlp, but without it you'll hit two major problems:
- No HD downloads: On YouTube and similar sites, 1080p and 4K videos have separate video and audio streams that need to be merged with ffmpeg.
- No audio conversion: Extracting MP3, for example, requires ffmpeg.
Install it with:
brew install ffmpegVerify the installation
yt-dlp --version
ffmpeg -versionIf both commands print version numbers, you're ready to go.
2. From Downie to yt-dlp: A Quick Reference
The hardest part of switching is going from "just click" to "type a command." Here's a side-by-side comparison of common tasks:
| What you did in Downie | Equivalent yt-dlp command |
|---|---|
| Paste link, click download | yt-dlp "VIDEO_URL" |
| Pick highest quality | yt-dlp -f "bv*+ba" "VIDEO_URL" |
| Download audio only | yt-dlp -x --audio-format mp3 "VIDEO_URL" |
| Download a playlist | yt-dlp "PLAYLIST_URL" |
| Set save folder | yt-dlp -P ~/Downloads/Video "VIDEO_URL" |
| Name file by title | yt-dlp -o "%(title)s.%(ext)s" "VIDEO_URL" |
💡 Always wrap URLs in double quotes. YouTube playlist links often contain
&, which the shell will truncate if unquoted.
3. Basic Usage
The basic syntax is simple:
yt-dlp [options] "VIDEO_URL"Download a single video (best quality automatically)
yt-dlp "VIDEO_URL"Download the highest quality with merged audio
yt-dlp -f "bv*+ba" "VIDEO_URL"bv*+ba means best video + best audio, merged automatically with ffmpeg.
Force MP4 output
yt-dlp -f "bv*+ba" --merge-output-format mp4 "VIDEO_URL"Extract audio only (MP3)
yt-dlp -x --audio-format mp3 "VIDEO_URL"Download an entire playlist
yt-dlp "PLAYLIST_URL"4. Specifying the Save Path
Option 1: Use -P for the directory (recommended)
yt-dlp -P ~/Downloads/Video "VIDEO_URL"Option 2: Use -o for the full filename template
yt-dlp -P ~/Downloads/Video -o "%(title)s.%(ext)s" "VIDEO_URL"⚠️ Note:
~isn't always expanded inside-o. Use$HOMEor a full path instead.
Common filename template variables
| Variable | Meaning |
|---|---|
%(title)s | Video title |
%(ext)s | File extension |
%(id)s | Video ID |
%(uploader)s | Uploader name |
%(upload_date)s | Upload date (YYYYMMDD) |
%(playlist_index)s | Playlist index |
Example: Organize by uploader
yt-dlp -P "$HOME/Downloads/Video" -o "%(uploader)s/%(title)s.%(ext)s" "VIDEO_URL"Example: Numbered playlist downloads
yt-dlp -P "$HOME/Downloads/Playlist" -o "%(playlist_index)s - %(title)s.%(ext)s" "PLAYLIST_URL"5. Advanced: Turn Common Commands into One-Liners
Downie's strength is one-click downloads. With yt-dlp, you can replicate that via shell aliases — and go further.
Edit ~/.zshrc and add:
# Download best quality to a specific folder
alias yt-best='yt-dlp -f "bv*+ba" -P "$HOME/Downloads/Video"'
# Extract MP3
alias yt-mp3='yt-dlp -x --audio-format mp3 -P "$HOME/Music/yt-dlp"'Save, then run source ~/.zshrc. From now on, just:
yt-best "VIDEO_URL"
yt-mp3 "VIDEO_URL"That's Downie's one-click experience — but batchable and scriptable.
6. Troubleshooting
❓ The downloaded video has no audio
Cause: yt-dlp downloaded only the video stream because it couldn't find ffmpeg to merge the audio.
Fix:
- Confirm ffmpeg is installed:
ffmpeg -version - If the video was downloaded before you installed ffmpeg, just re-download it.
- If it still fails, point yt-dlp to ffmpeg explicitly:
yt-dlp --ffmpeg-location "$(brew --prefix ffmpeg)/bin" -f "bv*+ba" "VIDEO_URL"- Check whether you used
-f mp4or-f bestvideo— those download video only, no audio. Use-f "bv*+ba"instead.
❓ Do I need to quote URLs?
Always use double quotes. If the URL contains &, ?, (, ), or $, the shell will misinterpret it without quotes. YouTube playlist links almost always contain &, so quoting is essential.
❓ Downloads are failing
Sites change their rules often. Update yt-dlp first:
brew upgrade yt-dlpThat fixes most issues.
❓ I still want a GUI
If you really prefer a graphical interface, try a GUI front-end built on yt-dlp:
- Macabolic: a native-feeling yt-dlp GUI for macOS
- Stacher: a modern cross-platform GUI
They call yt-dlp under the hood, so you get yt-dlp's site support with Downie-style click-to-download convenience.
7. Quick Command Cheat Sheet
| Task | Command |
|---|---|
| Best quality download | yt-dlp -f "bv*+ba" "URL" |
| MP4 output | yt-dlp -f "bv*+ba" --merge-output-format mp4 "URL" |
| Extract MP3 | yt-dlp -x --audio-format mp3 "URL" |
| Custom save folder | yt-dlp -P ~/Downloads/Video "URL" |
| Organize by uploader | yt-dlp -P ~/Downloads -o "%(uploader)s/%(title)s.%(ext)s" "URL" |
| Numbered playlist | yt-dlp -P ~/Downloads -o "%(playlist_index)s - %(title)s.%(ext)s" "URL" |
| Update yt-dlp | brew upgrade yt-dlp |
Final Thoughts
The biggest mental hurdle in migrating from Downie to yt-dlp is going from clicking to typing. But once you cross that line, you'll find:
- No more subscription dependency — the tool is truly yours.
- A much higher ceiling — batch jobs, scripting, and automation all become possible.
- Faster community updates — new site support arrives almost instantly.
And if you occasionally want to skip the typing, aliases or a GUI front-end give you the best of both worlds. For long-term use, this is a migration worth making.
⚠️ A note on compliance: Please respect the terms of service and copyright rules of the sites you use. Only download content you have the right to access.