Spots is a modular music coordination library that unifies multiple providers (e.g. Deezer, Spotify, YouTube) into a single, consistent interface.
Project description
🎧 Spots
Spots is a modular music coordination library that unifies multiple providers (e.g. Deezer, Spotify, YouTube) into a single, consistent interface.
It resolves tracks across platforms, matches metadata intelligently, and enables downloading, playlist handling, and media conversion — all through a clean, configurable API.
✨ Features
-
🔍 Multi-provider search
- Supports multiple metadata providers with fallback resolution
-
🧠 Intelligent track matching
- Matches tracks across platforms using pattern-based scoring
-
🎵 Unified media resolution
- Seamlessly map metadata → YouTube → downloadable media
-
⚡ Provider fallback system
- Automatically falls back when a provider fails
-
🗂️ Built-in caching
- Reduces redundant API calls and speeds up repeated queries
-
⚙️ Config-driven architecture
- Enable/disable integrations (Spotify, YouTube, etc.)
-
📦 Download + conversion pipeline
- Handles media extraction and conversion (via yt-dlp)
📦 Installation
pip install spots
⚙️ Setup
Run the setup script:
spots setup
- follow the prompts to generate the config folder
🚀 Usage
# search a title
# required search format: `Artist - Title`
spots download "Kelsey Lynn - Modern Day Marilyn Monroe"
# download a direct url
spots download "https://www.youtube.com/watch?v=UmZPa5Qudtw"
Spots will:
- Resolve the track via metadata providers
- Match it to a YouTube video
- Download and convert it
- Store results locally
🎮 Available commands
- download - downloads a direct url or a search query
spots download "Kelsey Lynn - Modern Day Marilyn Monroe"
- migrate-likes - transfers likes from Spotify to YouTube (more providers coming soon...)
spots migrate-likes - add-to-history - adds a user's downloaded songs to the Spots history. Avoids duplicate downloads.
spots add-to-history path-to-music
- remove-duplicates - removes duplicate songs in a given folder.
spots remove-duplicates path-to-music
⚠️ Important
The Spotify API content may not be downloaded using this project. This project is created for personal use only and is intended for educational purposes. Any use of this project to download or distribute copyrighted material without proper authorization is against the terms of service of Spotify and other involved platforms. The project's author and contributors are not responsible for any misuse of this software.
🤝 Contributing
Contributions are welcome.
If you're adding a provider or improving matching logic, open a PR with a clear description of changes.
📄 License
GPL-3.0-or-later
💬 Summary
Spots is designed to make cross-platform music workflows simple:
Give it a track — it figures out the rest.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spots_cli-0.1.0.tar.gz.
File metadata
- Download URL: spots_cli-0.1.0.tar.gz
- Upload date:
- Size: 911.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67c0f67d84a502a5fa0544718e6b33f9d6f76cdab5695e1b205f822cb519f996
|
|
| MD5 |
aa9c63234ff32cc10fdbb868b969c049
|
|
| BLAKE2b-256 |
e7ce097c4f9945da58517df5227f51306f8e525f0432da0c2b407dfc724d75a0
|
File details
Details for the file spots_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: spots_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 69.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1605ceba45db6a1b5598d92bb877dc0ece992b96f122dfe86f2861a6aa0bfb2d
|
|
| MD5 |
a54de467f4bd3442f54cce9a76c1985e
|
|
| BLAKE2b-256 |
5b9f8687c135e4dc283b08f29390a8a465a85753c01f4749e5c845887b86e330
|