Fin: A Jellyfin Client for the Terminal

nerdypepper2 pts0 comments

tsiry-sandratraina.com/fin at main · Tangled

tsiry-sandratraina.com

fin

Star

Fork

Atom

Configure Feed

Issues

Pull Requests

Commits

Tags

Feed URL

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

a Jellyfin client for the terminal — powered by mpv and Chromecast

chromecast

jellyfin

upnp

tui

mpv

Star

Fork

Atom

Configure Feed

Issues

Pull Requests

Commits

Tags

Feed URL

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

Rust

97.3%

Nix

2.2%

Shell

0.1%

Other

0.5%

main

fix/status-bar-help-ttl

v0.2.0

v0.1.0

15

Code

Clone this repository

Use permalink

HTTPS

https://tangled.org/tsiry-sandratraina.com/fin<br>https://tangled.org/did:plc:tad7qmftxdjq62iw3lp4syfi<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"

SSH

git@tangled.org:tsiry-sandratraina.com/fin<br>git@tangled.org:did:plc:tad7qmftxdjq62iw3lp4syfi<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz

Download .zip

.github

1 day ago

.tangled

1 day ago

crates

1 day ago

dist

1 day ago

.envrc

1 day ago

.gitignore

1 day ago

Cargo.lock

1 day ago

Cargo.toml

1 day ago

LICENSE

1 day ago

README.md

1 day ago

flake.lock

1 day ago

flake.nix

1 day ago

Commits<br>15

Expire TUI status messages so the help hints reappear

The status bar shows a keybinding cheat sheet whenever `status_message`<br>is `None`, but load results like `♪ 118 album(s)` were set on screen<br>load and never cleared, so the help was only visible for a blink before<br>being overwritten.

Stamp each status message with an `Instant` and treat entries older than<br>4s as `None` at draw time. The 200ms tick loop guarantees the redraw<br>that flips them back to the help text.

39608ea6

tsiry-sandratraina.com

1 day ago

main

1/1

build.yml

success

3m 14s

docs: document UPnP renderer in README

e4591681

tsiry-sandratraina.com

1 day ago

v0.2.0

1/1

build.yml

success

6m 35s

update README.md

a0bdaa7d

tsiry-sandratraina.com

1 day ago

1/1

build.yml

success

7m 4s

Branches

main

1 day ago

Default

fix/status-bar-help-ttl

1 day ago

Compare

Tags

v0.2.0

Latest

README.md

fin#

a Jellyfin client for the terminal — powered by mpv, Chromecast, and UPnP

fin is a Rust TUI + one-shot CLI that talks to your Jellyfin server, searches<br>your library, manages playlists, and pushes streams to your local mpv<br>window, any Chromecast on your network, or any UPnP MediaRenderer (Sonos,<br>Kodi, Roon endpoints, Samsung/LG TVs, gmediarender, …). Remote playback is<br>fully queued — enqueue, play-next, skip, resume, all from the terminal.

Features#

Ratatui-based TUI with a neon-electric palette (teal / cyan / violet).

fzf-style instant search — results update on every keystroke.

Drill-in navigation — Enter on an album lists its tracks, Enter on a<br>series lists its episodes, Enter on a playlist lists its items. x<br>plays the whole container in one go.

No list truncation — Music, Videos, and Playlists fetch every item<br>the server has, so nothing stays hidden past an arbitrary limit.

Three renderers , one interface:

mpv (local) — spawned automatically and driven via its JSON IPC socket.

chromecast — device discovery via mDNS, playback through the Default<br>Media Receiver, with a local queue that auto-advances on FINISHED.

upnp — SSDP discovery of any UPnP AV MediaRenderer, playback via<br>AVTransport (SetAVTransportURI / Play / Pause / Stop / Seek)<br>and volume via RenderingControl. Same auto-advancing queue.

Real queue management — enqueue, play next, jump between tracks, and<br>see the whole queue in its own tab. Works identically for all renderers.

Playlists — browse, open, and play the playlists you've saved on the<br>server.

Now Playing bar with title, subtitle, elapsed / total time, a neon<br>progress gauge, volume, and the active renderer.

CLI shortcuts for scripting: fin play "kind of blue",<br>fin queue --chromecast "Living Room" "wednesday",<br>fin play --upnp "Kitchen Speaker" "solaris", fin devices.

All settings are available as CLI flags or TOML keys — one<br>workflow scales from ad-hoc invocation to per-machine config.

Pure Rust TLS (rustls) everywhere — no OpenSSL required.

Install#

fin needs mpv on your $PATH at runtime. Every install path below<br>either bundles it or pulls it in as a dependency.

macOS / Linux — Homebrew#

brew install tsirysndr/tap/fin<br>The formula pulls in mpv automatically.

Debian / Ubuntu — .deb#

Download the .deb for your architecture from the<br>latest release and:

# amd64<br>curl -LO https://github.com/tsirysndr/fin/releases/latest/download/fin_0.2.0_amd64.deb<br>sudo apt install ./fin_0.2.0_amd64.deb

# arm64 (Raspberry Pi 4/5, Apple-silicon VM, …)<br>curl -LO...

text gray tsiry sandratraina upnp tangled

Related Articles