Bazarr: Subtitles That Match What's Actually on Disk
Part 6 of Media Stack from Scratch.
Subtitles are the chore nobody automates until they've manually hunted a .srt that
drifts out of sync at minute twelve. The drift isn't bad luck: a subtitle file is
timed against one specific release, and you grabbed a different one. Bazarr fixes the
problem at the root: it asks Sonarr and Radarr exactly which release is on disk and
searches for subtitles matched to it.
Summary
- Bazarr doesn't scan your library: it mirrors Sonarr's and Radarr's, which is why it arrives this late in the series.
- Language profiles say what "done" means per show/movie (e.g. Dutch + English).
- It only acts on new imports by default; backfilling the whole library is a deliberate switch, not a surprise.
The compose
services:
bazarr:
image: linuxserver/bazarr:latest
container_name: bazarr
restart: unless-stopped
environment:
- PUID=1001
- PGID=100
- TZ=Europe/Amsterdam
volumes:
- /path/to/appdata/bazarr:/config
- /path/to/Media:/Media # same mount, same story
ports:
- "6767:6767"
Bazarr does mount /Media: it writes .srt files next to your video files, so it
needs the same path view as the *arrs. Same mount, same PUID/PGID, or you get
subtitle files the rest of the stack can't touch.
Setup
- Connect Sonarr and Radarr. Settings → Sonarr / Radarr: host, port, API key. Bazarr pulls both libraries and keeps them in sync from here on.
- Add subtitle providers. Settings → Providers. OpenSubtitles wants a (free) account; a couple of providers beats one, since coverage is spotty per release.
- Create a language profile. Settings → Languages. Mine: Dutch, English, with "hearing impaired" versions not required. Set it as default for series and movies.
- Scoring threshold: Bazarr scores how well a subtitle matches the release (release group, resolution, source). The default minimum is sensible: too low and you collect out-of-sync files, too high and rare releases never get subtitles.
What it does from now on
Every import Sonarr/Radarr completes, Bazarr sees within minutes, searches its providers, scores the candidates, and drops the best match next to the file:
/Media/Series/Show Name/Season 01/Show.Name.S01E01.mkv
/Media/Series/Show Name/Season 01/Show.Name.S01E01.nl.srt
Plex picks the .srt up automatically on its next scan of the folder.
For the existing library, Bazarr initially wants subtitles for everything it just learned about. That's a large burst of provider requests, and providers rate-limit. Let it churn through the wanted list over a few days rather than hammering Search All repeatedly; the queue drains itself.
Checkpoint
- Import something new in Sonarr (or re-run an import), watch Bazarr's History show a subtitle download within a few minutes.
- Play it in Plex, enable the subtitle track, confirm it stays in sync past the first scene change. That's the release-matching doing its job.
Next: Part 7: Profilarr, teaching the stack taste. Previous: Part 5: Seerr.
Related
Part 7: Profilarr
Default quality profiles just grab a resolution. Profilarr syncs curated custom formats so 'best release' means best encode, not biggest file.
Part 5: Seerr
Nobody else is opening Sonarr. Seerr gives a Netflix-style request search, wired to Plex for who's-allowed and to the arrs for fulfilment.
Part 8: An AI Agent
Giving an AI assistant real, API-key-backed access to query and manage Sonarr/Radarr in plain language, plus three MCP traps nobody documents.
If this saved you some time, a coffee keeps the lights on and the posts coming.
☕ Buy me a coffee