crabidy/tidaldy
Test User ab3bd7c63a docs: bring the book and every README up to date
The docs drifted behind three changes: the /queues + /bookmarks +
/captures split folding into one /crabidy provider, three providers
arriving (soundcloud, jamendo, abs) with nothing written about them, and
the spectrum toggle moving off v to f when library visual mode took v/V.

- The book gains a page per undocumented provider — /soundcloud,
  /jamendo, /abs — each with its tree, its playback path, every config
  option, and how to log in. The providers index and intro list all nine
  roots in the order the server actually serves them.
- Every provider now documents its login: Tidal's device flow (and that
  a broken tidaly.toml is the one fatal provider config), audiobookshelf
  API keys, the optional SoundCloud token and where to read it out of a
  browser, YouTube cookie exports, Jamendo's shipped key, and "nothing
  to do" for fyyd and /fs.
- fsdy's README described three server-managed mounts under
  ~/.config/crabidy that have not existed for a while; it now describes
  /crabidy over the state dir plus the shared content store, and how
  deletes there never touch store audio.
- Stale /captures/<name> save paths in the tidaldy and ytdy READMEs are
  /crabidy/<name>. The TUI key table, the README walkthrough, and the
  spectrum section use f, and visual mode (v/V) is documented.
- config.md and the README list all seven provider config files, say
  plainly that credentials are stored in cleartext, and cover the audio
  output device; the CLI page documents audio-devices and features.
- No README or docs page references architecture/, quality/, or plan/
  any more: the book describes the system as it is, and points at the
  crate READMEs for usage and config.
- devenv-docs.nix was never committed even though devenv.nix imports it,
  so a fresh clone could not enter the shell at all. It is in now, which
  also makes the README's `devenv shell -- docs` work.

Also fixes two ./store.md links in providers/fs.md that pointed one
directory too shallow.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 11:04:25 +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 docs: bring the book and every README up to date 2026-07-25 11:04:25 +02:00

README.md

tidaldy — the Tidal provider

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

Logging in

On first start the provider runs Tidal's OAuth device login:

  1. Start the server. It prints a link.tidal.com verification URL to its stdout — for cbd (which owns the terminal) look in the log file under ~/.local/state/crabidy/ instead.
  2. Open the URL in a browser and authorize the device. The server polls meanwhile; the attempt expires after a few minutes, so restart it if you miss the window.
  3. The provider finishes logging in by itself. The tokens are written back into tidaly.toml and refreshed automatically from then on — you should not need to log in again.

To switch accounts or recover from an invalidated session, delete the [login] section from tidaly.toml and restart.

Note: a tidaly.toml that exists but cannot be parsed aborts server startup rather than silently dropping your account — unlike every other provider, whose config errors only cost that one subtree.

How it works

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 /crabidy/<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.
  • Build the server without the tidal cargo feature to leave this provider out of the binary entirely.