Your rating: None Average: 4.8 (5 votes)

Sailfin allows you to stream media from a Jellyfin server to your Sailfish device. Jellyfin is a FLOSS multimedia server that puts you in control of your media.

This is an alpha version. Code may be unstable, design may be crappy and features are missing!

Features right now:

  • Play music, video's, photo's and series
  • Reporting playback information

Missing features:

  • IPTV and livestream support
  • Video quality selection

Souce code available at
Sailfish forum thread:

Application versions: 
File harbour-sailfin-0.1-1.armv7hl.rpm133.19 KB26/09/2020 - 05:20
File harbour-sailfin-0.1.0-1.i486.rpm142.97 KB26/09/2020 - 05:20
File harbour-sailfin- KB28/09/2020 - 00:44
File harbour-sailfin- KB28/09/2020 - 00:44
File harbour-sailfin-0.2.1-1.armv7hl.rpm139.51 KB28/09/2020 - 16:56
File harbour-sailfin-0.2.1-1.i486.rpm149.64 KB28/09/2020 - 16:56
File harbour-sailfin-0.3.0-1.armv7hl.rpm1.99 MB10/10/2020 - 19:27
File harbour-sailfin-0.3.0-1.i486.rpm1.99 MB10/10/2020 - 19:27
File harbour-sailfin-0.4.0-1.armv7hl.rpm1.47 MB10/09/2021 - 09:03
File harbour-sailfin-0.4.0-1.aarch64.rpm1.59 MB10/09/2021 - 09:03
File harbour-sailfin-0.4.0-1.i486.rpm1.81 MB10/09/2021 - 09:03
  • Note: Jellyfin 1.7.0 or later is now required for use with Sailfin.
  • AARCH64 support
  • Added a simple music player, that is able to play simple playlists. Nothing fancy yet, things like shuffle and dynamically adding items are not supported yet.
  • If possible, media is streamed as-is. In previous versions, media was always being transcoded, putting extra strain on the server. Due limitations of QtMultiMedia, any video with more than 1 audio tracks is currently still being transcode.
  • Settings have been added to customize streaming behaviour. Transcoding can be disabled and the maximum bitrate can be chosen by the user.
  • Some, but far from all pages, have been optimised for landscape mode.
  • Images now show a blurry version of themselves (based on blurhash) before they are fully loaded.
  • MPRIS support has been added, allowing the playback to be controlled from the lockscreen and in SailfishOS 4.2, also via headset buttons.
  • A start has been made to allow for Sailfin to be remotely controlled by other Jellyfin clients. As for now, only basic playback controls such as play/pause/next/previous are implemented.
  • The C++-side has been thoroughly rewritten! Most application logic has been moved from QML to C++, parts of the code are generated based on OpenAPI descriptions. This should make future additions, such as better caching and offline synchronization, easier to implement. This is also why this update took so long, I feel like I've learned (read: been frustrated) about a lot of the quirks of C++ and Qt :). This probably has taken most of the development time, so I expect now this is done that future updates won't take yet another year.


nas's picture

@ahappyhuman thank you for sailfin!

I installed jellyfin localy and worked pretty well with most videos I tried!

I also tried the https with self signed certificate which didn't work, any chance to add an option for that?

thank you in advance!

ahappyhuman's picture

I've made an issue on GitHub for this over here, so that you can follow the progress. It sadly seems to be non-trivial at the moment, mainly due to QtMultimedia, which uses GStreamer internally, which uses another TLS stack than Qt, but is not exposed via QtMultimedia. Anyhow, if I have the time I'll try to get it implemented.

ahappyhuman's picture

I'm aware that the current release is a bit large, I'm currently investigating in how I can shrink it down. The problem has to do with libraries not getting stripped, I will make a new release once I figure out how.

sashikknox's picture
unknown:0 - Error: "Your GStreamer installation is missing a plug-in."

What GStreamer plugin i need? Cant play any video, and it not show categries of video, but i use it with emby... )

ahappyhuman's picture

My initial guess of what's happening is that the apis of both servers have started to diverge. From a quick glance at the api documentation, there seems to be a significant difference in how stream URLs are obtained. Emby pushes the burden on the client side to select the correct stream, with the right transcode settings and so on, while Jellyfin expects the client to deliver information to the server about what it can play back and Jellyfin will recommend a stream for the device.

What probably happend is that Sailfin gets a response it doesn't understand when trying to request the stream URL, as it's a Jellyfin-specific endpoint, interprets this garbage response (which it shouldn't) and sets the URL to the stream to a garbage value. GStreamer tries to load this URL, probably gets a html response back or something and doesn't know what to do with it.

sashikknox's picture

Ok, thanks anyway for your application )

sashikknox's picture

Work with emby!
Please, use only Emby compatible API)) really thank you! Nice to see jellyfin/emby client here!

sashikknox's picture

Really cool! Sad, but i have emby ( no jellyfin for freebsd freenas