Tidal-DL 🌊🎵🎬
Download music tracks and music videos directly from Tidal.
Tidal-DL is a command-line interface (CLI) tool that allows you to download your music and music videos from Tidal. It authenticates with your Tidal account using a secure device authorization flow and saves your session for future use.
✨ Features
- Song Downloads:
- Choose from available audio qualities:
- Standard (AAC 96 kbps)
- High (AAC 320 kbps)
- HiFi (CD Quality FLAC 16-bit/44.1kHz - Lossless)
- Max (HiRes FLAC up to 24-bit/192kHz - Lossless)
- Downloads are saved as
.flacfiles. - Automatic renaming to
Artist - Title.flac(with confirmation) based on metadata fetched from Tidal.
- Choose from available audio qualities:
- Music Video Downloads:
- Lists available video resolutions and bandwidths for you to select the best option.
- Downloads are saved as
.tsfiles. - Attempts to name files using the video title scraped from the Tidal page.
- Efficient Downloads: Utilizes
aria2cfor fast, resumable, and segmented downloading. - Authentication: Secure OAuth2 device login. Session details (including access and refresh tokens) are stored locally in
tidal_session.jsonfor persistence, reducing the need to log in repeatedly. - Interactive CLI: A user-friendly command-line interface guides you through the selection and download process.
🚀 Prerequisites
Before you begin, ensure you have the following installed on your system:
- Node.js: A recent LTS version (e.g., v18.x, v20.x, or newer). You can download it from nodejs.org.
- aria2c: This is a critical dependency for the download process.
- Official website: aria2.github.io
- Ensure
aria2cis installed and accessible from your system's PATH (i.e., you can runaria2c --versionin your terminal).
🛠️ Setup
-
Clone the repository: If you're downloading this from GitHub, you've likely already done this or downloaded the source. If not:
git clone https://github.com/andresdevvv/tidal-dl.git cd tidal-dl -
Install dependencies: Navigate to the project's root directory in your terminal and run:
npm installThis will install
axios,xml2js.
⚙️ How to Use
-
Run the script: Open your terminal in the
Tidal-DLproject directory and execute:node run startup -
First-Time Authentication:
- On your first run, the script will guide you through the Tidal authentication process.
- You will see a message like this:
--------------------------------------------------------------------- TIDAL DEVICE AUTHENTICATION REQUIRED --------------------------------------------------------------------- 1. Open your web browser and go to: https://link.tidal.com/XXXXX 2. Enter the following code: YOUR_USER_CODE if asked --------------------------------------------------------------------- Waiting for authorization (this may take a moment)... - Open the provided URL (e.g.,
https://link.tidal.com/XXXXX) in your web browser. - Enter the user code (e.g.,
YOUR_USER_CODE) on the Tidal website if prompted. - Authorize the application in your browser.
- Once authorized, the script will automatically detect it, complete the login, and save your session details to
tidal_session.json. Future runs will attempt to use this saved session.
-
Download Process:
- After successful authentication, the main menu will appear:
What would you like to do? 1. Download a Song 2. Download a Music Video 3. Exit Enter your choice (1-3): - Enter your choice (
1for a song,2for a video). - Provide URL: Paste the full Tidal URL for the song or music video you want to download.
- Song URL Examples:
https://tidal.com/browse/track/12345678https://tidal.com/track/12345678https://tidal.com/u/SOME_USER_ID/track/12345678(shared links)
- Video URL Example:
https://tidal.com/browse/video/87654321
- Song URL Examples:
- The script will extract the ID from the URL.
- Select Quality:
- For Songs: You'll be presented with a list of available audio qualities (Standard, High, HiFi, Max). Select your preferred quality.
- For Music Videos: The script will fetch available video streams and list them by resolution and bandwidth (best first). Select your preferred stream.
- File Naming Confirmation (Optional):
- For Songs: If metadata (artist, title) is successfully fetched, you'll be asked:
Do you want to rename the file based on Artist - Title? (yes/no):. - For Music Videos: If a title is successfully scraped from the Tidal page, you might be asked:
Use "Scraped Video Title.ts" as filename? (y/n):.
- For Songs: If metadata (artist, title) is successfully fetched, you'll be asked:
- Download: The download will start.
aria2chandles the actual downloading of segments, which are then combined into the final file.
- After successful authentication, the main menu will appear:
-
Output Location:
- Downloaded songs are saved in the
./downloads/music/directory relative to where you run the script. - Downloaded music videos are saved in the
./downloads/videos/directory.
- Downloaded songs are saved in the
📁 File Structure Overview
Tidal-DL/
├── downloads/ # Default directory for all downloaded files
│ ├── music/ # Stores downloaded songs (.flac)
│ └── videos/ # Stores downloaded music videos (.ts)
├── node_modules/ # Project dependencies (created by `npm install`)
├── v2/ # Core logic modules
│ ├── login.mjs # Handles Tidal authentication & session management
│ ├── music.mjs # Logic for music track downloads
│ └── video.mjs # Logic for music video downloads
├── .gitignore # Specifies intentionally untracked files for Git
├── package-lock.json # Records exact versions of installed dependencies
├── package.json # Project metadata and list of dependencies
├── startup.mjs # The main executable script (CLI entry point)
└── tidal_session.json # Stores your Tidal login session data (created after first login)
⚠️ Important Notes
aria2cis Essential: This tool will not work ifaria2cis not installed or not correctly configured in your system's PATH.- For Personal Use Only: This tool is intended for personal, private use, such as backing up music and videos you have legitimate access to via your Tidal subscription.
- Respect Copyright: Always respect copyright laws and Tidal's Terms of Service. Downloading and distributing copyrighted material without authorization may be illegal. The developers of this tool are not responsible for its misuse.
- API Rate Limiting: While the script includes some retry mechanisms, excessive or rapid use might lead to temporary rate limiting by Tidal's API. Use the tool reasonably.
📄 License
Copyright (c) 2025 AndresDevvv
This project is licensed under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
A copy of the AGPL-3.0 license is included in the file LICENSE in the root of this repository. You can also find the full text of the license online at:
https://www.gnu.org/licenses/agpl-3.0.html
Happy Downloading!