Privacy policy · effective 2026-11-02

Privacy.

Patina has no account and sends nothing to its developer. It plays what you open, keeps your history on your computer, and talks to the services you set up yourself. This page says exactly what, where and when.

no accountno telemetryno analyticsno crash reportsno update check

The short version.

  • Nothing goes to the developer. Patina has no account, no telemetry, no analytics, no crash reporting and no update check, and it looks up no covers or metadata for what you play.
  • On your computer it keeps your settings, your playback history, where you stopped in each file, and thumbnails of your videos. These are ordinary files and are not encrypted. Preferences can turn most of it off and clear it.
  • When you open something from the network, mpv or yt-dlp connects to it from your IP address, as any player would.
  • OpenSubtitles is off until you give Patina your own API key. A search sends the file's hash, its name and your languages.
  • Jellyfin is off until you add a server. After that Patina talks to that server when it starts, and tells it what you play and how far you have got.

This page covers the app only. The tools in its repository are not part of any package.

What it keeps.

Patina keeps its settings in one folder and its data in another. They are ordinary files with your system's default permissions, so on a computer you share, whether other accounts can read them depends on those defaults. PATINA_CONFIG_DIR and PATINA_DATA_DIR move them.

Settings

  • Linux ~/.config/patina/
  • Flatpak ~/.var/app/video.patina.Patina/config/patina/
  • macOS ~/Library/Application Support/video.patina.Patina/
  • Windows %APPDATA%\Patina\config\
  • settings.json — your preferences. This includes your OpenSubtitles API key and user name, in plain text. The OpenSubtitles password is not here: see Passwords.
  • input_conf/ — your key binding sets.
  • mpv/ — your own mpv.conf, scripts and fonts, if you add any.

Data

  • Linux ~/.local/share/patina/
  • Flatpak ~/.var/app/video.patina.Patina/data/patina/
  • macOS the same folder as the settings
  • Windows %APPDATA%\Patina\data\

On Windows, %APPDATA% is the part of your profile that roams, so on a network with roaming profiles these can follow you to other computers.

  • history.json — what you played: the path or URL, the title, when, its length and how far you got. At most 1,000 entries. This also feeds the recent files.
  • watch-later/ — mpv's resume files: where you stopped in a file, with its tracks, delays, speed, volume and the like.
  • thumbnails/ — the seek bar's previews, which are actual frames of your videos, as JPEG. They are made for local files only and limited to 500 MB by default. Each file is named by a hash of the video's path, size and date.
  • online-subtitles/ — subtitles downloaded from OpenSubtitles, with no limit on how many.
  • jellyfin.json — the Jellyfin servers you have added: each one's name, address and version, your user name and ID on it, and a random ID for this device. No password or token is kept here.
  • jellyfin/images/ — posters from those servers, limited to 256 MB by default.

Elsewhere

  • Screenshots go to the folder you choose, or else Pictures/Patina, and downloads to the folder you choose, or else your Downloads folder.
  • If you make Patina the default player, it registers itself with your system: a desktop entry and mimeapps.list on Linux, and entries under your user in the registry on Windows. Preferences › Utilities takes them out again.
  • While it runs, Patina keeps a lock file, an ID file and a socket or named pipe in a private folder. See One Patina at a time.

Logs

Patina writes no log file of its own. It logs to standard error, at warning level unless you pass --verbose, so you see it if you start Patina from a terminal, and a desktop may keep the output of the programs it starts. If you ask mpv for a log file through an mpv option, mpv writes one, and what is in it is up to mpv.

Turning it off, and clearing it

  • Remember playback history (Preferences › General) stops new entries and keeps the old ones. Clear Playback History (Utilities) empties the file, and so do Clear Recent on the welcome screen and Clear History in the History window. Those are all one action: clearing Recent clears the whole history. A single entry can be removed from the History window.
  • Resume where you left off (General) stops Patina saving your place when you quit or a file ends. It does not stop every save: opening a new file over one that is playing still asks mpv to save the place of the one you are leaving, whatever this preference says. Clear Saved Positions (Utilities) deletes the whole folder.
  • Show thumbnails while hovering the seek bar (Interface) turns the previews off. Clear Thumbnail Cache (Utilities) deletes them.
  • Clear Poster Cache (Jellyfin) deletes the posters, and so does signing out.
  • There is no button yet for online-subtitles/, and none for removing a server from jellyfin.json. Signing out removes your user name and ID but leaves the server's entry and the device ID. Delete the folder or the file by hand.

Removing it all

Deleting the folders above removes what Patina has stored, apart from the passwords below and any screenshots or downloads you have kept. Uninstalling may leave them in place. The Windows uninstaller leaves your settings, and takes out the file types Patina registered. flatpak uninstall --delete-data video.patina.Patina removes the Flatpak's, and on macOS brew uninstall --zap --cask patina removes them too.

Your system's password store.

The OpenSubtitles password and your Jellyfin sign-in tokens go in the system's own store: Secret Service on Linux (GNOME Keyring or KWallet, for example), Keychain on macOS, and Credential Manager on Windows. They are filed under Patina OpenSubtitles and Patina Jellyfin.

  • If there is no store, nothing falls back to a file. The OpenSubtitles password is not kept and says so, and a Jellyfin sign-in lasts until Patina quits.
  • Your Jellyfin password is sent to the server to sign in and is not stored.
  • Clearing the OpenSubtitles password field and pressing Enter deletes that password. Restoring the default preferences does not: it clears the API key and user name from settings.json and leaves the password in the store.
  • Sign-ins and passwords stay in the store when you uninstall. Your system's password manager can remove them.

What leaves your computer.

With no Jellyfin server signed in, Patina makes no connection of its own at startup or while it sits idle. Everything below is something you opened or set up. It never contacts the developer, and it never checks for updates.

What you open

When you open a URL or a stream, mpv connects to it directly from your IP address, like any other player. The HTTP proxy and user agent preferences are passed to mpv.

Play videos from websites with yt-dlp is on by default, so a web address can be handed to yt-dlp, which fetches the page. What yt-dlp sends is up to yt-dlp and to your own yt-dlp configuration, which Patina's Downloads window does not ignore. For YouTube it may use a JavaScript runtime such as Deno. The Flatpak carries both; elsewhere they are whichever you have installed.

Scripts in Patina's mpv folder load by default, and a script can do anything, the network included. There are none unless you add them.

OpenSubtitles

Patina ships no API key, and with none it sends nothing. With your own, a search goes to api.opensubtitles.com over HTTPS, when you choose Find Online Subtitles or, if you turn on Search online when a video has no subtitles (off by default), when a local video of twenty minutes or more opens with no subtitle tracks. The automatic search downloads only an exact match by hash.

A search sends:

  • your API key, on every request;
  • for a local file, its OpenSubtitles hash, made from 64 KiB at each end of the file (files over 128 KiB), and its name in lower case, with no folder or extension;
  • for a stream or a Jellyfin item, its title instead, and no hash;
  • your subtitle languages, or English if you have set none;
  • a user agent naming Patina and its version, and your IP address, as any request does.

If you set up an account, your user name and password go to its sign-in over HTTPS, and Patina signs out when it quits. A download fetches the link OpenSubtitles returns, wherever that points, without your key. OpenSubtitles' own privacy policy covers what it does with all this.

Jellyfin

Patina talks only to servers you add. Once you are signed in, it contacts that server every time it starts, without being asked, to load the library in the idle window.

  • Every request names the client as Patina, the device as “Patina on” your platform, a random device ID and the version, and carries your token once you are signed in.
  • While you play something from the server, Patina reports it at the start and the end and every ten seconds between, paused or not: which item, the position, whether it is paused or muted, the volume, the audio and subtitle tracks, and the queue. That is how your place stays on the server, and anyone who runs the server can see it.
  • A server at an http:// address gets your password and token unencrypted. Patina warns you when you add one.
  • Scan Network, only when you press it, broadcasts one fixed message on your local network on UDP port 7359, which every device there can receive. It carries nothing about you.
  • Requests follow redirects only on the same server. Adding a server is the exception: that first check, which carries no token, follows them anywhere. A conversion on another host is not played, and subtitles on another host are not added.

patina:// links

If you let your browser open them, a web page can use a patina://open link to make Patina play a stream at once, with no question from Patina itself. That connects you to the stream's host from your IP address, adds it to your history as anything you open does, and may bring Patina to the front, replace what is playing or go full screen. It can also set a fixed list of mpv options, among them the user agent, referrer, headers and cookies of that stream's request.

A link cannot open local files, cannot make Patina listen on the network, and cannot set scripts or turn off certificate checks, and nothing comes back to the page. Whether your browser asks first is up to your browser.

Your browser

Patina opens a page in your browser only when you ask: its website from the Help menu, or a web address in the playlist with Open in Browser.

Other programs on your computer.

Player controls

Use media keys and the desktop's player controls is a preference. With it on, Patina tells your desktop what is playing, including the title and artwork, through MPRIS on Linux, the media panel on Windows and Now Playing on macOS. Other programs can read that, and what the desktop does with it is up to the desktop.

One Patina at a time

Files you open from a terminal or a file manager go to the Patina already running, over a Unix socket in a folder only you can read, or on Windows a named pipe that refuses other users and other computers. Only the request to open something crosses it. Patina opens no TCP or UDP port to listen on.

The Flatpak's sandbox

The Flatpak can read every file you can, so that it can open what you point it at, and can write only to your Downloads folder, to Pictures/Patina, and to a file you choose in a save dialog. It also has the network, your display, sound, your graphics hardware, the password store and the file manager's show-this-file service. On macOS and Windows Patina is not sandboxed; that it keeps to the folders above is a property of its code, which is public.

Your operating system

Patina sends no crash report. Your operating system's own crash handling may still record one, and may send it to the system's maker if you have allowed that. HTTPS certificates are checked against your system's trusted certificates, and on macOS and Windows the system may go online to do so.

patina.video.

This site is a set of static pages hosted on GitHub Pages. GitHub, as the host, receives every visitor's request, including their IP address, and its own privacy statement covers that. The site loads nothing from anyone else — its fonts, styles, scripts and images all come from patina.video — and it has no analytics, no embeds and no cookies.

If you use the light and dark switch, your choice is kept in your browser's local storage, under patina-theme, and stays there. The window on the front page runs entirely in your browser and sends nothing anywhere. The copy buttons put a command on your clipboard when you press one. Links to GitHub and to jz.bz are ordinary links.

The downloads are hosted on GitHub, and winget and Homebrew download from there; installing the Flatpak bundle may have Flatpak download the runtime it needs from Flathub. GitHub, the package managers and Flathub have their own privacy policies.

Questions, and changes.

Open an issue at github.com/jzbz/patina/issues. Issues are public, so leave out anything you would rather keep to yourself. If this page is wrong about what Patina does, that is a bug; please report it.

Effective 2026-11-02. When a release changes anything described here, this page changes with it, and so does the date.