UmlautAdaptarrEX
lexfi/umlautadaptarrex:latest
https://hub.docker.com/r/lexfi/umlautadaptarrex
latest
Latest stable release
bridge
sh
false
https://github.com/xpsony/UmlautAdaptarrEX/issues
https://github.com/xpsony/UmlautAdaptarrEX
https://raw.githubusercontent.com/xpsony/UmlautAdaptarrEX/main/README.en.md
https://discord.gg/src6zcH4rr
Tools: MediaApp:Other
http://[IP]:[PORT:5007]/
https://raw.githubusercontent.com/xpsony/UmlautAdaptarrEX-Unraid-Template/main/templates/umlautadaptarrex.xml
https://raw.githubusercontent.com/xpsony/UmlautAdaptarrEX-Unraid-Template/main/icon.svg
6.12
MIT
###1.1.0 - 2026-05-24
**Security & Auth Hardening**
- Session-ID is rotated on successful admin login (session-fixation fix).
- CSRF double-submit check is properly awaited in admin middleware; CSRF secret length validated up-front.
- Login enumeration hardened: unknown users now run a dummy Argon2 verify so response time matches the wrong-password path.
- Session and CSRF cookies forced to `Secure` over HTTPS regardless of `NODE_ENV`.
- Shared log redactor masks `apiKey`, `password`, `prowlarrApiKey` etc. (including legacy routes and WebSocket broadcasts).
- Third-party secrets (TMDB / TVDB / Prowlarr / proxy password) masked in admin settings responses.
- `/api/health` no longer leaks `uptime`; WebSocket upgrade errors return 400 instead of crashing.
**Setup Wizard**
- Concurrent setup completions detected (Prisma P2002) and re-checked instead of failing.
- Unknown plugin IDs rejected up-front.
- Outbound SSRF probes (Prowlarr connect) gated until setup is authenticated.
**Sync Performance**
- `runSync` now fans out across all enabled Sonarr / Radarr / Lidarr / Readarr instances in parallel (wall-time = max-of-instances instead of sum).
- Lidarr / Readarr nested fetches batched at concurrency 8.
- TMDB bulk lookups: parallel batches of 10, capped at ~20 req/s -- a 500-item bulk drops from ~2 min to ~25 s.
- TVDB bulk lookups: parallel batches of 5, capped at ~10 req/s.
- Rewritten concurrency-safe `HostRateLimiter` (per-host promise chain) to fix a race that leaked the rate budget under parallelism.
- `persistAndReindex` splits the mega-transaction into chunks of 50 so the SQLite writer lock is released between chunks.
**Providers**
- TMDB bulk lookups switched to `Promise.allSettled` -- a single failing ID no longer aborts the batch.
- TVDB token-refresh retry guard prevents 401 storms from looping forever.
- Rate limiter clamps negative `Retry-After` values; scheduler watchdog unblocks stuck sync runs.
**Build & Tooling**
- pnpm bumped to 11.3.0 across Dockerfile, devcontainer and `package.json#packageManager`.
- ESLint 9.39.4 -> 10.4.0; `@types/node` 24 -> 25; React version pinned to 19 in ESLint config.
Full changelog: https://github.com/xpsony/UmlautAdaptarrEX/blob/main/CHANGELOG.md
UmlautAdaptarrEX - Umlaut and multi-language title proxy for Sonarr, Radarr, Lidarr, Readarr and Prowlarr. Complete Next.js + Fastify + Prisma rewrite of the legacy .NET UmlautAdaptarr.
Sits between your *Arr stack and the indexers, rewrites searches and Newznab/Torznab responses on the fly so releases with umlauts, German titles, TVDB aliases or bad naming are reliably found, downloaded and imported. Ships a full Web UI with setup wizard, dashboard, sync runs, request and rename history, and live WebSocket logs. Configuration and title cache are stored in a persistent SQLite DB under /data - no external database required.
Highlights: Sonarr / Radarr (native via alternateTitles + optional TMDB) / Lidarr / Readarr / Prowlarr / NZB Hydra support, multiple instances per *Arr type, language plugins (German umlauts, Swedish umlauts, French accents) that can be combined, configurable title providers (TVDB, TMDB, db-cache), optional release renaming, two operating modes (Prowlarr indexer proxy on 5006 or direct as indexer on 5005), German + English UI.
UmlautAdaptarrEX - Umlaut and multi-language title proxy for Sonarr, Radarr, Lidarr, Readarr and Prowlarr. Full Next.js + Fastify + Prisma + SQLite rewrite of the legacy .NET UmlautAdaptarr.
[b]What it solves[/b]
- Releases with umlauts are often not matched correctly by the *Arrs (search uses `o` instead of `oe`/`รถ`, indexer mapping is missing).
- Sonarr / Radarr expect the English title from TheTVDB / TMDB. For German productions this leads to errors like "Found matching series/movie via grab history, but release was matched to series by ID".
- Bad release naming (e.g. missing GERMAN tag) is optionally corrected so the *Arrs detect releases properly.
[b]Features[/b]
- Sonarr, Radarr (native, via alternateTitles + optional TMDB), Lidarr, Readarr support
- Prowlarr and NZB Hydra integration; Newznab (Usenet) and Torznab (Torrent) supported
- Multiple instances per *Arr type (e.g. 2x Sonarr)
- Detection of releases with German title and TVDB aliases
- Optional renaming of badly named releases
- Language plugins (combinable per library): German umlauts (default), Swedish umlauts, French accents
- Multiple title providers with configurable order: TVDB, TMDB, internal db-cache
- Web UI with setup wizard, login, dashboard, instance manager, sync runs and full request / rename history
- Live logs via WebSocket directly in the browser
- Persistent SQLite database (Prisma) - no cache loss after restart
- Internationalized UI: German and English
[b]Operating modes[/b]
1. Prowlarr indexer proxy (recommended, port 5006): UmlautAdaptarrEX is registered as an HTTP indexer proxy with HTTP-CONNECT tunneling, no per-indexer URL changes in the *Arrs.
2. Direct as indexer (port 5005): enter `http://[IP]:5005/<apiKey>/<indexer-host>` per indexer in Sonarr / Radarr / Lidarr / Readarr.
[b]Ports[/b]
- 5005: Fastify API + WebSocket logs - URL you point your *Arrs at, also serves /api/admin, /api/auth, /titlelookup and /ws/logs.
- 5006: TCP HTTP-CONNECT proxy for Prowlarr indexers - configure as Prowlarr indexer proxy with Basic auth (default user `UmlautAdaptarr`, password auto-generated and shown in the setup wizard).
- 5007: Next.js Web UI - on first start, open `http://[IP]:5007/setup` and the wizard walks you through account, mode, plugins, *Arrs, Prowlarr and proxy credentials.
[b]Storage[/b]
Everything (settings, instances, API keys, title cache, sync runs, request and rename history) lives in a single SQLite file under /data. Map /data to your appdata share (default `/mnt/user/appdata/umlautadaptarrex`) and back it up like any other *Arr appdata.
[b]Permissions[/b]
The container chowns /data to PUID:PGID on every start (default 99:100, the Unraid `nobody:users` pair), so no manual `chown` is required. Adjust PUID / PGID only if your appdata share uses a different owner.
5007
5005
5006
/mnt/user/appdata/umlautadaptarrex
99
100
Europe/Berlin
info
https://raw.githubusercontent.com/xpsony/UmlautAdaptarrEX-Unraid-Template/main/assets/dashboard.png
https://raw.githubusercontent.com/xpsony/UmlautAdaptarrEX-Unraid-Template/main/assets/plugins.png