# 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`: ```bash 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: ```env RADARR_URL=http://radarr:7878 RADARR_API_KEY=... RADARR_MEDIA_PATH=/data/filme LOCAL_MEDIA_PATH=/media/filme FILM_MEDIA_VOLUME=/nesflix/filme ``` ### Sonarr ```env SONARR_URL=http://sonarr:8989 SONARR_API_KEY=... SONARR_MEDIA_PATH=/data/serien LOCAL_SERIES_PATH=/media/serien SERIES_MEDIA_VOLUME=/nesflix/serien ``` ### SABnzbd ```env 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: ```env 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 und allen Quellen gewählt werden. Die automatische Scan-Häufigkeit wird in den Einstellungen festgelegt. ```env 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: ```env 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 ```env 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 ```bash docker compose up -d --build docker compose logs -f media-max ``` Der Compose-Stack bindet standardmäßig ein: ```yaml 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: ```bash 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: ```bash ffprobe -v error \ -show_entries stream=codec_type,codec_name:stream_tags=language \ -of json "/media/filme/DEIN/FILM.mkv" ``` Für SMART: ```bash 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.