Required Action & Breaking Changes
-
We strongly recommend installing Deno. Some
yt-dlpdownloads may fail without a JavaScript runtime.- Run
spotdl --download-deno, or install Deno system-wide using the official Deno installation guide.
- Run
-
Due to Spotify API changes, spotDL now defaults to the lighter
SpotipyFreelibrary, which has reduced functionality compared with the official Spotify API.- If you have Spotify Premium and provide a client ID and client secret, pass
--use-official-apito use the official API. - The default
SpotipyFreeclient does not support authenticated library shortcuts/functions such assaved,all-user-playlists,all-saved-playlists,all-user-followed-artists, andall-user-saved-albums. Use--user-authwith the official API for these. We plan to restore support for these shortcuts soon.
- If you have Spotify Premium and provide a client ID and client secret, pass
-
The
youtubeaudio provider has been migrated frompytubetoyt-dlp.- This does not change the default
youtube-musicprovider.
- This does not change the default
-
Docker images now run as a non-root user and Docker Compose now uses a named
spotdl_musicvolume by default.- If you bind-mount a host directory to
/music, make sure it is writable by the container UID/GID.
- If you bind-mount a host directory to
What's Changed
- Replaced Spotipy with a non-API library by @TzurSoffer in #2626
- Update
search_allto include verified results and fix SpotipyFree initialization by @TzurSoffer in #2665 - Fix/revert search fallback, recommending Deno instead by @Silverarmor in #2672
- Add optional Deno downloader for yt-dlp-ejs support by @Silverarmor in #2650
- Migrate YouTube audio provider from pytube to yt-dlp by @Pobitro-B in #2524
- Retry YouTube Music searches with a fresh client by @Silverarmor in #2671
- Fix YouTube not downloading by @antonpup in #2564
- Support new Spotify API response format (
track->item) by @BillionClaw in #2628 - Get items from Spotify response JSON with
.getto avoid KeyError by @igoiglesias in #2656 - Fix songs with missing genres in Spotify API responses by @BillionClaw in #2629
- Add Docker support for running as a non-root user by @aycsi in #2489
- Pin Docker base image to
python:3.13-alpineand skip dev dependencies by @CatTail in #2658 - Sanitize list names before formatting M3U filenames by @tomdec in #2560
- Replace
tmpdirwithtmp_pathin tests by @dotlambda in #2550
New Contributors
- @BillionClaw made their first contribution in #2629
- @CatTail made their first contribution in #2658
- @TzurSoffer made their first contribution in #2626
- @igoiglesias made their first contribution in #2656
- @antonpup made their first contribution in #2564
- @tomdec made their first contribution in #2560
- @Pobitro-B made their first contribution in #2524
- @aycsi made their first contribution in #2489
Full Changelog: v4.4.4...v4.5.0