JellyMold Companion

The JellyMold Companion logo: the app’s coral mould on a teal gradient

JellyMold Companion is a free plugin for your own Jellyfin server. It is optional, and the app is complete without it: everything on the features list works against a plain Jellyfin server, exactly as it says. If you use JellyMold and want better statistics, installing it is easy.

What the plugin adds is better media watch memory. Jellyfin’s own record of what you have watched is thinner than most people expect, and not designed to power useful statistics. The JellyMold Companion plugin keeps better stats, privately in your server’s own database, and the app reads it to give you improved statistics.

What Jellyfin keeps on its own

For each account, against each film or episode, a Jellyfin server remembers whether you have played it, how far through you are, and when you last played it. There is a play count alongside them, which is a single number with no dates, and apps disagree about when to add to it.

That is enough to resume a programme and to grey out the ones you have finished, which is what it is for. It is not enough to say how many hours you watched last year, how many times you have been back to a favourite, or what you were watching the Tuesday before last. And when a file is removed from your library, its record leaves with it.

Six things your server starts remembering

  • Rewatches

    Every viewing, each with its own date

    Without the pluginOne number, with no dates behind it

  • Time spent watching

    Real minutes, with pauses and abandoned sessions left out

    Without the pluginRunning times, added up

  • A film you finished, then deleted

    Still counted, and listed as no longer in your library

    Without the pluginForgotten along with the file

  • Streaks and years

    A current streak, your longest, and a total for every year

    Without the pluginNothing at all

  • Who gets a history

    Everyone in the house, each with their own

    Without the pluginAdministrators, if they install Playback Reporting

  • An episode watched on a plane

    Real minutes, on the dates they happened

    Without the pluginThe played mark, once you reconnect

What the app shows once it is installed

The statistics section on iPhone and iPad is the part you see. All users get basic stats direct from your server. With the plugin installed, you gain the following.

The JellyMold statistics screen on iPhone, showing 14 films and 539 episodes watched, a total watch time of 427 hours, a current and longest watching streak of 9 days, and a films list whose last entry is greyed out and marked as no longer in the library
Statistics on iPhone with Companion installed. The streaks, the real watch time and the greyed-out film that has left the library all come from the plugin.

Rewatches, counted

A film you have been back to three times says so, a series tells you how many episodes you have rewatched, and your watch time grows each time rather than counting a programme once and stopping. A viewing counts once you reach 90 per cent of the running time, which is your server’s own default resume setting.

The series list on iPhone, showing Star Trek: Deep Space Nine at 93 of 158 episodes with 18 rewatched, The X-Files complete at 91 of 91, and Planet Earth II with 1 rewatched
Rewatched episodes counted alongside the first time through

The time you actually spent

Time spent watching is real minutes. Pausing for twenty minutes adds nothing. Nor does seeking, buffering, or starting something and giving up on it ten minutes in. Without the plugin, the only honest way to total your viewing is to add up running times and hope.

A history that outlives the library

Space runs out, a series gets finished and removed, a film goes back on the shelf. The viewing still happened, so the plugin keeps it, and the app lists those entries as no longer in your library, greyed out and still counted, as the last row of the screenshot above shows. Jellyfin forgets an item the moment it is removed.

Playback Reporting is the partial exception, for the one account that can read it. It lists what has gone, but it does not count any of it towards a total, and its records expire on whatever retention it is set to.

A history for everybody, not just the administrator

Jellyfin’s nearest built-in equivalent is the Playback Reporting plugin, and only administrators can read what it collects. Companion gives every account on the server their own history and stats.

Watching offline counts

A download watched on a plane is recorded on the device and sent to the plugin when you are back on the network, as real minutes on the dates it happened. Without the plugin, the most your server ever learns is that the episode ended up played.

Quicker every time you open it

The app keeps its own copy of your history and asks the plugin only for what has changed since last time, instead of fetching every played item from every server on each visit.

Measured once, on the server

JellyMold crops burned-in black bars by itself. Without the plugin it works that out on the device, which takes a few seconds to settle after playback starts. The plugin measures the letterboxing once, on the server, and the app reads the answer, so a film opens already cropped.

Coming to the app

The plugin holds more than the statistics section reads today, and the app is catching up. Already waiting on the server side:

Your history is yours, we don’t want it

The plugin runs on your server and writes to your server. We never see any of it, in keeping with the rest of what JellyMold does: the app sends us nothing, and adding the plugin does not change that.

Every app, everyone in the house

JellyMold Companion runs on your Jellyfin server, not on your phone. Every Jellyfin app, whether the web player, a TV app or a phone or tablet app, reports what it plays to the server. The plugin keeps a permanent record of all of it: films, episodes, music and audiobooks, for each person, whichever app they use. Nobody needs to install anything, and you choose who is recorded.

Counted the same way, whatever the app

The plugin is open source under the GPL-3.0, and its API is open to any app that wants to read or add to what it holds.

Installing it

It is free, and there is nothing to download. You tell your server where the plugin lives, once, and Jellyfin fetches it from there and keeps it up to date itself. Adding a repository is an administrator’s job, so if the server is somebody else’s, send them this page.

It works with Jellyfin 10.10.7, and with Jellyfin 12.1 or later. The two want different builds, and the catalogue picks the right one for your server by itself.

  1. In Jellyfin, open Dashboard, then Catalogue in the Plugins section.

  2. Click the gear icon at the top of the catalogue.

  3. Click the plus icon beside the Repositories title, and fill the two boxes in.

    Name

    JellyMold Companion

    Repository URL

    https://raw.githubusercontent.com/darkejon/jellymold-companion/main/manifest.json

    Save it, and confirm if your server asks whether you trust the repository.

  4. Go back to the catalogue, where JellyMold Companion is now listed in the General section. Click it, then Install.

  5. Restart Jellyfin.

That is the whole of it. Recording starts immediately, for every account on the server, and nobody has to switch anything on for themselves. The plugin’s own settings, including the import and export tools, are under Dashboard, then Plugins, then JellyMold Companion.

Tip

Nothing you have already watched is lost by installing it late. The plugin can import a history out of Trakt, Letterboxd, Jellyfin’s own Playback Reporting or a CSV file, preview what the import would do, and undo it afterwards if it was not what you wanted.