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