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 24-bit, 192kHz
- Download multiple albums at once
- Support for multiple audio quality levels: low, high, lossless, and hi-res
- Download range of tracks from an album or playlist (
--range) - Parallel downloads
- Works on Linux, macOS, and Windows (likely even more if you would want to)
- Progress indicators for downloads
- Tags downloaded audio with TIDAL metadata (title, artist, album, cover art)
To install Yadal, you need to have Rust installed. You can install Rust using rustup.
Also, Yadal for now depends on ffmpeg when downloading lossless or hi-res audio. Make sure you have ffmpeg installed and available in your PATH.
cargo install --git https://codeberg.org/tomkoid/yadal --lockedThe binary will be available in your ~/.cargo/bin.
Download a track:
yadal https://tidal.com/track/437468401Download an album:
yadal https://tidal.com/album/55130630Download a playlist:
yadal https://tidal.com/playlist/aa692128-2954-4fe1-b5a1-4ede1add485dDownload a playlist and an album after each other:
yadal 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 437468401
yadal 55130630
yadal aa692128-2954-4fe1-b5a1-4ede1add485dThe tool will automatically detect the media type based on the ID format.
Specify audio quality:
yadal --quality hi-res https://tidal.com/track/230917825Available quality options: low, high, lossless, hires (default: hires)
Set output directory:
yadal --output ./music https://tidal.com/album/55130630Configure parallel downloads:
yadal --parallel 10 https://tidal.com/playlist/aa692128-2954-4fe1-b5a1-4ede1add485dForce re-authentication:
yadal --reauth https://tidal.com/track/437468401Use custom session file location:
yadal --session-file /path/to/session.json https://tidal.com/track/341764697Use legacy OAuth2 device flow:
yadal --oauth2 https://tidal.com/track/341764697Download album items even if they already exist:
yadal --force https://tidal.com/album/55130630On 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 redirect to an error page, copy and paste the full redirect URL 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.
- Rust 1.70 or later
- Active TIDAL subscription