SDM (SDM Downloads Music) banner

SDM (SDM Downloads Music)

4 devlogs
12h 24m 22s

sdm is a fast and lightweight CLI tool to download and sync Playlists, Albums, and Tracks directly to your local machine.

This project uses AI

copilot for code completion and claude for debugging

Demo Repository

Loading README...

ash

In this update, I implemented native metadata scraping for apple music and integrated routing for tidal. I broke off the –sync flag into a standalone sdm sync command that persists source URLs for easy updates. Also added support for mp3, flac, and opus via dynamic mutagen tagging. For safer library management, I introduced a –dry-run simulation mode and a –no-delete flag to prevent accidental file loss. Finally, I made the user experience better with a complete refactor of the typer CLI for better flag organization, and made the documentation less verbose.

Attachment
0
ash

I integrated youtube, youtube music, and soundcloud into sdm, allowing for unified downloading and syncing across major services. Since “sdm” wasnt available on pypi I renamed the package to “sdm-pycli” and also introduced the –refresh-metadata feature, enabling users to bulk-update existing libraries with tags and synced lyrics. Most importantly, I resolved critical cross-platform installation failures by completely decoupling from the bloated spotapi library and its buggy dependencies. I replaced it with a custom, metadata engine that utilizes direct web scraping.

Attachment
0
ash

I overhauled the sdm cli by migrating to typer, cause I used typer in my previous python cli tool and it made it wayy more intuitive and offered better user experience. To achieve minimal config during installation, I integrated imageio-ffmpeg to bundle FFmpeg directly. Also implemented better metadata fallbacks via itunes to ensure every track has accurate genre and year tags. I also added few features like adding native synced lyrics embedding via LRCLIB, EBU R128 audio normalization, and SponsorBlock trimming and also automated .m3u playlist generation to preserve custom track order.

Attachment
0
ash

Over the last eight hours, I built a multi-threaded CLI synchronization tool that bypasses Spotify API restrictions through public metadata scraping and yt-dlp integration. I made a two-way mirroring system with json state management and solved youtube’s annoying DRM blocks by implementing native cookie extraction for firefox browsers. I also built a manual –inject pipeline featuring automated ffmpeg transcoding and persistent index-caching to preserve custom playlist ordering. Finally, I did some error sanitization and tested with 4 of my playlists and it finally worked.

Attachment
0