Self-Hosted Media Stack, Part 6: Bazarr, Subtitles That Match What's 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.
If this saved you some time, a coffee keeps the lights on and the posts coming.
☕ Buy me a coffee