SoundCloudOpen is a free, open-source, cross-platform command-line frontend for yt-dlp that bulk-downloads SoundCloud playlists/tracks together with artwork and metadata.
Use SoundCloudOpen only for audio you own, content SoundCloud explicitly permits you to download, or content you otherwise have permission to save. It does not bypass SoundCloud account permissions or DRM.
The default download mirrors the working workflow:
- downloads the whole playlist
- continues past individual failures
- resumes interrupted downloads
- does not overwrite completed files
- saves separate JPG artwork for every track
- embeds artwork into the audio file
- embeds available metadata
- converts audio to high-quality MP3 by default
- numbers files in playlist order
- supports authenticated/private playlists by reading cookies from your own browser session
Output:
~/Music/SoundCloud/
└── Playlist Name/
├── 001 - Artist - Track.mp3
├── 002 - Artist - Track.mp3
└── Artwork/
├── 001 - Artist - Track.jpg
└── 002 - Artist - Track.jpg
CI tests the project on:
- macOS
- Windows
- Linux
- Python 3.10 and 3.12
Docker is also supported.
Browsers supported for authenticated cookies include Chrome, Chromium, Firefox, Edge, Brave, Opera, Vivaldi, and Safari where supported by yt-dlp.
Clone the public repository:
git clone https://github.com/sonoxo/soundcloudopen.git
cd soundcloudopenbash scripts/install.shOr manually:
python3 -m pip install .FFmpeg must be installed. On macOS:
brew install ffmpegFrom PowerShell:
git clone https://github.com/sonoxo/soundcloudopen.git
cd soundcloudopen
Set-ExecutionPolicy -Scope Process Bypass
.\scripts\install.ps1soundcloudopen --checkShort alias:
sco --checksoundcloudopen "https://soundcloud.com/USERNAME/sets/PLAYLIST"For a private playlist visible in Chrome:
soundcloudopen --browser chrome "https://soundcloud.com/USERNAME/sets/PLAYLIST"Browser auto-detection is enabled by default:
soundcloudopen "https://soundcloud.com/USERNAME/sets/PLAYLIST"For a public playlist with no browser-cookie access:
soundcloudopen --browser none "https://soundcloud.com/USERNAME/sets/PLAYLIST"soundcloudopen --browser chrome "https://soundcloud.com/almightysonoxo/sets/all-songs"macOS/Linux:
soundcloudopen -o "$HOME/Desktop/SoundCloud" "PLAYLIST_URL"Windows PowerShell:
soundcloudopen -o "$HOME\Desktop\SoundCloud" "PLAYLIST_URL"soundcloudopen --format m4a "PLAYLIST_URL"
soundcloudopen --format flac "PLAYLIST_URL"
soundcloudopen --format wav "PLAYLIST_URL"
soundcloudopen --format opus "PLAYLIST_URL"Note: converting a lossy SoundCloud source to FLAC/WAV does not increase original source quality.
soundcloudopen --save-json "PLAYLIST_URL"soundcloudopen --list "PLAYLIST_URL"soundcloudopen --print-command --browser chrome "PLAYLIST_URL"Build:
docker build -t soundcloudopen .Public playlist example:
docker run --rm -v "$HOME/Music/SoundCloud:/root/Music/SoundCloud" soundcloudopen --browser none "PLAYLIST_URL"Browser cookie extraction is intended for native installs because host-browser cookie databases are not automatically available inside a container.
The core download intentionally maps to these yt-dlp options:
--yes-playlist
--ignore-errors
--continue
--no-overwrites
--write-thumbnail
--convert-thumbnails jpg
--embed-thumbnail
--embed-metadata
--extract-audio
--audio-format mp3
--audio-quality 0
Authenticated playlists add:
--cookies-from-browser <browser>
python3 -m pip install -e . pytest
pytest -qMIT