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> |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| README.md | ||
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:
- Start the server. It prints a
link.tidal.comverification URL to its stdout — forcbd(which owns the terminal) look in the log file under~/.local/state/crabidy/instead. - 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.
- The provider finishes logging in by itself. The tokens are written back
into
tidaly.tomland 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
tidalcargo feature to leave this provider out of the binary entirely.