Homelab Haven

Self-Hosted Media Stack, Part 6: Bazarr, Subtitles That Match What's on Disk

July 25, 20262 min read

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

  1. Connect Sonarr and RadarrSettings → Sonarr / Radarr: host, port, API key. Bazarr pulls both libraries and keeps them in sync from here on.
  2. Add subtitle providersSettings → Providers. OpenSubtitles wants a (free) account; a couple of providers beats one, since coverage is spotty per release.
  3. Create a language profileSettings → Languages. Mine: Dutch, English, with "hearing impaired" versions not required. Set it as default for series and movies.
  4. 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