Before YouTube, Spotify, and Netflix dominated the internet, the only way we could get our hands on videos and music was to download them. Also, internet speeds weren’t ever measured in Mbps or Gbps.
We downloaded on Kbps. Let that sink in for a moment.

That meant a movie would take an entire day if you were lucky. If not, you’d wait a couple of days at least (and pray the landline didn’t start ringing!).
When I was a teen, you could grab a pirated copy of just about anything via torrents or apps like Kazaa, LimeWire, or Napster, but those weren’t ever meant to last anyway.
In this article, we’ll explore new ways to download videos, images, and music with the resurgence of some clever CLI tools and a little tinkering.
You might have heard about youtube-dl
, once the undisputed YouTube downloader, only to be dethroned by a newer tool called yt-dlp
. But there are options available now. Some don’t even need you to download anything and instead allow you to directly stream media onto your favorite media app.
Let’s take a look at five standout tools and the unique tricks each one brings to the table.
Download Everything With yt-dlp
Let’s start with the tool that took the crown from youtube-dl
.
yt-dlp
is what most folks (not just the cool kids who wear sunglasses indoors) reach for these days when they want to download videos from YouTube or pretty much any popular media site.
It’s fast, reliable, supports thousands of platforms, and has so many flags you’ll spend more time reading flags than watching the actual video.
Here’s are some quick install instructions (if you’re on macOS or Linux):
brew install yt-dlp # or for the hardcore pip install -U yt-dlp
Now say you want to download an entire YouTube channel. That’s easy:
yt-dlp https://www.youtube.com/@beetlejuicearchives3490
Want just the audio in MP3?
yt-dlp -x --audio-format mp3 https://www.youtube.com/@beetlejuicearchives3490
Here’s where things get wild: yt-dlp
also integrates with SponsorBlock
. That means it can automatically skip over sponsored segments in videos. You don’t have to do anything fancy, just pass a flag:
yt-dlp --sponsorblock-remove sponsor https://www.youtube.com/watch?v=hH2I8rR07aM
You can also sort and filter download formats with fine-grained control. Want only the highest-quality MP4 with AAC audio?
yt-dlp -f "bv[ext=mp4][height<=1080]+ba[ext=m4a]" https://www.youtube.com/watch?v=xyz
All that and we’re still only just scratching the surface. It can handle playlists, metadata, cookies, rate-limits, and even merge video and audio streams with FFmpeg under the hood.
That said, if you’re not into downloading anything and you just want to watch a video straight from the source, right inside your media player app, there’s a tool for that too!
Stream It Like You Stole It With you-get
That’s exactly what you-get
does. It pulls media from sites like YouTube, Vimeo, Twitter, and others, and streams it directly into apps like MPV
or VLC
without leaving the terminal.
Here’s how to install it:
brew install you-get # or if you're managing Python packages manually pip install -U you-get
Now, say you’ve found a video and just want it to play instantly:
you-get --player vlc https://www.youtube.com/watch?v=jNQXAC9IVRw
This hands the video off directly to VLC
, and the stream begins, no file clutter and no fussing with browser extensions. Most of all, no more mystery files named video_final_FINAL_v2(1).mp4
cluttering your desktop. You treat it like a streaming service shortcut.
Of course, for the control-freaks among us, yes, you can still save the file.
you-get https://twitter.com/username/status/1234567890
Or inspect the available formats before deciding:
you-get -i https://vimeo.com/12345678
We’ll also cover a music-first workflow that keeps your Spotify playlists mirrored on disk automatically.
Let’s take a look at spotDL
.
Sync Your Music Library With spotDL
If you want a music-first workflow that stays in sync with your playlists, spotDL is the right tool. Point it at a Spotify playlist (yours or public), and it fetches matching audio from YouTube/YouTube Music, writes proper metadata/cover art, and – crucially – keeps things updated with an incremental sync file.
To install (pick one):
# Recommended pipx install spotdl # or: pip install spotdl
Unlike the other tools here, spotDL does more than grab a single file: it mirrors whole playlists and keeps them in sync. That means the first command looks a little busier, but it’s because you’re creating a sync file that defines the playlist on disk. After that, updates are as simple as re-running one command.
Initialize a playlist sync (creates a .spotdl file) and download:
# Create a real sync file + download into ./dubstep-favourites/ spotdl sync "https://open.spotify.com/playlist/27uRJq4FVTL1zAZ8DdoZJr" \ --save-file dubstep-favourites.spotdl \ --output "dubstep-favourites/{artist} - {title}.{ext}" \ --m3u "dubstep-favourites.m3u8"
• --save-file
creates a .spotdl sync file (must end with .spotdl).
• --output
controls how filenames are written (here: “Artist – Title”).
• --m3u
auto-generates a playlist file for media players.
Think of this like “snapshotting” your Spotify playlist into a folder. That’s why you’d find the next command useful, it incrementally syncs this playlist to disk:
spotdl sync dubstep-favourites.spotdl \ --output "dubstep-favourites/{artist} - {title}.{ext}" \ --m3u "dubstep-favourites.m3u8"
Now it only pulls new/changed tracks. No need to re-enter the playlist URL.
SpotDL
takes care of your music collection and keeps it neat, but what if you’re after something more immediate – like catching a Twitch stream as it happens, or saving a broadcast while you watch?
That’s where streamlink
comes in.
Stream Live or Save It With streamlink
Not everything you want to grab comes as a neat file with a download link. A lot of media online today (especially live events) is served as HLS or DASH streams. That’s where streamlink
comes in.
It supports a long list of services via maintained plugins (e.g. YouTube, Twitch, BBC iPlayer, Vimeo, TikTok). Use it when you’d rather play or capture the stream, rather than fully “download” via an extractor.
You can install it with pip
or brew
:
brew install streamlink # or: pipx install streamlink
Play a stream instantly:
streamlink "https://www.youtube.com/watch?v=jNQXAC9IVRw" best
The best
keyword automatically picks the highest quality available, though you can choose 720p, 480p, or even audio if you want to save bandwidth.
But why stop there? Why not record it while watching? Remember those old cable boxes that came with a built-in Harddisk that recorded your favorite TV show so you can watch it a hundred times over later (and bore the life out of your cat)?
streamlink --record "~/Videos/{author}/{title}-{time:%Y%m%d%H%M%S}.ts" \ -p mpv "https://twitch.tv/day9tv" best
Yes. Yes, of course. You don’t need to watch it to have a copy:
streamlink --output "~/Videos/{author}/{title}-{time:%Y%m%d%H%M%S}.ts" \ "https://twitch.tv/day9tv" best
But that would mean you might miss the stream going live at 11pm tonight, wouldn’t it? For that, there’s at
:
brew install at brew services start atd
👉 macOS doesn’t ship with at/atd anymore; Apple moved to launchd. Homebrew’s atd
gets you the classic one-shot scheduler back.
And that means both you (and the cat) get your shut-eye at 11pm and still have a copy tucked away for later:
echo 'streamlink --record ~/Videos/{title}.ts https://twitch.tv/day9tv best' | at 23:00
💡 Want it to stop after 2 hours?
brew install coreutils # provides `gtimeout` on macOS echo 'gtimeout 7200 streamlink --record ~/Videos/{title}.ts https://twitch.tv/day9tv best' | at 23:00
And yep, it works for yt-dlp
jobs too. So we’ve covered media downloads (YouTube with yt-dlp
, Spotify with spotDL
) and now live streams on demand with streamlink.
What about images? Enter gallery-dl
.
Download Images Like a Wizard With gallery-dl
If yt-dlp
is the multitool for video, then gallery-dl
is more like a precision instrument for images. It’s not just for generic image URLs either; it actually understands how full galleries work on sites like Twitter, Reddit, DeviantArt, Pixiv, Danbooru, and even Tumblr.
Here’s the quick install:
brew install gallery-dl # or for the hardcore pip install -U gallery-dl
Want to download every image from a specific Reddit post?
gallery-dl https://www.reddit.com/r/EarthPorn/comments/abc123
Or maybe you’ve found an artist’s full portfolio on Twitter?
gallery-dl https://twitter.com/username
You can even go full hacker mode and just extract the direct image URLs without downloading them:
gallery-dl --get-urls https://twitter.com/username/status/1234567890
This prints out the raw image links to your terminal so you can inspect and pass them into another script or tool. It’s great if you’re building an automation pipeline or if you just want to see what’s actually behind a page without committing to a full download.
There’s full config support too. Want everything downloaded into folders named by artist and source? Done. Want to skip posts that don’t match a certain tag, language, or resolution? You can do that. It’s almost scary how much you can tweak.
Here’s a taste of what a config file might look like (totally optional, but quite powerful):
{ "base-directory": "~/Pictures/gallery", "twitter": { "cookies": "twitter-cookies.txt", "username": "your_username" }, "output": { "mode": "tagged" } }
You might be collecting memes or just downloading reference material, whatever your image downloading needs are, gallery-dl
handles it all surprisingly easy.
Back in the day, apps like Kazaa and LimeWire made things feel easy. You searched, you clicked, and the download started (eventually).
There was a kind of thrill to it, even though it was very likely the file turned out to be mislabeled or corrupted.
These CLI tools might not have the glossy buttons or cartoonish logos, but for developers, tinkerers, and anyone who lives in the terminal, they’ve become indispensable. They’re faster and definitely more flexible.
In many ways, they’re more reliable than anything we had back then.
Hopefully you found something new in this lineup that you didn’t know you needed. If this kind of nerdy deep dive is your thing, consider subscribing. There are more posts like this already in the pipeline.
Can I keep a Spotify playlist mirrored locally and updated over time?
Use spotDL
’s sync mode.
Initialize with a playlist URL and a
.spotdl
file,
then run spotDL sync
whenever you want to pull changes.
What’s the best tool to EXTRACT audio from YouTube?
yt-dlp
is your best bet.
It lets you extract audio in MP3 or other formats with a simple flag.
Can I stream videos ON MY DESKTOP without downloading?
Yes. That’s exactly what you-get
is for.
It hands off videos to your media player without saving any files.
Which tool should I use for image galleries?
Use gallery-dl
.
It’s built specifically for downloading from image-heavy sites like Twitter, Reddit, Pixiv, and DeviantArt.
What about live streams or sites that expose HLS/DASH?
Use streamlink
. Pipe to VLC or record to disk with --output
or --record
.
Can I automate these tools in a script or scheduled tasks?
Absolutely. All five tools are terminal-based and script-friendly, but they deserve special mention:
• yt-dlp
and gallery-dl
both support config files so you can bake in flags and never re-type them.
• spotDL
uses a .spotdl
sync file. Just call spotDL sync
in a cron job and you’re in-sync
• streamlink
pairs with schedulers likeat
. Combine with gtimeout
so live streams start & stop at the times you set.
In short: yes, you can wrap them all in scripts, from one-liners in bash to recurring jobs in launchd or systemd.
Related Posts.
Yes, you can Blog from your Localhost WordPress on iPhone.
Access your local WordPress site from your iPhone using ZeroTier or Tailscale.… Read More
Modern WordPress MVC Plugin (2024)
Revisiting a 2010 MVC router for WordPress plugins, now updated for 2024… Read More