No description
  • Python 99.6%
  • Makefile 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan Angelov fae084698f
Some checks failed
ci-release / prepare-release (push) Has been skipped
ci-release / test-and-build (push) Failing after 1m30s
ci-release / windows-release (push) Has been skipped
ci-release / finalize-release (push) Has been skipped
ci-release / rollback-release (push) Has been skipped
fix: restore persisted TIDAL tokens as PKCE sessions
2026-08-19 08:49:44 +03:00
.forgejo/workflows chore: standardize on Python 3.14.7 2026-08-11 15:33:37 +03:00
.github chore: standardize on Python 3.14.7 2026-08-11 15:33:37 +03:00
assets Initial import 2026-06-18 18:55:03 +03:00
docs feat: migrate download history to lazy SQLite storage 2026-07-26 12:57:17 +03:00
scripts Add retry loop to Windows artifact import (up to 10 min) 2026-06-20 14:44:04 +03:00
tests fix: restore persisted TIDAL tokens as PKCE sessions 2026-08-19 08:49:44 +03:00
tidal_dl_ng fix: restore persisted TIDAL tokens as PKCE sessions 2026-08-19 08:49:44 +03:00
.editorconfig Initial import 2026-06-18 18:55:03 +03:00
.gitignore chore: refresh poetry.lock for Nuitka >=4.0 2026-06-19 18:19:49 +03:00
.pre-commit-config.yaml release: prepare v0.34.0 on Python 3.14 2026-07-26 20:22:57 +03:00
.python-version chore: standardize on Python 3.14.7 2026-08-11 15:33:37 +03:00
AGENTS.md chore: standardize on Python 3.14.7 2026-08-11 15:33:37 +03:00
CHANGELOG.md Initial import 2026-06-18 18:55:03 +03:00
CONTRIBUTING.md chore: standardize on Python 3.14.7 2026-08-11 15:33:37 +03:00
LICENSE Initial import 2026-06-18 18:55:03 +03:00
Makefile fix: harden downloads, GUI workers, and release flow 2026-07-12 11:07:28 +03:00
mkdocs.yml Initial import 2026-06-18 18:55:03 +03:00
poetry.lock release: prepare v0.34.0 on Python 3.14 2026-07-26 20:22:57 +03:00
poetry.toml Initial import 2026-06-18 18:55:03 +03:00
pyproject.toml fix: preserve GUI thread safety and propagate partial download failures 2026-08-01 10:40:12 +03:00
README.md chore: standardize on Python 3.14.7 2026-08-11 15:33:37 +03:00
setup.cfg Initial import 2026-06-18 18:55:03 +03:00
tox.ini release: prepare v0.34.0 on Python 3.14 2026-07-26 20:22:57 +03:00

TIDAL Downloader Next Generation! (tidal-dl-ng)

[FORK] For DJ with management feature

AI-maintained preservation fork

This fork is maintained with AI assistance to keep the project useful for DJs and existing users after the original upstream became inactive. The goal is practical preservation: fix broken docs, keep workflows usable, and accept focused improvements that are verified and do not rewrite the project unnecessarily.

This tool allows you to download songs and videos from TIDAL. Multithreaded and multi-chunked downloads are supported.

⚠️ Windows Defender / Anti Virus software / web browser alerts, while you try to download the app binary: This is a false positive. Please read the PyInstaller statement and the alternative installation solution.

A paid TIDAL plan is required! Audio quality varies up to HiRes Lossless / TIDAL MAX 24-bit, 192 kHz depending on the song available. Dolby Atmos is supported. You can use the command line or GUI version of this tool.

App Image

$ tidal-dl-ng --help

 Usage: tidal-dl-ng [OPTIONS] COMMAND [ARGS]...

╭─ Options ────────────────────────────────────────────────────────────────────╮
│ --version  -v                                                                │
│ --help     -h        Show this message and exit.                             │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────╮
│ cfg    Print or set an option. If no arguments are given, all options will   │
│        be listed. If only one argument is given, the value will be printed   │
│        for this option. To set a value for an option simply pass the value   │
│        as the second argument                                                │
│ dl                                                                           │
│ dl_fav Download from a favorites collection.                                 │
│ gui                                                                          │
│ login                                                                        │
│ logout                                                                       │
╰──────────────────────────────────────────────────────────────────────────────╯

💻 Installation / Upgrade

Requirements: Python 3.14.7 exactly.

pip install --upgrade tidal-dl-ng-for-dj
# If you like to have the GUI as well use this command instead
pip install --upgrade "tidal-dl-ng-for-dj[gui]"

⌨️ Usage

You can use the command line (CLI) version to download media by URL:

tidal-dl-ng dl https://tidal.com/browse/track/46755209
# OR
tdn dl https://tidal.com/browse/track/46755209

Or by your favorites collections:

tidal-dl-ng dl_fav tracks
tidal-dl-ng dl_fav artists
tidal-dl-ng dl_fav albums
tidal-dl-ng dl_fav videos

You can also use the GUI:

tidal-dl-ng-gui
# OR
tdng
# OR
tidal-dl-ng gui

If you would like to use the GUI version as a binary, have a look at the release page and download the correct version for your OS.

🧁 Features

  • Download tracks, videos, albums, playlists, your favorites etc.
  • Multithreaded and multi-chunked downloads
  • Metadata for songs (including extended metadata like genres, producers, composers when available from TIDAL API - see metadata documentation)
  • Adjustable audio and video download quality.
  • FLAC extraction from MP4 containers
  • Lyrics and album art / cover download
  • Creates playlist files
  • Can symlink tracks instead of having several copies, if added to different playlist
  • 🆕 Quick View on Hover (GUI): Hover over tracks to instantly preview rich metadata without clicking ( see feature documentation)

▶️ Getting started with development

🚰 Install dependencies

Clone this repository and install the dependencies:

# First, install Poetry. On some operating systems you need to use `pip` instead of `pipx`
pipx install --upgrade poetry
poetry install --all-extras --with dev,docs

The main entry points are:

tidal_dl_ng/cli.py
tidal_dl_ng/gui/activate.py

📺 GUI Builder

The GUI is built with PySide6 using the Qt Designer:

PYSIDE_DESIGNER_PLUGINS=tidal_dl_ng/ui pyside6-designer

After all changes are saved, you need to translate the Qt Designer *.ui file into Python code, for instance:

pyside6-uic tidal_dl_ng/ui/main.ui -o tidal_dl_ng/ui/main.py

This needs to be done for each created / modified *.ui file accordingly.

🏗 Build the project

To build the project use this command:

# Install virtual environment and dependencies if not already done
make install
# Build macOS GUI
make gui-macos-dmg
# OR Build Windows GUI
make gui-windows
# OR Build Linux GUI
make gui-linux
# Check build output
ls dist/

See the Makefile for all available build commands.

The active Forgejo workflow runs the test suite and builds the Linux package with Python 3.14.7 for pull requests, pushes to main or test-build, and version tags. It publishes release assets only for version tags.

To finalize the set-up for publishing to PyPi or Artifactory, see here. For activating the automatic documentation with MkDocs, see here. To enable the code coverage reports, see here.

FAQ

macOS Error Message: File/App is damaged and cannot be opened. You should move it to Trash

If you download an (unsigned) app from any source other than those that Apple seems suited, the application gets an extended attribute "com.apple.Quarantine". This triggers the message: " is damaged and can't be opened. You should move it to the Bin."

Remove the attribute and you can launch the application. Source 1 Source 2

sudo xattr -dr com.apple.quarantine /Applications/TIDAL-Downloader-NG.app/

Why is this app unsigned? Only developer enrolled in the paid Apple developer program are allowed to sign (legal) apps. Without this subscription app signing is not possible.

Gatekeeper really annoys you, and you like to disable it completely? Follow this link

My (Windows) antivirus app XYZ says the GUI version of this app is harmful

Short answer: It is a lie. Get rid of your antivirus app.

Long answer: See the PyInstaller statement.

I get an error when extract_flac is enabled

Your path_binary_ffmpeg is probably wrong. Please read over and over again the help of this particular option until you get it right what path to put for path_binary_ffmpeg.

My Linux (e.g. Ubuntu) complains that libxcb-cursor0 is not installed

Simply install this dependency using your OS specific package manager.

Ubuntu / Debian

sudo apt install libxcb-cursor0

A terminal is flashing when I run this app on Windows

This is due to the Python ffmpeg library which is used and only happens on windows if extract_flac is activated.

How can I download Dolby Atmos files?

You need to activate download_dolby_atmos in the settings. Then, if an item is available in Dolby Atmos, it will be downloaded as an Dolby Atmos file instead of as an stereo audio file. Dolby Atmos ist only available as 320kbps at TIDAL (you cannot adjust the quality for Dolby Atmos downloads). If an item is available in Dolby Atmos the "Quality" column in the GUI will indicate this with Dolby Atmos

Why do some metadata fields show "—" or "N/A"?

Some metadata fields like Genres, Producers, Composers, Label, or BPM may display because the TIDAL API does not provide this information for that specific track or album. This is not a bug - TIDAL simply doesn't have or doesn't expose this data via their API.

  • Bitrate shows "N/A" for LOSSLESS tracks because they use variable bitrate compression
  • Extended metadata (genres, producers, etc.) depends on what TIDAL receives from music labels
  • See the detailed metadata documentation for more information

‼️ Disclaimer

  • For educational purposes only. I am not liable and responsible for any damage that happens.

  • You should not use this method to distribute or pirate music.

  • It may be illegal to use this app in your country.

  • cookiecutter-poetry