Fin: A Jellyfin and Subsonic client for the terminal

birdculture2 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 & Subsonic client for the terminal — powered by mpv, Chromecast and UPnP MediaRenderer

jellyfin

upnp

tui

mpv

chromecast

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

98.6%

Nix

1.1%

Shell

0.1%

Other

0.2%

main

fix/status-bar-help-ttl

v0.3.1

v0.3.0

v0.2.0

v0.1.0

56

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 hour ago

.tangled

1 day ago

crates

21 hours ago

dist

21 hours ago

.envrc

3 days ago

.gitignore

3 days ago

CHANGELOG.md

21 hours ago

Cargo.lock

21 hours ago

Cargo.toml

21 hours ago

LICENSE

3 days ago

README.md

12 hours ago

flake.lock

3 days ago

flake.nix

3 hours ago

Commits<br>56

Add Nix build CI workflow

Run nix build on ubuntu-latest and macos-latest for every push to<br>main and every pull request, using the Determinate Systems Nix<br>installer.

90dc271e

tsiry-sandratraina.com

1 hour ago

main

1/1

build.yml

success

4m 18s

update flake.nix

20415e23

tsiry-sandratraina.com

3 hours ago

1/1

build.yml

success

4m 11s

Fix Gemfury account name in README install instructions

The apt and yum repos live under https://apt.fury.io/tsiry and<br>https://yum.fury.io/tsiry, not tsirysndr.

ba2a1cdf

tsiry-sandratraina.com

12 hours ago

1/1

build.yml

success

3m 55s

Branches

main

1 hour ago

Default

fix/status-bar-help-ttl

3 days ago

Compare

Tags

v0.3.1

Latest

README.md

fin#

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

fin is a Rust TUI + one-shot CLI that talks to your Jellyfin or<br>Subsonic server (Navidrome, Airsonic, Gonic, Astiga, … — the flavour is<br>auto-detected at login), searches your library, manages playlists, and pushes<br>streams to your local machine<br>(symphonia for audio, mpv for video), any Chromecast on your<br>network, or any UPnP MediaRenderer (Sonos, Kodi, Roon endpoints, Samsung/LG<br>TVs, gmediarender, …). Local playback is now audio-native — HTTP streaming,<br>decoding, resampling, and output all run in-process, and audio never touches<br>mpv. Remote playback is fully queued, with client-side auto-advance.

Contents#

Features

Install

macOS / Linux — Homebrew

Debian / Ubuntu — .deb

Fedora / RHEL / openSUSE — .rpm

Arch — from AUR / source

Prebuilt tarballs

From source

Nix

Getting started

Renderer selection

All settings

Multiple servers

Sub-commands

Keybindings (TUI)

Playback modes & effects

Shuffle

Repeat

ReplayGain

Crossfade

Equalizer

Bass & treble

Queue persistence

Remote-renderer queue

Streams & transcoding

Development

License

Features#

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

In-process audio — HTTP streaming + symphonia decode (MP3, FLAC, AAC,<br>Opus, Vorbis, ALAC, WAV, …) + resampling + cpal output. mpv is used only<br>for video.

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, Shift+X does the same shuffled.

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:

local (default) — symphonia + cpal for audio, mpv for video, spawned<br>only when needed.

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.

Playback modes — shuffle, repeat-off/all/one, ReplayGain<br>(track / album), crossfade between adjacent tracks<br>(traditional cosine curves or additive DJ-mixed), and a<br>10-band equalizer powered by the Rockbox DSP pipeline.

Queue persistence — the audio queue, shuffle/repeat state, and the exact<br>playhead within the current track survive restarts. Restore lands paused;<br>Space picks up where you...

tsiry hours text gray sandratraina tangled

Related Articles