
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.

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 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:
- Importing the history you built up elsewhere, from Trakt, Letterboxd, Jellyfin’s own Playback Reporting or a CSV file, with a preview first and an undo afterwards.
- Exporting everything it holds, as JSON or CSV.
- Skip segments for intros, credits and recaps, learned once and shared across every device in the house.
- Quizzes, with a household leaderboard that each person opts into.
- Settings that follow you from one device to the next.
- A home screen that arrives in one request, Continue Watching and Next Up and Latest together, instead of three.
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
- Time watched comes from how far through something you got, so paused time doesn’t count.
- Something counts as watched at the same point Jellyfin itself uses.
- Watching something again counts as a rewatch, and a few seconds of something doesn’t count as watching it.
- If an app is closed mid-play, the record ends where you really stopped, not where Jellyfin guesses.
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.
-
In Jellyfin, open Dashboard, then Catalogue in the Plugins section.
-
Click the gear icon at the top of the catalogue.
-
Click the plus icon beside the Repositories title, and fill the two boxes in.
Name
JellyMold CompanionRepository URL
https://raw.githubusercontent.com/darkejon/jellymold-companion/main/manifest.jsonSave it, and confirm if your server asks whether you trust the repository.
-
Go back to the catalogue, where JellyMold Companion is now listed in the General section. Click it, then Install.
-
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.