Yadal (Yet Another Downloader for TIDAL) is a pretty simple command-line tool for downloading music from TIDAL. It supports downloading individual tracks, albums, and playlists with configurable audio quality settings.
This project serves as a practical showcase of Tidlers, a Rust library for interacting with the TIDAL API. Yadal demonstrates how to build a complete application using Tidlers for authentication, API interaction, and media streaming.
- Download tracks, albums, and playlists from TIDAL in 96 kbps up to 24-bit, 192kHz
- Download media concurrently
- Display a high level of downloading information, including progress bars
- Easily download specific (range of) tracks from an album or playlist
- Tags downloaded audio with files with a wide range of information
- Works on Windows, macOS, Linux, FreeBSD, and more
- Internal Rust library can be used anywhere without the CLI
yay -S yadal-gitsudo dnf copr enable tomkoid/yadal
sudo dnf install yadalYou can install Yadal using the Nix package manager to your profile like this:
nix profile install github:tomkoid/yadalOr you can install it system-wide like any other flake using the flake.nix.
To build and install Yadal, you need to have Rust installed. You can install Rust using rustup. Rust 1.89+ is required.
cargo install --git https://codeberg.org/tomkoid/yadal --lockedThe binary will be available in your ~/.cargo/bin.
An active TIDAL subscription is required to use yadal.
Download a track:
yadal download https://tidal.com/track/437468401Download an album:
yadal download https://tidal.com/album/55130630Download a playlist:
yadal download https://tidal.com/playlist/aa692128-2954-4fe1-b5a1-4ede1add485dDownload a playlist and an album after each other:
yadal download https://tidal.com/playlist/aa692128-2954-4fe1-b5a1-4ede1add485d,https://tidal.com/album/55130630You can also provide just the ID without the full URL:
yadal download 437468401
yadal download 55130630
yadal download aa692128-2954-4fe1-b5a1-4ede1add485dAs well as in one command:
yadal download 437468401 55130630 aa692128-2954-4fe1-b5a1-4ede1add485dThe tool will automatically discover the media type without explicitly knowing it.
Specify audio quality:
yadal download -q hi-res https://tidal.com/track/230917825Available quality options: low, high, lossless, hi-res (default: hi-res)
Set output directory:
yadal download --output ./music https://tidal.com/album/55130630Configure parallel downloads:
yadal download --parallel 10 https://tidal.com/playlist/aa692128-2954-4fe1-b5a1-4ede1add485dForce re-authentication:
yadal download --reauth https://tidal.com/track/437468401Use custom session file location:
yadal download --session-file /path/to/session.json https://tidal.com/track/341764697Use legacy OAuth2 device flow:
yadal download --oauth2 https://tidal.com/track/341764697Download album items even if they already exist:
yadal download --force https://tidal.com/album/55130630See CONFIG.md for a guide on configuring yadal more extensively.
On first run, Yadal will initiate a PKCE flow by default:
- A login URL will be displayed in your terminal
- Visit the URL and authorize the application in your browser
- After it redirects to a not found error page, copy and paste the full redirect URL (in your search bar) back into the terminal
- The session will be saved automatically
If you pass --oauth2, Yadal will use the legacy OAuth2 device flow instead. This flow is less stable and should be used only if you do not want to download in full quality.
Session files are stored in platform-specific locations:
- Linux:
~/.local/share/yadal/session.json - macOS:
~/Library/Application Support/yadal/session.json - Windows:
%APPDATA%\yadal\session.json
Sessions are automatically refreshed when needed, so you only need to authenticate once.