Skip to main content

Turn any Spotify playlist into an offline audio library in seconds.

Project description

Spotify2Local Banner

Python 3.11+ Managed by uv License: MIT

Features Installation Configuration Usage Contributing

Spotify2Local is a zero-friction terminal utility that bridges your Spotify library with your local storage. Built with a responsive TUI, it automatically resolves tracks, fetches the highest quality audio via YouTube, and precisely tags your files with ID3 metadata—all without the setup headache.

Demo

Features

  • Stupid-simple setup: Works flawlessly out of the box with sensible defaults, while exposing deep configuration options for power users who want control.
  • Flawless local libraries: Your music player will thank you. Automatically embeds pristine ID3 tags and high-res cover art for a perfectly organized archive.
  • Studio-grade audio: Usig a smart-matching heuristics automatically bypass messy music videos and live performances to secure the highest-quality official tracks.
  • Modern TUI No massive list of CLI flags to memorize. Just launch the TUI, search with your keyboard, and watch the progress bars fly.

Installation

Spotify2Local uses uv for fast, reliable dependency management.

Clone the repository and sync the environment:

git clone [https://github.com/mserra0/Spotify2Local.git](https://github.com/mserra0/Spotify2Local.git)
cd Spotify2Local
uv sync

Configuration

Before running the application, you need to provide your Spotify API credentials.

  1. Create an application in the Spotify Developer Dashboard.
  2. Set your redirect URI to http://127.0.0.1:9090.
  3. Copy the .env.example file to .env and apply your credentials. ALL DONE!
cp .env.example .env
SPOTIPY_CLIENT_ID="your_client_id"
SPOTIPY_CLIENT_SECRET="your_client_secret"
SPOTIPY_REDIRECT_URI="[http://127.0.0.1:9090](http://127.0.0.1:9090)"

Usage

Launch the interactive interface:

uv run main.py

Controls

Key Action
/ Navigate playlists
Enter Download selected playlist
0 Enter a Spotify URL manually
Esc Go back or exit

[!IMPORTANT]

  • Library Requirement: The tool can only process playlists saved to your authenticated account. To download a public playlist, simply open it in Spotify, click the ... menu, and select Add to Your Library before running the tool.
  • Editorial Restrictions: Spotify restricts direct API access to certain official editorial playlists, which may result in a 403 Forbidden error. The fix: Create a new personal playlist, copy all the tracks from the editorial playlist into it, and download your personal playlist instead.

Contributing

We love community contributions. If you'd like to help improve Spotify2Local, whether it's fixing a bug or adding a new TUI feature, please review our Contributing Guide for instructions on setting up your local environment and submitting a pull request.

Acknowledgements ❤️

This project stands on the shoulders of giants. A special thanks to the maintainers of the following open-source tools:

  • yt-dlp: For handling the heavy lifting of smart audio matching, downloading, and network reliability from YouTube.
  • Textual & Rich: For powering the beautiful, responsive terminal user interface.
  • vhs: For generating the high-quality terminal recording used in this documentation.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spotify2local-0.1.0.tar.gz (5.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spotify2local-0.1.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file spotify2local-0.1.0.tar.gz.

File metadata

  • Download URL: spotify2local-0.1.0.tar.gz
  • Upload date:
  • Size: 5.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for spotify2local-0.1.0.tar.gz
Algorithm Hash digest
SHA256 800cf06d72a82f08b6aa1d7c2fd9e68c3f8f623c754a7d86db0d8da438461415
MD5 50420325221500213a6655062c9d6124
BLAKE2b-256 18e87a32e1ac404fb76e99a4654f90948c1bcd8c0ce05706ee0292400fd93c14

See more details on using hashes here.

File details

Details for the file spotify2local-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: spotify2local-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for spotify2local-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b9dc47a26bbb76b5a17adfe3422e7e87aec289d88308480c9420f2254b5997ad
MD5 3a91de1ead58683837e9c0931406fbf3
BLAKE2b-256 8823b7d2516e77209dfea1539379000c3a74c0f7d726071b9e89d92a26d96895

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page