Skip to main content

TIDAL & Spotify Playlist Manager 🎵🟢

PyPI version Release License: MIT Python: 3.9+ FastAPI Platform: macOS | Linux | Windows

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.
  • ⚡ 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!
  • 💾 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:

  1. Head over to the Latest Releases page on GitHub.
  2. Download the pre-built archive for your operating system:
    • Windows: TidalPlaylistManager-Windows-x64.zip (extract and double-click TidalPlaylistManager.exe)
    • macOS: TidalPlaylistManager-macOS.zip (extract and open TidalPlaylistManager)
    • Linux: TidalPlaylistManager-Linux-x64.tar.gz
  3. 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.command or Tidal Playlist Manager.app (or ./run.sh in Terminal).
  • 🪟 Windows: Double-click run.bat in File Explorer.
  • 🐧 Linux: Run chmod +x run.sh && ./run.sh in Terminal.

🔑 Connect your Accounts

1. TIDAL (Primary)

  1. Once started, your default browser opens at http://127.0.0.1:8000.
  2. Click Connect with TIDAL.
  3. Click the authorization link to approve the code in your browser (no password required).
  4. Once approved, the manager will instantly load your TIDAL playlists!

2. Spotify (Optional for Dual-Platform & Transfers)

  1. In the top-right header, click 🟢 Connect Spotify (or select the 🟢 Spotify tab on Panel A or Panel B).
  2. 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.
  3. Click Save & Authorize Spotify. A popup window will prompt you to approve access.
  4. 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)

Source distribution for tidal-playlist-manager 1.4.4
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)

Table of built distributions (wheels) for tidal-playlist-manager 1.4.4
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page