Skip to main content

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

  1. Create an app: https://developer.spotify.com/dashboard
  2. Copy client ID + secret
  3. Run:
python novareap.py configure

🧪 Troubleshooting

Run diagnostics:

python novareap.py doctor

Common issues:

  • python not recognized → reinstall with PATH enabled
  • ffmpeg not found → install + restart terminal
  • ❌ YouTube fallback fails → update dependencies
  • ❌ Metadata missing → ensure mutagen is 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


Download files

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

Source Distribution

novareap-0.1.0.tar.gz (27.6 kB view details)

Uploaded Source

Built Distribution

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

novareap-0.1.0-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

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

Hashes for novareap-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7247ce02f51730618ce6a6eaeeb375209e5888509405275a30a62ecccd6c2694
MD5 5dcd3b40cfaacb487c18061b1f948bff
BLAKE2b-256 6faffecef93ba3f1d742ed9542b94d84c7c83bf95616a41b4793e6c8ed5a9ddf

See more details on using hashes here.

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

Hashes for novareap-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2b7e4b0b4df9cdb5987b4d303fe9d3f0907d60a1c5c8b2a011164c137fe53f54
MD5 dc734920e4aef7f970f3a5330cd3d01d
BLAKE2b-256 d302ccf5b0e3a08512f173e255e4f79ffa8406fa093e2d8af49b7cb637b3576c

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