Prerequisites
You need Docker and Docker Compose installed on your server. Any Linux distribution with Docker CE works. Bazarr+ also runs on macOS and Windows via Docker Desktop, though Linux is recommended for production.
Make sure your Sonarr and/or Radarr instances are accessible from the machine where you will run Bazarr+.
One-liner install
The fastest way to get running. This script creates a bazarr directory, writes a docker-compose.yml, and starts the containers.
curl -fsSL https://lavx.github.io/bazarr/install.sh | bash
The script is interactive. It will ask for your media paths, timezone, and whether you want to enable the AI translation service. You can review the script source on GitHub before running it.
Docker Compose setup
If you prefer to set things up manually, create a docker-compose.yml with the following content. Adjust the volume paths to match your media library locations.
services:
bazarr:
image: ghcr.io/lavx/bazarr:latest
container_name: bazarr
restart: unless-stopped
ports:
- 6767:6767
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
volumes:
- ./config:/config
- /path/to/movies:/movies
- /path/to/tv:/tv
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:6767/_supervisor/status | grep -q '\"running\"'"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
# Recommended for the OpenSubtitles.org Provider Hub plugin: solves
# Cloudflare browser challenges when the in-process scraper is itself
# challenged. Set this container's /v1 URL in the plugin's FlareSolverr URL.
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
restart: unless-stopped
environment:
- LOG_LEVEL=info
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8191/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# AI translation via OpenRouter (free tiers available)
# Configure the API key in Settings > AI Translator
ai-subtitle-translator:
image: ghcr.io/lavx/ai-subtitle-translator:latest
container_name: ai-subtitle-translator
restart: unless-stopped
ports:
- 8765:8765
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8765/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
Then start it:
docker compose up -d
/v1 URL (e.g. http://flaresolverr:8191/v1) in the plugin's FlareSolverr URL setting so it can solve Cloudflare challenges when needed. If you run Bazarr+ with host networking (network_mode: host), the flaresolverr hostname stops resolving: use http://localhost:8191/v1 and make port 8191 reachable on the host, either by adding a 8191:8191 ports mapping to the FlareSolverr service above or running it with host networking too.
First login
Open http://localhost:6767 in your browser. Go to Settings to configure your language profile, subtitle providers, and Sonarr/Radarr connections.
- Set a password. Bazarr+ uses PBKDF2 with 600k iterations, a significant upgrade from upstream's MD5 hashing. Pick something strong.
- Choose your languages. Select the subtitle languages you want Bazarr+ to search for. You can set defaults per profile or override per series/movie later.
- Add subtitle providers. Enable built-in providers under Settings > Providers. In v2.4 you also install providers from the Provider Hub Marketplace, which serves a versioned catalog of provider plugins. A catalog plugin can reuse a built-in id and replace the shipped provider, so the two collapse into a single card.
- Set provider priority. Use Settings > Providers to order providers. Bazarr+ can try them in priority order and stop early once it finds a match, saving time and API calls.
Connecting to Sonarr and Radarr
Go to Settings > Sonarr (or Radarr) and fill in:
- Host and port of your Sonarr/Radarr instance (e.g.,
192.168.1.10:8989) - API key, found in Sonarr/Radarr under Settings > General
- Base URL, only needed if you run Sonarr/Radarr behind a reverse proxy with a path prefix
Click Test to verify the connection, then Save. Bazarr+ will sync your library and start searching for missing subtitles on the next scheduled scan.
sonarr instead of an IP address). This avoids issues when IP addresses change.
Next steps
- Install Provider Hub plugins from the official catalog source
- Process subtitles with combined bilingual output, embedded-track scoring, and multi-engine sync
- Serve subtitles to other apps with the Distribution Hub multi-tenant API and named keys
- Set up AI translation to translate subtitles into any language using OpenRouter models
- Migrating from upstream? Your existing config and database carry over