A high-quality music downloader for Tidal, Spotify, and Apple Music.
Project description
🎧 NovaReap
High-quality, multi-source music downloader with smart fallbacks and clean metadata.
NovaReap is a single-file CLI tool that downloads music from Tidal, resolves Spotify links, scrapes Apple Music, and falls back to YouTube audio when needed — all while embedding metadata and cover art automatically.
✨ Features
- 🎵 Direct Tidal downloads (tracks, albums, playlists)
- 🔗 Spotify URL support (metadata + smart fallback matching)
- 🍎 Apple Music scraping
- ▶️ YouTube fallback via
yt-dlp - 🏷️ Automatic metadata + cover art embedding (
mutagen) - ⚡ Concurrent downloads with progress UI (
rich) - ♻️ Resume-friendly (skip existing files)
- 🧪 Built-in setup wizard and diagnostics
🚀 Quick Start
Windows (fresh install)
winget install Python.Python.3.12
winget install Gyan.FFmpeg
Restart your terminal, then verify:
python --version
ffmpeg -version
Install NovaReap
git clone https://github.com/<your-username>/novareap.git
cd novareap
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python novareap.py setup
python novareap.py doctor
⚙️ First-Time Setup
Run:
python novareap.py setup
This will:
- Create config + download directory
- Check dependencies (FFmpeg, yt-dlp, metadata support)
- Optionally configure Spotify
- Optionally authenticate Tidal
Skip Spotify setup:
python novareap.py setup --skip-spotify
Authenticate Tidal manually:
python novareap.py auth
📥 Usage
Download a track, album, or playlist:
python novareap.py download <url>
Examples:
python novareap.py download https://tidal.com/track/123
python novareap.py download https://tidal.com/album/123
python novareap.py download https://open.spotify.com/track/...
python novareap.py download https://music.apple.com/...
Multiple URLs:
python novareap.py download <url1> <url2> <url3>
🧰 Commands
| Command | Description |
|---|---|
setup |
First-time setup wizard |
doctor |
Diagnose missing dependencies |
info |
Show config + environment |
configure |
Edit config interactively |
auth |
Authenticate Tidal |
download |
Download content |
meta |
Add metadata to existing files |
⚡ Options
| Option | Default | Description |
|---|---|---|
-q, --quality |
master |
Tidal quality (low, high, lossless, master) |
-o, --output |
~/Music/NovaReap |
Output directory |
-c, --concurrent |
3 |
Parallel downloads |
--no-skip |
off | Re-download existing files |
--no-metadata |
off | Disable metadata tagging |
--config |
default path | Custom config file |
🏷️ Metadata
NovaReap automatically embeds:
- Title / Artist / Album
- Track number / Year / Genre
- Cover art
- Audio format info (FLAC, bit depth, etc.)
Manual tagging:
python novareap.py meta "path/to/file.flac"
⚙️ Configuration
Default config path:
~/.config/novareap/config.json
Example:
{
"download_dir": "~/Music/NovaReap",
"tidal_quality": "master",
"concurrent_downloads": 3,
"retry_attempts": 3,
"retry_delay": 2.0,
"skip_existing": true,
"embed_metadata": true,
"filename_template": "{artist} - {title}"
}
🔑 Spotify Setup (Optional)
Spotify is used for metadata only (not audio downloading).
- Create an app: https://developer.spotify.com/dashboard
- Copy client ID + secret
- Run:
python novareap.py configure
🧪 Troubleshooting
Run diagnostics:
python novareap.py doctor
Common issues:
- ❌
pythonnot recognized → reinstall with PATH enabled - ❌
ffmpegnot found → install + restart terminal - ❌ YouTube fallback fails → update dependencies
- ❌ Metadata missing → ensure
mutagenis installed - ❌ Spotify URLs fail → configure credentials
- ❌ Tidal issues → delete session + re-authenticate
Legal & Disclaimer
NovaReap is intended strictly for:
Personal, offline access to music you are legally allowed to download.
All downloads and metadata operations are executed through official APIs provided by the streaming services and can only be operated after providing valid authentication credentials. This tool simply automates standard access and does not circumvent DRM or illegally spoofed access to protected streams.
Do not distribute copyrighted content in any form or any way. It is your sole responsibility to ensure your use of this software complies with the Terms of Service of the connected platforms and all applicable local laws.
Limitation of Liability
[cite_start]This project is open-source and distributed under the MIT License[cite: 1]. By using this script, you acknowledge and agree to the following terms:
- [cite_start]THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. [cite: 2]
- [cite_start]IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. [cite: 3]
📜 License
MIT
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 novareap-0.1.0.tar.gz.
File metadata
- Download URL: novareap-0.1.0.tar.gz
- Upload date:
- Size: 27.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7247ce02f51730618ce6a6eaeeb375209e5888509405275a30a62ecccd6c2694
|
|
| MD5 |
5dcd3b40cfaacb487c18061b1f948bff
|
|
| BLAKE2b-256 |
6faffecef93ba3f1d742ed9542b94d84c7c83bf95616a41b4793e6c8ed5a9ddf
|
File details
Details for the file novareap-0.1.0-py3-none-any.whl.
File metadata
- Download URL: novareap-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b7e4b0b4df9cdb5987b4d303fe9d3f0907d60a1c5c8b2a011164c137fe53f54
|
|
| MD5 |
dc734920e4aef7f970f3a5330cd3d01d
|
|
| BLAKE2b-256 |
d302ccf5b0e3a08512f173e255e4f79ffa8406fa093e2d8af49b7cb637b3576c
|