Transfer your music playlists seamlessly between Spotify, Apple Music, and Tidal.
- Python 3.9 or higher
- pip (Python package manager)
- API Credentials from Spotify, Apple Music, and/or Tidal (see SETUP_GUIDE.md)
-
Download or clone this repository
-
Run the automated setup script:
chmod +x setup.sh ./setup.sh
-
Configure your API credentials:
- Copy
.env.exampleto.env - Fill in your API keys (see SETUP_GUIDE.md for detailed instructions)
- Copy
-
Start the application:
python3 START_APP.py
-
Open your browser to the URL shown in the terminal (usually
http://127.0.0.1:5010)
- β Multi-Platform Support - Transfer between Spotify, Apple Music, and Tidal
- β Smart Track Matching - Uses fuzzy matching to find the best track matches across platforms
- β Custom Playlist Import - Import Spotify playlists by URL, including Daily Mix and personalized playlists
- β Real-Time Progress - Live updates during transfer operations
- β Local & Network Access - Run on your machine or share on your local network
- β Session Management - Your credentials and progress are securely stored in sessions
- β Detailed Reports - CSV/JSON export of match results
- β Duplicate Detection - Automatically skips existing playlists
- Python 3.9+ (Download here)
- Spotify Account + API credentials
- Apple Music or Tidal subscription
See SETUP_GUIDE.md for detailed step-by-step instructions on obtaining:
- Client ID and Client Secret from Spotify Developer Dashboard
- Redirect URI:
http://127.0.0.1:5010/spotify/callback
- Team ID, Key ID, and Private Key (.p8 file) from Apple Developer
- OAuth login (handled by the app)
- Launch the app with
python3 START_APP.py - Browser opens automatically to
http://127.0.0.1:5010 - Enter API credentials on the configuration page
- Connect your accounts - Spotify, Apple Music, or Tidal
- Start transferring! π
- Select playlists to transfer from your Spotify library
- Choose destination - Apple Music or Tidal
- Click Transfer - Watch the progress in real-time
- View results - Success/failure status for each track
Can't find a playlist? Import it by URL:
- Click "Import Custom Playlist" on the homepage
- Paste a Spotify playlist URL (works with Daily Mix, Discover Weekly, friend's playlists, etc.)
- Preview the playlist details
- Add it to your transfer list
| Content Type | Spotify β Apple Music | Spotify β Tidal |
|---|---|---|
| Playlists | β Yes | β Yes |
| Custom Playlists (by URL) | β Yes | β Yes |
| Daily Mix | β Yes | β Yes |
| Personalized Playlists | β Yes | β Yes |
The app uses RapidFuzz for fuzzy string matching to find the best track matches across platforms:
- Title similarity - Handles variations in track names
- Artist similarity - Matches different artist name formats
- Album matching - Normalizes remaster labels and special editions
- Remaster labels removed (e.g., "2009 Remaster")
- Featuring artists handled (e.g., "feat.", "ft.")
- Special characters stripped
- Case-insensitive comparison
# Find and kill processes on port 5010
lsof -ti:5010 | xargs kill -9This is expected behavior. The authorization completes successfully on the server. Just navigate back to your network URL (e.g., http://192.168.x.x:5010) after seeing this error.
If you need to generate an Apple Music User Token manually, visit http://127.0.0.1:5010/apple/user-token in your browser.
source .venv/bin/activate
pip install -r requirements.txtInstall Python from python.org and check "Add Python to PATH" during installation.
Music_teleportation/
βββ app.py # Main Flask application
βββ transfer.py # Transfer logic and API clients
βββ tidal_client.py # Tidal API integration
βββ START_APP.py # Launcher script
βββ setup.sh # Automated setup script
βββ requirements.txt # Python dependencies
βββ .env.example # Environment template
βββ templates/ # HTML templates
β βββ index.html # Main UI
β βββ apple_user_token.html # Apple Music token helper
βββ static/ # CSS and assets
β βββ style.css # Application styles
βββ .flask_session/ # Session storage (auto-created)
To share the app on your local network:
- Start the app with
python3 START_APP.py(orpython app.py --host 0.0.0.0 --port 5010) - The startup banner will show your network URL (e.g.,
http://192.168.X.XXX:5010) - Other devices on your network can access this URL
Important for Spotify OAuth: Always use http://127.0.0.1:5010/spotify/callback as your redirect URI in the Spotify Dashboard, even for network access. See SETUP_GUIDE.md for details.
- β Local Only - All processing happens on your device
- β No Data Collection - Your credentials stay on your machine
- β Direct API Communication - No third-party servers
β οΈ Never commit.envfile - it contains your API credentialsβ οΈ Keep your API keys private - don't share themβ οΈ Local network only - this app is designed for local/network use, not public internet
- Sessions:
.flask_session/(temporary) - Credentials: Session storage and
.envfile (not shared)
If the automated setup script doesn't work:
# Create virtual environment
python3 -m venv .venv
# Activate virtual environment
# On macOS/Linux:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy environment template
cp .env.example .env
# Edit .env with your API credentials
nano .env # or use your preferred editor
# Run the app
python app.py- Framework: Flask 3.0.3
- Session Storage: Filesystem-based sessions
- Track Matching: RapidFuzz for fuzzy string matching
- Web Scraping: BeautifulSoup4 for blocked playlists
- Real-Time Updates: Server-Sent Events (SSE)
- Python Version: 3.9+
This is a personal project, but feel free to fork and customize for your needs!
This project is provided as-is for personal use.
Built with β€οΈ for music lovers who hate platform lock-in.
