diff --git a/SAVEPOINT.md b/SAVEPOINT.md index cf83106..dede9af 100644 --- a/SAVEPOINT.md +++ b/SAVEPOINT.md @@ -14,10 +14,20 @@ **Neu in v3.3:** - **4K UHD als eigener Disc-Typ** (classify ≥ 55 GiB, beide detection.py, - Tests): eigene Badge-Farbe überall, Prescan-Label „4K UHD". Der - UHD-Rip-Fehler „Failed to open disc" (Code 11) bekommt Klartext: - Laufwerk kann UHD nicht entschlüsseln → LibreDrive-Firmware-Hinweis - (BU40N-Crossflash-Faden bleibt Hardware-Aufgabe des Commanders). + Tests): eigene Badge-Farbe überall, Prescan-Label „4K UHD". +- **UHD-Kette diagnostiziert (Nachtrag, gleicher Tag): Der BU40N-Flash IST + erledigt** — makemkvcon meldet „Using LibreDrive mode (v06.3)". Der + Summer-Wars-Fehlschlag lag NICHT am Laufwerk, sondern an „The volume key + is unknown": die Disc (MKB v82) ist neuer als MakeMKVs Schlüssel-DB — + auf der VM mit 1.17.7 UND der aktuellsten 1.18.4 bewiesen. Konsequenzen: + MakeMKV auf **1.18.4** gehoben (Scan-Hänger durch überall genutztes + --noscan umgangen, auf der BU40N sauber gelaufen; URL-Base → /download), + run_makemkv reicht kritische Meldungen (volume key/Key abgelaufen) in + den Fehlertext durch, UHD-Klartext unterscheidet jetzt „Laufwerk kann + kein UHD" von „Disc neuer als Key-DB" inkl. Forum-Dump-Hinweis + (MakeMKV speichert den AACS-Dump automatisch unter /root/.MakeMKV/). + Summer Wars bleibt bis zu einem MakeMKV-Key-Update nicht entschlüsselbar + — das ist Stand der Technik, kein Rippy-Bug. - **Vollautomatik** (Einstellungen → Ripping): Disc erkannt → Rip startet ohne Popup in den passenden Schnellwahl-Ordner (Serie/Film/Musik). - **Job-Verwaltung**: „Neu komprimieren" nur noch, wenn Rohdaten wirklich diff --git a/docker-compose.yml b/docker-compose.yml index fda5dfa..b959a5c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -67,7 +67,8 @@ services: args: # Übersteuerbar via .env — makemkv.com ist zeitweise down (Cloudflare # 525); dann Wayback-Snapshot als MAKEMKV_URL_BASE eintragen. - MAKEMKV_URL_BASE: ${MAKEMKV_URL_BASE:-https://www.makemkv.com/download/old} + # /download = aktuelle Version, /download/old = ältere Versionen. + MAKEMKV_URL_BASE: ${MAKEMKV_URL_BASE:-https://www.makemkv.com/download} environment: - DATABASE_URL=postgresql://rippy:rippy@postgres:5432/rippy - REDIS_URL=redis://redis:6379/0 diff --git a/docker/worker/Dockerfile b/docker/worker/Dockerfile index 0615172..039f647 100644 --- a/docker/worker/Dockerfile +++ b/docker/worker/Dockerfile @@ -12,15 +12,18 @@ FROM python:3.12-slim-bookworm AS makemkv-build -# 1.17.7 statt 1.18.4 (23.07.2026): MakeMKV 1.18.x hat unter Linux einen -# bekannten Hänger beim Laufwerks-Scan (100 % CPU, keine Ausgabe) — bei uns -# reproduziert, im Forum vielfach bestätigt (t=38128, t=38239), Workaround -# laut Community: 1.17.7. Bonus: 1.17.7 ist auch die Version, die -# Firmware-Flashen kann (neuere ignorieren den Flash-Befehl). -# MAKEMKV_URL_BASE ist übersteuerbar (Build-Arg), falls makemkv.com -# gerade down ist (Wayback-Snapshot als Ausweich-Quelle). -ARG MAKEMKV_VERSION=1.17.7 -ARG MAKEMKV_URL_BASE=https://www.makemkv.com/download/old +# Zurück auf die AKTUELLE Version (24.07.2026): 1.17.7 war wegen des +# 1.18er-Laufwerks-Scan-Hängers (Forum t=38128) und der Flash-Fähigkeit +# gepinnt. Beides erledigt: der Scan wird überall mit --noscan umgangen +# (info-Lauf mit 1.18.4 auf der BU40N sauber durchgelaufen, 24.07.), und +# das Laufwerk ist geflasht (LibreDrive v06.3 bestätigt). Die AKTUELLE +# Version zählt, weil sie die neueste AACS-Schlüssel-Datenbank mitbringt — +# 1.17.7 kannte z. B. den Key der Summer-Wars-UHD (MKB v82) nicht. +# MAKEMKV_URL_BASE ist übersteuerbar (Build-Arg): /download hat nur die +# aktuelle Version, /download/old die älteren; bei Cloudflare-525 einen +# Wayback-Snapshot eintragen. +ARG MAKEMKV_VERSION=1.18.4 +ARG MAKEMKV_URL_BASE=https://www.makemkv.com/download RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ @@ -78,7 +81,7 @@ RUN ldconfig # Version fürs UI sichtbar machen (Einstellungen → System): makemkvcon hat # keinen --version-Schalter, also kommt die Wahrheit aus dem Build selbst. -ARG MAKEMKV_VERSION=1.17.7 +ARG MAKEMKV_VERSION=1.18.4 ENV MAKEMKV_VERSION=${MAKEMKV_VERSION} WORKDIR /app diff --git a/docker/worker/ripping.py b/docker/worker/ripping.py index eb082d4..bd4f6f8 100644 --- a/docker/worker/ripping.py +++ b/docker/worker/ripping.py @@ -195,6 +195,17 @@ def run_makemkv(device_path: str, output_dir: str, progress_cb=None) -> dict: ) letzte_meldung = "" + # Kritische Meldungen einsammeln: die LETZTE Zeile ist fast immer nur + # "Failed to open disc" — die URSACHE ("volume key is unknown", Key + # abgelaufen) steht Zeilen davor und ging im Fehlertext verloren + # (Befund 24.07., Summer-Wars-UHD). + kritische_meldungen = [] + KRITISCH = ( + "volume key is unknown", + "evaluation period has expired", + "registration key", + "Too old version", + ) try: for line in process.stdout: progress = get_progress_from_prgv(line) @@ -205,6 +216,8 @@ def run_makemkv(device_path: str, output_dir: str, progress_cb=None) -> dict: teile = line.split(",", 4) if len(teile) >= 4: letzte_meldung = teile[3].strip('"') + if any(muster in letzte_meldung for muster in KRITISCH): + kritische_meldungen.append(letzte_meldung) except RipAbbruch: process.kill() process.wait() @@ -229,6 +242,7 @@ def run_makemkv(device_path: str, output_dir: str, progress_cb=None) -> dict: "status": "error", "error": ( f"makemkvcon endete mit Code {process.returncode}" + + (f" — Ursache: {'; '.join(kritische_meldungen)}" if kritische_meldungen else "") + (f" — letzte Meldung: {letzte_meldung}" if letzte_meldung else "") + ("" if mkv_dateien else " — keine MKV-Datei entstanden") ), diff --git a/docker/worker/tasks.py b/docker/worker/tasks.py index 17fe34d..d5e6f1f 100644 --- a/docker/worker/tasks.py +++ b/docker/worker/tasks.py @@ -274,20 +274,30 @@ def rip_disc(self, device_path: str, job_id: str, target_dir: str = None): progress_cb=fortschritt, output_dir=final_dir, ) - # 4K-UHD scheitert mit Nicht-LibreDrive-Laufwerken IMMER an der - # Verschlüsselung — "Failed to open disc" heißt dann nicht "Disc kaputt", - # sondern "Laufwerk kann kein UHD" (Firmware-Faden, siehe SAVEPOINT). - if ( - ergebnis.get("status") == "error" - and disc_type == "uhd" - and "Failed to open disc" in (ergebnis.get("error") or "") - ): - ergebnis["error"] += ( - " — 4K-UHD erkannt: Das Laufwerk kann UHD-Discs vermutlich nicht " - "entschlüsseln. Dafür ist eine LibreDrive-Firmware nötig (BU40N: " - "Crossflash auf 1.03-MK, MakeMKV-Forum 'Ultimate UHD Drives " - "Flashing Guide'). Normale BD/DVD gehen weiterhin." - ) + # UHD-Fehler in Klartext übersetzen — "Failed to open disc" allein hilft + # niemandem. Zwei bekannte Ursachen (Befunde 24.07., Summer-Wars-UHD): + if ergebnis.get("status") == "error" and disc_type == "uhd": + fehler_text = ergebnis.get("error") or "" + if "volume key is unknown" in fehler_text: + # LibreDrive lief bereits — MakeMKV kennt nur den Disc-Schlüssel + # nicht: Version zu alt ODER Disc neuer als die Key-Datenbank. + ergebnis["error"] += ( + " — Klartext: Das Laufwerk liest die Disc (LibreDrive OK), " + "aber MakeMKV kennt den Schlüssel dieser Disc nicht. Erst " + "prüfen: MakeMKV aktuell? (Einstellungen → System; Update = " + "Image-Rebuild). Ist es aktuell, ist die Disc neuer als die " + "Schlüssel-Datenbank — MakeMKV hat einen AACS-Dump unter " + "/root/.MakeMKV/ im Worker gespeichert; im MakeMKV-Forum " + "(Bereich 'Ultra HD Blu-ray') einreichen, mit einem der " + "nächsten Updates ist die Disc dann rippbar." + ) + elif "Failed to open disc" in fehler_text: + ergebnis["error"] += ( + " — 4K-UHD erkannt: Das Laufwerk kann UHD-Discs vermutlich " + "nicht entschlüsseln. Dafür ist eine LibreDrive-Firmware nötig " + "(MakeMKV-Forum 'Ultimate UHD Drives Flashing Guide'). " + "Normale BD/DVD gehen weiterhin." + ) if ergebnis.get("status") == "success" and transcode_an: # Kompression als eigener Task auf der transcode-Queue — kann vom