Skip to content

Releases: salutaris91/Medienwerkzeug

Medienwerkzeug v1.3.0

Choose a tag to compare

@salutaris91 salutaris91 released this 24 Jun 19:02

Release Notes — Medienwerkzeug v1.3.0

Dieses Release bringt einen zuverlässigen NAS-Überschreibschutz für Filme (inkl. Plaintext-Medienvergleich), die typisierte Erkennung und UI-Unterstützung von Inbox-Einzeldateien sowie eine stark verbesserte, kontextsensitive Filmsuche, die echte Filmtitel nicht mehr versehentlich beschneidet.


Highlights in v1.3.0

1. NAS-Überschreibschutz & Medienvergleich für Filme (#30)

  • Zentraler Schutz vor Überschreiben: Bei Transfers zu NAS-Zielen wird nun ein opt-in Überschreibschutz aktiviert. Existiert der Zielpfad bereits, wird die vorhandene Datei automatisch in einen Quarantäne-Papierkorb (.medienwerkzeug-trash) auf dem NAS verschoben, anstatt sie unwiderruflich zu überschreiben. Schlägt dieses Verschieben fehl, wird der gesamte Transfer abgebrochen.
  • Plaintext-Medienvergleich im UI: Kollisionen werden nach dem Ermitteln der finalen Dateinamen geprüft. Treten Kollisionen auf, zeigt das UI ein rotes Warnungs-Banner mit einer tabellarischen Gegenüberstellung der Medienparameter (Dateiname, Dateigröße, Auflösung, Video-/Audio-Codec, Bitrate, Dauer sowie eine automatische Qualitäts-Einschätzung) der vorhandenen und der neuen Datei.

2. Typisierte Inbox-Einzeldateien (#31)

  • Saubere Unterscheidung: Einzeldateien in der Inbox werden jetzt typisiert erfasst und nicht mehr als Ordner-Projekte behandelt.
  • UI-Integration: Im UI werden Einzeldateien durch ein Film-Icon (🎥) anstelle eines Ordners dargestellt. Tooltips, Buttons und Bestätigungsdialoge passen sich dynamisch an, um vom "Ordner verschieben" auf "Datei verschieben" umzustellen.
  • Robuster UI-Status: Das Icon bleibt auch nach Status-Updates (z. B. nach dem Starten einer Verarbeitung) korrekt erhalten, da der Ordnertyp im DOM-Element (data-is-dir) mitgeführt wird.

3. Kontextsensitive & robuste Filmsuche (#32)

  • Titel-Erhaltung: Sprach- und Release-Tags (z. B. german, dl, 1080p) werden nur noch dann abgeschnitten, wenn sie in einem klaren Release-Kontext stehen. Echte Filmtitel wie "The French Dispatch" oder "The English Patient" bleiben dadurch vollständig erhalten.
  • Smarte Jahreszahl-Filterung: Titel, die mit einer Jahreszahl beginnen (z. B. "2001: Odyssee im Weltraum"), werden nicht mehr fälschlicherweise beim ersten Jahr abgeschnitten, sondern das System filtert erst am echten Release-Jahr bzw. bei nachfolgenden Scene-Tags.
  • Fallback auf Videodateiname: Wenn ein Projekt in einem generischen Ordner liegt (z. B. Downloads, Neuer Ordner, Film), nutzt das System automatisch den Namen der darin enthaltenen Videodatei als Suchbegriff.

Technische Änderungen & Commits

  • Version-Bumps in Dockerfile, gui/core/utils.py und package.json auf 1.3.0.
  • Umfassende Unit-Tests für Scene-Tag-Filterung, Jahreszahl-Heuristiken, generische Ordnernamen und den Quarantäne-Transferpfad hinzugefügt (tests/test_movie_processing_fixes.py und tests/test_transfers_fallback.py).
  • Whitespace-Bereinigung über das gesamte Diff (git diff --check läuft fehlerfrei durch).
  • Aktualisierung des Wissensgraphen via Graphify.

v1.2.0

Choose a tag to compare

@salutaris91 salutaris91 released this 24 Jun 08:07
4091be6

Release Notes — Medienwerkzeug v1.2.0

Dieses Release bringt eine verfeinerte TV-Untertitel-Zuordnung (inkl. einer neuen Walk-Up-Pfaddistanz-Heuristik) sowie deutliche Verbesserungen am Web-Folder-Picker (Breiten-Layout und dynamische Titel je nach Kategorie).


Highlights in v1.2.0

1. TV-Pfad Untertitel-Erkennung (#25)

  • Lockeres Matching: Die strenge Bindung an basename.startswith(...) in queue_api.py wurde für Untertitel gelockert. Fremd benannte Untertitel (z.B. ger_forced.sub in einem Unterordner neben S01E01.mkv) werden jetzt sicher zugeordnet, wenn es keine Mehrdeutigkeiten mit anderen Videos im selben Ordner gibt.
  • Walk-Up-Pfaddistanz-Heuristik: Ein übergeordnetes Video im Projekt-Root (oder in einem übergeordneten Ordner) darf Untertitel aus Unterordnern nur dann matchen, wenn kein anderer Ordner mit eigener Videodatei dazwischen liegt. Das verhindert Fehlzuordnungen von Subfolders (z. B. Bonus/ger_forced.sub) an das Root-Video.
  • Erhöhte Transparenz: Nicht zuordenbare oder mehrdeutige lose Untertitel (wie Extra/loose.srt bei mehreren Videos) werden in der Vorschau-API nun explizit als junk klassifiziert, um den Anwender im UI zu informieren.

2. Dynamische Titel im Web-Folder-Picker (#27)

  • Kategoriebezogene Titel: Die Lupe zur Ordnerauswahl übergibt nun den Namen der Kategorie. Das Modal zeigt daraufhin dynamisch an, wofür der Ordner gewählt wird (z. B. "📂 Ordner für Serien auswählen" oder "📂 Ordner für Filme auswählen"), was die Benutzerführung verbessert.

3. Layout-Verbreiterung im Web-Folder-Picker (#28)

  • Responsiver Platzgewinn: Die maximale Breite des Picker-Modals in index.html wurde von 500px auf 700px (90% Viewport-Breite) erhöht. Dies erleichtert das Navigieren und Lesen langer, verschachtelter Verzeichnispfade auf Desktop- und Tablet-Monitoren.

Technische Änderungen & Commits

  • Version-Bumps in Dockerfile, gui/core/utils.py und package.json auf 1.2.0.
  • Testabdeckung in tests/test_fix_series_queue_and_naming.py um umfassende Integrationstests für das Subtitle-Matching (Root- vs. Subfolder-Divergenz, Verschachtelungstiefe und Ambivalenzvermeidung) erweitert.
  • Bereinigung aller trailing whitespaces über das gesamte Diff hinweg (git diff --check ist vollständig fehlerfrei).
  • Synchronisation des Wissensgraphen via Graphify.

v1.1.0

Choose a tag to compare

@salutaris91 salutaris91 released this 22 Jun 11:47
b81f7d5

Release Notes — Medienwerkzeug v1.1.0

Dieses Release bringt wesentliche Stabilitäts- und Robustheitsverbesserungen für die Medien-Pipeline, den Datenverlust-Schutz sowie die Verarbeitung von Online-Medien (YouTube und Mediatheken).


Highlights in v1.1.0

1. Pragmatischer Step-Retry für TV- und URL-Serien (Strang 4)

  • Teil-Wiederholungen: Bei Klick auf "Wiederholen" (Retry) bei einem fehlgeschlagenen oder abgebrochenen Job wird die Pipeline nicht mehr komplett von vorne ausgeführt. Bereits erfolgreiche Stufen (metadata, convert) werden übersprungen.
  • Intelligenter Outbox-Bypass: Der Worker prüft die physische Existenz der Zieldateien (oder deren konvertierten .mkv-Pendants) in der Outbox. Bei Existenz werden Pfade, Dateinamen und Serien-Titel direkt aus dem persistenten Manifest übernommen, um redundante Konvertierungen oder Downloads zu vermeiden.
  • Selektives Kopieren: Nachträglich in den Einstellungen aktivierte Storage-Targets (z.B. pCloud), die im ursprünglichen Job nicht ausgewählt waren, werden beim Retry korrekt übersprungen.

2. Pro-Job-Logging (Strang 1)

  • Eigene Logdateien: Jeder Job schreibt seine Ausgaben nun in eine dedizierte Logdatei unter data/logs/job-{task_id}.log.
  • Thread-safe Tracing: Die Logs werden parallel geschrieben, und Thread-Namen werden dynamisch angepasst, um Fehleranalysen präzise und übersichtlich zu gestalten.
  • Automatische Log-Retention: Logdateien werden automatisch nach 14 Tagen bereinigt, um unnötigen Speicherplatzverbrauch zu verhindern.

3. NFO-Datenverlust-Schutz & Quarantäne-Strukturierung (Strang 2 & 3)

  • Sicherheits-Guards: Ein Schutzmechanismus in der Löschfunktion verhindert, dass kuratierte Sidecar-Dateien (tvshow.nfo, season.nfo) auf dem NAS durch automatisierte Cleanup- oder Reconciliation-Aktionen gelöscht oder verschoben werden.
  • Papierkorb-Kollisionsschutz: Dateien im Papierkorb (.medienwerkzeug-trash) werden kollisionssicher strukturiert abgelegt, um ein Überschreiben älterer gelöschter Dateien zu verhindern.

4. ID-basiertes Serien-Matching (Strang 5)

  • Ordner-Split-Schutz: Weicht der ermittelte Serienname leicht vom tatsächlichen Ordnernamen auf dem NAS ab, sucht der Worker (und das Vorschau-System) per ID-Abgleich (TMDB, TVDB, Show-ID) in allen existierenden tvshow.nfo-Dateien auf dem NAS. Dadurch wird die Episode im korrekten Ordner einsortiert und die Entstehung von doppelten Serienordnern verhindert.

5. Robuste Mediathek-URL-Auflösung (Strang 6)

  • HTTP 308-Redirect-Kompensation: Ein angepasster Redirect-Handler kompensiert HTTP 308-Weiterleitungen (z. B. bei ZDF-Sendungs-Links) und verhindert Abstürze beim HTML-Scraping.
  • Fallback-Pfad-Heuristik: Falls eine URL offline ist oder das Scraping fehlschlägt, rekonstruiert eine Heuristik das Topic direkt aus dem URL-Pfad (z. B. /comedy/heute-show -> Heute Show). Ungültige oder unauflösbare URLs werden sicher abgefangen, statt mit rohen URLs in die Suche zu laufen.

Technische Änderungen & Commits

  • Version-Bumps in Dockerfile, gui/core/utils.py und package.json auf 1.1.0.
  • Testabdeckung um umfassende Integrationstests für Pipeline-Bypass und Mediathek-Redirects erweitert (Gesamtanzahl Tests: 296 Passed).
  • Ignorieren des .serena/-Arbeitsordners in .gitignore.