Tidekeeper 2026.7.30.0
Tidekeeper 2026.7.30.0
Maintained Tidal-Media-Downloader fork with terminal and desktop GUI workflows.
Install (PyPI)
python -m pip install -U tidekeeper
tidekeeper --helpGUI:
python -m pip install -U "tidekeeper[gui]"
tidekeeper-guiPackage page: https://pypi.org/project/tidekeeper/
Prebuilt binaries
Assets below include terminal and GUI executables for Windows, macOS, and Linux.
ffmpeg is recommended for video downloads and optional FLAC remux (tidekeeper --doctor reports availability). The Docker image bundles ffmpeg — see the README for container usage.
2026.7.30.0 - 2026-07-30
Reliability and correctness
- Fixed
-l/--linkdownloads so the CLI exits when finished instead of dropping into the interactive menu (#39, thanks @redraven2459). - CLI
-l/--linkexits with a non-zero status when downloads fail. - Fixed
--doctor,--gui, module execution, and standalone builds returning success after operational failures. - Invalid config paths and updater launch failures now produce clean errors instead of tracebacks.
- GUI now reports failed queue items as Failed instead of Done when downloads return errors.
- Lookup errors (401/403/network) are no longer masked as "No result." while probing media types.
- Reduced HTTP 429 rate-limit errors by pacing playback manifest requests and caching duplicate stream manifest lookups.
- Shortened stream-manifest cache TTL so expired CDN URLs are less likely to be reused.
Metadata and path tokens
- Fixed album artist metadata conversion so album artist lists and
{ArtistName}/{ArtistID}album tokens are populated correctly (#38, #41). - Fixed track/album tagging and path building when TIDAL omits the artist list, which previously raised
'NoneType' object is not iterable(follow-up to #38). - Hardened path tokens, artist lists, and empty search results against missing/null API fields.
- Fixed
{ArtistID}/{AlbumArtistID}album path tokens writing literalNonewhen TIDAL omits an artist ID; those artists are now skipped. - Fixed
{AlbumArtistID}and{AlbumArtistName}rendering literalNonewhen primary artist fields are absent. - Added the
{AlbumArtistID}album path token (#36, thanks @redraven2459). - Added a
--configPathOverrideCLI argument for custom config locations (#37, thanks @redraven2459).
Packaging, Docker, and release tooling
- Added a release workflow that builds the sdist and wheel and publishes to PyPI with trusted publishing.
- Added a Dockerfile that bundles ffmpeg and keeps config, tokens, and logs in
/configwith downloads in/downloads. - Added Python 3.14 to the CI matrix and a packaging job that verifies the PyPI long description survives the sdist round trip.
- Fixed the local build script deleting packaging metadata and omitting the GUI executable.
- Aligned runtime dependency pins between
setup.pyandrequirements.txt. - Added a high-signal Ruff lint gate in CI (syntax and undefined-name defects).
- Documented container usage, ffmpeg recommendation, and the complete GitHub/PyPI release checklist.
Contributor experience
- Fixed the test suite reading and overwriting the real
~/.tidal-dl.jsonprofile, which caused false rate-limit test failures for contributors. - Exposed adaptive rate-limit toggle in GUI settings layout and CLI settings.
- Replaced deprecated PrettyTable
PLAIN_COLUMNSusage withTableStyle.