Plex has run on the server in Zwolle for years. This week Plex let go of the team that builds its apps, and I decided I wanted a way out that I had actually tested. So Jellyfin now runs next to Plex, on the same files. One day in: hardware transcoding works, my watch history came along, and comparing the two turned up a bunch of movies that had been the wrong movie all along.
The server in Zwolle (the one with the hard drives that lie) has been running Plex for years. Movies and shows, a GTX 1060 that does the transcoding, Sonarr and Radarr keeping the library filled, and a few friends who watch along. I’ve never really had a reason to complain about it.
This week Plex went through a round of layoffs, and this time the team that builds the Plex apps was part of it. I don’t know what Plex will look like a year from now, and neither does anyone else. That made me realise that every movie night in this house depends on decisions made by a company I have no say in, while the files themselves sit on my own disks.
Those decisions haven’t been great lately anyway. In 2025 watching your own media outside your own house suddenly required a subscription. The app has slowly filled up with ads, live TV channels and “free” movies with commercials, right next to my own library on the home screen. I understand why Plex does it, because my files don’t make them any money and ads do. But I don’t understand what any of it is doing in an app I use to watch my own stuff. I didn’t buy a GPU and six hard drives to scroll past someone else’s catalogue.
Plex isn’t going anywhere tomorrow. But I’d rather have a way out that I’ve actually tested before I need it, not after.
Jellyfin next to Plex
Jellyfin is an open-source media server, originally a fork of Emby. You don’t need an account anywhere, and the server doesn’t check in with a company before it lets you watch something. The home screen only shows what’s on your own disks.
The plan was to run it next to Plex instead of replacing it. Same VM, same media folders, mounted read-only so Jellyfin can’t change anything. Plex stays exactly as it was. If Jellyfin turns out to be a disappointment, I remove one container and that’s the end of it.
Setting it up took less time than I expected. Jellyfin runs as a Docker container (pinned to an exact version, because I’ve been burned by latest before), with the NVIDIA container toolkit so it can use the same GTX 1060 that Plex uses. It got its own subdomain behind the reverse proxy that already handles Plex, and a check in my uptime monitoring.
For the first test I transcoded a 1080p movie down to 720p at 2 Mbit, about what you get on train Wi-Fi on a good day. The log showed h264 (native) -> h264 (h264_nvenc), the GPU encoder sat at around 30% and the CPU barely noticed. With Plex, hardware transcoding is one of the features you pay for. With Jellyfin it’s just a setting.
The theme
Out of the box Jellyfin looks fine, but you can tell it was designed by people who care more about codecs than about posters. I installed Abyss, a theme that makes the web interface look a lot more polished and adds a large banner with featured items to the home screen. It’s a line of custom CSS and a small startup script. I pinned it to a specific commit, so an update to the theme can’t break things on a random evening.
The Android TV app is a native app and doesn’t use custom CSS at all, so on the TV you get the default Jellyfin look. That’s fine, but worth knowing if you’re installing it for the theme.
Bringing the watch history along
For me the real reason to stay on Plex was never the app. It was years of watched checkmarks and half-finished episodes. Starting from zero wasn’t going to happen.
JellyPlex-Watched solves exactly that: it reads what you’ve watched on one server and marks the same items on the other. After the sync I compared both servers myself. Out of the 477 movies that exist in both libraries, four had a different watched status, and all four were me clicking around in Jellyfin that same morning. The sync itself didn’t make a single mistake.
In the meantime, Plex hid my server
Halfway through that morning my Plex server disappeared. It was still running and still reachable, but the Plex web app no longer listed it as a server.
It took a while to find. I had given the sync tool my server’s own token instead of a separate one. The library the tool uses identifies itself to plex.tv as a “controller”, basically a remote control, and because it used the server’s token, plex.tv concluded that my server was now a remote control and stopped showing it. Restarting Plex fixed it. A bit later it happened again, because an old copy of the sync container started up with the old token still in it.
The fix is simple: give the tool its own token. The documentation doesn’t mention this, so I wrote it up in an issue for the next person.
What stuck with me is how it happened. A server in my own house, with my own files on it, became invisible to me because a database at Plex decided it was a different kind of device. Jellyfin doesn’t have that database, so this can’t happen there.
Three apps, three opinions
Once two media servers are reading the same files, you can compare them. Radarr also keeps track of which movie every folder is supposed to be, so I compared all three. They didn’t agree as often as I expected.
The folder Avatar.The.Last.Airbender contains the 2005 animated series. Jellyfin thought it was the 2024 live-action remake. Because of that, the sync had copied my progress from the remake to the animated series, and eight episodes I had never seen were marked as watched.
Alien.Convenant has a typo in it, and that was enough for Jellyfin to pick a different movie. Radarr thought Gretel & Hansel was a six-minute short film, and had the 2004 Hellboy where the file is the 2019 one. Plex lists Talk to Me as a 2022 movie while the other two say 2023, and my first attempt to fix that matched it to a completely different film. The second attempt worked, and the watched status survived.
In the end five movies were wrong in Jellyfin, four in Radarr and two in Plex. All fixed now, without downloading or deleting anything. The only remaining difference between the three is four Blu-ray ISOs, which Jellyfin lists and Plex won’t index at all.
Some of those movies had probably been wrong for a long time. I never noticed, which says more about me than about the software.
First impressions
Tonight I watched a few episodes of South Park and Smiling Friends through Jellyfin. With Plex I’m used to staring at a spinner for a few seconds every time I press play. Jellyfin just started playing. Immediately. Skipping around was faster too, and the playback itself was smoother. It’s one evening and two cartoons, so I’m not drawing conclusions yet, but it was a good start.
There are things I miss. Jellyfin has no Netflix-style profiles, only separate users. My girlfriend now has her own account with her own history and a tile on the login screen. It works, it just feels a bit less like a living room and a bit more like a computer. There’s no single sign-on yet either. I want to connect Jellyfin to my own login system before I invite friends, so they don’t get another password from me. Until then they stay on Plex.
Why you should too
I’m not saying Plex is bad. I’m saying that trying Jellyfin costs almost nothing. You can run it next to Plex on the same files, read-only, in an afternoon. If you don’t like it, you’ve lost that afternoon. If Plex ever does something you can’t live with, you already have the alternative running, with your watch history in it.
And there’s a decent chance you’ll find a few movies that have been the wrong movie for years.
The trial isn’t finished. I gave myself one test: my girlfriend and I use Jellyfin for a few weeks, at home and on the train, and neither of us goes back to Plex out of frustration. I’ll let you know how that goes.
