Media Dub Detection & Upgrade Tool for Sonarr and Plex
Babel monitors your media library, detects sub-only episodes, and automatically searches for English dubbed versions through Sonarr. Named after the Tower of Babel — bridging the language gap in your media library.
Core
- Automatic dub detection via Plex audio track analysis and ffprobe
- Smart upgrade searches with rate limiting, cooldowns, and max attempt caps
- Upgrade tracking — monitors downloads from search through import, auto-retries failures
- Stuck import resolution — detects and force-imports stuck Sonarr queue items (including ID mismatches)
Intelligence
- Dub availability lookup via MyAnimeList/Jikan — knows if a dub even exists before searching
- Dub status change notifications — alerts when a previously unlicensed show gets a dub
- Auto-overrides MAL when actual dubbed audio is detected in files
Integrations
- Sonarr: custom format creation, tag syncing, webhook support for instant upgrade detection
- Plex: audio indexing, collection management (Dubbed Anime, Sub-Only, etc.)
- Discord: webhook notifications for scan results and dub upgrades
- Sonarr webhook endpoint for real-time import awareness
Dashboard
- Polished dark-themed web UI with poster art and live scan progress
- Series browser with filter pills, search, sort, and pagination
- Activity feed with real-time download monitoring
- Dub Intelligence page with Recently Dubbed / Dub Expected / No Dub tabs
- Scan history with drilldown detail views
- Log viewer with level filtering
- All settings configurable via web UI
services:
babel:
image: therealshadoh/babel:latest
container_name: babel
ports:
- "8686:8686"
volumes:
- babel-data:/app/data
environment:
- SONARR_URL=http://your-server:8989
- SONARR_API_KEY=your-api-key
- PLEX_URL=http://your-server:32400
- PLEX_TOKEN=your-plex-token
restart: unless-stopped
volumes:
babel-data:docker compose up -dOpen http://localhost:8686 to access the dashboard.
All settings can be configured via environment variables or the web UI Settings page.
| Variable | Default | Description |
|---|---|---|
SONARR_URL |
(required) | Sonarr server URL |
SONARR_API_KEY |
Sonarr API key (Settings > General) | |
PLEX_URL |
Plex server URL | |
PLEX_TOKEN |
Plex authentication token | |
SCAN_INTERVAL_HOURS |
6 |
Hours between automatic scans |
TARGET_LANGUAGE |
eng |
ISO 639-2 language code to search for |
SEARCH_COOLDOWN_DAYS |
7 |
Days before re-searching an episode |
SEARCH_RATE_LIMIT |
5 |
Max Sonarr searches per minute |
DISCORD_WEBHOOK_URL |
Discord webhook for notifications |
For instant upgrade detection instead of waiting for scan cycles:
- In Sonarr, go to Settings > Connect > + > Webhook
- Name: Babel
- URL:
http://your-babel-container:8686/api/webhook/sonarr - Events: Enable On Import and On Upgrade
- Click Save
- In the Unraid web UI, go to Docker > Add Container
- Set Repository to
therealshadoh/babel:latest - Configure ports (8686), appdata path, and environment variables
- Click Apply
- Access the web UI at
http://your-server:8686
Scan Cycle:
Sonarr ──> Fetch anime series + episodes
Plex ────> Build audio track index
│
For each episode:
├── Check audio tracks (Plex → ffprobe fallback)
├── Classify: DUBBED / SUB_ONLY / MISSING
└── If SUB_ONLY → trigger Sonarr search
│
Post-scan:
├── Check download queue status
├── Resolve stuck imports
├── Sync Sonarr tags + Plex collections
└── Send Discord notifications
Webhook (real-time):
Sonarr import event → re-check audio → resolve upgrade
| Endpoint | Description |
|---|---|
GET /api/health |
System status, version, stats |
GET /api/activity |
Live download queue + recent upgrades |
POST /api/scan |
Trigger manual scan |
POST /api/webhook/sonarr |
Sonarr webhook receiver |
POST /api/check-downloads |
Check pending upgrade status |
POST /api/resolve-imports |
Fix stuck Sonarr imports |
POST /api/lookup-dubs |
Run MAL dub availability check |

