docker.videokonverter/CHANGELOG.md
data d65ca027e0 v2.3.0: Import-Jobs, Ordner-Loeschen, Serien-Konvertierung, Server-Log
Features:
- Import-Jobs: Persistierung in DB, Jobs beim Laden wiederherstellen
- Ordner loeschen: Button in Browser-Ansicht mit Modal-Dialog
- Serien konvertieren: Alle Episoden einer Serie in Queue senden
- Serien aufraumen: Alte Codec-Versionen nach Konvertierung loeschen
- Server-Log: Live-Ansicht in Admin mit Auto-Scroll
- Toast-Benachrichtigungen statt Browser-Alerts
- Bessere Fehlerbehandlung und Feedback

API:
- POST /api/library/delete-folder
- POST /api/library/series/{id}/convert
- GET /api/library/series/{id}/convert-status
- POST /api/library/series/{id}/cleanup
- GET /api/logs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 14:48:30 +01:00

13 KiB

Changelog

Alle relevanten Aenderungen am VideoKonverter-Projekt.

[2.3.0] - 2026-02-24

Import-System Verbesserungen

Bestehende Import-Jobs laden

  • Neue GET /api/library/import API liefert alle Import-Jobs
  • Import-Modal zeigt jetzt offene Jobs oben an (Buttons mit Status)
  • Klick auf Job laedt und zeigt Vorschau zum Fortsetzen
  • Verhindert doppelte Importe der gleichen Quelle

Import-Fortschritt mit Byte-Level

  • Neue DB-Felder: current_file_name, current_file_bytes, current_file_total
  • Kopieren in 64MB-Chunks mit Progress-Updates alle 50MB
  • UI zeigt aktuelle Datei und Byte-Fortschritt

Gezielter Rescan nach Import

  • Nach Import wird nur der Ziel-Library-Pfad gescannt
  • imported_series Liste im Job-Status fuer betroffene Ordner
  • Statt reloadAllSections() nur loadSectionData(targetPathId)

Ordner-Verwaltung

Ordner-Loeschen Button

  • Neuer Muelleimer-Button (SVG-Icon) oben rechts bei Ordnern
  • Erscheint nur bei Hover, rot bei Mouse-Over
  • Schoener Bestaetigungs-Dialog statt Browser-confirm()
  • Toast-Benachrichtigung statt alert()

Delete-Folder API

  • POST /api/library/delete-folder mit Sicherheitspruefung
  • Prueft ob Pfad unter einem Library-Pfad liegt
  • Loescht Ordner + alle DB-Eintraege (library_videos)
  • Gibt geloeschte Dateien/Ordner/DB-Eintraege zurueck

Serie konvertieren

Batch-Konvertierung fuer Serien

  • Neuer Button "Serie konvertieren" im Serien-Modal
  • Modal mit Codec-Auswahl (AV1/HEVC/H.264)
  • Option: Alle neu konvertieren (auch bereits passende)
  • Option: Quelldateien nach Konvertierung loeschen
  • POST /api/library/series/{id}/convert API
  • GET /api/library/series/{id}/convert-status fuer Codec-Statistik

Cleanup-Funktion fuer Serien

  • "Alte Dateien loeschen" Button im Serien-Modal
  • Loescht alles ausser: registrierte Videos, .metadata, .nfo, Bilder
  • POST /api/library/series/{id}/cleanup API

Server-Log System

Benachrichtigungs-Glocke

  • Glocken-Icon unten rechts auf allen Seiten
  • Badge zeigt ungelesene Fehler-Anzahl (rot)
  • Log-Panel mit allen Server-Meldungen
  • Fehler/Warnings farblich hervorgehoben

Log-API

  • GET /api/logs?since=ID liefert neue Log-Eintraege
  • In-Memory-Buffer (max 200 Eintraege)
  • Polling alle 2 Sekunden

UI-Verbesserungen

Toast-Benachrichtigungen

  • Verbesserte Styling mit Slide-Animation
  • Farbige linke Border (success/error/info)
  • 4 Sekunden Anzeigedauer

TVDB-Suche

  • Checkbox "Englische Titel durchsuchen" im TVDB-Modal
  • Ermoeglicht Suche nach englischen Originaltiteln

Technische Aenderungen

Neue/Geaenderte Dateien

  • app/routes/library_api.py - 6 neue Endpoints (+200 Z.)
  • app/services/importer.py - get_all_jobs(), Progress-Tracking (+100 Z.)
  • app/services/queue.py - delete_source Option bei add_paths()
  • app/static/js/library.js - Dialog-System, Toast, Import-Jobs (+150 Z.)
  • app/static/css/style.css - Toast, Delete-Button, Dialog-Styles (+50 Z.)
  • app/templates/library.html - Confirm-Modal, Convert-Modal (+50 Z.)
  • app/templates/base.html - Benachrichtigungs-Glocke + Log-Panel (+100 Z.)
  • app/routes/api.py - /api/logs Endpoint, WebLogHandler (+40 Z.)
  • app/models/job.py - delete_source Flag

Neue API-Endpoints

  • GET /api/library/import - Liste aller Import-Jobs
  • POST /api/library/delete-folder - Ordner loeschen
  • POST /api/library/series/{id}/convert - Serie konvertieren
  • GET /api/library/series/{id}/convert-status - Codec-Status
  • POST /api/library/series/{id}/cleanup - Alte Dateien loeschen
  • GET /api/logs - Server-Log abrufen

[2.2.0] - 2026-02-21

Bugfixes

TVDB Review-Modal nicht klickbar

  • JSON.stringify() erzeugte doppelte Anfuehrungszeichen in HTML onclick-Attributen
  • Neue escapeAttr()-Funktion ersetzt " durch &quot; fuer sichere HTML-Attribute
  • 4 Stellen in library.js korrigiert (Serien, Filme, Review-Liste, manuelle Suche)

Film-TVDB-Suche liefert keine Ergebnisse

  • Filmtitel mit fuehrenden Nummern (z.B. "10 Logan The Wolverine") fanden nichts auf TVDB
  • Neue cleanSearchTitle()-Funktion entfernt fuehrende Nummern und Aufloesungs-Suffixe
  • Angewendet in openMovieTvdbModal() und openTvdbModal()

Auto-Match Progress-Variable nicht im Scope

  • pollAutoMatchStatus() referenzierte progress aus startAutoMatch()-Scope
  • Variable wird jetzt lokal in pollAutoMatchStatus() definiert

TVDB-Sprache wurde nicht gespeichert

  • pages.py HTMX-Save-Handler fehlte tvdb_language Feld
  • Hinzugefuegt: settings["library"]["tvdb_language"] = data.get("tvdb_language", "deu")

Geaenderte Dateien

  • app/static/js/library.js - +escapeAttr(), +cleanSearchTitle(), 4x Attribut-Escaping, Progress-Fix
  • app/routes/pages.py - tvdb_language in Settings-Save

[2.1.0] - 2026-02-21

TVDB-Sprachkonfiguration

Alle TVDB-Metadaten (Serien-Titel, Beschreibungen, Episoden-Namen) werden jetzt in der konfigurierten Sprache abgerufen statt immer Englisch.

Neue Features

  • Sprach-Dropdown in Admin-UI (Deutsch, Englisch, Franzoesisch, Spanisch, Italienisch, Japanisch)
  • API-Endpoints: GET/PUT /api/tvdb/language zum Lesen/Aendern der Sprache
  • Episoden-Refresh: POST /api/library/tvdb-refresh-episodes aktualisiert alle gecachten Episoden
  • Alle TVDB-API-Aufrufe nutzen self._language Property

TVDB Review-Modal (Neues Feature)

  • Statt blindem Auto-Match werden jetzt Vorschlaege gesammelt und zur Pruefung angezeigt
  • collect_suggestions() in tvdb.py: Top 3 TVDB-Treffer pro ungematchter Serie/Film
  • Review-Modal: Poster-Vorschau, Beschreibung, Jahr, Einzelbestaetigung
  • Manuelle TVDB-Suche falls Vorschlaege nicht passen
  • Polling-basierter Fortschritt waehrend der Analyse

Film-Scanning (Neues Feature)

  • Bibliothek unterstuetzt jetzt Filme neben Serien
  • Neue DB-Tabelle library_movies fuer Film-Metadaten
  • Film-Erkennung: Ein Video pro Ordner = Film, Ordnername = Filmtitel
  • Film-Grid in der Bibliothek-UI mit Poster, Titel, Jahr
  • TVDB-Zuordnung fuer Filme (Suche + manuelle Zuordnung)

Import- und Clean-Service (Grundgeruest)

  • app/services/importer.py (734 Z.) - Import-Logik mit Serien-Erkennung + TVDB-Lookup
  • app/services/cleaner.py (155 Z.) - Junk-Scan + Loeschen von Nicht-Video-Dateien

Geaenderte Dateien

  • app/services/tvdb.py - _language Property, lokalisierte Suche, collect_suggestions() (298 -> 1005 Z.)
  • app/services/library.py - Film-Scan, _ensure_movie, _add_video_to_db (1082 -> 1747 Z.)
  • app/routes/library_api.py - TVDB-Language-Endpoints, Confirm-Endpoint, Film-Endpoints (260 -> 998 Z.)
  • app/static/js/library.js - Review-Modal, Film-Grid, Auto-Match-Polling (587 -> 1912 Z.)
  • app/static/css/style.css - Review-Modal CSS, Film-Grid CSS (889 -> 1554 Z.)
  • app/templates/library.html - Review-Modal HTML, Film-TVDB-Modal (330 -> 392 Z.)
  • app/templates/admin.html - TVDB-Sprach-Dropdown (330 -> 342 Z.)
  • app/server.py - CleanerService + ImporterService Integration
  • app/cfg/settings.yaml - tvdb_language, import-Settings, cleanup keep_extensions

Neue API-Endpoints

  • GET /api/tvdb/language - Aktuelle TVDB-Sprache
  • PUT /api/tvdb/language - TVDB-Sprache aendern
  • POST /api/library/tvdb-refresh-episodes - Alle Episoden-Caches aktualisieren
  • POST /api/library/tvdb-auto-match - Review-Vorschlaege sammeln
  • POST /api/library/tvdb-confirm - Einzelnen TVDB-Match bestaetigen
  • GET /api/library/movies - Filme auflisten
  • POST /api/library/movies/{id}/tvdb-match - Film-TVDB-Zuordnung

[2.0.0] - 2026-02-20

Video-Bibliothek (Neues Feature)

Komplette Video-Bibliotheksverwaltung mit Serien-Erkennung, ffprobe-Analyse, TVDB-Integration und umfangreichen Filterfunktionen.

Neue Dateien

  • app/services/library.py - LibraryService (Scan, DB, Filter, Duplikate)
  • app/services/tvdb.py - TVDBService (Auth, Suche, Episoden-Abgleich)
  • app/routes/library_api.py - REST API Endpoints fuer Bibliothek
  • app/templates/library.html - Bibliothek-Hauptseite mit Filter-Sidebar
  • app/static/js/library.js - Bibliothek-Frontend (Filter, TVDB, Scan-Progress)

Geaenderte Dateien

  • app/server.py - LibraryService + TVDBService Integration
  • app/routes/pages.py - Route /library + TVDB-Settings speichern
  • app/templates/base.html - Nav-Link "Bibliothek" hinzugefuegt
  • app/templates/admin.html - TVDB-Settings + Scan-Pfad-Verwaltung
  • app/static/css/style.css - Library-Styles (~250 Zeilen ergaenzt)
  • app/cfg/settings.yaml - library-Sektion (enabled, tvdb_api_key, tvdb_pin)
  • requirements.txt - tvdb-v4-official>=1.1.0 hinzugefuegt

Datenbank

Vier neue Tabellen (werden automatisch beim Start erstellt):

  • library_paths - Konfigurierbare Scan-Pfade (Serien/Filme)
  • library_series - Erkannte Serien mit TVDB-Verknuepfung
  • library_videos - Videos mit vollstaendigen ffprobe-Metadaten
  • tvdb_episode_cache - TVDB-Episoden-Cache

Features im Detail

Ordner-Scan

  • Konfigurierbare Scan-Pfade fuer Serien und Filme getrennt
  • Serien-Erkennung via Ordnerstruktur (S01E01, 1x02, Season/Staffel XX)
  • ffprobe-Analyse: Codec, Aufloesung, Bitrate, Audio-Spuren, Untertitel, HDR
  • Versteckte Ordner (.Trash-*) werden automatisch uebersprungen
  • UPSERT-Logik: unveraenderte Dateien werden nicht erneut analysiert
  • Scan-Fortschritt via WebSocket + Polling im UI
  • Verwaiste DB-Eintraege werden nach Scan automatisch bereinigt

Filter-System

  • Video-Codec: AV1, HEVC, H.264, MPEG-4
  • Aufloesung: 4K, 1080p, 720p, SD
  • Container: MKV, MP4, AVI, WebM, TS, WMV
  • Audio: Sprache (Deutsch, Englisch), Kanaele (Stereo, 5.1, 7.1)
  • 10-Bit Filter
  • Freitext-Suche im Dateinamen
  • Sortierung nach Name, Groesse, Aufloesung, Dauer, Codec, Datum
  • Pagination (50 Videos pro Seite)

TVDB-Integration

  • Authentifizierung via API Key + optionalem PIN
  • Serien-Suche mit Ergebnis-Vorschau (Poster, Beschreibung, Jahr)
  • Episoden-Abgleich: Soll (TVDB) vs. Ist (lokal) = fehlende Episoden
  • Poster-URLs, Beschreibung, Status (Continuing/Ended)
  • Episoden-Cache in DB (reduziert API-Aufrufe)

Duplikat-Finder

  • Erkennt gleiche Episoden in verschiedenen Formaten (z.B. AVI + WebM)
  • Vergleich ueber Serie + Staffel + Episode
  • Anzeige mit Codec, Aufloesung, Groesse fuer beide Versionen

Direkt-Konvertierung

  • "Conv"-Button bei jedem Video in der Bibliothek
  • Sendet Video direkt an die bestehende Konvertierungs-Queue
  • Optionale Preset-Auswahl

Admin-UI Erweiterung

  • TVDB API Key + PIN Eingabefelder
  • Scan-Pfad-Verwaltung (hinzufuegen, loeschen, einzeln scannen)
  • Letzter Scan-Zeitpunkt pro Pfad angezeigt

Statistik-Leiste

  • Gesamt-Videos, Serien-Anzahl, Speicherbedarf, Gesamtspielzeit
  • Codec-Verteilung, Aufloesungs-Verteilung

API Endpoints (17 neue)

  • GET/POST/DELETE /api/library/paths - Scan-Pfade CRUD
  • POST /api/library/scan - Komplett-Scan
  • POST /api/library/scan/{id} - Einzel-Scan
  • GET /api/library/scan-status - Scan-Fortschritt
  • GET /api/library/videos - Videos mit Filtern
  • GET /api/library/series - Alle Serien
  • GET /api/library/series/{id} - Serien-Detail mit Episoden
  • GET /api/library/series/{id}/missing - Fehlende Episoden
  • POST /api/library/series/{id}/tvdb-match - TVDB zuordnen
  • GET /api/library/duplicates - Duplikate finden
  • POST /api/library/videos/{id}/convert - Direkt konvertieren
  • GET /api/library/stats - Bibliotheks-Statistiken
  • GET /api/tvdb/search?q= - TVDB-Suche

Erster Scan-Lauf

  • 80 Serien erkannt, 5.260 Videos analysiert
  • ~3.7 TiB Gesamtgroesse, ~150 Tage Spielzeit
  • Codecs: H.264 (2.942), MPEG-4 (2.094), AV1 (199), HEVC (24)
  • Aufloesungen: SD (4.256), 720p (651), 1080p (300), 4K (52)
  • 9 Duplikat-Paare gefunden

[1.0.0] - 2026-02-20

Komplett-Neubau

Vollstaendiger Neubau des VideoKonverter-Servers als moderne Python/aiohttp-Anwendung mit Web-UI.

Kern-Features

  • aiohttp-Server mit Jinja2-Templating und HTMX
  • WebSocket fuer Echtzeit-Fortschritts-Updates
  • Queue-System mit MariaDB-Persistierung und parallelen Jobs
  • FFmpeg-Encoding mit GPU (Intel VAAPI) und CPU Support
  • 7 Encoding-Presets: GPU AV1/HEVC/H.264 + CPU SVT-AV1/x265/x264
  • Dashboard mit aktiven Jobs und Queue-Uebersicht
  • Admin-UI fuer Einstellungen, Presets, Encoding-Modus
  • Statistik-Seite mit Konvertierungs-Historie
  • File-Browser zum Auswaehlen von Dateien/Ordnern
  • Docker-Support mit GPU- und CPU-Profilen

Audio-Handling

  • Alle Spuren behalten (kein Downmix)
  • Konfigurierbare Sprach-Filter (DE, EN, Undefiniert)
  • Opus-Transcoding mit bitrate-basiertem Kanalmanagement
  • Surround-Kanaele (5.1, 7.1) bleiben erhalten

Technische Details

  • Async/Await durchgaengig (aiohttp, aiomysql, asyncio.subprocess)
  • MariaDB statt SQLite (Lock-Probleme in Docker behoben)
  • WebSocket-Broadcast fuer alle verbundenen Clients
  • Automatische GPU-Erkennung (VAAPI, vainfo)
  • Konfigurierbare Settings via YAML
  • Log-Rotation (7 Tage, 10 MiB pro Datei)