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
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.
UNDERNEATH
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.
ON TOP
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.
SUBTITLES
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.mkvplaying
Hollow.Coast.S01E02.1080p.ja.srtthe same name, in your first language
Subs/Hollow.Coast.S01E02.1080p.en.srtin a subfolder
Hollow Coast - 1x02.en.assthe same episode, spelled differently
Hollow Coast - 1x03.en.asskept for episode 3
Hollow.Coast.S02E02.srtanother 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 OWN SERVER
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.
HomeMoviesShowsMusic
Living room server
Continue Watching
Mandelbrot SetSeahorse Valley · 4 min left
Game of LifeS1:E2 · Second Soup
Gradient DriftStill Drifting · 6 min left
Test CardPlease Stand By · 1 min left
Next Up
Rule 110S2:E1 · Random Start
Colour SpectrumS1:E4 · Red to Red
Bars and ToneS1:E1 · Bars
Mandelbrot SetElephant Valley
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.
OvertonesNorthern Oscillator - Pure Tones00:4103:18
PlaylistChapters
7 items · 27:44
1Morning SignalNorthern Oscillator03:34
2Low TideNorthern Oscillator04:11
OvertonesNorthern Oscillator03:18
MUSIC MODE
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.
ONLINE VIDEO
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.
FROM A TERMINAL
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, --enqueueAdd to the newest window's playlist-w, --separate-windowsA window for each input-f, --fullscreenPlay in full screen--pipPlay in picture-in-picture--music-modePlay in music mode--mpv-NAME=VALUESet an mpv option
KEYS
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.confUP 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
CtrlL
Previous / next frame
Alt←Alt→
Subtitle delay
ShiftZShiftX
Volume
↑↓
Playlist / chapters
CtrlShiftPC
Previous / next file
Ctrl←Ctrl→
Music mode
CtrlAltM
Full screen
f
Jump to a time
CtrlJ
GET IT
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: