gitwtfhub

wtf is fin?

tsirysndr/fin — explained in plain English

Analysis updated 2026-05-18

12RustAudience · developerComplexity · 3/5Setup · moderate

TL;DR

A terminal-based music and video player that connects to home media servers like Jellyfin and Navidrome, letting you browse and play your media library entirely through text and keyboard commands.

Mindmap

mindmap
  root((fin))
    What it does
      Plays media in terminal
      Connects to media servers
      Sends media to devices
      Receives pushed media
    Tech stack
      Rust
      mpv for video
      UPnP streaming
    Use cases
      Browse home music library
      Cast to smart TVs
      Control with keyboard keys
      Script playback commands
    Audience
      Terminal power users
      Home media server owners
    Features
      Instant search
      Equalizer and crossfade
      Resumes playback position

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why would anyone build with this?

REASON 1

Browse and play your Jellyfin or Navidrome music library directly from the terminal.

REASON 2

Cast music or videos from your media server to a Chromecast or smart TV on your network.

REASON 3

Control music playback using your keyboard media keys on Linux without opening a full app.

REASON 4

Script quick commands to play a specific album or queue a song to a named speaker.

What's in the stack?

RustmpvUPnPChromecast

How it stacks up

tsirysndr/fin0xdea/ttyinject-rsbigsaltyfishes/wallpaper-engine-for-macos
Stars121212
LanguageRustRustRust
Setup difficultymoderatemoderatehard
Complexity3/54/54/5
Audiencedeveloperresearcherdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you spin it up?

Difficulty · moderate Time to first run · 30min

Requires a running Jellyfin or Subsonic-compatible media server to connect to, and the mpv program installed for local video playback.

Wtf does this do

fin is a terminal-based music and video client for Jellyfin and Subsonic media servers, which include Navidrome, Airsonic, Gonic, and Astiga. Instead of a graphical interface, it runs as a text-based program inside your terminal with a neon-electric color scheme. It connects to your media server, searches your library, manages playlists, and plays audio or video on your local machine or on remote devices. For local audio, fin handles everything itself. It streams the audio over the network, decodes it, resamples it, and plays it back without relying on any external software. For local video, it uses a separate program called mpv. You can also send your media to a Chromecast device on your network or to any UPnP-compatible device, which includes Sonos speakers, Kodi, Roon, and Samsung or LG televisions. When playing to a remote device, fin maintains a local queue and automatically advances to the next track when one finishes. A notable feature is that fin can also receive media. While running, it advertises itself as a UPnP device on your local network. Other programs and devices can push audio or video to it, and fin will decode and play that content. On Linux and BSD systems, it integrates with desktop media controls, so you can use your keyboard media keys or desktop widgets to control playback. The interface includes instant search that updates results as you type, and navigation that lets you drill into albums, series, and playlists. Playback features include shuffle, repeat, volume normalization, crossfade between tracks, and a ten-band equalizer. The audio queue and your exact position within a track are saved when you close the program, so you can resume where you left off after a restart. fin is written in Rust and can be installed through several methods, including npm, Homebrew, Debian packages, Fedora packages, Arch, and Nix. It also provides command-line shortcuts for scripting, such as typing a command to play a specific album or to queue a song to a named Chromecast device. The full README is longer than what was shown.

Yoink these prompts

Prompt 1
I want a terminal-based music player for my Jellyfin server. Can you explain how to install fin and connect it to my media library using npm or Homebrew?
Prompt 2
Help me use fin to cast music from my Navidrome server to my Chromecast. How do I queue songs and send them to a specific device from the command line?
Prompt 3
Can fin act as a UPnP receiver so other devices can push audio to my terminal? Explain how to set that up and what programs can send media to it.
Prompt 4
I run Linux and want to control fin playback with my keyboard media keys. Walk me through how the desktop media control integration works.
Prompt 5
How do I use fin's command-line shortcuts to instantly play a specific album or queue a song to a named Chromecast device for scripting?

Frequently asked questions

wtf is fin?

A terminal-based music and video player that connects to home media servers like Jellyfin and Navidrome, letting you browse and play your media library entirely through text and keyboard commands.

What language is fin written in?

Mainly Rust. The stack also includes Rust, mpv, UPnP.

How hard is fin to set up?

Setup difficulty is rated moderate, with roughly 30min to a first successful run.

Who is fin for?

Mainly developer.

View the repo → Decode another repo

This repo across BitVibe Labs

Don't trust strangers blindly. Verify against the repo.