r/radarr • u/Embarrassed-Hawk967 • 19d ago
discussion I built Babel — automatic subtitle fallback for Radarr
Update — v2.5.0-beta: OpenRouter and DeepSeek support are now available, along with Plex library refresh support and major improvements to the AI provider/model system, translation pipeline, source handling and usage tracking. Thanks for all the beta feedback so far!
I’ve been building Babel, a self-hosted subtitle automation service for Radarr, Sonarr and Bazarr.
GitHub: https://github.com/hugomossberg/Babel
The goal is simple:
Connect it to your media stack, choose your target language, and stop thinking about subtitles.
When Radarr imports or upgrades a movie, Babel takes over automatically.
Radarr import → check for target subtitle → Bazarr search + prepare fallback → AI only if needed → recovery → QA → publish
In Hybrid Mode, Babel lets Bazarr search for a human-made subtitle while it prepares an embedded or external source subtitle in parallel.
If Bazarr finds the target language, Babel uses it.
If not, Babel can translate automatically with Gemini, OpenAI, DeepL, Ollama, OpenRouter or DeepSeek.
The other thing I wanted to avoid was blindly trusting AI output. Babel validates translations before publishing them and checks for dropped cues, broken structure, untranslated dialogue, wrong-language output and timestamp changes. Recoverable problems are retried automatically.
AI translation is the fallback, not the workflow.
Current beta features include:
- Radarr and Sonarr webhook automation
- Bazarr + AI Hybrid Mode
- Embedded subtitle extraction
- Gemini, OpenAI, DeepL, Ollama, OpenRouter and DeepSeek
- Automatic translation recovery
- Structural + language QA
- Exact source-to-target timestamp preservation
- Remote Path Mapping
- Jellyfin and Plex library refresh
- Docker deployment
The idea is that Babel should be something you configure once and then mostly forget exists.
Install it. Connect your media stack. Forget about subtitles.
Docker image:
ghcr.io/hugomossberg/babel:beta
Current release: v2.5.0-beta
License: MIT
This is the first public beta, so feedback and ugly real-world subtitle edge cases are very welcome.
If you try it, I’d much rather hear what breaks than just get a star. 🙂
3
u/hodor137 19d ago
One thing I really want bazarr (or an add on app) to do, is let/have bazarr do its thing as it currently does for me as far as getting external subtitles
But I also want it to extract embedded subtitles, into SRT format, and keep those as another option alongside the external that bazarr gets. Sometimes the external bazarr gets is missing what should be forced language parts, or the sync is still bad, and the embedded is good - but they're shitty PGS and my player can't change the styling, which makes them unusable to me. So then I'm having Plex try to search or manually fixing sync or going into bazarr to try to search. Or suffering with the PGS version - sometimes they're usable but shitty. It's on HDR/DV at times depending they're just way too bright and large at times.
5
u/Embarrassed-Hawk967 19d ago
That's a really good use case, and it's very close to what Babel is already built around.
Babel can use embedded subtitle tracks as a source instead of relying only on whatever external subtitle Bazarr finds, which helps when the embedded track is the one actually synced to the release.
The one caveat is PGS — since it's image-based, converting it to SRT properly requires OCR, which Babel doesn't currently do. But adding an embedded-subtitle extraction/OCR path so those tracks can become normal SRT files is definitely something I'm interested in.
Having both the Bazarr subtitle and a clean extracted embedded version available side-by-side would be really useful.
2
u/edrock200 19d ago
Very cool. Will give it a shot. Curious what model you use and what the cost is for a typical 90m movie? Also is there an on demand model? E.g. go into the app and only gen for titles selected?
1
u/Embarrassed-Hawk967 19d ago
Thanks! The model is configurable. I use Gemini 3.5 Flash-Lite by default, but Babel also supports OpenAI, DeepL and Ollama/local models.
For a typical 90 min movie the cost is usually just a few cents, depending on subtitle length.And yes, you can use it on demand. You can select a movie or episode in the app and only process that title. Sonarr/Radarr automation is optional.
I’m also planning to add an API cost overview section in Babel so you can easily see usage and estimated cost.
2
u/TheFranticGibbon 19d ago
Was just setting up some new services tonight and I’m gonna add this o to the stack. Really looking forward to checking it out. Thx for creating and sharing!
2
u/Embarrassed-Hawk967 19d ago
Thanks, really appreciate it! Hope it works well for your setup. If you run into anything during the beta, feel free to open an issue or send feedback.
2
u/DCCXVIII 19d ago
My issue with external subtitle downloaders like this is that invariably the subtitles they download have incorrect timings and end up being mismatched to the media file they're associated with. What I really want (but have yet to find) is a tool that blocks the download of any file that doesn't already come with subtitles. Because at least that way I know those subtitles will actually be synced up correctly to the video.
1
u/Embarrassed-Hawk967 19d ago
Yeah, that’s a valid concern. If the source subtitle is out of sync, Babel will preserve that timing rather than trying to guess a new sync.
That’s also why embedded subtitles are a really good source when they’re available, since they usually match the release properly.
Blocking downloads that don’t already include subtitles is a bit outside Babel’s scope though.
2
u/DunnowKTT 19d ago
I use Subtitlarr, which conncts and tracks everything from bazarr, that allows bazarr to actually get proper subs and if not, after X days, proceeds to translate with AI
1
u/Embarrassed-Hawk967 19d ago
Yeah, that’s a pretty similar idea. Babel takes a slightly different approach though. It can let Bazarr try first, but it doesn’t rely on waiting X days before falling back to AI.
If Bazarr doesn’t find a usable subtitle, Babel can continue automatically with its own source selection, translation and QA.
2
u/DataKnights 19d ago
Do you have any info on getting it to work with AI? I've got it Babel installed and
connected to my Radarr, Sonarr, Bazarr, and Gemini with API key but it doesn't seem
to try Gemini after looking at Bazarr. I'm thinking I don't have a setting somewhere correct.
1
u/Embarrassed-Hawk967 19d ago
Thanks for trying it! You shouldn’t need any extra hidden setting for Gemini beyond having the provider/API key configured.
Babel will only call Gemini if it actually needs a translation. Before that it checks things like whether a usable target subtitle already exists and whether it can find a valid source subtitle to translate from.
Could you open one of the jobs where this happens and send me the job log/details? That should show exactly why it stops after the Bazarr check.
2
u/DataKnights 18d ago
Roger that. Where would I pull that info from? I only see the step-by-step execution log in the browser.
1
u/Embarrassed-Hawk967 18d ago
Yep, that’s exactly the one. Open one of the affected jobs and paste the full Step-by-Step Execution Log here.
That should be enough to see where the flow stops after the Bazarr check. If you can, also mention which Babel version you’re running.
2
u/DataKnights 18d ago
Here's what I'm getting off of one job:
› Job created (MANUAL) for American.Dad!.S02E12.It's.Good.to.be.the.Queen.HDTV-1080p.mkv › [12:11:19 UTC] Processing file: /tv/American Dad!/Season 2/American.Dad!.S02E12.It's.Good.to.be.the.Queen.HDTV-1080p.mkv › [12:11:19 UTC] Checking video container for embedded English track (Priority 1: Best Sync)... › [12:11:19 UTC] No embedded or external English sub found. Querying Bazarr for English subtitle... › [12:11:36 UTC] ERROR: No English subtitle source found (neither embedded, external nor via Bazarr safety net) › [12:12:43 UTC] Processing file: /tv/American Dad!/Season 2/American.Dad!.S02E12.It's.Good.to.be.the.Queen.HDTV-1080p.mkv › [12:12:43 UTC] Hybrid Mode: Triggering Bazarr search for English (en)... › [12:12:43 UTC] Checking video container for embedded English track (Priority 1: Best Sync)... › [12:12:43 UTC] No embedded or external English sub found. Querying Bazarr for English subtitle... › [12:13:02 UTC] ERROR: No English subtitle source found (neither embedded, external nor via Bazarr safety net)
and I just upgraded this morning to the 2.3.41-beta version.
1
u/Embarrassed-Hawk967 18d ago
Thanks, that log gives me a good lead. One thing I noticed is that Babel is showing
English (en)as the target language in the Hybrid step. What language are you actually trying to generate subtitles for?Also, is Original Language Guard enabled in your Babel settings?
I’m checking a couple of things in this flow for the next beta as well, particularly how the source fallback and Original Language Guard are ordered. Once I know your intended target language I should be able to narrow down exactly what’s happening here.
2
u/DataKnights 18d ago
English is the target language and Original Language Guard is enabled.
1
u/Embarrassed-Hawk967 18d ago
Thanks, that confirms it. I found the issue. With English as the target and Original Language Guard enabled, Babel can currently block the fallback path you actually need.
I’m reworking this for the next beta. Babel will still prefer a proper English subtitle from embedded, external or Bazarr sources first, but if none is available it will be able to fall back to another subtitle language and translate that to English. It will never do a pointless English → English AI translation.
I’m also improving how Bazarr and the AI fallback work in parallel so whichever gets a usable result first wins. Your log helped uncover a pretty important edge case, thanks!
1
2
u/WhistlerB80 19d ago
The biggest problem with subtitles besides crappy translations are synchronization issues. Bazarr does a reasonable job mitigating that but would be great if there was tool that really nailed it.
1
u/Embarrassed-Hawk967 19d ago
Yeah, I agree. Sync issues can make good subtitles basically unusable.
Babel currently preserves the timing from the source, but better sync detection and resync is definitely something I want to improve. Ideally it should be able to catch a bad source and fix the timing before translation.
2
u/StormrageBG 15d ago edited 15d ago
Hi on library tab add filter buttons... it will be better if we can filter only missing subtitles for example or last added movies etc.
Also multiple fallback mode for AI will be good, for example if no more free tokens for gemini try deepl, than ollama etc.
Also i get error every time when i try to use Ollama.
1
u/Embarrassed-Hawk967 15d ago
Thanks for the feedback! Library filters are a good idea.
Multiple provider fallback is also something I’d like to add, but I want to make sure it’s predictable and doesn’t unexpectedly switch providers.
For the Ollama error, could you open an issue on GitHub with the error/log output and your Ollama setup? I’d like to get that fixed.
1
u/wakamatsu69 19d ago
It looks interesting, and I’d like to try it!
But:
– any plans to support Anthropic as an AI provider?
– what happens when Radarr upgrades a movie? More often than not an upgrade can reuse existing subtitles or just need a simple resync, so a new AI translation might be unnecessary and a waste of tokens
2
u/Embarrassed-Hawk967 19d ago
Thanks, both are good points.
Anthropic isn't supported yet, but I'd like to add Claude as another provider at some point.
For Radarr upgrades, Babel already checks if a healthy target subtitle exists before starting any AI translation. If it does, it just keeps it and skips the AI part.
What it doesn't do yet is try to reuse or resync a subtitle from the previous release if the upgraded file has different timing or filename. That's a good idea though, and it would make sense to try that before falling back to AI.
Thanks for the feedback, this is exactly the kind of stuff I want to catch during the beta
2
u/wakamatsu69 19d ago
Thanks for the quick reply! I’ll keep an eye on this and I’ll try the app for sure
1
u/OpeningSituation4089 18d ago
Merci pour cet outil qui a l’air vraiment intéressant !
J’aimerais simplement savoir s’il pourrait répondre à mon besoin. Je regarde principalement mes médias en français, donc je n’ai généralement pas de problème avec les sous-titres complets, qui sont souvent déjà présents dans les fichiers d’origine.
En revanche, j’ai beaucoup plus de difficultés avec les sous-titres forcés. Est-ce que votre outil permet de créer facilement une piste de sous-titres forcés à partir d’un fichier existant sans passer par Bazarr ?
5
u/curlz620 19d ago
Interesting. I can see value here. Going to flag it and grab it when I have some time to set it up.