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

Configure Feed

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

Document MPRIS support in README

Tsiry Sandratraina (Jul 8, 2026, 3:24 PM +0300) c751abbf c8fb5344

+41
+41
README.md
··· 30 30 - [Getting started](#getting-started) 31 31 - [Renderer selection](#renderer-selection) 32 32 - [UPnP MediaRenderer — casting *to* fin](#upnp-mediarenderer--casting-to-fin) 33 + - [MPRIS — desktop media controls](#mpris--desktop-media-controls) 33 34 - [All settings](#all-settings) 34 35 - [Multiple servers](#multiple-servers) 35 36 - [Sub-commands](#sub-commands) ··· 74 75 in the Now Playing bar with a `⇊ UPnP` badge. On by default; opt out with 75 76 `--no-media-renderer` or `media_renderer.enabled = false` 76 77 (see [UPnP MediaRenderer](#upnp-mediarenderer--casting-to-fin)). 78 + - **MPRIS** (Linux & the BSDs) — while the TUI runs, fin registers on the 79 + D-Bus session bus as `org.mpris.MediaPlayer2.fin`, so media keys, 80 + GNOME/KDE applets, waybar, and `playerctl` control playback — whichever 81 + renderer is active, Chromecast and UPnP included 82 + (see [MPRIS](#mpris--desktop-media-controls)). 77 83 - **Playback modes** — shuffle, repeat-off/all/one, [ReplayGain](#replaygain) 78 84 (track / album), [crossfade](#crossfade) between adjacent tracks 79 85 (traditional cosine curves *or* additive DJ-mixed), and a ··· 294 300 Playback pushed by a control point is **not scrobbled** — the item ids are 295 301 foreign to your media server, so session reports/scrobbles are skipped for 296 302 cast-in tracks. 303 + 304 + ## MPRIS — desktop media controls 305 + 306 + On **Linux and the BSDs**, fin registers itself on the D-Bus session bus as 307 + `org.mpris.MediaPlayer2.fin` while the TUI runs. That's the standard 308 + desktop media-player interface, so it works with whatever already speaks 309 + MPRIS: 310 + 311 + - **hardware media keys** (play/pause/next/previous) — even when the 312 + terminal isn't focused, 313 + - **desktop applets** — GNOME's calendar-dropdown media widget, KDE's 314 + Media Player plasmoid and lock-screen controls, 315 + - **bars** — waybar's `mpris` module and friends, 316 + - **`playerctl`** for scripting: 317 + 318 + ```bash 319 + playerctl -p fin play-pause 320 + playerctl -p fin next 321 + playerctl -p fin metadata # title, artist, duration, cover art 322 + playerctl -p fin position 30 # absolute seek (seconds) 323 + playerctl -p fin volume 0.5 324 + playerctl -p fin shuffle On 325 + playerctl -p fin loop Playlist # = repeat all 326 + ``` 327 + 328 + MPRIS drives whatever renderer is currently active — switch to a 329 + Chromecast or UPnP device in the TUI and your media keys transparently 330 + control the cast session. Track metadata (title, artist, duration, cover 331 + art) is pushed to the desktop as it changes. 332 + 333 + There's nothing to configure and no system dependency to install (the 334 + D-Bus protocol is spoken natively — no `libdbus`). On a headless box with 335 + no session bus, fin simply logs a warning and carries on. A second fin 336 + instance registers as `org.mpris.MediaPlayer2.fin.instance<pid>`, per the 337 + MPRIS spec. 297 338 298 339 ## All settings 299 340