Skip to main content

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 sync to 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sdm_pycli-1.1.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sdm_pycli-1.1.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

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

Hashes for sdm_pycli-1.1.0.tar.gz
Algorithm Hash digest
SHA256 973161da8fc0fedcd4cb3f1f3e08c7d6f5196c0b11a30f21380f35d825378947
MD5 4f5fc5eb1c7a8d1ce1c8b992a4eff995
BLAKE2b-256 8c5e99d64ab8776e624b8e546529c945101695181ce9fbc72a38d84d5130bf54

See more details on using hashes here.

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

Hashes for sdm_pycli-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d9c470a7aa5ed7c9e8b642b30bdb49c7ba81496dcf170b03c03627297093f16d
MD5 ddfaad6cb63b77015e6f6f08b1109590
BLAKE2b-256 a7b49bb7c3567de73cadefc6336668bdafd6431cd49e00286425e16c33602f55

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page