a Jellyfin & Subsonic client for the terminal — powered by mpv, Chromecast and UPnP MediaRenderer
mpv
chromecast
mpris
navidrome
jellyfin
upnp
tui
7.4 kB
Changelog#
All notable changes to fin are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.5.0 - 2026-07-08#
Added#
- MPRIS support (
fin-mpris) — on Linux and the BSDs, fin registersorg.mpris.MediaPlayer2.finon the D-Bus session bus while the TUI runs, so media keys, GNOME/KDE applets, waybar andplayerctlcan drive playback: play/pause, next/previous, seek and SetPosition, volume, shuffle and repeat (mapped to MPRISLoopStatus), with track metadata (title, artist, duration, cover art) pushed asPropertiesChanged/Seekedsignals. The MPRIS player shares the same swappable renderer handle as the TUI and the UPnP MediaRenderer, so desktop controls follow you when you switch to a Chromecast or UPnP device. Built on zbus (pure Rust — no dbus system library needed); starting without a session bus (headless/SSH) is a non-fatal warning. A second fin instance falls back to a pid-suffixed bus name per the MPRIS spec.
0.4.0 - 2026-07-07#
Added#
- Built-in UPnP MediaRenderer (
fin-mediarenderer) — fin now advertises itself as a cast target on the LAN while the TUI runs. Any UPnP control point (BubbleUPnP, Kodi, Jellyfin's "Play On", …) can push streams at this machine: audio decodes in-process via symphonia, video is handed to mpv, and the pushed track shows up in the Now Playing bar with a⇊ UPnPbadge plus a status-line notice naming what arrived. Includes SSDP presence (alive/byebye + M-SEARCH answers), AVTransport / RenderingControl / ConnectionManager SOAP control, and GENALastChangeeventing. On by default; disable with--no-media-renderer,FIN_NO_MEDIA_RENDERER=1, ormedia_renderer.enabled = false.media_renderer.friendly_name/.portare also configurable, and the device UDN is generated once and persisted so control points recognize the machine across restarts.
Changed#
- Logs no longer corrupt the TUI — while the TUI owns the terminal,
tracing output is routed to
fin.login the cache directory instead of stderr (any GENA notify failure, cast-in notice, or playback warning used to print straight over the interface). CLI one-shot commands still log to stderr, and-v/RUST_LOGbehave as before.
Fixed#
- Idle volume readback —
LocalRendererreported 100% volume while idle even after a volume change; it now mirrors the audio player's actual volume, so the TUI slider and UPnPGetVolumestay truthful between tracks. - Queue marker stuck while casting — when playing to a UPnP or
Chromecast renderer, auto-advance and Next/Previous moved the queue
cursor without updating the shared playback state, so the Queue
screen's ▶ marker and
(n/total)counter stayed on the old track. - Shuffle & repeat while casting —
zandShift+Rwere silent no-ops on UPnP and Chromecast renderers; both now drive the shared queue, so shuffle order and repeat one/all work the same as local playback.
0.3.1 - 2026-07-05#
Added#
- Shuffle-play shortcut —
Shift+Xplays the highlighted container (album, artist, playlist, series) or, on flat views, everything in the current list (all favorite tracks, all videos, an open album/playlist's tracks) in random order. The pool is shuffled up front so the first track is random too, and shuffle mode is switched on for whatever joins the queue later.
Changed#
- Videos tab is now Jellyfin-only — Subsonic has no video API, so on a
Subsonic server the tab is hidden from the bar,
Tab/Shift+Tabskip it, and2shows a hint. Switching servers while on Videos bounces to Music. - ReplayGain now runs in the Rockbox DSP — upgraded
rockbox-dspto 0.2.0 and moved gain application into its pre-gain (PGA) stage, the same fixed-point pipeline as the EQ and tone controls. Tag extraction stays in fin; the old f32 multiplier survives only as a fallback for paths the PGA can't reach (crossfade-incoming track, non-stereo output, first primed packet).
0.3.0 - 2026-07-05#
Added#
- Subsonic backend with auto-detection at login — point
fin loginat a Jellyfin or Subsonic server (Navidrome, Airsonic, Gonic, Astiga, …) and the flavour is probed automatically. Multiple servers of either kind can be saved side by side. - Favorites tab (
♥, key4) listing everything you've liked — Jellyfin favorites and Subsonic stars alike. Supports the usual actions (Enter to play/drill,aenqueue,nplay next,xplay container,rrefresh). - Like / dislike shortcuts —
Shift+Lfavorites (stars) the highlighted item,Shift+Dremoves it. Both fall back to the now-playing track on screens without a library selection, so you can like a song from anywhere while it plays. Disliking from the Favorites tab drops the row immediately. - Server-backend badge — the header shows
◈ Jellyfin/≋ Subsonicfor the active server, and each row in the Settings server list shows its backend between the name and URL. - In-process audio path — HTTP streaming,
symphoniadecode, resampling, andcpaloutput all run in-process; mpv is now used only for video. - 10-band Rockbox equalizer with interactive band selection and per-band gain nudging on the Settings screen.
- Bass & treble shelves (Rockbox tone controls),
b/Shift+Bandy/Shift+Y. - ReplayGain (off / track / album) and crossfade (crossfade / mixed modes, cyclable duration).
- Queue persistence, shuffle, repeat, and queue-management keys; Enter on the Queue screen jumps the playhead instead of collapsing the queue.
- Album detail view with disc grouping, track numbers, year, and a client-side sort safety net.
?keyboard-shortcuts help modal.
Changed#
- Screen tab shortcuts: Music
1, Videos2, Playlists3, Favorites4, Queue5, Search6, Devices7, Settings8. - README, in-app header, and help modal describe fin as a Jellyfin and Subsonic client rather than Jellyfin-only.
Fixed#
- "Recent listens not updated" on the Jellyfin/Subsonic scrobble path.
- Scrobble/session errors now stay warn-only instead of interrupting playback.
- Now-playing marker no longer shifts by one after a play-triggered crossfade.
0.2.0 - 2026-07-03#
Added#
- UPnP MediaRenderer discovery and streaming (Sonos, Kodi, Roon endpoints, Samsung/LG TVs, gmediarender, …) alongside the existing local and Chromecast renderers.
0.1.0 - 2026-07-03#
Added#
- Initial release — a Ratatui TUI plus one-shot CLI for Jellyfin.
- Local mpv playback and Chromecast streaming.
- fzf-style instant search, playlist browsing, and drill-in navigation.
- Full pagination of the Items endpoint so large libraries load completely.