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
depends_on:
opensubtitles-scraper:
condition: service_healthy
ports:
- 6767:6767
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
- OPENSUBTITLES_SCRAPER_URL=http://opensubtitles-scraper:8000
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
opensubtitles-scraper:
image: ghcr.io/lavx/opensubtitles-scraper:latest
container_name: opensubtitles-scraper
restart: unless-stopped
depends_on:
flaresolverr:
condition: service_healthy
ports:
- 8000:8000
environment:
- FLARESOLVERR_URL=http://flaresolverr:8191/v1
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
# Handles Cloudflare challenges for the scraper
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
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 OpenSubtitles.org in the provider list. The bundled scraper is already connected, so no credentials are needed. Add any additional providers you have accounts with: Addic7ed, Podnapisi, Subscene, and so on.
- Set provider priority. Enable the priority toggle in Settings > Subtitle Sources and assign numeric priority values to each provider. Bazarr+ will try them in priority order and can 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
- Set up AI translation to translate subtitles into any language using OpenRouter models
- Migrating from upstream? Your existing config and database carry over