crabidy/fsdy/README.md

3.4 KiB

fsdy — the filesystem provider

Mounts a local directory at /fs in the crabidy library. The same engine also powers the server-managed /crabidy mount (saved queues, bookmarks, and captures), so everything below applies to its on-disk format too.

No login: the provider only reads a directory you point it at.

How it works

The provider walks one configured root directory. Every directory becomes a queueable library node; every file ending in .cbd-track.toml becomes a track; everything else (audio files, covers, hidden entries) is invisible to the library. Listing order is case-insensitive by file name — prefix files with numbers to fix an order (the save writers use 0001-style prefixes for exactly this reason).

A track file carries the track's metadata plus a reference to the playable thing:

title = "We Will Rock You"      # required
artist = "Queen"                # optional
duration = 122                  # optional, seconds

[album]                         # optional
title = "News of the World"
release_date = "1977-10-28"

# Exactly ONE of the following four:
[playable]
file = "we-will-rock-you.flac"  # local audio; absolute, or relative to
                                # this file's directory (relocatable)
# url = "https://example.org/radio.mp3"   # http(s) stream
# link = "/tidal/artists/1/2/3"           # another provider's track
# skipped = true                # no audio: a capture recorded its
                                # source as uncapturable; shown red,
                                # skipped by playback

Malformed track files are skipped with a warning; they never break the listing. link playables resolve exactly one hop (a link to a link fails at play time), which keeps cycles impossible.

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

# Absolute path of the directory to expose under /fs.
# Default: the platform music directory (e.g. ~/Music). When neither is
# available the /fs mount is disabled — the rest of the server runs on.
# root = "/home/me/music"

The server-managed /crabidy instance

/crabidy is a second instance of this same provider, over the server's state directory ~/.local/state/crabidy/, written by the server (queue persistence, w, W) and readable with any file manager — it is just folders of the track files described above.

  • Each top-level folder is one save. It can be renamed (e) and deleted (d) from a client.
  • current is the continuously persisted play queue and is protected: you cannot save over that name.
  • A captured track's [playable] is a store entry naming a file in the content store at ~/.local/share/crabidy/, which is shared and de-duplicated across every save.
  • Deleting inside /crabidy removes only the metadata toml, never the shared store audio — other saves may point at the same file. Audio that ends up referenced by nothing shows up under /orphans, where you can delete it for real.

The scan subcommand writes exactly these track files for a folder of audio, so an existing music collection browses under /fs without any manual work:

crabidy-server scan ~/Music                # index in place
crabidy-server scan ~/Downloads --capture  # copy the audio into the store

Building the server without the fs cargo feature drops this provider, the content store, /crabidy, /orphans, queue persistence, and scan — they all share the same on-disk machinery.