| Crates.io | sync_dis_boi |
| lib.rs | sync_dis_boi |
| version | 0.6.2 |
| created_at | 2025-07-31 17:01:11.292032+00 |
| updated_at | 2025-08-03 21:29:54.942156+00 |
| description | a music streaming platform synchronization tool |
| homepage | |
| repository | https://github.com/SilentVoid13/SyncDisBoi |
| max_upload_size | |
| id | 1775357 |
| size | 245,748 |
SyncDisBoi is a simple and efficient tool designed to synchronize playlists across different music streaming platforms. It currently supports:
SyncDisBoi is the ideal tool for music enthusiasts who want to:
Disclaimer: While SyncDisBoi doesn't perform any deletion operations, it's always a good practice to backup your playlists. I am not responsible for any unintended changes to your playlists.
For the best experience, it is recommended to use a single "source of truth" for your playlists, i.e. a primary platform where all playlist modifications are made and then replicated downstream. This ensures consistency across platforms when syncing.
Note that YouTube Music is not ideal for this role due to its limited and often inaccurate song metadata (most notably missing ISRC codes), which are essential for precise song matching when synchronizing.
SyncDisBoi synchronization workflow:
--sync-likes option is specified, SyncDisBoi will also synchronize likes--like-all option is specified, SyncDisBoi will like all synchonized songs on the destination platform--debug option is specified, debug mode will be enabledBy default, SyncDisBoi does not remove songs. This is a safety measure to prevent accidental data loss. Consequently, deleting a song on the source platform and syncing will not remove it from the destination playlist.
SyncDisBoi focuses on synchronization accuracy, ensuring that each track on the source playlist accurately matches the corresponding track on the destination playlist. This feature is particularly useful for users who prioritize maintaining the integrity of their playlists and avoid ending up with unexpected remixes during synchronization.
If available, SyncDisBoi uses the International Standard Recording Code (ISRC) to guarantee correct track matching.
When ISRC codes are not available on the platform API, SyncDisBoi falls back to verifying the following properties to ensure that the two tracks match:
Notes:
Pre-built binaries of SyncDisBoi for Linux, Windows, and macOS are available under the releases section.
If you prefer to build SyncDisBoi from source you simply need the rust toolchain, e.g. available via rustup. A Nix flake is also available with a pre-configured environment with support for cross-compilation.
To use SyncDisBoi, you need to set up account access for the API of the corresponding music platform. Setup instructions available below.
Here are some command examples:
# sync from Youtube Music to Spotify
./sync_dis_boi \
yt-music --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>" \
spotify --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>"
# sync from Spotify to Tidal, sync likes as well
./sync_dis_boi --sync-likes \
spotify --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>" \
tidal
# sync from Tidal to Youtube Music, like all synchronized songs
./sync_dis_boi --like-all \
tidal \
yt-music --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>"
# sync from Spotify to Youtube Music, with debug mode enabled to generate detailed statistics about the synchronization process
./sync_dis_boi --debug \
spotify --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>" \
yt-music --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>"
# export Spotify playlists to JSON
./sync_dis_boi \
spotify --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>" \
export -o ./spotify.json
# export Youtube Music playlists to JSON
./sync_dis_boi \
yt-music --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>" \
export -o ./yt_music.json
# export Tidal playlists to JSON
./sync_dis_boi \
tidal \
export -o ./tidal.json
# import Spotify playlist from exported JSON
./sync_dis_boi \
spotify --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>" \
import -i ./spotify.json
# import Tidal playlist from exported JSON
./sync_dis_boi \
tidal \
import -i ./tidal.json
# import Youtube Music playlist from exported JSON
./sync_dis_boi \
yt-music --client-id "<CLIENT_ID>" --client-secret "<CLIENT_SECRET>" \
import -i ./yt_music.json
You will then need to provide the client id and client secret as arguments for SyncDisBoi.
After the first authorization, the OAuth token will be cached in ~/.config/SyncDisBoi/spotify_oauth.json (on Linux) for future use.
Notes:
The convenient OAuth "Android Auto" access has been removed by Youtube. You now have to create your own OAuth application:
You will then need to provide the client id and client secret as arguments for SyncDisBoi.
After the first authorization, the OAuth token will be cached in ~/.config/SyncDisBoi/ytmusic_oauth.json (on Linux) for future use.
Alternatively, you can use request headers to login:
browser.json file.browser.json file as an argument for SyncDisBoiNotes:
After the first authorization, the OAuth token will be cached in ~/.config/SyncDisBoi/tidal_oauth.json (on Linux) for future use.
Notes:
You can enable debug mode (--debug) to generate detailed statistics about the synchronization process.
Files are saved in the debug/ folder:
conversion_rate.json: success rate of song synchronizationmissing_songs.json: list of tracks that couldn’t be synchronizednew_songs.json: list of tracks successfully synchronizedsongs_with_no_albums.json: list of songs skipped due to missing album metadataWe welcome contributions! Please see CONTRIBUTING.md for details on how to contribute to this project.
SyncDisBoi is licensed under the GNU AGPLv3 license. Refer to LICENSE for more information.
Your support helps me continue to maintain and improve this project. If you find SyncDisBoi useful and want to show your appreciation, consider sponsoring or donating:
Every bit of support is greatly appreciated!