yt-dlp Command Generator for SoundCloud
Build a yt-dlp command for SoundCloud tracks and sets, tagged and ready for a music library.
Choosing an audio format
SoundCloud usually serves 128 kbps MP3, sometimes Opus. Converting a 128 kbps source to 320 kbps produces a larger file that sounds no better — 'best available' keeps the original and is the right default.
Cover art and tags are worth turning on: without them a downloaded set arrives as a folder of untitled files. Sets and playlists work with whole-playlist handling.
SoundCloud serves most streams at 128 kbps Opus, and the "Go+" tracks at 256 — but only to sessions it believes are entitled. If a track plays on the site at higher quality than yt-dlp fetches, cookies from a logged-in browser are usually the difference: the ladder your session sees is the ladder yt-dlp gets. The -F listing shows which formats exist for the track you are on.
The download URL is not always where the audio lives: SoundCloud serves media from a CDN behind short-lived signed links, so a media URL copied out of a browser tab works once and then never again — always hand yt-dlp the track page, and let it resolve. Reposts are a separate entry pointing at the same audio; the archive file keeps a set download from fetching them twice.
Sets (the SoundCloud name for playlists) are where the real value is. A set of two hundred tracks paginates, and the run takes a while; the archive file turns the second run into a delta of just the newly-added tracks. Keep-going-on-errors matters because sets accumulate deleted tracks — a producer pulls a sample, and without the switch one 404 aborts the other eighty tracks.
On naming: SoundCloud titles are long and carry the artist in the title, so the default artist-then-title template makes duplicates visible rather than silent — two files with the same name are usually two uploads of the same track at different bitrates. Cover art comes from the artwork URL and downloads at its largest size; if the art looks wrong, it was wrong on the platform too.