Subtitles for everything you watch.Found, timed and translated, automatically.
Bazarr+ fetches subtitles in the languages you asked for and lines them up with your files. Connect Sonarr, Radarr or Sportarr and it does that unattended for every new episode, or run it on its own and search any film or show by name. Self-hosted. No account, no telemetry.
docker pull ghcr.io/lavx/bazarr:latest
- Stars
- —
- Forks
- —
- Providers
- —
- Latest
- —
A demonstration, not a capture. Drag it to scrub.
What it does
If you have never automated subtitles before, this is the whole job. Bazarr+ does each of these on a schedule, for everything in your library, and tells you when it could not.
Search every source you trust, in order
A provider is a place subtitles come from, like OpenSubtitles or Podnapisi. Bazarr+ ships a catalog of them you can install, enable and put in priority order, and it stops as soon as a good enough match is found rather than hammering every site.
Line the text up with your actual file
A subtitle written for a different release drifts, so the words land seconds off. Bazarr+ compares the subtitle against your file’s audio and shifts it into place, with several sync engines available and a side-by-side compare when you want to check the work yourself.
Make the language you wanted, when nobody made it
Some languages simply do not exist for some titles. Bazarr+ can translate an existing subtitle, or a track already embedded in the file, using any model on OpenRouter including free tiers. It can also compose a bilingual subtitle with two languages stacked, which is the one in the frame above. How subtitle processing works.
Do it again for every new episode, without being asked
You describe what you want once, as a language profile: which languages, whether forced or hearing-impaired tracks count, how good is good enough. After that Bazarr+ applies it to everything, including whatever downloads at 3am tonight.
No media stack required.
Bazarr+ used to be able to work only on what Sonarr and Radarr told it about. Since v2.7.0 it opens on Discover, and Discover works on its own.
Search any title and pull a subtitle for it
Type a film or show by name, or browse what is trending, what has reached digital and what aired recently. Pick a title, search the providers, read the result in a preview and download it. No Sonarr, no Radarr, no Sportarr, no library, nothing indexed first.
Nothing to sign up for either: the title data arrives through a key the application carries, so a fresh install can search the moment it is up. Bring your own key instead if you would rather.
Connect the stack and all of it happens unattended
Point Bazarr+ at Sonarr, Radarr or Sportarr and the same work runs on a schedule across everything they track, against a language profile you write once. Discover stays where it is, and tells you which of the titles it shows you already hold.
If you run Seerr, Jellyseerr or Overseerr, a title you do not have yet can be requested from its page in Discover. The request goes in as the Seerr owner, so it is approved and dispatched immediately rather than queued for somebody to look at. Requesting titles from Discover.
What it connects to
Seven applications, in two groups. One group tells Bazarr+ what media exists. The other is told when a subtitle lands. They are configured differently and they fail differently, which is worth knowing before you add one.
They tell Bazarr+ what exists
- Sonarr
- Radarr
- Sportarr v2.7
Sonarr tracks TV, Radarr tracks films, and Sportarr, new in this release, tracks sport. Connect as many of each as you like: every one is an instance of its own with its own subtitle settings. Sport is a first-class media type now, so a recording gets the manual search, upload, editing, sync, translation, combine, Wanted queue and History an episode gets.
They show the subtitle once it lands
- Plex
- Jellyfin
- Emby v2.7
- Silo v2.7
A subtitle on disk that the player never re-read is a subtitle nobody can select. When one lands, Bazarr+ asks the servers that cover that file to scan it again. All four now sit on one multi-instance layer, so two Jellyfin servers or three Emby servers is an ordinary setup, each with its own credentials, its own pending work and its own retry.
Two things worth knowing before you configure them. Emby and Silo find a file by its path, so they need path mappings; Jellyfin and Plex match another way and have never asked for them. And Plex is on the shared layer for refreshes only: its account panel, server discovery and webhook helpers still read the single Plex connection in settings. How media server connections work.
The interface
Screenshots from the running application. Nothing here is a mockup. v2.7.0 rebuilt what you meet first: Discover is the homepage, the setup wizard asks what you want to do instead of insisting on Sonarr, and Statistics has a page of its own under System.
What this fork adds
Bazarr+ is a hard fork of Bazarr by morpheus65535, and it keeps everything that already worked. This is what it puts on top. If you are new here, you can skip this table entirely.
Finding subtitles at all
| Feature | Upstream Bazarr | Bazarr+ |
|---|---|---|
| Run with no library v2.7 | Not available | Discover is the homepage: search any film or show by title, preview the result and download it, with no Sonarr, Radarr or Sportarr connected and nothing indexed |
| Provider Hub v2.4 | Not available | Marketplace of subtitle provider plugins that replace the shipped providers, with startup auto-install of your enabled built-ins, local package installs, trust labels and an activity log |
| OpenSubtitles.org | Not available | Native plugin, scrapes in-process with a FlareSolverr fallback, so no API key or VIP account is needed |
| Provider priority | Requested, 72 votes | Priority order with early stop |
Making them right
| Feature | Upstream Bazarr | Bazarr+ |
|---|---|---|
| Combined subtitles v2.4 | Not available | Bilingual and trilingual SRT or ASS composed from subtitles already on disk, per profile or on demand |
| Embedded tracks and multi-engine sync v2.4 | Not available | Score and translate directly from embedded tracks, plus multi-engine sync with side-by-side compare |
| AI translation | Not available | Any OpenRouter model, free tiers included |
| Subtitle editor | Not available | Full editor with video preview, waveform and AI assistance |
At library scale
| Feature | Upstream Bazarr | Bazarr+ |
|---|---|---|
| First-run setup wizard v2.5 | Not available | A guided wizard that asks first whether you are connecting a media stack or running without one, then walks a fresh install through the steps that answer needs, handling the restart and resuming afterwards |
| Bulk operations | One at a time | 12 batch actions on any selection, up to 10,000 items per run |
| Sport as a media type v2.7 | Not available | Sportarr as an instance kind beside Sonarr and Radarr, with sport sharing the subtitle workflows series and films already use |
| Mass sync | Requested, 260 votes | Select any number of shows or films and sync them all in one run |
Yours, and private
| Feature | Upstream Bazarr | Bazarr+ |
|---|---|---|
| Telemetry | GA4 and UA to Google | Removed entirely |
| Password security | MD5 | PBKDF2, 600,000 iterations |
| API key encryption v2.2 | Not available | AES encrypted at rest, with auto-migration and key rotation |
| Distribution Hub v2.4 | Not available | Multi-tenant OpenSubtitles-compatible API with named keys, tiers, per-window metering and per-key provider scoping, plus a first-party Jellyfin plugin and VLSub Bazarr+ |
| Media server refresh v2.7 | Jellyfin only, development branch | Emby, Silo, Jellyfin and Plex on one layer, several servers of each, with HTTPS and self-signed support, per-instance retry and a Refresh libraries action |
Install
Start with standalone subtitle search, or connect Sonarr, Radarr or Sportarr to automate your library. Media folders are optional.
Quick install
Run this on your server. The installer creates the Docker Compose stack and starts Bazarr+. Leave the movie, TV and sports paths empty to use Discover on its own. Review the script.
curl -fsSL https://lavx.github.io/bazarr/install.sh | bash
When it finishes, open the address printed by the installer. The installer pre-enables three providers, so the app skips the first-run wizard and opens straight in Discover; to walk the wizard anyway, use Settings > General > Run first-time setup. If you browse from another machine, use your server's IP or hostname instead of localhost.
Prefer Docker Compose?
With Docker and Docker Compose installed, save this as compose.yaml. It works as-is for standalone Discover. For a library, uncomment only the folders you use and replace each /path/to/... with its location on your server. Set PUID and PGID to the user and group that own those folders.
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
# Optional: uncomment only the media folders you use.
# - /path/to/movies:/movies
# - /path/to/tv:/tv
# - /path/to/sports:/sports
read_only: true
tmpfs:
- /tmp:size=512m
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
security_opt:
- no-new-privileges:true
From the folder containing compose.yaml, run:
docker compose up -d
Open http://localhost:6767, or use your server's IP or hostname instead of localhost. Choose standalone Discover in the setup wizard, or connect your library under Settings > Connections. The TV, movie and sports mounts are for Sonarr, Radarr and Sportarr libraries respectively; only /config is needed for standalone search.
Already using Bazarr? Stop the old container, back up its /config directory, then change its image to ghcr.io/lavx/bazarr:latest while keeping your existing mounts. See the migration guide.
Optional extras: add FlareSolverr for OpenSubtitles.org Cloudflare challenges or the AI translator sidecar for translation. The getting started guide covers both.
Questions
Yes. Bazarr+ uses the same database with a few added columns created on first run. Your database, settings, download history and subtitle files are all preserved. Stop Bazarr, back up your config directory, swap the container image, and start.
Yes. Stop Bazarr+, restore the config backup you made before migrating, change the image back, and start. That backup still holds your old password hash, so nothing needs resetting. If you have no backup, the migration guide lists what to fix by hand, including clearing the password field in config.yaml, since upstream cannot read the PBKDF2 hash.
Not any more. Since v2.7.0 Discover is the homepage, and it searches, previews and downloads subtitles for any film or show with nothing connected at all. Connect Sonarr, Radarr or Sportarr when you want that to happen on its own for a whole library, on a schedule, and you can connect any number of each.
Free and open source under the same GPL licence as upstream Bazarr. AI translation runs through OpenRouter, which has free model tiers with generous limits. Paid models are available if you want higher quality, and they are entirely optional.
It is a native Provider Hub plugin that fetches publicly available subtitle pages in-process, the way a browser would, so no OpenSubtitles account or API key is needed. FlareSolverr is strongly recommended as a fallback for Cloudflare browser challenges: run the container and set its URL in the plugin settings.
The Discord server for questions and discussion, or GitHub issues for bugs. The guides cover installation, migration, AI translation and the hubs in detail.
Roadmap
Where Bazarr+ is going, nearest first. There are no dates here, because a self-hosted project ships when the work is right rather than when a quarter ends. Plans shift; the direction has not.
-
Shipped
The v2 line so farv2.7.2 is a stability and security patch on the Atlas line. It masks credentials in logs and diagnostics, guards the request host while login is off, moves the editor's native playback to a signed token, and adds library filters for subtitle completeness, tags and score. v2.7.1 is a stability and security patch on the Atlas line. It moves API keys out of request URLs, runs post-processing commands as argument lists, and binds Provider Hub trust to the catalog source. v2.7.0 “Atlas” opens on Discover: search and pull subtitles for any title, whether or not it is in your library, and run with no library at all. It adds Sports as a third media type, folds Emby, Silo, Jellyfin and Plex onto one multi-instance layer, requests titles in Seerr, and gives Statistics a real page. Before it, v2.6.2 “Clockwork” keeps subtitle history and sync outputs with the right media, saves useful partial OpenRouter translations with an incomplete status, lists uploads before background sync finishes, and adds explicit OpenRouter routing choices. Searches continue past unusable archives from catalog providers. The v2.6 line also brought whole-season subtitle downloads, stricter sync validation, and adoption of upstream Bazarr databases. Before it, v2.5 “Murmuration” brought many Sonarr and Radarr instances managed as one, per-instance subtitle settings and archive uploads.
-
Next
Coming on the v2 line- A rebuilt translator. Translation moves in-process, with a catalog of models, configuration per engine, and a choice of engine per language profile, instead of a separate sidecar container.
- Search inside your subtitles. Find the episode from a line of dialogue you half remember, across everything you have.
- Install it like an app. Native installers for Windows, macOS and Linux, each one carrying its own Python and a tray icon, so Bazarr+ runs on a desktop with no Docker and no terminal.
-
v3.0.0
Several v2 releases awayBazarr+ instances sharing subtitles directly with each other, peer to peer, with no central server in the middle and nothing shared that you did not choose to share. It is the largest thing on this list by a distance, which is why it carries the major version and why a good deal of the v2 line comes first.
Point it at your library, or at nothing at all.
It takes one compose file. Everything else it works out on its own, and if you change your mind, your backup puts you back exactly where you were.