Tidekeeper
Tidekeeper is an unofficial maintained fork of
yaronzz/Tidal-Media-Downloader,
with a reliable terminal workflow and optional desktop GUI. The primary command
is tidekeeper; tidal-dl remains available for compatibility.
Install
Tidekeeper requires Python 3.10 or newer.
ffmpeg is recommended for video downloads and optional FLAC remux
(tidekeeper --doctor reports whether it is available).
From Git (recommended)
python -m pip install -U "git+https://github.com/OpenNerdz/tidekeeper.git#subdirectory=TIDALDL-PY"
tidekeeper --help
GUI extras:
python -m pip install -U "tidekeeper[gui] @ git+https://github.com/OpenNerdz/tidekeeper.git#subdirectory=TIDALDL-PY"
tidekeeper-gui
One-line installer (Linux / Termux)
curl -fsSL https://raw.githubusercontent.com/OpenNerdz/tidekeeper/main/install.sh | bash
For Android shared storage, run termux-setup-storage and optionally set:
export TIDEKEEPER_DOWNLOAD_PATH="/storage/emulated/0/Download/Tidekeeper"
Prebuilt binaries
Terminal and desktop GUI executables for Windows, macOS, and Linux are attached to each GitHub Release.
Docker
Build the image from the repository, then persist account configuration and downloads with bind mounts. The image includes ffmpeg.
docker build -t tidekeeper .
docker run --rm -it \
-v "$PWD/config:/config" \
-v "$PWD/downloads:/downloads" \
tidekeeper
docker run --rm \
-v "$PWD/config:/config" \
-v "$PWD/downloads:/downloads" \
tidekeeper -l "https://tidal.com/browse/track/70973230"
The container runs as non-root UID 1000. Ensure both host directories are
writable by that user. A GUI is not included in the container image.
Usage
tidekeeper --help
tidekeeper --doctor
tidekeeper --paths
tidekeeper --open-output
tidekeeper --update
tidekeeper -l "https://tidal.com/browse/track/70973230"
tidekeeper --video-only -l "https://tidal.com/browse/artist/123456"
Dolby Atmos downloads are opt-in with tidekeeper -q Atmos.
Failed downloads are saved to failed-tracks.txt in the download folder and can
be retried with:
tidekeeper -l "/path/to/downloads/failed-tracks.txt"
Customizability
Custom filename formats are supported:
| Tokens | Description | Album | Track | Video | Playlist |
|---|---|---|---|---|---|
| {ArtistID} | Comma separated list of each artists' ID for that media (i.e: 123, 456) |
:white_check_mark: | :x: | :x: | :x: |
| {ArtistName} | Comma separated list of each artists' name for that media (i.e: ABC, DEF) |
:white_check_mark: | :x: | :x: | :x: |
| {ArtistName} | Primary artist's name for that media | :x: | :white_check_mark: | :white_check_mark: | :x: |
| {ArtistsName} | Comma separated list of each artists' name for that media (i.e: ABC, DEF) |
:x: | :white_check_mark: | :white_check_mark: | :x: |
| {AlbumArtistID} | Primary artist's ID for that media | :white_check_mark: | :x: | :x: | :x: |
| {AlbumArtistName} | Primary artist's name for that media | :white_check_mark: | :x: | :x: | :x: |
| {Flag} | Quality/content flags: M (Master), A (Dolby Atmos), E (Explicit) |
:white_check_mark: | :x: | :x: | :x: |
| {AlbumID} | :white_check_mark: | :x: | :x: | :x: | |
| {AlbumYear} | :white_check_mark: | :white_check_mark: | :x: | :x: | |
| {AlbumTitle} | :white_check_mark: | :white_check_mark: | :x: | :x: | |
| {AudioQuality} | Audio quality reported by TIDAL (e.g. LOSSLESS, HI_RES) |
:white_check_mark: | :white_check_mark: | :x: | :x: |
| {DurationSeconds} | :white_check_mark: | :white_check_mark: | :x: | :x: | |
| {Duration} | Duration formatted as MM:SS (or H:MM:SS) |
:white_check_mark: | :white_check_mark: | :x: | :x: |
| {NumberOfTracks} | :white_check_mark: | :x: | :x: | :x: | |
| {NumberOfVideos} | :white_check_mark: | :x: | :x: | :x: | |
| {NumberOfVolumes} | :white_check_mark: | :x: | :x: | :x: | |
| {ReleaseDate} | :white_check_mark: | :x: | :x: | :x: | |
| {RecordType} | :white_check_mark: | :x: | :x: | :x: | |
| {TrackID} | :x: | :white_check_mark: | :x: | :x: | |
| {TrackNumber} | :x: | :white_check_mark: | :x: | :x: | |
| {TrackTitle} | :x: | :white_check_mark: | :x: | :x: | |
| {ExplicitFlag} | :x: | :white_check_mark: | :white_check_mark: | :x: | |
| {StreamQuality} | :x: | :white_check_mark: | :x: | :x: | |
| {Codec} | :x: | :white_check_mark: | :x: | :x: | |
| {VideoID} | :x: | :x: | :white_check_mark: | :x: | |
| {VideoNumber} | :x: | :x: | :white_check_mark: | :x: | |
| {VideoTitle} | :x: | :x: | :white_check_mark: | :x: | |
| {VideoYear} | :x: | :x: | :white_check_mark: | :x: | |
| {PlaylistUUID} | :x: | :x: | :x: | :white_check_mark: | |
| {PlaylistName} | :x: | :x: | :x: | :white_check_mark: |
Desktop GUI
The GUI provides login, search, queueing, downloads, settings, diagnostics, and
updates. After installing with the GUI extra above, launch it with
tidekeeper-gui or tidekeeper --gui. Update GUI installs with
tidekeeper --update-gui.
| Search | Queue |
|---|---|
| Settings | Account |
|---|---|
Troubleshooting
Run diagnostics first:
tidekeeper --doctor
tidekeeper --paths
For repeated HTTP 429 errors, keep Use request delay enabled and raise
Request delay seconds to 30 or 60 before retrying.
If doctor warns that ffmpeg is missing, install it from your OS package manager (or use the Docker image). Video downloads and FLAC remux may otherwise be limited.
If Termux reports cannot locate symbol "x265_api_get_216", refresh its media
packages with pkg upgrade -y && pkg reinstall -y ffmpeg x265. If that fails,
change mirrors with termux-change-repo and retry.
Development
See CONTRIBUTING.md for setup and checks, CHANGELOG.md for release history, and SECURITY.md for private vulnerability reporting.
git clone https://github.com/OpenNerdz/tidekeeper.git
cd tidekeeper/TIDALDL-PY
python -m pip install -e .
python -m unittest discover -s tests
Build release artifacts with ./build.sh from the repository root.
Project policy
Tidekeeper does not aim to bypass access controls, subscription checks, or DRM. Use it only where permitted by law and applicable service terms. This project is not affiliated with or endorsed by TIDAL or Block, Inc.
The original project was created by YaronH and contributors. See NOTICE and LICENSE for attribution and licensing.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tidekeeper-2026.7.30.0.tar.gz.
File metadata
- Download URL: tidekeeper-2026.7.30.0.tar.gz
- Upload date:
- Size: 116.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec34a46a2a1e8468420750fc8187f46f5469ee7cd9fe0793390543e8473086a7
|
|
| MD5 |
a10990fc78756005ebf6d3fa040909b2
|
|
| BLAKE2b-256 |
f6df6f9e27f4b3e49e97431bfb0fb7c07d70bb002e2c232780b80f0df66ad484
|
File details
Details for the file tidekeeper-2026.7.30.0-py3-none-any.whl.
File metadata
- Download URL: tidekeeper-2026.7.30.0-py3-none-any.whl
- Upload date:
- Size: 123.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc71dd75aebcd5bf63cf273d946de51b51fc57f5b03e45e947fb629c9c3c1837
|
|
| MD5 |
344f5ceb3b8227a2d27fd2c26f1813e7
|
|
| BLAKE2b-256 |
f54cd9f5b92b851c54b6d24dd53e455a1d8abba1e33d09b8b9e8e4782d7c21e0
|