CLI-based audio downloader for Tidal, YT, and Apple Music.
Project description
NovaReap
Cloud to FLAC, made simple.
NovaReap is a terminal tool that downloads music from Tidal, resolves Spotify links, scrapes Apple Music, and falls back to YouTube audio — all while tagging every file with full metadata and cover art automatically.
Built because the existing tools were either too complex, poorly maintained, or just sketchy. If you've paid for a streaming subscription, you should have a clean way to keep what you've already paid for.
This app is highly work in progress and developed by a single 16yr old, have mercy with the feedback.. qwq
What it does
- Direct hi-res downloads from Tidal — tracks, albums, playlists
- Spotify URL resolution with automatic YouTube fallback
- Apple Music link scraping
- Automatic metadata and cover art embedding (title, artist, album, track number, year, genre, cover)
- Accurate audio info tags — bit depth and sample rate are written correctly even when Tidal's API omits them
- Concurrent downloads with a live Rich progress UI
- Skips files you already have
Requirements
- Python 3.10 or newer
- FFmpeg on your PATH (used for audio conversion)
Python packages are installed automatically by the setup wizard.
Installation
pip
pip install novareap
novareap setup
From source
1. Install system dependencies
# Windows
winget install Python.Python.3.13
winget install Gyan.FFmpeg
Restart your terminal after, then verify:
python --version
ffmpeg -version
2. Clone and install
git clone https://github.com/Sanedish/novareap.git
cd novareap
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install .
3. Run setup
python wizard.py # recommended for first-time setup
# or
novareap setup # if installed via pip
First-time setup
Run the wizard once before doing anything else:
python wizard.py
The wizard will ask which setup mode you want:
Simple — recommended for most people. Picks the best quality automatically, skips optional Spotify config, and only asks two questions: where to save your music, and to log in to Tidal.
Advanced — full control. Choose quality tiers, enter Spotify API credentials for link resolution and smarter fallback matching, set parallel download workers, and toggle metadata embedding.
Your choice is saved — it also affects which options show up in --help.
If you try to run
novareap downloadbefore completing setup, NovaReap will tell you to run the wizard first rather than crashing.
Usage
novareap download <url>
Works with Tidal tracks, albums, and playlists; Spotify tracks, albums, and playlists; and Apple Music links. Does NOT work with videos like https://tidal.com/video/1234.
novareap download https://tidal.com/browse/track/123
novareap download https://tidal.com/browse/album/123
novareap download https://open.spotify.com/track/...
novareap download https://music.apple.com/...
# Multiple URLs at once
novareap download <url1> <url2> <url3>
Commands
| Command | Description |
|---|---|
download |
Download one or more URLs |
auth |
Log in to Tidal and save the session |
deauth |
Log out (removes the saved Tidal session) |
setup |
First-time setup wizard |
configure |
Edit your config interactively |
doctor |
Check dependencies and config — highlights anything missing |
info |
Show current config and dependency status |
meta |
Manually embed metadata into an existing audio file |
about |
Show developer info |
Auth aliases — these all do the same thing as auth and deauth:
novareap login / signin / sign-in / log-in
novareap logout / signout / sign-out / log-out
Download options
These apply to novareap download:
| Option | Default | Description |
|---|---|---|
-q, --quality |
master |
Tidal quality: low, high, lossless, master |
-o, --output |
~/Music/NovaReap |
Output directory |
-c, --concurrent |
3 |
Parallel downloads (hidden in simple mode) |
--no-skip |
off | Re-download files that already exist (hidden in simple mode) |
--no-metadata |
off | Skip metadata tagging (hidden in simple mode) |
--config |
~/.config/novareap/config.json |
Path to a custom config file |
Tidal quality tiers
| Name | Format | Notes |
|---|---|---|
low |
96 kbps AAC | Lossy — smallest files |
high |
320 kbps AAC | Lossy — good for casual listening |
lossless |
FLAC 16-bit / 44.1 kHz | CD quality |
master |
FLAC 24-bit / Hi-Res | Up to 192 kHz — requires a Tidal HiFi Plus subscription |
NovaReap walks down the quality ladder automatically — if your account can't serve the requested tier for a given track, it falls back gracefully rather than failing.
Lossless and Master quality require a PKCE login, which happens automatically when you run novareap auth.
Spotify setup (optional)
Spotify is used for metadata resolution and better YouTube fallback matching — not audio downloading.
- Create a free app at developer.spotify.com/dashboard
- Copy your Client ID and Client Secret
- Enter them when the wizard asks (advanced mode), or run
novareap configure
In simple mode, Spotify is skipped. YouTube fallback still works without it — just with slightly less accurate search queries.
Configuration
Default config location: ~/.config/novareap/config.json
{
"download_dir": "~/Music/NovaReap",
"tidal_quality": "master",
"youtube_quality": "320",
"concurrent_downloads": 3,
"retry_attempts": 3,
"retry_delay": 2.0,
"skip_existing": true,
"embed_metadata": true,
"filename_template": "{artist} - {title}",
"mode": "simple"
}
Troubleshooting
novareap doctor
| Symptom | Fix |
|---|---|
python not recognised |
Reinstall Python and enable "Add to PATH" |
ffmpeg not found |
Install FFmpeg, add to PATH, restart terminal |
| YouTube fallback fails | pip install --upgrade yt-dlp |
| Metadata not embedded | pip install mutagen |
| Spotify URLs not resolving | Add Spotify credentials via novareap configure |
| Tidal auth broken | Run novareap deauth then novareap auth to start fresh |
| Stuck on lossless but getting AAC | Check your Tidal subscription tier — lossless requires HiFi Plus |
Legal & disclaimer
NovaReap is intended strictly for personal, offline access to music you are legally entitled to download.
Downloads go through official platform APIs and require valid login credentials. The tool does not circumvent DRM or spoof protected streams.
Do not distribute copyrighted content. You are solely responsible for complying with each platform's Terms of Service and your local laws.
Distributed under the MIT License — see LICENSE. Provided as-is, without warranty.
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-1.1.tar.gz.
File metadata
- Download URL: novareap-1.1.tar.gz
- Upload date:
- Size: 32.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
910e2e496b2dd18ee7ee3f9c7728cab7f869fbc9528e1ee4af0dc0ab2cc774b8
|
|
| MD5 |
5ca014c88e948cdeec62aaad19e56d88
|
|
| BLAKE2b-256 |
a1e7d2244097df31684f01082a0c33ccccf3fa0a3477c02aace8e919774e184f
|
File details
Details for the file novareap-1.1-py3-none-any.whl.
File metadata
- Download URL: novareap-1.1-py3-none-any.whl
- Upload date:
- Size: 30.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e01e2fd873b01dc491502f76db166186693d084a299e94ec7780feeae1fa5eb5
|
|
| MD5 |
dea0e77311beda834be7448bb64bc2f9
|
|
| BLAKE2b-256 |
96bd9329a48ff1c09f2d8c83a0b495287776662da3b697558e0f2d380e962de0
|