Media player · built on mpv · Linux, macOS and Windows

Your video,
edge to edge.

Everything mpv can play, in a window with nothing in it but the picture. The title bar and a floating controller come when you move the mouse and go when you stop. The same player on all three desktops.

Rust throughout · Slint for the interface · mpv for playback

no webviewno Electronno accountno telemetry

The window

Mandelbrot Set.mkv
00:08
That is not a screenshot, and it isn't a recording either. It is the window rebuilt from the app's own sizes and words, playing its test patterns as your browser draws them. Hover the seek bar, open the playlist, or click the picture and press Space, ← → or f.

mpv does the playing.

So what plays is what mpv plays, with hardware decoding when mpv can get it. Your own mpv.conf, scripts and fonts go in Patina's mpv folder and work as they would there, and any mpv option can be set from the command line.

A real application.

Written in Rust and drawn with Slint, with no browser hidden inside. Open several windows, each with its own player. Open a file from a terminal or a file manager and it goes to the Patina already running, which comes to the front. Media keys and the desktop's own player controls work: MPRIS on Linux, the media panel on Windows, and Now Playing on macOS, though that has yet to be tried there.

They find themselves.

Open an episode and Patina looks through the folder: by name, by episode number across the season, and in subfolders such as Subs/, with the languages you prefer first.

~/Videos/Hollow Coast/Season 1/ · preferred languages: Japanese, English
  • Hollow.Coast.S01E02.1080p.mkv playing
  • Hollow.Coast.S01E02.1080p.ja.srt the same name, in your first language
  • Subs/Hollow.Coast.S01E02.1080p.en.srt in a subfolder
  • Hollow Coast - 1x02.en.ass the same episode, spelled differently
  • Hollow Coast - 1x03.en.ass kept for episode 3
  • Hollow.Coast.S02E02.srt another season

And when the folder has nothing, Patina can search OpenSubtitles.com by the file's hash and name, in your languages, with your own API key and, if you like, your account. The password stays in your system's password store.

Your Jellyfin library, in the player window.

Once you have signed in, the idle window shows your server's films, shows and music in place of the welcome screen, and what you pick plays right there.

Played straight from the server.

  • Whatever mpv can open plays as it is. The server converts it only when you ask for a lower quality, or when the file can't be played directly.
  • The next episode is lined up, and intros and credits are skipped where the server marks them.
  • The server's own previews show in the seek bar, and its files can be downloaded.

Your place stays on the server.

  • Where you stopped and what you've watched are kept there, so your other Jellyfin apps agree.
  • Music plays through music mode, with the playlist as the queue and the lyrics in the sidebar.
  • Several servers, by address or found on your network, signed in with a password or Quick Connect. The sign-ins stay in your system's password store.

It shrinks for an album.

A mini player: the cover with the title and artist, compact controls, and the playlist as a drawer below. It comes on for audio files and goes for video, and an album in a single file is split by its chapters.

Paste a URL.

Online video comes through yt-dlp, with a quality preference, Video Quality and Audio Quality menus that switch where it is playing, and downloads, in a window that shows their progress.

patina://open?url=… links let a browser extension or a web page hand Patina a stream. They are limited to streams, and to mpv options that are safe for a page to set.

Or hand it over from a terminal.

While Patina is running, the inputs open in it and the command returns at once.

patina [OPTIONS] [FILE | URL | -] ...

  -e, --enqueue           Add to the newest window's playlist
  -w, --separate-windows  A window for each input
  -f, --fullscreen        Play in full screen
      --pip               Play in picture-in-picture
      --music-mode        Play in music mode
      --mpv-NAME=VALUE    Set an mpv option

Every key can be yours.

Ctrl stands in for Command outside macOS. Bindings are in mpv's input.conf format, and you can edit them in the preferences with a key recorder.

# input_conf/mine.conf
UP add volume 5                  # an mpv command
#@patina Ctrl+o open-file        # or one of Patina's
Play / pause
Space
Half / double speed
Ctrl [  Ctrl ]
Seek 5 seconds
← →
A-B loop
Ctrl L
Previous / next frame
Alt ←  Alt →
Subtitle delay
Shift Z  Shift X
Volume
↑ ↓
Playlist / chapters
Ctrl Shift P  C
Previous / next file
Ctrl ←  Ctrl →
Music mode
Ctrl Alt M
Full screen
f
Jump to a time
Ctrl J

Download.

Self-contained packages for all three desktops, with mpv inside. Signed checksums for everything.

Linux, as a Flatpak bundle for x86_64 or aarch64, with libmpv, yt-dlp and Deno inside. In the sandbox Patina can read any file, but on its own writes only to Downloads and Pictures/Patina. Download the bundle for your architecture, then:

flatpak install ./patina-*.flatpak

macOS 11 and later, one universal app, signed and notarised.

brew install --cask jzbz/tap/patina

Windows 10 and 11, an installer that installs for you alone and needs no administrator rights, or a folder to run from anywhere. Or from winget:

winget install Patina.Patina

On macOS and Windows, online video also needs yt-dlp installed. The Flatpak brings its own.

Every release carries one SHA256SUMS covering all of these, signed by hand with the key 252B 901C 8885 3CF9 F939 2559 2497 38C8 641C 3359. Check it before trusting any of the above:

gpg --verify SHA256SUMS.asc SHA256SUMS && sha256sum -c SHA256SUMS