A fast, lightweight, and reliable CLI tool to download and sync playlists, albums, and tracks.
Project description
SDM - SDM Downloads Music
sdm is a fast and lightweight CLI tool to download and sync Playlists, Albums, and Tracks from Spotify, Apple Music, Tidal, YouTube, and SoundCloud.
Why sdm?
Recently, Spotify restricted their Web API, requiring developers to have a Premium subscription, which broke popular open-source tools with 403 Forbidden errors.
sdm was built to completely bypass these restrictions. It uses native web scraping to extract flawless metadata directly from streaming services, pairs it with yt-dlp to fetch the highest-quality audio, and embeds the tags natively. No API keys required.
Features
- Universal Support: Spotify, Apple Music, Tidal, YouTube, and SoundCloud.
- Smart Syncing: Two-way mirroring. Run
sdm syncto fetch new tracks and clean up removed ones. - Multi-Format: Download in M4A (default), MP3, FLAC, or OPUS with native tags.
- Perfect Metadata: Embeds Track, Artist, Album, Cover Art, Track/Disc Numbers, Genre, and Release Year.
- Advanced Processing: Synced lyrics via LRCLIB, LUFS normalization, and SponsorBlock trimming.
Installation
pip install sdm-pycli
Note: sdm comes with everything bundled, including FFmpeg.
Quick Start
1. Download
Download a playlist, album, or track to your current directory. Use -f to specify the format.
sdm download "https://music.apple.com/us/album/..." -f flac -o "./My Music"
2. Sync
sdm remembers the URL. Later, simply run sync to update the folder with the newest changes from the remote playlist:
sdm sync "./My Music"
3. Inject Local Files
Have your own pristine audio file? Weave it seamlessly into your playlist with official metadata. It will be protected from future sync deletions:
sdm inject "song.mp3" "https://open.spotify.com/track/..." -o "./My Music"
Advanced Usage
Combine flags for the ultimate listening experience:
sdm download <URL> --lyrics --normalize --sponsor-block -w 5
--lyrics: Embed perfectly synced lyrics.--normalize: Apply EBU R128 (-14 LUFS) volume normalization.--sponsor-block: Trim non-music sections from YouTube sources.-w 5: Download with 5 concurrent workers.--dry-run: Simulate a sync/download to see what would change.
Important Notes
Spotify Playlists Spotify playlists must be set to Public. Private playlists and personalized mixes (like "Discover Weekly") will not work.
Age-Restricted Tracks (Cookies) If YouTube blocks explicit tracks, pass your browser cookies. Due to App-Bound Encryption in Chrome/Edge, Firefox is highly recommended:
sdm download <URL> --cookies firefox
(Alternatively, use an extension to export cookies.txt and pass its path).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sdm_pycli-1.1.0.tar.gz.
File metadata
- Download URL: sdm_pycli-1.1.0.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
973161da8fc0fedcd4cb3f1f3e08c7d6f5196c0b11a30f21380f35d825378947
|
|
| MD5 |
4f5fc5eb1c7a8d1ce1c8b992a4eff995
|
|
| BLAKE2b-256 |
8c5e99d64ab8776e624b8e546529c945101695181ce9fbc72a38d84d5130bf54
|
File details
Details for the file sdm_pycli-1.1.0-py3-none-any.whl.
File metadata
- Download URL: sdm_pycli-1.1.0-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9c470a7aa5ed7c9e8b642b30bdb49c7ba81496dcf170b03c03627297093f16d
|
|
| MD5 |
ddfaad6cb63b77015e6f6f08b1109590
|
|
| BLAKE2b-256 |
a7b49bb7c3567de73cadefc6336668bdafd6431cd49e00286425e16c33602f55
|