subarr v2.5.0: Jellyfin support, and you no longer have to work out path prefixes yourself
For anyone who hasn’t come across it: subarr is a coordination layer that sits next to Bazarr and drives subgen (Whisper) to fill the gaps Bazarr can’t. It’s a coverage dashboard over your Sonarr/Radarr/Bazarr libraries that generates, checks and cleans up subtitles. It is not a Bazarr replacement, it works alongside it. Free, and built in the open.
The headline this time is Jellyfin.
Jellyfin is supported, alongside Plex. subarr has always nudged Plex to refresh an item as soon as it wrote a subtitle, so the sub turns up straight away instead of whenever your next scheduled scan happens to run. Jellyfin now gets exactly the same treatment. Add it under Settings, Integrations with your server URL and an API key (Jellyfin Dashboard, API Keys), and it shows up like every other integration: Test Connection, a health dot, a dashboard tile.
If you run both servers, you can configure both, and a subtitle that lands gets both of them refreshed. Neither one blocks the other if it’s down. Nothing changes for Plex-only setups. There’s no migration and nothing to reconfigure when you upgrade.
Emby isn’t in yet. The two backends now sit behind one shared interface, which is the bit that makes adding Emby a contained job rather than a rewrite, so if there’s genuine demand it can follow. Open an issue if you want it.
You don’t have to work out the path prefix anymore. If you’ve ever hit “No Plex Section” and gone digging through docs to figure out what PLEX_PATH_PREFIX was supposed to be, that’s gone. subarr now asks the media server what paths its own libraries live under and derives the prefix from that, for Jellyfin and Plex both. If you’ve already set the env var explicitly it still wins, so nothing breaks. It just means a fresh install has one less thing that can silently not work.
Foreign-language scenes in English films can get their own forced subtitle. You know the scene: an English-language film cuts to a conversation in Russian or Japanese for two minutes with no subs, because the release only shipped a full English track and Bazarr has nothing forced to find. subarr can now detect those segments and write a .forced.en.srt covering just them, rather than either nothing at all or a full transcription of a film that didn’t need one.
The language detection runs locally on a small ONNX model, about 2MB, pulled on first use. No torch, nothing leaves your machine. I validated the detection thresholds against 1706 windows pulled out of my own library before shipping it rather than picking numbers that felt right.
It’s off by default because it’s new. Turn it on under Settings, Rules, or with SUBARR_FORCED_SEGMENT_ENABLED=1 .
A couple of smaller ones. If your /data volume is on an NFS or SMB share, subarr no longer uses SQLite’s WAL journaling there, since WAL over a network filesystem is a known corruption risk. Local installs are unchanged. Keeping /data on local disk is still what you want, and the Health page will still tell you so.
Also, a build-cache problem meant the published image could keep shipping Debian packages that had already been patched upstream. That’s fixed at the CI level now, so every image gets current packages.
Upgrading is a normal image pull (ghcr.io/coaxk/subarr:2.5.0 , or :latest ). Multi-arch, so it runs on a Pi. No breaking changes, no config to touch.
Full changelog: Release v2.5.0 — Jellyfin, beside Plex · coaxk/subarr · GitHub
Happy to answer anything in the comments, and if you’re a Jellyfin user I’d love to hear whether the refresh behaves the way you’d expect on your setup.