a Jellyfin & Subsonic client for the terminal — powered by mpv, Chromecast and UPnP MediaRenderer
mpv chromecast mpris navidrome jellyfin upnp tui
0

Configure Feed

Select the types of activity you want to include in your feed.

Mention Subsonic alongside Jellyfin in README, header, and help

The README tagline/intro, multi-server section, in-app header line,
and the help modal's server-cycle entry all described fin as
Jellyfin-only; the Subsonic backend has been in since 0.3.0.

+12 -9
+10 -7
README.md
··· 2 2 3 3 [![Release](https://github.com/tsirysndr/fin/actions/workflows/release.yml/badge.svg)](https://github.com/tsirysndr/fin/actions/workflows/release.yml) 4 4 5 - > a Jellyfin client for the terminal — powered by `symphonia`, `mpv`, Chromecast, and UPnP 5 + > a Jellyfin & Subsonic client for the terminal — powered by `symphonia`, `mpv`, Chromecast, and UPnP 6 6 7 - ![fin — neon-electric Jellyfin TUI](.github/assets/preview.png) 7 + ![fin — neon-electric Jellyfin/Subsonic TUI](.github/assets/preview.png) 8 8 9 - `fin` is a Rust TUI + one-shot CLI that talks to your Jellyfin server, searches 10 - your library, manages playlists, and pushes streams to your local machine 9 + `fin` is a Rust TUI + one-shot CLI that talks to your **Jellyfin** or 10 + **Subsonic** server (Navidrome, Airsonic, Gonic, Astiga, … — the flavour is 11 + auto-detected at login), searches your library, manages playlists, and pushes 12 + streams to your local machine 11 13 (**symphonia** for audio, **mpv** for video), any **Chromecast** on your 12 14 network, or any **UPnP MediaRenderer** (Sonos, Kodi, Roon endpoints, Samsung/LG 13 15 TVs, gmediarender, …). Local playback is now audio-native — HTTP streaming, ··· 280 282 281 283 ## Multiple servers 282 284 283 - fin authenticates against as many Jellyfin servers as you like and keeps 284 - their tokens side-by-side in one config file: 285 + fin authenticates against as many servers as you like — Jellyfin and 286 + Subsonic mixed freely — and keeps their credentials side-by-side in one 287 + config file: 285 288 286 289 ```bash 287 290 fin login https://home.example.com --name home ··· 354 357 | `<` / `>` or `h` / `l` | previous / next track | 355 358 | `+` / `-` | volume up / down | 356 359 | `m` | switch to local renderer | 357 - | `t` | cycle to the next saved Jellyfin server | 360 + | `t` | cycle to the next saved server | 358 361 | `d` | (Queue screen) remove the highlighted entry | 359 362 | `Shift+C` | (Queue screen) clear the entire queue | 360 363 | `Esc` | pop the current drill-in (back to the parent list) |
+1 -1
crates/fin-tui/src/app.rs
··· 1622 1622 .add_modifier(Modifier::BOLD), 1623 1623 ), 1624 1624 Span::styled( 1625 - "— a neon jellyfin client", 1625 + "— a neon jellyfin & subsonic client", 1626 1626 Style::default().fg(subtitle_col), 1627 1627 ), 1628 1628 Span::styled(
+1 -1
crates/fin-tui/src/widgets/help.rs
··· 40 40 HelpEntry { key: "Esc", description: "pop drill-in, close search or this help" }, 41 41 HelpEntry { key: "/", description: "focus Search input" }, 42 42 HelpEntry { key: "r", description: "refresh current screen" }, 43 - HelpEntry { key: "t", description: "cycle to next saved Jellyfin server" }, 43 + HelpEntry { key: "t", description: "cycle to next saved server (Jellyfin or Subsonic)" }, 44 44 HelpEntry { key: "m", description: "switch to local (symphonia + mpv) renderer" }, 45 45 HelpEntry { key: "q / Ctrl+C", description: "quit" }, 46 46 ],