Metadata-Version: 2.4
Name: novareap
Version: 1.1
Summary: CLI-based audio downloader for Tidal, YT, and Apple Music.
License: MIT License
        
        Copyright (c) [2026] [Malo Interactive / Sanedish]
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        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. 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.
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.0.0
Requires-Dist: requests>=2.25.0
Requires-Dist: beautifulsoup4>=4.9.0
Requires-Dist: rich>=13.0.0
Requires-Dist: mutagen>=1.47.0
Requires-Dist: spotipy>=2.20.0
Requires-Dist: tidalapi>=0.7.0
Requires-Dist: yt-dlp>=2023.0.0
Dynamic: license-file

# 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

```bash
pip install novareap
novareap setup
```

### From source

**1. Install system dependencies**

```powershell
# Windows
winget install Python.Python.3.13
winget install Gyan.FFmpeg
```

Restart your terminal after, then verify:

```powershell
python --version
ffmpeg -version
```

**2. Clone and install**

```powershell
git clone https://github.com/Sanedish/novareap.git
cd novareap

python -m venv .venv
.\.venv\Scripts\Activate.ps1

pip install .
```

**3. Run setup**

```powershell
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:

```bash
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 download` before completing setup, NovaReap will tell you to run the wizard first rather than crashing.

---

## Usage

```bash
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.

```bash
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`:

```bash
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.

1. Create a free app at [developer.spotify.com/dashboard](https://developer.spotify.com/dashboard)
2. Copy your Client ID and Client Secret
3. 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`

```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

```bash
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](LICENSE). Provided as-is, without warranty.

