Automated subtitle management with OpenSubtitles.org scraper & AI-powered translation
This fork of Bazarr includes:
- OpenSubtitles.org provider that works without VIP API credentials (survives the API shutdown)
- AI Subtitle Translator using OpenRouter LLMs for high-quality subtitle translation
- Batch translation for entire series/movie libraries
On January 29, 2026, OpenSubtitles.org announced the final shutdown of their legacy XML-RPC API for all third-party applications -- both VIP and non-VIP users. The shutdown is taking effect in the coming weeks.
This fork is not affected. It includes a self-hosted web scraper that accesses OpenSubtitles.org directly through the website, bypassing the API entirely. As long as the OpenSubtitles.org website remains accessible (confirmed by the site admin to stay available as read-only), subtitle search and download will continue to work.
This fork was created after the pull request (#3012) to add OpenSubtitles.org web scraper support was declined by the upstream maintainer. The upstream decision is understandable -- they have agreements with OpenSubtitles and want to respect their infrastructure.
However, with the official API now being shut down, this fork with its scraper companion container is one of the few ways to maintain access to OpenSubtitles.org subtitles. The web scraper is rate-limited and respectful to their servers.
# Clone with the scraper submodule
git clone --recursive https://github.com/LavX/bazarr.git
cd bazarr
# Configure your media paths in docker-compose.yml, then:
docker compose up -d
# Access Bazarr at http://localhost:6767# Pull all images
docker pull ghcr.io/lavx/bazarr:latest
docker pull ghcr.io/lavx/opensubtitles-scraper:latest
docker pull ghcr.io/lavx/ai-subtitle-translator:latest| Feature | Upstream Bazarr | LavX Fork |
|---|---|---|
| OpenSubtitles.org (Scraper) | β Not available | β Included (API-independent) |
| AI Subtitle Translator | β Not available | β Included (OpenRouter, Gemini, Lingarr) |
| Batch Translation | β Not available | β Translate entire series/libraries |
| OpenSubtitles.org (API) | Shutting down | N/A (uses scraper instead) |
| OpenSubtitles.com (API) | β Available | β Available |
| Docker images | linuxserver/hotio | ghcr.io/lavx |
| Python runtime | 3.11/3.12 | 3.14 with JIT |
| Fork identification in UI | N/A | β "LavX Fork - Nexus Dawn" |
This fork adds a new subtitle provider called "OpenSubtitles.org" that:
- β Works without API credentials or VIP subscription
- β Searches by IMDB ID for accurate results
- β Supports both movies and TV shows
- β Provides subtitle rating and download count info
- β Runs as a separate microservice for reliability
This fork includes an LLM-powered subtitle translator that:
- β Uses OpenRouter API for access to 100+ AI models (Gemini, GPT, Claude, LLaMA, Grok, etc.)
- β Translates subtitles when no good match is found in your target language
- β Async job queue for handling multiple translations
- β Real-time progress tracking in Bazarr UI
- β Configurable directly in Bazarr Settings (API key, model, temperature, concurrent jobs)
- β Runs as a separate microservice for reliability
Repository: github.com/LavX/ai-subtitle-translator
Create a docker-compose.yml file:
services:
# OpenSubtitles.org Scraper Service (required for the scraper provider)
opensubtitles-scraper:
image: ghcr.io/lavx/opensubtitles-scraper:latest
container_name: opensubtitles-scraper
restart: unless-stopped
ports:
- "8000:8000"
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# AI Subtitle Translator Service (required for AI translation)
ai-subtitle-translator:
image: ghcr.io/lavx/ai-subtitle-translator:latest
container_name: ai-subtitle-translator
restart: unless-stopped
ports:
- "8765:8765"
environment:
# OpenRouter API key (can also be configured in Bazarr UI)
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
- OPENROUTER_DEFAULT_MODEL=google/gemini-2.5-flash-preview-05-20
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8765/health"]
interval: 30s
timeout: 10s
retries: 3
# Bazarr with OpenSubtitles.org scraper support
bazarr:
image: ghcr.io/lavx/bazarr:latest
container_name: bazarr
restart: unless-stopped
depends_on:
opensubtitles-scraper:
condition: service_healthy
ai-subtitle-translator:
condition: service_healthy
ports:
- "6767:6767"
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Budapest
# Enable the web scraper mode (auto-enables "Use Web Scraper" in settings)
- OPENSUBTITLES_USE_WEB_SCRAPER=true
# Point to the scraper service (port 8000)
- OPENSUBTITLES_SCRAPER_URL=http://opensubtitles-scraper:8000
volumes:
- ./config:/config
- /path/to/movies:/movies
- /path/to/tv:/tv
networks:
default:
name: bazarr-networkThen run:
docker compose up -d| Variable | Description | Default |
|---|---|---|
PUID |
User ID for file permissions | 1000 |
PGID |
Group ID for file permissions | 1000 |
TZ |
Timezone | UTC |
OPENSUBTITLES_USE_WEB_SCRAPER |
Enable web scraper mode | false |
OPENSUBTITLES_SCRAPER_URL |
URL of the scraper service | http://localhost:8000 |
- Go to Settings β Providers
- Enable "OpenSubtitles.org" (not OpenSubtitles.com - that's the API version)
- If
OPENSUBTITLES_USE_WEB_SCRAPER=trueis set, "Use Web Scraper" will auto-enable - Save and test with a manual search
- Go to Settings β Subtitles β Translating
- Select "AI Subtitle Translator" from the Translator dropdown
- Enter your OpenRouter API Key (get one at openrouter.ai/keys)
- Choose your preferred AI Model (Gemini 2.5 Flash recommended)
- Save and test with a manual translation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Docker Network β
β β
β ββββββββββββββββββββββββββ βββββββββββββββββββββββββ βββββββββββββββ β
β β Bazarr β β OpenSubtitles Scraper β β AI Sub β β
β β (LavX Fork) β β (Port 8000) β β Translator β β
β β β β β β (Port 8765) β β
β β ββββββββββββββββββββ β HTTP β βββββββββββββββββββ β β β β
β β β OpenSubtitles.orgββββΌβββββββΌβββ Search API β β β βββββββββββ β β
β β β Provider β β API β β Download API β β β βTranslateβ β β
β β ββββββββββββββββββββ β β βββββββββββββββββββ β β β API β β β
β β β β β β β βJob Queueβ β β
β β ββββββββββββββββββββ β HTTP β βΌ β β ββββββ¬βββββ β β
β β β AI Subtitle ββββΌβββββββΌβββββββββββββββββββββββββββββββΌβββββββ β β
β β β Translator β β API β βββββββββββββββββββ β β β β β
β β ββββββββββββββββββββ β β β Web Scraper β β β βΌ β β
β β β β βopensubtitles.orgβ β β βββββββββββ β β
β β Port 6767 (WebUI) β β βββββββββββββββββββ β β βOpenRouteβ β β
β ββββββββββββββββββββββββββ βββββββββββββββββββββββββ β β API β β β
β β βββββββββββ β β
β βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Variable | Default | Description |
|---|---|---|
PUID |
1000 |
User ID for file permissions |
PGID |
1000 |
Group ID for file permissions |
TZ |
UTC |
Timezone (e.g., Europe/Budapest) |
OPENSUBTITLES_SCRAPER_URL |
http://opensubtitles-scraper:8765 |
Scraper service URL |
| Path | Description |
|---|---|
/config |
Bazarr configuration and database |
/movies |
Movies library (match your Radarr path) |
/tv |
TV shows library (match your Sonarr path) |
# Check if scraper is healthy
curl http://localhost:8000/health
# Check scraper logs
docker logs opensubtitles-scraper
# Test a search (POST request format)
curl -X POST http://localhost:8000/search \
-H "Content-Type: application/json" \
-d '{"criteria":[{"imdbid":"0111161"}]}'| Issue | Solution |
|---|---|
| "Connection refused" | Ensure scraper is running and healthy |
| "No subtitles found" | Check IMDB ID is correct, try different language |
| Provider not showing | Enable it in Settings β Providers |
| Wrong file permissions | Check PUID/PGID match your user |
- Fork Maintenance Guide - How sync works
- OpenSubtitles Scraper - Scraper docs
- AI Subtitle Translator - AI translator docs
- Bazarr Wiki - General Bazarr documentation
Contributions are welcome! Please:
- Fork this repository
- Create a feature branch
- Submit a pull request
For major changes, please open an issue first.
This fork is maintained by LavX. Explore more of my projects and services:
- LavX Managed Systems β Enterprise AI solutions, RAG systems, and LLMOps.
- LavX News β Latest insights on AI, Open Source, and emerging tech.
- LMS Tools β 140+ free, privacy-focused online tools for developers and researchers.
- AI Subtitle Translator β LLM-powered subtitle translator using OpenRouter API.
- OpenSubtitles Scraper β Web scraper for OpenSubtitles.org (no VIP required).
- JFrog to Nexus OSS β Automated migration tool for repository managers.
- WeatherFlow β Multi-platform weather data forwarding (WU to Windy/Idokep).
- Like4Like Suite β Social media automation and engagement toolkit.
- GNU GPL v3
- Original Bazarr Copyright 2010-2025 morpheus65535
- Fork modifications Copyright 2025 LavX
Bazarr is a companion application to Sonarr and Radarr. It manages and downloads subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.
Be aware that Bazarr doesn't scan disk to detect series and movies: It only takes care of the series and movies that are indexed in Sonarr and Radarr.
Thanks to the folks at OpenSubtitles for their logo that was an inspiration for ours.
At the request of some, here is a way to demonstrate your appreciation for the efforts made in the development of Bazarr:
For installation and configuration instructions, see upstream wiki.
For fork-specific issues (OpenSubtitles scraper), open an issue on this fork.
For general Bazarr issues, please use the upstream repo.
If you need something that is not already part of Bazarr, feel free to create a feature request on Feature Upvote.
- Support for major platforms: Windows, Linux, macOS, Raspberry Pi, etc.
- Automatically add new series and episodes from Sonarr
- Automatically add new movies from Radarr
- Series or movies based configuration for subtitles languages
- Scan your existing library for internal and external subtitles and download any missing
- Keep history of what was downloaded from where and when
- Manual search so you can download subtitles on demand
- Upgrade subtitles previously downloaded when a better one is found
- Ability to delete external subtitles from disk
- Currently support 184 subtitles languages with support for forced/foreign subtitles (depending of providers)
- And a beautiful UI based on Sonarr
- Addic7ed
- AnimeKalesi
- Animetosho (requires AniDb HTTP API client described here)
- AnimeSub.info
- Assrt
- AvistaZ, CinemaZ (Get session cookies using method described here)
- BetaSeries
- BSplayer
- Embedded Subtitles
- Gestdown.info
- GreekSubs
- GreekSubtitles
- HDBits.org
- Hosszupuska
- Karagarga.in
- Ktuvit (Get
hashed_passwordusing method described here) - LegendasDivx
- Legendas.net
- Napiprojekt
- Napisy24
- Nekur
- OpenSubtitles.com
- OpenSubtitles.org (LavX Fork)
- Podnapisi
- RegieLive
- Sous-Titres.eu
- Subdivx
- subf2m.co
- Subs.sab.bz
- Subs4Free
- Subs4Series
- Subscene
- Subscenter
- SubsRo
- Subsunacs.net
- SubSynchro
- Subtitrari-noi.ro
- subtitri.id.lv
- Subtitulamos.tv
- Supersubtitles
- Titlovi
- Titrari.ro
- Titulky.com
- Turkcealtyazi.org
- TuSubtitulo
- TVSubtitles
- Whisper (requires ahmetoner/whisper-asr-webservice)
- Wizdom
- XSubs
- Yavka.net
- YIFY Subtitles
- Zimuku
