nessi dfbeec4dc0 feat: add "Nur Ohne Deutsch" scan option to rescan only current missing-German entries without clearing cache
Add "missing" job state to jobs dict with idle/total/done/error tracking. Update start_scan() to handle "missing" source by filtering radarr_rows() and sonarr_groups() for is_german_review_candidate() entries without has_german_track(). Skip cache deletion for missing-German scan in api_rescan() with comment explaining cache preservation. Add "Nur Ohne Deutsch" option to scanSource select
2026-08-21 15:36:27 +02:00

Media Max

Media Max ist ein kompaktes Media-Control-Dashboard für Radarr, Sonarr und SABnzbd. Es zeigt Medienqualität, Audio- und Untertitelspuren, fehlende deutsche Spuren, laufende Downloads sowie System-, Speicher- und RAID-Status.

Funktionen

  • Radarr-Filme mit Qualität, Status, Audio, Untertiteln, Codec und Größe
  • Sonarr-Serien mit Episodenansicht und Kategorien über Tags:
    • anime → Anime
    • kdrama → K-Dramen
    • alle anderen → Standard
  • Separate Liste „Ohne Deutsch“ für vorhandene oder aktuell geladene Medien
  • Staffel 0 kann in den Einstellungen ein- oder ausgeblendet werden
  • Externe Untertitel (.srt, .ass, .ssa, .vtt, .sub, .idx, .sup) werden berücksichtigt
  • SABnzbd-Downloadübersicht mit aktiven Downloads und separater Queue-/Verifying-Tabelle
  • Download-Sprachen aus üblichen Release-Kürzeln wie Eng, Ger, Fre, Ita und Spa
  • Dashboard mit Diensten, CPU, RAM, Speicher, I/O Pressure und Bibliotheksstatistiken
  • Datastore mit Kategorien, Gesamtauslastung, I/O Pressure und RAID-Status
  • RAID-Rebuild-Fortschritt, Geschwindigkeit, Restzeit, Plattenmodell, SMART, Temperatur und Hersteller-Seriennummer
  • Parallele Hintergrundscans mit konfigurierbarer Worker-Anzahl
  • PWA-Unterstützung für HTTPS-fähige Installationen auf Desktop und Android

Konfiguration

Persönliche Werte gehören in .env. Die Datei ist in .gitignore eingetragen. Als Vorlage dient .env.example:

cp .env.example .env

Radarr und Medienpfade

Radarr kann beispielsweise /data/filme verwenden, während Media Max die Dateien im Container unter /media/filme sieht:

RADARR_URL=http://radarr:7878
RADARR_API_KEY=...
RADARR_MEDIA_PATH=/data/filme
LOCAL_MEDIA_PATH=/media/filme
FILM_MEDIA_VOLUME=/nesflix/filme

Sonarr

SONARR_URL=http://sonarr:8989
SONARR_API_KEY=...
SONARR_MEDIA_PATH=/data/serien
LOCAL_SERIES_PATH=/media/serien
SERIES_MEDIA_VOLUME=/nesflix/serien

SABnzbd

SAB_URL=http://sabnzbd:8080
SAB_API_KEY=...

Der Download-Tab verwendet Queue und History aus SABnzbd. Für laufende Releases werden Sprachen aus dem Dateinamen abgeleitet; die Medienanalyse nach dem Import erfolgt über ffprobe.

Dienststatus

Der Dashboard-Tab prüft die Dienste parallel mit kurzen Timeouts und aktualisiert sie regelmäßig:

JELLYFIN_URL=http://jellyfin:8096
SEERR_URL=http://seerr:5055
PROWLARR_URL=http://prowlarr:9696
EASYNEWS_INDEXER_URL=http://easynews-as-indexer:8081
QBITTORRENT_URL=http://host.docker.internal:8080
BAZARR_URL=http://bazarr:6767
LINGARR_URL=http://lingarr:9876
LIBRETRANSLATE_URL=http://libretranslate:5000
SONARR_PROWLARR_PROXY_URL=http://sonarr-prowlarr-proxy:8080
RADARR_PROWLARR_PROXY_URL=http://radarr-prowlarr-proxy:8080
SERVICE_CHECK_TIMEOUT=3
SERVICE_REFRESH_SECONDS=30

Die Container müssen im gemeinsamen Docker-Netzwerk media-stack_default erreichbar sein. qBittorrent läuft außerhalb des Compose-Stacks und benötigt deshalb eine erreichbare URL. Bei Bedarf stellt extra_hosts den Namen host.docker.internal bereit.

Scans und Performance

Scans laufen nach dem Laden der Bibliotheksdaten im Hintergrund. Über den Button „Neu scannen“ kann zwischen Radarr, Sonarr, allen Quellen und ausschließlich den aktuellen Einträgen der Liste „Ohne Deutsch“ gewählt werden. Die automatische Scan-Häufigkeit wird in den Einstellungen festgelegt.

SCAN_WORKERS=4
REQUEST_TIMEOUT=20
DB_PATH=/data/cache.db

SCAN_WORKERS steuert die Anzahl paralleler ffprobe-Jobs. Höhere Werte beschleunigen große Bibliotheken, erhöhen aber die I/O-Last.

Datastore, RAID und SMART

Der Datastore ist standardmäßig /nesflix und wird read-only eingebunden:

DATASTORE_PATH=/nesflix
DATASTORE_HOST_PATH=/nesflix
RAID_DEVICE=/dev/md127
STORAGE_CACHE_SECONDS=900
SMART_ENABLED=true
HOST_SYS_PATH=/host-sys

Für SMART, Temperaturen und echte Hersteller-Seriennummern benötigt der Container Zugriff auf /dev, /sys, /run/udev, SYS_RAWIO sowie smartctl im Image. Die App liest keine RAID-Daten schreibend und führt keinen Rebuild aus.

Die I/O Pressure basiert auf Linux PSI (/proc/pressure/io). Wenn der Kernel PSI nicht unterstützt, wird die Anzeige als nicht verfügbar markiert.

Logging

LOG_LEVEL=INFO
LOG_FILE=/data/media-max.log
LOG_RETENTION_HOURS=6

Erwartbare Verbindungsfehler werden als kurze einzeilige Meldungen protokolliert. Die Logdatei wird standardmäßig alle sechs Stunden rotiert.

Start mit Docker Compose

docker compose up -d --build
docker compose logs -f media-max

Der Compose-Stack bindet standardmäßig ein:

volumes:
  - ${FILM_MEDIA_VOLUME}:/media/filme:ro
  - ${SERIES_MEDIA_VOLUME:-/nesflix/serien}:/media/serien:ro
  - ${DATASTORE_HOST_PATH:-/nesflix}:/nesflix:ro
  - /dev:/host-dev:ro
  - /sys:/host-sys:ro
  - /run/udev:/host-run-udev:ro
  - ./data:/data

Für Radarr, Sonarr und die weiteren Container wird das externe Netzwerk media-stack_default verwendet.

Fehlersuche

Prüfe zuerst, ob Media Max die Medien sieht:

docker exec -it media-max sh
ls -lah /media/filme
ls -lah /media/serien
find /media/filme -type f | head

Teste anschließend ffprobe direkt im Container:

ffprobe -v error \
  -show_entries stream=codec_type,codec_name:stream_tags=language \
  -of json "/media/filme/DEIN/FILM.mkv"

Für SMART:

smartctl -i -d sat /host-dev/sda
smartctl -A -d sat /host-dev/sda

Wenn eine PWA-Installation in Chrome nicht angeboten wird, muss Media Max über gültiges HTTPS aufgerufen werden. Nach Änderungen an Manifest oder Service Worker sollten alte Website-Daten bzw. eine alte Verknüpfung entfernt und die Seite neu geladen werden.

S
Description
No description provided
Readme
2.8 MiB
Languages
HTML 65.4%
Python 33.8%
JavaScript 0.6%
Dockerfile 0.2%