Skip to content

iamprivacy/Waves

Repository files navigation

Waves

A native desktop app for downloading music from your own TIDAL account: search‑first, art‑forward, and built for people who'd rather click than type.

License: AGPL-3.0 Platforms Python Built on Tidaler

Browse page with new arrivals and new tracks
Browse new arrivals and grab any track in one click.

Search results with artist previews and one-click downloads
Search anything, preview an artist in place, and download a whole discography.

Waves is a brand‑new graphical front end for the proven Tidal‑DL‑NG download engine (actively maintained as Tidaler). It keeps that engine intact and wraps it in a from‑scratch, native desktop UI for macOS, Windows, and Linux (Intel/AMD and Apple‑silicon/ARM).

A paid TIDAL plan is required. Waves downloads from your own account, for your personal use, up to HiRes Lossless / TIDAL MAX (24‑bit, 192 kHz) and Dolby Atmos where available.

What Waves can do

  • Search all of TIDAL from a single bar, or paste a link to open a release instantly.
  • Browse artist and album pages rich with cover art, quality badges, and dates you can sort and filter.
  • Preview a full track (or an artist's top song) right inside the app before you download.
  • Download a track, an album, a playlist, a mix, a music video, or an artist's whole discography in one click.
  • Pick exactly what a discography pulls in, and let Waves skip duplicate editions.
  • Keep your TIDAL favorites close, however large your library grows.
  • Follow every download in a live, grouped queue.
  • Write Plex‑friendly tags, and choose the explicit or clean version.
  • Set up FFmpeg with one click, and optionally update Waves from inside the app.
  • Run native on macOS, Windows, and Linux, with downloads up to HiRes Lossless and Dolby Atmos.

Standing on the shoulders of others

Waves exists because of a chain of people who built and kept alive a tool a lot of us love. None of this is mine alone, and I want that to be the first thing you read, not a footnote.

  • exislow created Tidal‑DL‑NG, the project everything here descends from. The original repository and account disappeared from GitHub, and as far as I know exislow never returned. The work was, and is, excellent. Thank you.
  • After that, members of the community picked it up and kept it running. Some of those forks were taken down too, or wound down over time. Everyone who spent their own hours keeping this alive has my gratitude.
  • Today it lives on as Tidaler, maintained by maya-doshi in their spare time. Waves is built directly on Tidaler: its backend is Tidaler's backend (more on that below). Thank you, maya‑doshi, for keeping the lights on.
  • And underneath all of it sits tidalapi, the Python TIDAL client the rest of the stack is built on. It's the layer at the very bottom: every search, every login, and every track that comes down happens because tidalapi is quietly speaking to TIDAL on Waves' behalf. Tidal‑DL‑NG began by wrapping it, and Tidaler and Waves rest on it still; none of them could exist without it. Most people will never see it, which is the sign of a good foundation. Thank you to everyone who has built and maintained it.

I'm a sucker for a beautiful graphical interface and tend to avoid the command line, but I seem to be in the minority, so the GUI side of tools like Tidaler doesn't get as much attention as the engine underneath. Waves is my way of giving back in a way that's genuinely useful (and, honestly, scratches my own itch): a polished, native GUI that doesn't touch what already works so well.

Waves is, and always will be, open source under the same license as Tidal‑DL‑NG and Tidaler (see License).


A new face, the same engine

The single most important design rule of Waves: don't break what works. All of TIDAL authentication, the multithreaded / multi‑chunk download engine, metadata tagging, quality handling, and configuration are Tidal‑DL‑NG's (actively maintained as Tidaler), mostly the same code, improved and hardened in a few careful places.

Concretely, Waves is a self‑contained UI package (tidaler/waves_ui/) that imports Tidaler's existing objects (Settings, Tidal, Download, search) and presents them through a Qt Quick interface. The download/backend code is the upstream Tidaler code, kept intact apart from a few small, surgical changes: a six‑line tweak so an in‑progress segment can be aborted mid‑chunk (Waves stops/quits instantly instead of waiting on a network read); an optional keep_album flag on the per‑track download so the "best of both" edition merge can tag a borrowed track under a chosen edition; a hardened final move that swaps each finished file into place atomically, so an interrupted download can never leave a half‑written file in your library; and some defensive security hardening. Everything else is used as‑is.

To be just as plain about what is new: it's mine. I wrote the interface, the in-app updater, the managed ffmpeg install, and the packaging that ships it all as a signed desktop app, and that comes to about two thirds of the code in this repository. The rest is the download engine that Tidal-DL-NG built and Tidaler keeps alive, carrying the surgical improvements described above.


What's new in Waves

Everything below is new in Waves, layered on top of the Tidal‑DL‑NG engine described above:

  • A from‑scratch native UI: a calm, dark "console" theme (CRT phosphor‑green) drawn in PySide6 / Qt Quick. No web view, no Electron; one real desktop window.
  • Browse, where Waves opens: TIDAL's editorial front page (New Arrivals, TIDAL Rising, the full genre / mood / decade catalogue), rendered art‑first with live cover mosaics. Every page drills down for real, with hover Preview / Download controls, quality badges, and trackpad swipe‑back (macOS) the whole way.
  • Built‑in updates (opt‑in): Waves can check for a newer version and install a cryptographically signed update from Settings, with a one‑click restart. Update checks are off by default and never send any of your data (see Privacy).
  • Search‑first: a single field searches artists, albums, tracks, videos, playlists, and mixes, or resolves a pasted tidal.com link and opens the release automatically.
  • Art‑forward results: cover art inline, results grouped by type, color‑coded quality badges (HI‑RES / LOSSLESS / HIGH), release‑date sorting and filtering, and clickable per‑artist credits.
  • Listen before you download: play any track (or an artist's top song) as a full, seekable preview streamed from your own account, right where you are. A slim now‑playing bar follows you across every view and jumps back to the track's artist page on click.
  • A built‑in video player: music videos play right inside Waves, with seek, keyboard controls, and clickable title and artist links. A quality picker offers just the resolutions each video actually has (up to 1080p), switches mid‑stream without losing your place, and remembers your choice. Videos download too, on their own or as part of a playlist or mix.
  • One‑click FFmpeg, with status at a glance: Waves downloads a trusted, checksum‑verified FFmpeg build for your OS/CPU, no hunting down binaries or editing paths. A color‑coded status light shows where things stand, and anything that needs FFmpeg stays grayed out until it's present (see Acknowledgments).
  • Album & artist as first‑class units: rich artist pages (bio, discography, EPs & singles, top tracks) with one‑click download‑the‑whole‑thing actions.
  • Smart whole‑artist downloads: per‑source toggles (albums, EPs & singles, features, compilations), keeping just the most complete edition of each album by default while preserving genuinely different releases like remasters and live takes. Features and compilations pull only the tracks the artist actually appears on, never another artist's whole album.
  • Most complete, highest‑quality albums, automatically: when one edition has the bonus tracks and another the better quality, downloading the album quietly builds a best of both: a single album that takes each song at its best. Matching is strict (ISRC first), so nothing is dropped or swapped. On by default, tunable in Settings.
  • A real library layout by default: downloads land in Artist/[Year] Album/Disc-Track. Artist - Title, the structure Plex reads natively, instead of flat Albums/ and Tracks/ bins. Paths stay fully customizable in Settings.
  • Library‑friendly tagging: a "clean album‑artist" mode (on by default) writes only the primary artist to the album‑artist tag, so Plex won't mis‑read or split multi‑artist albums.
  • Explicit, clean, or both: when a release comes in both explicit and clean versions, keep whichever you prefer, or both side by side.
  • Instant navigation: pages and cover art you've already seen render instantly from a persistent local cache and quietly refresh in the background. Even a fresh launch paints right away.
  • My TIDAL: your favorite albums, tracks, artists, videos, playlists, and mixes, with virtualized infinite scroll so large libraries stay smooth.
  • Grouped download queue: Completed / Downloading / Queued sections with live per‑track progress, plus per‑album and per‑artist roll‑ups.
  • Defense‑in‑depth by default: helper binaries are verified before they run, FFmpeg against a published SHA‑256 and app updates against an Ed25519 signature that fails closed. Extra defensive input validation is layered in as general hygiene.
  • Silent background work on Windows: every FFmpeg job (FLAC extraction, video conversion, previews) runs fully hidden. No more split‑second console pop‑ups stealing focus while you type, a long‑standing annoyance during downloads in the upstream app.
  • Thoughtful touches: smooth animations throughout, paste‑to‑open for TIDAL links, and metadata fixing for Plex users.

Privacy

Privacy is the foundation of this application. Waves collects nothing about you and has no way of knowing how the application is used: no telemetry, no analytics, no tracking. By default it makes no unsolicited outbound connections at all. It talks to TIDAL only to do what you ask. There are two optional, user‑controlled exceptions, and neither sends any of your data (each is a plain request that carries nothing about you):

  • Clicking the FFmpeg button downloads a build from the open‑source FFmpeg host.
  • Turning on automatic update checks (off by default) lets Waves ask the public GitHub releases page whether a newer version exists. The check only ever notifies you; nothing downloads until you choose to update.

Your credentials and downloads stay on your machine.


Requirements

  • A paid TIDAL plan and a one‑time sign‑in (Waves walks you through the browser login on first launch and reuses the cached token afterwards).
  • Python 3.12 or 3.13 (if running from source).
  • FFmpeg is used for in‑app previews and a few conversions (e.g. some video / hi‑res cases). Waves can install it for you with one click (see above).

Install

Grab the build for your platform from the latest release:

OS Intel / AMD (x64) ARM (Apple silicon, etc.)
macOS waves_macos-intel.zip waves_macos-apple-silicon.zip
Windows waves_windows-x64.zip waves_windows-arm64.zip
Linux waves_linux-x64.zip waves_linux-arm64.zip

Unzip and run: on macOS drag waves.app to Applications (first launch needs a one‑time approval in System Settings, see the note below); on Windows and Linux run Waves from the unzipped folder. Every asset ships with a SHA‑256 checksum, and the release carries a signed SHA256SUMS manifest.

Prefer to run from source?

# from a clone of this repository
python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e ".[gui]"     # the [gui] extra pulls in PySide6 / Qt
python -m tidaler.waves_ui

Waves is GUI‑first and does not ship a command‑line interface. If you want a command‑line TIDAL downloader, use the upstream Tidaler project directly; it provides a maintained, CLI‑focused build (tidaler / tdn) of the same download engine Waves is built on.

A note on macOS Gatekeeper: the builds are not yet Apple‑notarized, so macOS quarantines a freshly downloaded waves.app. On first launch macOS shows a warning with no way to proceed; click Done, then go to System Settings → Privacy & Security, scroll down, and click Open Anyway next to the Waves entry. Confirm once and macOS remembers the choice from then on. (The old right‑click → Open shortcut no longer works on macOS 15 Sequoia and later.)

A note on Windows SmartScreen: the builds are not yet code‑signed, so the first launch may show a Microsoft Defender SmartScreen prompt ("Windows protected your PC"). Click More info, then Run anyway. SmartScreen is a reputation check on new, unsigned software, not a malware detection; it fades on its own as a release accumulates clean installs.

Waves is open source, and that means you can check the code for yourself. If reading the source is not something you are capable of doing, you can upload the downloaded zip to VirusTotal and have it checked for viruses before you even extract it. Your privacy and security are important to me. Trust, but verify.


A note from the author

Waves is the first piece of software I've ever released. I've spent a couple of decades in and out of tech, most of it on the other side of the fence, beta‑testing, filing bug reports, and helping developers polish their games and software. Building something and putting my own name on it is new to me, and so is everything that comes after a release: the maintaining, the issue‑tracking, the keeping‑the‑lights‑on side of running a project. This is a side project built in spare time, so I won't always be fast, and I'm certain I'll get some things wrong as I learn the developer's half of all this.

None of that changes the welcome. If something breaks, behaves oddly, or just feels off, please open an issue, however small, and I'll genuinely read it and do my best to reply. Giving feedback is the thing I know how to do best, and I'm grateful to now be on the receiving end of it. Thank you for trying Waves.


Acknowledgments

Waves is only possible because of a lot of excellent open‑source work.

The project it forks

  • Tidaler by maya-doshi, the backend Waves is built on.
  • Tidal‑DL‑NG by exislow (where it all started), and everyone who maintained it in between.

Core libraries (all credit to their authors and maintainers)

FFmpeg

  • FFmpeg © the FFmpeg project, the tool itself.
  • The one‑click installer downloads (never redistributes) prebuilt static binaries from:

Type

Icons

  • Phosphor Icons: the interface glyphs (play, pause, download, search, and the rest) are bundled from Phosphor, under the MIT License.

If I've missed anyone, it's an oversight, not an intent. Please open an issue and I'll fix the credit.


License

Waves is licensed under the GNU Affero General Public License v3.0 (AGPL‑3.0), the same license as Tidal‑DL‑NG and Tidaler. See LICENSE for the full text. Because Waves is a derivative work, it stays AGPL‑3.0, and so must anything built on it.

Copyright (C) 2026 iamprivacy. Waves is free software: you can redistribute it and/or modify it under the terms of the AGPL‑3.0.


Disclaimer

Waves is an independent project and is not affiliated with, endorsed by, or sponsored by TIDAL. It is a personal, educational tool for accessing your own TIDAL account. You are solely responsible for how you use it and for complying with TIDAL's Terms of Service and the laws that apply to you; do not use it to infringe copyright or to reproduce, distribute, or pirate content. The software is provided "as is", without warranty of any kind. Please respect the artists and rights‑holders whose work this plays.

About

A native desktop app for downloading music from your own TIDAL account: search-first, art-forward, and built for people who'd rather click than type. macOS, Windows, Linux.

Topics

Resources

License

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages