Skip to content

AyushParkara/soundshift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SoundShift

Migrate playlists between music platforms. Privacy-first, open-source, one-time price.

Python 3.10+ License: MIT

SoundShift transfers your playlists and liked songs across streaming services. Unlike SongShift, Soundiiz, TuneMyMusic, and FreeYourMusic — SoundShift runs 100% on your device, is open-source (MIT), and doesn't require a subscription.

Feature SoundShift Competitors
Privacy 100% on-device Your tokens hit their servers
Pricing Free CLI, one-time paid app Monthly subscriptions
Source code Open (MIT) Closed
Match quality 5-factor confidence scoring Hope for the best
Indian platforms JioSaavn (planned) Zero support
Resume Picks up where it left off Starts over

Quick Start

pip install soundshift

# Export your Spotify playlists (opens browser for login)
soundshift export

# Migrate a playlist to YouTube Music
soundshift migrate "My Playlist"

That's it. Your playlist is now on YouTube Music.

Installation

# From PyPI (recommended)
pip install soundshift

# From source
git clone https://github.com/ayushparkara/soundshift.git
cd soundshift
pip install -e .

Requirements: Python 3.10+, a Spotify account, a YouTube Music account, a browser with DevTools.

CLI Commands

soundshift export                              Export Spotify playlists + liked songs
soundshift export --csv                        Also export to CSV
soundshift export --no-liked                   Skip liked songs
soundshift list                                List exported playlists
soundshift migrate "Playlist Name"             Migrate one playlist
soundshift migrate --all                       Migrate all playlists
soundshift migrate --liked                     Migrate liked songs
soundshift migrate --fast "Name"               Disable rate-limit delays
soundshift migrate --min-confidence high "X"   Only add high-confidence matches
soundshift migrate --from spotify --to ytmusic "X"   Explicit platforms
soundshift reset --auth                        Reset YT Music auth
soundshift reset --progress                    Reset migration progress
soundshift-gui                                 Launch the GUI

How It Works

Source Platform          Engine              Destination Platform
+--------------+     +----------------+     +------------------+
|   Spotify    | --> |  SoundShift    | --> |  YouTube Music   |
|  (PKCE auth) |     |  - Search      |     |  (browser auth)  |
|              |     |  - Match (5x)  |     |                  |
|  JioSaavn*   |     |  - Add         |     |  More coming*    |
+--------------+     |  - Resume      |     +------------------+
                     +----------------+
  1. Export — Authenticate with source platform, download playlists as JSON
  2. Match — For each track, search the destination with multiple strategies. Score results on 5 factors (title, artist, album, duration, rank) and assign confidence: HIGH / MEDIUM / LOW
  3. Add — Songs added individually (not batched) to avoid the all-or-nothing failure mode
  4. Resume — Progress saved every 20 songs. Re-run to pick up where you left off

Priority Matching

SoundShift scores every match on 5 factors:

Factor Weight What it checks
Title 35% Fuzzy string similarity (handles punctuation, casing)
Artist 30% Normalized artist name comparison
Album 15% Album name similarity (strips "Deluxe", "Remastered", etc.)
Duration 10% Track length within tolerance
Rank 10% Prefer higher search results

Confidence levels:

  • HIGH (>= 0.85) — Auto-accept
  • MEDIUM (0.60 - 0.84) — Accept, flag for review
  • LOW (< 0.60) — Skip by default

Use --min-confidence high to only accept perfect matches, or --min-confidence low to accept everything.

Authentication

Spotify (automatic)

SoundShift uses PKCE OAuth with Spotify's public client — no Developer app, no API keys, no setup. Just run soundshift export and log in via the browser window that opens.

YouTube Music (one-time paste)

YouTube Music has no official API. SoundShift uses browser cookies:

  1. Open https://music.youtube.com and log in
  2. Press F12 -> Network tab -> Refresh
  3. Click any request -> Right-click -> Copy request headers
  4. Paste when SoundShift prompts you

Headers are stored locally in data/yt_headers.json — never sent anywhere except directly to music.youtube.com.

JioSaavn (email + password)

JioSaavn has no official API. SoundShift reverse-engineered the internal endpoints. Login with your JioSaavn email and password:

soundshift export --from jiosaavn
soundshift migrate --from jiosaavn --to ytmusic "My Playlist"

Credentials are stored locally in data/jiosaavn_creds.json. This is the first migration tool in the world to support JioSaavn — no competitor (SongShift, Soundiiz, TuneMyMusic, FreeYourMusic) offers this.

Architecture

SoundShift uses an adapter pattern — the migration engine is platform-agnostic:

soundshift/
    models.py              # Track, Playlist, MatchResult dataclasses
    adapters/
        base.py            # SourceAdapter, DestinationAdapter interfaces
        spotify.py         # Spotify source (PKCE OAuth + API)
        ytmusic.py         # YouTube Music destination (cookie auth)
    matcher.py             # 5-factor priority matching engine
    exporters.py           # CSV/JSON export
    migrator.py            # Platform-agnostic migration engine
    cli.py                 # CLI interface
    gui.py                 # tkinter GUI

Adding a new platform means implementing one adapter class. The engine, CLI, matcher, and exporters work without modification.

Supported Platforms

Platform Source (export) Destination (import) Status
Spotify Yes Yes Stable
YouTube Music Yes Yes Stable
JioSaavn Yes - New — first tool to support this
Apple Music Planned Planned Future
SoundCloud Planned Planned Future
Tidal Planned Planned Future

Supported migration paths: Spotify -> YTMusic, JioSaavn -> YTMusic, JioSaavn -> Spotify, YTMusic -> Spotify, and more.

CSV Export

Export your playlists as CSV for DJ software (Serato, Rekordbox), spreadsheets, or backup:

soundshift export --csv

Produces data/playlists.csv with columns: playlist, track_name, artist, album, duration_ms.

FAQ

My migration fails after some time. Play music on music.youtube.com in the background while migrating — keeps the session alive.

Can I migrate YT Music -> Spotify? Not yet. SoundShift currently supports Spotify as source and YT Music as destination. More combinations coming with new adapters.

Is my data safe? Yes. Everything runs on your machine. The only network calls are to api.spotify.com and music.youtube.com. The source code is MIT — read it yourself.

Why browser headers instead of OAuth for YT Music? Google's YouTube OAuth scope doesn't grant write access to music.youtube.com. Browser cookies are what the web client uses and support both read and write.

The YT Music auth keeps failing. Make sure you're copying all request headers (not just the cookie), you're logged into YouTube Music (not regular YouTube), and the headers include x-goog-authuser.

Contributing

SoundShift is MIT licensed. Contributions welcome — especially new platform adapters.

git clone https://github.com/ayushparkara/soundshift.git
cd soundshift
pip install -e ".[dev]"
python -m pytest tests/

To add a new platform, implement SourceAdapter or DestinationAdapter from soundshift/adapters/base.py and register it in soundshift/adapters/__init__.py.

License

MIT — see LICENSE for details.

About

Migrate playlists between Spotify, YouTube Music and JioSaavn. Open-source, privacy-first, no subscription.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages