crabidy/tidaldy
Test User 95ea1e44a0 Key Tidal track identity on ISRC for capture de-dup
to_proto now emits the recording's ISRC as provider_item_id (falling back
to the numeric track id when absent). Two Tidal track objects for the same
recording share an ISRC, so capturing the same song reached via different
Tidal paths de-duplicates by provider id to one store entry. The library
path still uses the numeric id.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 22:35:45 +02:00
..
src Key Tidal track identity on ISRC for capture de-dup 2026-07-22 22:35:45 +02:00
Cargo.toml Queue large collections progressively 2026-07-21 01:08:34 +02:00
README.md Document the providers and their configuration in READMEs 2026-07-21 19:34:06 +02:00

README.md

tidaldy — the Tidal provider

Mounts your Tidal account at /tidal in the crabidy library, using Tidal's web API.

How it works

On first start the provider runs Tidal's OAuth device login: the server prints a link.tidal.com verification URL to its stdout (for cbd, check the log file) — open it in a browser, authorize, and the provider finishes logging in by itself. The obtained tokens are written back into the config file and refreshed automatically from then on; you should not need to log in again.

The tree offers your playlists, favorite artists (with their albums and tracks), and a search node: press % under /tidal/search to create a search term; the term becomes a persistent child node holding its results (tracks, artists, albums). Terms are renamable (e, re-runs the search) and deletable (d).

Everything queueable is also capturable: w bookmarks a subtree as links, W downloads a subtree's audio into /captures/<name>.

Configuration — ~/.config/crabidy/tidaly.toml

The file is rewritten on every server start with the current values (including refreshed tokens), so it contains your credentials — keep it private. All options with their defaults:

# Tidal API endpoints. Change only if you know why.
base_url = "https://api.tidal.com/v1"
hifi_url = "https://api.tidalhifi.com/v1"

# Stream quality: "Low" | "High" | "Lossless" | "HiRes".
audio_quality = "Lossless"

# Managed by the provider: filled in by the device login and refreshed
# automatically. Delete this whole section to force a fresh login.
[login]
# device_code = ...
# user_id = ...
# country_code = ...
# access_token = ...
# refresh_token = ...
# expires_after = ...

# OAuth client identity used for the device flow. Working defaults are
# built in; override only to use your own client registration.
[oauth]
# client_id = ...
# client_secret = ...
base_url = "https://auth.tidal.com/v1/oauth2"

Notes:

  • A missing or empty file is fine: defaults are used and the device login runs on the next start.
  • If Tidal ever invalidates the session (long offline periods), delete the [login] section and restart.