Repository navigation
Breaking
These change what an existing command or script sees. Each one replaces a silent wrong result with a failure that names the fix (#137, #138).
setupwill not replace a signing key that is already in use.--generate-key,--key, and--key-filerefuse when a different key is configured (inconfig.json, or inPLAYLIST_PRIVATE_KEYwhen config holds none). That key owns every playlist you published, andpublish --replaceandunpublishaccept only it. Add--forceto replace it on purpose. Plainff-cli setup --non-interactivestill makes a key when none exists and keeps one that does.- Prompts with no answer fail instead of exiting 0. When stdin is not a terminal, a question (for example
find's "Build playlist?") exits 1 and names the flag that answers it (find:-y). Before, end-of-input exited 0 with nothing built, and an open pipe waited forever. Piped answers still work. buildexits 1 when part of the request did not happen. That means a requirement that fails or finds nothing, namedtokenIdsthat do not all resolve, or a failed send toplaylistSettings.deviceName. The playlist is still saved when anything was collected.playrefuses URLs that do not exist. An HTTP 404 or 410, a host that does not resolve, or a.jsonURL that does not load as a playlist exits 1 before anything is sent. Before, the URL was cast as an error page and reported "Playing". Other read failures (403, 5xx, timeouts) still send, with a note.device addtreats the same IP on another port as another device. Before, it replaced the existing entry while printing "Added device"..localnames still match across ports.- The installer at https://feralfile.com/ff-cli-install installs from npm. It installs into
~/.local/ff-cliand links~/.local/bin/ff-cli, and needs Node.js 22+ and npm. Releases no longer ship prebuilt binaries, so the old download 404'd.FF_CLI_BASE_URLis gone;FF_CLI_VERSION,FF_CLI_INSTALL_DIR, andFF_CLI_BIN_DIRstill work.
New
play --web <url>plays any page as a web page, including pages on marketplace sites thatplayotherwise sends tofind(for examplehttps://feralfile.com). Before,playandfindpointed at each other for those pages.build --helpdocuments the params schema and every requirement type. An unknown type lists the valid ones.findon an address says it builds one work by the artist at that address. For what a wallet owns, usebuildwithquery_address.statusnames the config paths it checked when it finds none.- Token source:
tokenSource: "raster"reads token data from Raster's public API. It is opt-in and under evaluation; the Feral File indexer stays the default. Seedocs/CONFIGURATION.md#tokensource. - IPFS: media on the legacy
ipfs.bitmark.comgateway is routed through the Feral File gateway.
Docs and the agent skill
- README,
docs/README.md, and theff-controlskill cover the above, plus a bootstrap an agent can finish without a terminal. - Owner remote maintenance over Tailscale is documented (firmware with
feral-tailscalerequired). - docs.feralfile.com's Agents and ff-cli pages are updated in feral-file/docs#224.