crabidy/tidaldy
Test User 21d4fddb2f Design the crabidy content store; add wire + fsdy foundations
Stage 1-2 of the crabidy-store dev-flow (architecture/crabidy-store.md,
quality/, plan/): one /crabidy provider replacing queues/bookmarks/
captures, with track tomls linking into a content-addressed store that
de-duplicates by provider id and content hash.

Additive, build stays green:
- proto: Track.provider_item_id + is_captured; LibraryNode.is_captured;
  LibraryNodeChild.is_captured (swept all literals).
- fsdy: Playable::Store + PlayableSpec.store, 5-way cardinality,
  from_track_store, Client.with_store_root + store resolution.
- crabidy_store.rs: StoreSidecar/ProviderEntry/StoreIndex/CrabidyStore
  type + method surface (bodies stubbed for the implement stage).
- supersede bookmarks/captures/capture-deletion docs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 10:58:11 +02:00
..
src Design the crabidy content store; add wire + fsdy foundations 2026-07-22 10:58:11 +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.