Bazarr: Automatic Subtitles for Your Arr Stack

Stop hunting for subtitle files. Bazarr watches your Radarr and Sonarr libraries and downloads matching subtitles automatically, in the languages you choose.

On this page
  1. What Bazarr actually does
  2. Task 1: Deploy the container
  3. Task 2: Connect Radarr and Sonarr — the part that matters
  4. Task 3: Choose languages and providers
  5. Task 4: Backfill the library, then let it run
  6. What’s next

You built the Arr stack, deployed it with Docker, and automated the pipeline. Movies and shows land in your library on their own — but half of them arrive with no subtitles, or the wrong language, and you’re back to hunting for a .srt on some sketchy site at 11pm. Bazarr is the piece that closes that gap: it watches the exact same libraries Radarr and Sonarr manage and fetches matching subtitles automatically, in whatever languages you ask for.

It’s the one *arr companion almost everyone ends up adding. Below is the full deploy and the two settings that decide whether subtitles actually show up.

First: make these values your own

Commands below use placeholder values — swap in yours before running:

  • <host-ip> — the LAN IP of the machine running your stack (e.g. 192.168.1.50)
  • TZ=America/New_York — your own timezone
  • PUID/PGID (1000 here) — must match the user that owns your media files
  • Service ports (7878 Radarr, 8989 Sonarr) — change only if you moved them off the defaults
  • YOUR_RADARR_API_KEY / YOUR_SONARR_API_KEY — copied from each app, kept in your secret store, never pasted into a note

Rule of thumb: if a value looks specific to one machine, it’s a placeholder to change — not a literal to copy.

What this stack is for
Everything in this guide automates managing and streaming media you have the rights to — your own rips, DRM-free purchases, home video, Linux ISOs, and public-domain or Creative Commons releases. Downloading copyrighted material you haven't paid for is illegal in most places, and it isn't what this guide teaches. What you point these tools at is on you.

What Bazarr actually does

Bazarr doesn’t download video and it doesn’t talk to your media server. It plugs into Radarr and Sonarr, reads the libraries they already track, and for each item works out which subtitle languages are missing and goes and gets them:

Bazarr fills the gap the video apps leave behindRadarr /Sonarrthe libraryBazarrfinds gapsSubtitleproviderssearch + score.srt next to the videoPlex / Jellyfin read itpeira.dev
  • Watch — Bazarr connects to Radarr and Sonarr over their APIs and mirrors their lists, so it always knows exactly what’s in your library and what languages each item has.
  • Search — for anything missing a subtitle in a wanted language, it queries the subtitle providers you’ve enabled (OpenSubtitles and many others).
  • Score & pick — each candidate gets a match score (release name, hearing-impaired flag, sync); Bazarr takes the best one above your threshold.
  • Write — it saves a standard subtitle file next to the video, so Plex or Jellyfin show it as a selectable track with no extra config.
Bazarr sits beside Radarr and Sonarr, not on top

Bazarr is a peer of the video apps, not a replacement. It shares their media folders and reads their libraries, but it only ever manages subtitles. If Radarr and Sonarr aren’t running and reachable, Bazarr has nothing to watch.


Task 1: Deploy the container

Run Bazarr wherever the rest of your stack lives — the same Docker-on-Proxmox LXC or VM, your NAS, or a dedicated box. The one rule that matters: it must mount the same media root as Radarr and Sonarr, at the same path, or it can’t find the videos to caption.

1Add the service to your compose file3 min
Add to your media docker-compose.yml

bazarr:
  image: lscr.io/linuxserver/bazarr:latest
  container_name: bazarr
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=America/New_York
  ports:
    - "6767:6767"
  volumes:
    - ./bazarr/config:/config
    - /data:/data
  restart: unless-stopped

The /data:/data mount is the important line — it has to be the identical mount Radarr and Sonarr use, so a file at /data/media/movies/Film.mkv is the same path in every container.

2Bring it up and open the UI2 min
Start it

docker compose up -d bazarr
docker compose logs -f bazarr

Then browse to http://<host-ip>:6767 to reach the web UI.


Task 2: Connect Radarr and Sonarr — the part that matters

Under Settings → Sonarr and Settings → Radarr, point Bazarr at each app. This is where most setups stall: if the paths don’t line up, Bazarr sees the library but can’t write subtitles next to the files.

1Add Radarr and Sonarr5 min

Enter each app’s address (http://<host-ip>:7878 for Radarr, http://<host-ip>:8989 for Sonarr) and its API key (in each app under Settings → General, shown here as YOUR_RADARR_API_KEY / YOUR_SONARR_API_KEY). Test each connection until it’s green.

2Set path mappings if the paths differ4 min

If Bazarr and the Arr apps mount the library at different paths, add a path mapping so Bazarr can translate one to the other. The clean fix is to avoid it entirely by mounting /data identically everywhere — then no mapping is needed. The official Bazarr setup guide covers the mapping fields if you can’t.

Same media path, same PUID

The number-one reason Bazarr finds subtitles but never saves them is a path or permission mismatch. Mount the media root at the identical path across Radarr, Sonarr, and Bazarr, and give all three the same PUID/PGID so Bazarr can write a .srt into the same folder the video lives in.


Task 3: Choose languages and providers

Under Settings → Languages, create a languages profile listing the subtitle languages you want and their priority, then set it as the default for movies and series. Bazarr only ever chases languages in an item’s profile — leave one out and it won’t look for it.

Then, under Settings → Providers, enable at least one provider and sign in. OpenSubtitles is the common starting point; its free tier works but caps daily downloads, so a large library benefits from a paid account.

Set a sane minimum score

Bazarr scores every candidate on how well it matches the release. Too low and you get out-of-sync junk; too high and nothing qualifies. Start near Bazarr’s defaults and only adjust if you’re getting bad syncs (raise it) or empty results (lower it).


Task 4: Backfill the library, then let it run

New downloads get subtitled automatically as they arrive. For everything already on disk, kick off a one-time sweep, then let the scheduler keep up.

1Run a mass searchvaries

On the Series and Movies pages, select everything and trigger a search for wanted subtitles. On a big library this takes a while and may hit provider daily limits — it’ll resume on the next scheduled run.

2Confirm the scheduled tasks2 min

Under Settings → Scheduler, Bazarr runs periodic “search for missing” and “upgrade” jobs. Leave these on — new items get captioned without you lifting a finger, and better matches replace weak ones over time.


What’s next

With Bazarr in place, the media pipeline is one step closer to genuinely hands-off: a title is requested, Radarr or Sonarr grabs it, and Bazarr quietly drops matching subtitles beside it before anyone hits play. The remaining gap in the *arr family for most households is music — Lidarr does for your music library exactly what Sonarr does for TV.

And once the whole stack is this automated, the thing worth adding is a way to know it’s healthy even when nobody’s watching — the self-healing Arr stack covers the failure mode where a piece silently stops.


Related posts:

Comments

Comments are powered by GitHub Discussions — sign in with a GitHub account to join the conversation.