Sync Spotify playlists to different services. Currently only supports Tidal.
A local database is used to speed up subsequent runs, skipping any tracks that have already been synced.
The Tidal conversion uses a mix of Tidal's work-in-progress public APIs and some undocumented ones.
The track sync first checks if the Spotify track exists on Tidal by searching for the ISRC. If the track is not found by ISRC then a more crude method is used, searching for track name, arists, album, and duration.
Tidal has aggressive rate limits so a one-second sleep runs after every conversion. Subsequent runs should be much faster as the sync checks the local database first.
- A Spotify developer application is required for the client ID and client secret.
- A Tidal developer application is required for the client ID and client secret if you are converting to Tidal.
Run the application with -h
to see a list of commands. Currently only a tidal
command exists which converts your Spotifyp playlists to Tidal playlists.
docker run --rm ghcr.io/zibbp/spotify-playlist-sync:latest -h
Options
--save-missing-tracks Save missing tracks during the conversion (default: false)
--save-tidal-playlist Save the tidal playlist (default: false)
--save-navidrome-playlist Save a version of the tidal playlist for importing in Navidrome (default: false)
- Save missing tracks writes all missing Spotify tracks to
/data/missing/<spotify_playlist_id>.json
. - Save Tidal playlist writes the Tidal playlist to
/data/tidal/<tidal_playlist_id>.json
. - Save Navidrome playlist writes the Tidal playlist in a special format for importing into Navidrome.
- Note that is not supported yet. It requires the
isrc
to be avilable in Navidrome's database which is a work-in-progres.
- Note that is not supported yet. It requires the
Docker is the recommended way to run the application. See compose.yml to get started.
- Modify the
command
to run whichever command and arguments. - Update the various
*_CLIENT_ID
and*_CLIENT_SECRET
variables with your values. - Update the
SPOTIFY_CLIENT_REDIRECT_URI
with the IP/hostname of your server.
Create a .env
file with the below variables. Then use task to run with task dev
.
SPOTIFY_CLIENT_ID=123
SPOTIFY_CLIENT_SECRET=123
TIDAL_CLIENT_ID=123
TIDAL_CLIENT_SECRET=123=