Silverscreen

Native Jellyfin client for Linux

Silverscreen is a native Jellyfin client for Linux that I wrote in Rust with GTK4 and libadwaita. The interface broadly follows the Jellyfin web client, but it is built with the platform's own components and automatically follows the system's light or dark theme. It is designed for Wayland; it can work on X11, with some limitations.

Playback

Playback happens inside the application through libmpv, with a video backend chosen in the settings:

  • Wayland proxy (default): a small Wayland compositor inside the application that mpv draws on directly, avoiding a full pass through GTK's OpenGL or Vulkan renderer;
  • mpv's OpenGL render API, for setups where the Wayland proxy is not suitable;
  • GStreamer, external mpv, and external VLC, for cases where playback inside the application is not the right choice.

With the Wayland proxy, HDR content (PQ/HDR10) is shown as HDR on displays that support it, through the wp_color_manager_v1 protocol. HDR turns on by itself, can be compared on the fly with mpv's SDR conversion, and can be adjusted during playback (peak luminance and other parameters); a setting turns it off entirely, including with external mpv and VLC.

mpv Lua scripts are managed from the interface: they can be added, downloaded, enabled, and configured one by one from the settings. Keyboard shortcuts are configurable and apply to all the built-in players.

During playback, external subtitles can be searched for and loaded without leaving the player, and a side panel shows the cast of the current title with links to IMDb and TVDb.

Catalog

  • Home screen sections that follow those of the Jellyfin web client: continue watching, next up, libraries, with dedicated pages for movies, series, and music;
  • A “Discover” carousel with random titles from the user's own library and, when a Seerr instance is connected, suggestions of titles not yet in the library, which can be requested directly;
  • IMDb, TMDb, and Rotten Tomatoes scores (critics and audience) on movie and series pages and in the carousel, even when the server does not provide them;
  • Trailers, search, and, on an episode's page, all the other episodes of the season, with those already watched marked.

Profiles and settings

Silverscreen supports multiple profiles: each one can connect to a different server and has its own settings, isolated from the others. The settings mirror those of the Jellyfin web client, category by category.

Distribution

Silverscreen is distributed as a .deb, .rpm, AppImage, and Flatpak package. The first three use the GTK4, libadwaita, and mpv already installed on the system; the Flatpak bundles everything, including mpv built from source. The code is released under the GPL-3.0-or-later license.

The repository is not public yet: development takes place on a private Gitea instance, so for now Silverscreen cannot be downloaded. I can share both the packages and the source code on request.

The screenshots show a test library with public domain movies and Blender Foundation open movies (© Blender Foundation, CC BY), with posters and stills from the movies themselves.