crabidy/fyyd
Test User 3b81faeb9d Add the fyyd podcast provider (/fyyd)
A new library provider for finding and playing podcasts via fyyd's
keyless public API (api.fyyd.de), mounted at /fyyd and modelled on ytdy.

A podcast search returns podcasts, each a container of episodes, so the
tree carries one extra level: search-term -> podcast -> episodes-as-tracks,
plus a fixed /fyyd/hot featured browse. An episode is a track whose
enclosure URL the audio player streams directly -- no sidecar, no proto
change, no new ProviderCommand. Search terms are creatable/renamable/
deletable in memory like tidal and youtube; podcasts and their episode
lists are queueable and downloadable (W captures work out of the box).

All network access goes through a Fyyd trait (fyyd/src/api.rs), faked in
tests, so the provider logic runs with no network. Init is non-fatal and
needs no credentials; every call is timeout-bounded and every listing
capped. Wired into ProviderOrchestrator and the crabidy-server provider
toggles alongside the other providers.

Dev-flow artifacts: architecture/, quality/, and plan/fyyd-provider.md,
plus a plan/summary.md entry. Docs updated across docs/src and the README.
Deferred: live validation of the api.fyyd.de field shapes (offline unit
suite cannot cover it) -- left as an open gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 17:29:13 +02:00
..
src Add the fyyd podcast provider (/fyyd) 2026-07-23 17:29:13 +02:00
Cargo.toml Add the fyyd podcast provider (/fyyd) 2026-07-23 17:29:13 +02:00
README.md Add the fyyd podcast provider (/fyyd) 2026-07-23 17:29:13 +02:00

README.md

fyyd — the podcast provider

Mounts podcasts at /fyyd in the crabidy library, backed by fyyd's public podcast search engine (api.fyyd.de). No account or API key is required.

How it works

A podcast search returns podcasts, and each podcast is a container of episodes, so /fyyd carries one level more than the music providers:

  • /fyyd/search works with no login. Press % to create a search term; the term becomes a persistent child node listing the matching podcasts. Terms are renamable (e, re-runs the search) and deletable (d). Terms live in memory — a server restart forgets them, but navigating to an old term path recreates it.
  • /fyyd/hot is a fixed browse of fyyd's currently featured ("hot") podcasts, so the provider is useful with no typing.
  • /fyyd/<branch>/<podcast> lists one podcast's episodes as tracks. It is queueable and downloadable, so you can queue or W-capture a whole podcast at once.

An episode is an ordinary track whose audio is the enclosure URL from the podcast's feed — a plain media file the built-in player streams directly. No sidecar, cipher solving, or byte-proxying is involved.

Configuration — fyyd.toml

All options are optional (fyyd needs no credentials):

# search_results = 20        # podcasts per search term
# hot_count = 20             # featured podcasts under /fyyd/hot
# episodes_per_podcast = 100 # episodes per podcast (also a hard cap)
# call_timeout_secs = 30     # per-request timeout
# base_url = "https://api.fyyd.de/0.2"  # API base override

All network access goes through the Fyyd trait (fyyd/src/api.rs), so the provider's tree/path logic is unit-tested with a fake and no network. See architecture/fyyd-provider.md for the tree shape and design decisions.