A CLI tool to manage playlists across music streaming services.
Project description
unitunes
A command-line interface tool to manage playlists across music streaming services.
Introduction
unitunes is designed to keep playlists in sync across multiple streaming services. unitunes is a free, local, replacement for services like Soundiiz and TuneMyMusic.
unitunes defines Universal Playlists (UPs), a service agnostic representation of a playlist. UPs are the source of truth for playlists on streaming services. UPs are stored as plain text JSON, enabling them to be checked into version control systems.
The unitunes CLI tool provides a command-line interface to manage UPs. Playlists can be pushed and pulled from streaming services. unitunes automatically searches for missing tracks.
Current Supported Streaming Services
Name | Pullable | Pushable | Searchable |
---|---|---|---|
MusicBrainz | ✅ | ||
Spotify | ✅ | ✅ | ✅ |
Youtube Music | ✅ | ✅ | ✅ |
Want to add support for a new streaming service? See contributing.
Documentation
Quickstart
Installation
pip install unitunes
Initialize
unitunes init
This creates a config.json
file in the current directory.
Add Services
Spotify
Follow the instructions at https://spotipy.readthedocs.io/en/2.19.0/#getting-started to obtain client credentials.
Put the credentials in a file like so:
{
"client_id": "...",
"client_secret": "...",
"redirect_uri": "http://example.com"
}
Register the service in unitunes:
unitunes service add spotify spotify_config.json
Youtube Music
Follow the instructions at https://ytmusicapi.readthedocs.io/en/latest/setup.html#manual-file-creation to create a ytm_config.json
file.
Register the service in unitunes:
unitunes service add ytm ytm_config.json
Add Playlists
Initialize UP's from your existing playlists:
unitunes fetch spotify # use -f to skip confirmation
unitunes fetch ytm
Pull Playlists
Pull all tracks from all playlists.
unitunes pull
Search Playlists
Search for tracks on another service:
unitunes search SERVICE_NAME PLAYLIST_NAME
Push Playlists
Push all changes to streaming services:
unitunes push
Contributing
unitunes is in alpha. Contributions are very welcome. I am looking for collaborators to grow unitunes into a foundation for user controlled music software.
Take a look at the open issues!
To develop, fork the repository and clone it into your local directory. Install poetry.
Run pytest
to run tests. Add a service config to run more tests.
pytest --spotify spotify_config.json --ytm ytm_config.json # may need to run with -s to paste spotify redirect URL the first time
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
Built Distribution
File details
Details for the file unitunes-0.1.1.tar.gz
.
File metadata
- Download URL: unitunes-0.1.1.tar.gz
- Upload date:
- Size: 55.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.9.12 Darwin/21.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2ad82a58bbda6bfb70ad00da87a9f4bf3c0342e3c897d4cd6af3f6452dfd9dd |
|
MD5 | 018b10f6147777c67abeb78c769907e7 |
|
BLAKE2b-256 | 78359b1caddddd6559e1402436f2ec79097cb20384e998de0ec5cc362be0020e |
File details
Details for the file unitunes-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: unitunes-0.1.1-py3-none-any.whl
- Upload date:
- Size: 59.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.9.12 Darwin/21.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a0c2da18f1f39f5c1fc7f617470e6b59f8b9a2c7f2e646a45ccb262ab247f84 |
|
MD5 | 7ac85c6cd5b61ab5676cd72a4b52d98f |
|
BLAKE2b-256 | 2d76d2c416f5c1e19581ddb1311c88a63b05e07442d9719706117d9105a2ba98 |