Files
language-dashboard/README.md
T
nessi 7d1987c4f4 feat: add NVIDIA Graphics tab with GPU monitoring via nvidia-smi and configurable binary path
Add graphics_snapshot() function to query GPU details using nvidia-smi with 5s timeout. Parse GPU metrics including model, driver, UUID, serial, temperature, utilization, VRAM, power, clocks, and compute processes. Add NVIDIA_SMI_BIN environment variable with default "nvidia-smi". Add /api/graphics endpoint returning GPU data with error handling. Add Graphics navigation tab with purple expansion-card icon
2026-08-21 21:09:15 +02:00

6.4 KiB

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
  • Graphics-Tab mit NVIDIA-GPU-Modell, Treiber, UUID, Seriennummer, Temperatur, Auslastung, VRAM, Leistung, Clocks und GPU-Prozessen
  • 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.

NVIDIA Graphics

Der Graphics-Tab verwendet nvidia-smi im Container. Optional kann der Pfad über NVIDIA_SMI_BIN gesetzt werden:

NVIDIA_SMI_BIN=nvidia-smi

Für NVIDIA Container Toolkit kann der Service zusätzlich mit GPU-Zugriff gestartet werden:

deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: all
          capabilities: [gpu]
environment:
  NVIDIA_VISIBLE_DEVICES: all
  NVIDIA_DRIVER_CAPABILITIES: compute,utility

Wenn nvidia-smi nicht erreichbar ist, bleibt der Tab verfügbar und zeigt den Grund an.

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.