TIDAL & Spotify Playlist Manager 🎵🟢
A powerful, modern music playlist management application featuring a dual-pane Web UI and a comprehensive CLI for TIDAL and Spotify.
Manage in-platform playlists or transfer tracks across platforms in both directions (TIDAL ↔ Spotify) with smart ISRC track matching and zero build-step requirements!
✨ Features
- 🔄 Dual-Platform & Cross-Platform Transfers (TIDAL & Spotify):
- Independently toggle either Panel A or Panel B between 🎵 TIDAL and 🟢 Spotify.
- In-Platform transfers: TIDAL ↔ TIDAL, Spotify ↔ Spotify.
- Cross-Platform transfers: Transfer songs seamlessly from TIDAL → Spotify or Spotify → TIDAL!
- Supports both Copy (keep in source) and Move (remove from source after copying).
- Smart ISRC Track Matching: Automatically queries target catalogs by international standard ISRC (International Standard Recording Code) for 100% exact track matches, with intelligent fallback to normalized Title + Artist search.
- Detailed Transfer Report: Displays a clear summary dialog showing successfully transferred tracks and any tracks not found in the destination service.
- 🎧 Read & Manage Playlists: View personal playlists side-by-side, inspect tracklists, high-res album covers, explicit badges, track durations, and total running times.
- ➕ Create & Rename: Add new playlists with descriptions on TIDAL or Spotify, or rename existing ones in-place.
- 📋 Copy & Move Tracks: Copy or move selected tracks between playlists with multi-selection.
- 🖱️ Drag & Drop (Cross-Panel & In-Playlist):
- In-Playlist Reordering: Reorder songs directly within any playlist by grabbing the grip handle (
⋮⋮) and dragging them up or down. A cyan indicator line shows the exact drop location, and the new sequence is instantly synced to the cloud! - Cross-Panel Transfers: Drag tracks directly from Panel A to Panel B (or vice versa)—even between TIDAL and Spotify—to copy them, or hold Alt / Shift to move them.
- In-Playlist Reordering: Reorder songs directly within any playlist by grabbing the grip handle (
- ⚡ Auto-Split Playlists (> 99 Tracks):
- Automatically splits any playlist with > 99 tracks into chunks of max 99 tracks (ideal for car head-units and audio gear with 99-track limits).
- Automatically names them with numerical suffixes:
[Name] 1,[Name] 2,[Name] 3... - Moves excess tracks seamlessly into the new suffix playlists.
- 🔍 Duplicate Finder & 1-Click Cleaner:
- Scans for duplicate tracks by exact Media ID and normalized Title + Artist matching.
- Groups duplicate copies and provides a 1-click Clean Duplicates action (safely retaining the earliest added copy).
- 📂 Remove Locally Available Tracks:
- Recursively scans any local music folder (
~/Music,~/Downloads, or custom paths) for audio files (.mp3,.flac,.m4a,.wav, etc.). - Accurately matches tracks against your streaming playlist via ISRC tags, normalized Title + Artist, and directory structure.
- Interactive preview dialog with checkboxes allowing you to review matched local files and remove them from your streaming playlist in one click so only tracks not yet in your local library remain!
- Recursively scans any local music folder (
- 💾 Backup & Flexible Export / Import:
- Export: Export playlists directly as JSON (full metadata), CSV (for spreadsheets and DJ tools), or M3U8 (for media players).
- Import: Import playlists from JSON, CSV, or M3U files with flexible destinations:
- ✨ Create as a brand-new playlist
- 📥 Append imported tracks directly into the playlist active in Panel A
- 📥 Append imported tracks directly into the playlist active in Panel B
- 🔀 Playlist Merge & Cloud Shuffle:
- Merge: Combine multiple playlists into a unified master playlist (with optional automatic deduplication).
- Cloud Shuffle: Randomize track ordering permanently in the cloud.
- 📊 Sorting & Ordering:
- Sort tracks on-the-fly by Title, Artist, Album, or Duration in ascending or descending order.
- One-click "Save Order" button to permanently commit the sorted order to the cloud.
- 🎧 Audio Preview Player:
- 30-second audio preview button directly on every track's artwork thumbnail.
- Sticky bottom preview player bar with scrubber, duration counter, and a 1-click direct link to web players.
- 🔎 Integrated Catalog Search:
- Global catalog search (Cmd+K / Ctrl+K) to discover tracks and add them directly to Panel A or Panel B with 1 click.
- 📖 In-App Guide & Shortcuts Modal:
- Built-in Guide button in the header bar with step-by-step feature walkthroughs and tips.
- 🔐 Privacy & Security First:
- Connects using official OAuth authorization.
- No passwords or sensitive credentials are ever stored. Session tokens are stored locally and strictly excluded from git tracking.
🚀 Installation & Launch Options
Choose whichever method is easiest for you:
📦 Option 1: Standalone Desktop App (No Python Required)
If you don't have Python installed and want a simple 1-click experience:
- Head over to the Latest Releases page on GitHub.
- Download the pre-built archive for your operating system:
- Windows:
TidalPlaylistManager-Windows-x64.zip(extract and double-clickTidalPlaylistManager.exe) - macOS:
TidalPlaylistManager-macOS.zip(extract and openTidalPlaylistManager) - Linux:
TidalPlaylistManager-Linux-x64.tar.gz
- Windows:
- The app starts locally and immediately opens the Web UI in your default browser!
🐍 Option 2: Install via pip / pipx (PyPI)
If you have Python 3.9+ installed:
Installation
# Recommended: Install in an isolated environment with pipx:
pipx install tidal-playlist-manager
# Or install in your active Python environment:
pip install tidal-playlist-manager
Launch
Start the app anytime from any terminal:
tidal-manager
How to update to the latest version:
To update your installation to the latest release on PyPI:
# For pipx users (bypasses local cache to fetch the newest release immediately):
pipx upgrade --pip-args="--no-cache-dir" tidal-playlist-manager
# For standard pip users:
pip install --upgrade --no-cache-dir tidal-playlist-manager
💻 Option 3: Run from Git Source Checkout
Prerequisites
- Python 3.9 or higher (python.org).
- Windows users: Make sure to check "Add Python to PATH" during setup.
- Linux users (Ubuntu/Debian):
sudo apt install python3 python3-venv python3-pip.
Launching from source:
- 🍎 macOS: Double-click
Start.commandorTidal Playlist Manager.app(or./run.shin Terminal). - 🪟 Windows: Double-click
run.batin File Explorer. - 🐧 Linux: Run
chmod +x run.sh && ./run.shin Terminal.
🔑 Connect your Accounts
1. TIDAL (Primary)
- Once started, your default browser opens at
http://127.0.0.1:8000. - Click Connect with TIDAL.
- Click the authorization link to approve the code in your browser (no password required).
- Once approved, the manager will instantly load your TIDAL playlists!
2. Spotify (Optional for Dual-Platform & Transfers)
- In the top-right header, click 🟢 Connect Spotify (or select the 🟢 Spotify tab on Panel A or Panel B).
- Enter your Spotify Developer App credentials:
- Go to Spotify Developer Dashboard (logged into your Spotify Premium account).
- Click Create app (App name: TidalPlaylist, Redirect URI:
http://127.0.0.1:8000/api/spotify/callback). - Copy and paste your Client ID and Client Secret.
- Click Save & Authorize Spotify. A popup window will prompt you to approve access.
- Once connected, your Spotify account badge appears and you can select Spotify in either panel!
📖 User Guide (Web UI Walkthrough)
| Feature | How to Use |
|---|---|
| Platform Switcher | Use the [ 🎵 TIDAL ] and [ 🟢 Spotify ] tabs at the top of Panel A and Panel B to choose the music service for each side independently. |
| Dual-Pane View | Select a playlist in Dropdown A and Dropdown B to inspect and manage two playlists side-by-side. |
| Cross-Platform Transfer | Set Panel A to TIDAL and Panel B to Spotify (or vice-versa). Select songs and click Copy → or Move → (or drag & drop). Matches via ISRC standard with Title/Artist fallback and shows a detailed transfer report. |
| In-Playlist Reordering (Drag & Drop) | Grab any song by the grip handle (⋮⋮) on the left and drag it up or down. A cyan indicator line shows the drop position. The new order is saved directly to your cloud playlist. |
| Copy / Move Tracks | Select tracks using checkboxes and click Copy → or Move →, or drag & drop songs directly between panels (hold Alt or Shift to move). |
| Sort & Save Order | Select a sort criteria like Title (A-Z) in the panel header. Click Save Order to commit this order permanently to your cloud playlist. |
| Clean Duplicates | Click Duplicates in the playlist header. Inspect grouped duplicate copies and click Clean Duplicates to remove redundant tracks safely. |
| Remove Locally Available | Click 📂 Remove Local in the playlist header. Enter or select a folder path (e.g. ~/Music), scan for matching audio files, and remove tracks you already have locally. |
| Backup & Export | Click Export, select JSON, CSV, or M3U, and download your playlist backup. |
| Import | Click Import in the top bar, upload a backup file, and choose whether to create a new playlist or append tracks directly into Panel A or Panel B. |
| Split Large Playlists | Click ⚡ Split (>99) to divide playlists with > 99 tracks into clean 99-track chunks (... 1, ... 2). |
| Catalog Search & Preview | Press Cmd+K to search millions of tracks. Click any track cover artwork for an instant 30-second audio preview. |
⌨️ Keyboard Shortcuts
- Cmd + K / Ctrl + K : Open global catalog search
- Esc : Close active dialog or modal window
🛠️ CLI Reference
All features are also available directly via the command-line interface:
| Command | Description | Example |
|---|---|---|
web |
Start the Web UI server | ./run.sh web --port 8000 |
login |
Authenticate with TIDAL via OAuth | ./run.sh login |
status |
Check authentication status | ./run.sh status |
logout |
Log out and delete stored session | ./run.sh logout |
list |
List all user playlists | ./run.sh list |
show <pl> |
View tracks in a playlist | ./run.sh show "Chill Vibes" |
create <title> |
Create a new playlist | ./run.sh create "Workout" -d "High energy" |
rename <pl> <title> |
Rename an existing playlist | ./run.sh rename "Workout" "Gym Bangers" |
delete-playlist <pl> |
Delete a playlist | ./run.sh delete-playlist "Old Mix" -y |
copy |
Copy tracks between playlists | ./run.sh copy --from "Pop" --to "Best Of" --indices 0,1,2-5 |
move |
Move tracks between playlists | ./run.sh move --from "Inbox" --to "Favorites" --indices 0,3 |
split <pl> |
Auto-split playlist (>99 tracks) | ./run.sh split "Massive Library" |
duplicates <pl> |
Check or clean duplicates | ./run.sh duplicates "My Mix" --clean |
remove-local <pl> <dir> |
Scan local folder & remove locally available tracks | ./run.sh remove-local "Chill" ~/Music --dry-run |
export <pl> |
Export playlist to file | ./run.sh export "Chill" -f csv |
import <file> |
Import playlist from file | ./run.sh import "chill_backup.json" |
merge |
Merge multiple playlists | ./run.sh merge --from "Rock,Indie" -t "Rock & Indie" |
shuffle <pl> |
Shuffle tracks on TIDAL | ./run.sh shuffle "Party Mix" |
search <query> |
Search TIDAL catalog | ./run.sh search "Daft Punk" |
🧪 Running Tests
.venv/bin/python3 -m unittest discover -s tests
⚠️ Disclaimer & Limitation of Liability
This free software is provided "as is" and is intended strictly as a testing and evaluation tool for educational and personal experimentation:
- No Liability or Responsibility: The author(s) and contributor(s) accept no liability or responsibility whatsoever for any direct, indirect, incidental, or consequential damages, playlist modifications, unintended track removals, loss of data, account restrictions, or API disruptions arising from the use of or inability to use this software.
- Testing Use Only: This application is provided for testing and evaluation purposes. Always verify changes and use it entirely at your own discretion and risk.
- Backups Strongly Recommended: Before modifying, sorting, splitting, or deduplicating playlists, please use the built-in Backup & Export feature to create a local JSON, CSV, or M3U backup of your playlists.
- Third-Party Services: This project is an independent open-source tool and is not affiliated with, endorsed by, or sponsored by TIDAL, Aspiro AB, or Spotify AB.
📌 Project Status & Forking
This project is feature-complete for its intended scope and is provided as a finished utility. Active ongoing feature development or maintenance is not planned.
If you would like to customize, extend, or build upon this tool, you are very welcome to fork, copy, or adapt the code freely under the terms of the MIT License.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2026 magicclue.
See CHANGELOG.md for version history.
Metadata
Release files for tidal-playlist-manager 1.4.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tidal_playlist_manager-1.4.4.tar.gz | 87.9 kB | With provenance | Details for tidal_playlist_manager-1.4.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tidal_playlist_manager-1.4.4-py3-none-any.whl | Python 3 | none | any | Details for tidal_playlist_manager-1.4.4-py3-none-any.whl |
Total release size: 164.7 kB
Release files / tidal_playlist_manager-1.4.4.tar.gz
| Download URL | tidal_playlist_manager-1.4.4.tar.gz |
|---|---|
| Size | 87.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f146a5a3c488a4305165b5c704268a84bf48f52d0c982f994d3534f5c4fd78bc
|
|
BLAKE2b-256 checksum How to use checksums |
2050490df7c8da6e876570a05c9af6d50ec349a37083bb02794f68d17e7d45ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.
Transparency logRelease files / tidal_playlist_manager-1.4.4-py3-none-any.whl
| Download URL | tidal_playlist_manager-1.4.4-py3-none-any.whl |
|---|---|
| Size | 76.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
399585949652565978d201ef4dadf18d579c4a3bf3cb0192c535178de6e3e5fd
|
|
BLAKE2b-256 checksum How to use checksums |
babc73f28e98645e33db71b3d7fbdd6ea01797e79fd4ab53236672946a877e4b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.
Transparency logSecurity for tidal-playlist-manager 1.4.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for tidal_playlist_manager-1.4.4.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.