A Python utility to push music (albums) from local sources to your music streaming service library.
  • Python 99.8%
  • Makefile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Psy-Q 459314e5c6
All checks were successful
CI Pipeline (Test, Build, Publish) / Run pytest (push) Successful in 39s
CI Pipeline (Test, Build, Publish) / Build wheels/binaries for dist (push) Has been skipped
CI Pipeline (Test, Build, Publish) / Publish package to PyPI (push) Has been skipped
Remove dead link
2026-07-29 08:46:36 +02:00
.forgejo/workflows Use FQDN 2026-07-24 13:23:47 +02:00
docs Remove dead link 2026-07-29 08:46:36 +02:00
pushtunes Reformat 2026-07-28 16:41:59 +02:00
pushtunes.egg-info Bump version for updated docs (no functional changes) 2026-07-28 22:22:48 +02:00
tests Second half of provider refactoring 2026-07-28 16:40:23 +02:00
.coverage Remove excessive type hints, increase test coverage 2026-07-23 17:25:13 +02:00
.editorconfig Add .editorconfig 2025-11-09 13:43:36 +01:00
.gitignore Remove excessive type hints, increase test coverage 2026-07-23 17:25:13 +02:00
.readthedocs.yaml More polished docs and Read The Docs support 2025-11-16 12:10:38 +01:00
AGENTS.md Stuff for future agents 2026-07-28 16:40:30 +02:00
CHANGELOG.md Updating changelog 2026-07-28 16:41:22 +02:00
cliff.toml feat!: Remove legacy --filter option (#44) 2025-11-18 21:24:40 +01:00
example-profile.toml feature/more-profile-options (#47) 2025-11-25 10:18:50 +01:00
LICENSE Initial commit 2025-11-08 13:08:44 +01:00
Makefile build: add Makefile for dev tasks, build, publishing, and changelog generation 2026-07-23 08:52:22 +02:00
mkdocs.yml New project URLs 2026-07-24 07:11:46 +02:00
profile-migration.py feat(profiles): standardize profiles to TOML and add migration script 2026-07-23 08:44:55 +02:00
pyproject.toml Bump version for updated docs (no functional changes) 2026-07-28 22:22:48 +02:00
pyrightconfig.json Remove excessive type hints, increase test coverage 2026-07-23 17:25:13 +02:00
README.md Merge playlist docs 2026-07-28 22:10:51 +02:00
setup_tidal_auth.py Reformat 2026-07-23 17:29:51 +02:00
test.csv Remove excessive type hints, increase test coverage 2026-07-23 17:25:13 +02:00
uv.lock Bump version for updated docs (no functional changes) 2026-07-28 22:22:48 +02:00

Pushtunes

Pushtunes is a small tool to push your music from local sources (Subsonic-compatible server/Navidrome, Jellyfin, a CSV file, etc.) to music streaming services. It can also back up your music libraries to CSV files and restore them later. Currently Spotify, YouTube Music, and Tidal are supported. See "Music streaming services" below for more.

Documentation is also available in an easy-to-browse style on Read the Docs, if you prefer.

Installation

With any pip-like environment (pip, uv, etc.) it should be as easy as:

pip install pushtunes

See Installation for more examples or how to install from source instead.

Usage

Set your music service and source credentials (see Getting Started and, for example:

# Push albums from Subsonic to Spotify
pushtunes push albums --from subsonic --to spotify

# Push individual tracks (starred/favorites) from Subsonic to Spotify
pushtunes push tracks --from subsonic --to spotify

# Push playlists from Subsonic to Spotify, YouTube Music, or Tidal
pushtunes push playlist --from subsonic --playlist-name=myplaylist --to spotify
pushtunes push playlist --from subsonic --playlist-name=myplaylist --to ytm
pushtunes push playlist --from subsonic --playlist-name=myplaylist --to tidal

# Push from CSV file
pushtunes push tracks --from csv --csv-file=tracks.csv --to spotify

See pushtunes --help, pushtunes push albums --help, pushtunes push tracks --help, or pushtunes push playlist --help for more options.

There are many advanced features such as:

Music sources

  • Subsonic (including Navidrome, Airsonic, etc.)
  • Jellyfin
  • CSV files

Music streaming services

  • Spotify
  • YouTube Music
  • Tidal

The streaming service market is in a very sad state of affairs regarding APIs. Spotify and Tidal have good ones, YouTube Music is almost unusable and working with it is only possible thanks to the people who maintain the unofficial ytmusicapi library. Deezer and Qobuz don't allow anyone to use their API anymore, requests for API keys go unanswered, documentation is being deleted and no up to date libraries exist.

Your main choices are Spotify, YouTube Music, and Tidal.

More documentation

Head over to our Read The Docs page.