docker.videokonverter/CHANGELOG.md
data 4f151de78c feat: VideoKonverter v4.2 - TV Admin-Center, HLS-Streaming, Startseiten-Rubriken
- TV Admin-Center (/tv-admin): HLS-Settings, Session-Monitoring, User-Verwaltung
- HLS-Streaming: ffmpeg .ts-Segmente, hls.js, GPU VAAPI, SIGSTOP/SIGCONT
- Startseite: Rubriken (Weiterschauen, Neu, Serien, Filme, Schon gesehen)
- User-Settings: Startseiten-Rubriken konfigurierbar, Watch-Threshold
- UI: Amber/Gold Accent-Farbe, Focus-Ring-Fix, Player-Buttons einheitlich
- Cache-Busting: ?v= Timestamp auf allen CSS/JS Includes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 17:57:48 +01:00

36 KiB

Changelog

Alle relevanten Aenderungen am VideoKonverter-Projekt.

[4.2.0] - 2026-03-02

TV Admin-Center, konfigurierbare Settings & Bugfixes

Neue Admin-Seite fuer TV-Backend-Verwaltung. Alle HLS-Streaming- und Watch-Status-Parameter sind jetzt konfigurierbar statt hardcoded. HLS-Session-Monitoring mit Live-Uebersicht.

Neue Features

  • TV Admin-Center (/tv-admin): Eigene Verwaltungsseite fuer TV-Backend, erreichbar ueber Navigation
    • HLS-Streaming-Einstellungen: Segment-Dauer, Erstes-Segment-Dauer, Session-Timeout, Max-Sessions
    • Batch-Pause-Toggle: Konvertierung bei Stream pausieren (SIGSTOP/SIGCONT)
    • Watch-Status-Schwelle: Ab wieviel Prozent gilt eine Episode als gesehen (Default 90%, Plex-Standard)
    • HTMX-Formular mit Live-Speichern
  • HLS-Session-Monitoring: Tabelle mit aktiven Streaming-Sessions (Session-ID, Video, Qualitaet, Laufzeit, Inaktivitaet, Status)
    • Sessions einzeln beenden (Admin-Button)
    • Auto-Refresh alle 15 Sekunden
  • TV-User-Verwaltung verschoben: QR-Code + CRUD von /admin nach /tv-admin
  • Konfigurierbare HLS-Konstanten: Alle vorher hardcodierten Werte (Segment-Dauer 4s, Init-Dauer 1s, Timeout 5min, Max-Sessions 5) jetzt per Admin-UI und ENV-Variablen einstellbar
  • Max-Sessions-Limit: HLS-Session-Erstellung wird abgelehnt wenn Limit erreicht

Bugfixes

  • Library Suchfeld: Enter-Taste loest jetzt sofort den Filter aus (vorher: nur Input-Event)
  • Watch-Threshold: Von hardcoded 95% auf konfigurierbaren Wert geaendert (Default 90%)
  • TV-Homepage Cover: Kleinere Card-Groessen (180→150px Standard, 260→220px Wide) fuer bessere Uebersicht
  • Focus-Outline abgeschnitten: .tv-row Padding/Margin-Fix damit Focus-Ring bei Karten vollstaendig sichtbar

Neue ENV-Variablen

  • VK_TV_WATCHED_THRESHOLD - Gesehen-Schwelle in Prozent (Default: 90)
  • VK_TV_HLS_SEGMENT_SEC - HLS-Segment-Dauer in Sekunden (Default: 4)
  • VK_TV_HLS_TIMEOUT_MIN - HLS-Session-Timeout in Minuten (Default: 5)
  • VK_TV_HLS_MAX_SESSIONS - Max. gleichzeitige HLS-Sessions (Default: 5)
  • VK_TV_PAUSE_BATCH - Batch bei Stream pausieren (Default: true)

Neue API-Endpunkte

  • GET /api/tv/hls-sessions - Aktive HLS-Sessions auflisten (mit Video-Name aus DB)
  • DELETE /api/tv/hls-sessions/{sid} - HLS-Session beenden

Geaenderte Dateien (10 Dateien)

  • app/config.py - tv-Sektion in Defaults, 5 ENV-Mappings, tv_config Property, Docstring
  • app/services/hls.py - _tv_setting() Methode, Config statt Konstanten, Max-Sessions-Check, konfigurierbare Timeouts
  • app/server.py - config=self.config an HLSSessionManager uebergeben
  • app/routes/pages.py - /tv-admin Route + Handler, POST /htmx/tv-settings Save-Handler
  • app/routes/tv_api.py - HLS-Sessions-API (GET/DELETE), watched_threshold_pct im Template-Context
  • app/templates/base.html - Nav-Link "TV Admin" mit Active-State
  • app/templates/tv_admin.html - NEU: Komplettes TV-Admin-Template (Settings, Sessions, Users)
  • app/templates/admin.html - TV-Sektion + JS komplett entfernt
  • app/templates/tv/series_detail.html - Threshold-Variable statt hardcoded 95
  • app/templates/library.html - Enter-Key-Handler auf Suchfeld
  • app/static/tv/css/tv.css - Card-Groessen reduziert, Focus-Outline-Fix

[4.1.0] - 2026-03-02

HLS-Streaming, GPU-VAAPI-Fix, Player-Umbau

Natives HLS-Streaming ersetzt die fragile ffmpeg-Pipe. Intel A380 GPU wird korrekt fuer h264_vaapi-Transcoding genutzt. Player-UI komplett ueberarbeitet.

Neue Features

  • HLS-Streaming: ffmpeg erzeugt .ts-Segmente + m3u8-Playlist in /tmp/hls/{session_id}/
    • hls.js Library fuer Non-Safari/Tizen Browser
    • API: /tv/api/hls/start, /tv/api/hls/{sid}/playlist.m3u8, /tv/api/hls/{sid}/segment*.ts
    • Auto-Cleanup inaktiver Sessions (5 Min Timeout)
  • SIGSTOP/SIGCONT: Laufende Batch-Konvertierung wird waehrend HLS-Streaming pausiert und danach fortgesetzt
  • Codec-Erkennung: detectSupportedCodecs() prueft Browser-Faehigkeiten vor Stream-Start
  • Quality-Auswahl: UHD/HD/SD/LD im Player waehlbar
  • Loading-Spinner: Sichtbarer Ladeindikator waehrend Stream-Initialisierung
  • Kompakt-Popup: Statt grossem Overlay-Panel jetzt kompaktes Popup fuer Audio/Sub/Quality

GPU-Fix

  • Intel A380 VAAPI: Korrekter Pipeline-Aufbau -vaapi_device /dev/dri/renderD129 -vf 'format=nv12,hwupload' -c:v h264_vaapi
  • CPU-Fallback: Automatischer Wechsel auf libx264 -preset veryfast wenn GPU fehlschlaegt (Exit < 1s)

Geaenderte Dateien

  • Dockerfile - hls.js Library, VAAPI-Pakete
  • entrypoint.sh - /tmp/hls Verzeichnis
  • app/services/hls.py - NEU: HLSSessionManager (600+ Zeilen)
  • app/services/queue.py - SIGSTOP/SIGCONT Integration
  • app/routes/tv_api.py - HLS-Endpunkte
  • app/static/tv/js/lib/hls.min.js - NEU: hls.js Library
  • app/static/tv/js/player.js - HLS-Integration, Codec-Erkennung, Kompakt-Popup
  • app/static/tv/css/tv.css - Loading-Spinner, Popup-Styles
  • app/templates/tv/player.html - HLS-Player-Markup
  • app/templates/tv/series_detail.html - Tech-Info-Anzeige

[4.0.3] - 2026-03-01

JSON-Import-Fix, Player D-Pad-Navigation, Overlay-Bugfix

Bugfixes

  • JSON-Import: importer.py konnte bei fehlenden Keys in TVDB-Daten abstuerzen - robusteres .get() Handling
  • Player D-Pad-Navigation: Fernbedienung-Navigation im Player-Overlay funktionierte nicht korrekt auf Samsung TV
  • Overlay-Bugfix: Player-Overlay schloss sich nicht zuverlaessig beim Druecken der Zurueck-Taste

Geaenderte Dateien

  • app/services/importer.py - Robusteres JSON-Parsing
  • app/static/tv/js/player.js - D-Pad Keydown-Handler, Overlay-Close-Fix

[4.0.2] - 2026-03-01

TV-App: FocusManager-Fix, Poster-Caching, Performance

Bugfixes

  • FocusManager Navigation: Von der oberen Nav-Leiste nach unten navigieren springt jetzt direkt zu Content-Karten (Grid/Liste/Detail) statt bei Filter-Dropdowns und View-Switch-Buttons haengenzubleiben
  • Input/Select Editier-Modus: Textfelder und Select-Dropdowns werden erst nach Enter-Bestaetigung editierbar - D-Pad Navigation kann jetzt ueber Formularfelder hinweg navigieren ohne haengenzubleiben
  • Content-Focus-Speicher: _lastContentFocus merkt sich nur noch echte Content-Elemente (Karten, Listen-Eintraege), nicht mehr Filter/Controls

Performance

  • Poster-Caching mit Resize: Poster-Bilder werden beim ersten Abruf lokal in .metadata/ gespeichert und auf 300px Breite verkleinert (Pillow)
    • 80% kleinere Bilder (233KB → 47KB pro Poster)
    • Kein externer TVDB-Request mehr nach erstem Laden
    • Cache-Hit: ~10ms statt ~80ms
  • Content-Visibility: Versteckte View-Container nutzen content-visibility: hidden fuer bessere Render-Performance

Geaenderte Dateien (4 Dateien, +211/-21 Zeilen)

  • app/routes/library_api.py - On-Demand Poster-Download + Pillow-Resize-Cache
  • app/routes/tv_api.py - _localize_posters() Helper fuer lokale Poster-URLs
  • app/static/tv/css/tv.css - Input-Editing-Style, Content-Visibility
  • app/static/tv/js/tv.js - FocusManager: Input-Modus, Nav→Content Fix, initFocus Fix

[4.0.1] - 2026-03-01

TV-App: UX-Verbesserungen & Bugfixes

Neue Features

  • Alphabet-Seitenleiste: Vertikale A-Z Sidebar auf Serien-/Filme-Seite zum Filtern nach Anfangsbuchstabe
    • Buchstaben ohne Treffer automatisch abgedunkelt
    • Wird in Ordner-Ansicht versteckt
    • Responsive fuer Handy/Tablet
  • Genre-Select statt Chips: Genre-Filter als Dropdown-Element (uebersichtlicher bei vielen Genres)
  • Player-Buttons: Separate Symbole fuer Audio (Lautsprecher-SVG), Untertitel (CC-Badge), Qualitaet (HD-Badge)
    • CC-Button leuchtet wenn Untertitel aktiv, Quality-Badge zeigt aktuellen Modus (4K/HD/SD/LD)
    • Klick oeffnet Overlay direkt bei der entsprechenden Sektion
  • Gesehen-Markierung: Buttons fuer "Episode gesehen" und "Staffel gesehen" in Serien-Detail
  • Batch-Thumbnails: Neuer Button "Thumbnails" in der Bibliothek generiert alle fehlenden Episoden-Thumbnails im Hintergrund per ffmpeg
  • Redundanz-Markierung: Duplikate in der Episoden-Tabelle werden jetzt orange markiert mit "REDUNDANT"-Badge
    • Ranking: Neuerer Codec > kleinere Datei
  • Rating-Sortierung: Serien/Filme nach Bewertung sortierbar + Min-Rating-Filter

Bugfixes

  • tvdb_episode_cache: Fehlende Spalten overview und image_url hinzugefuegt (Episoden-Beschreibungen funktionierten nicht)
  • Login-Form Flash: Auto-Fill-Erkennung statt hartem Timeout (prueft 5x alle 200ms ob Browser Felder ausgefuellt hat)
  • Profil-Wechsel: Zeigt jetzt alle User an (nicht nur die mit aktiver Session)
  • Debug-Prints entfernt: Bereinigung aus server.py und tv_api.py
  • Route-Registrierung: TV-API-Routen in _setup_app() verschoben (verhinderte 500-Fehler)

Neue API-Endpunkte

  • POST /api/library/generate-thumbnails - Batch-Thumbnail-Generierung starten
  • GET /api/library/thumbnail-status - Thumbnail-Fortschritt abfragen

Geaenderte Dateien (19 Dateien, +821/-122 Zeilen)

  • app/routes/library_api.py - Batch-Thumbnails + aiomysql Import
  • app/routes/tv_api.py - Gesehen-Status, Rating-Filter, Genre-Select
  • app/server.py - Route-Registrierung Fix
  • app/services/auth.py - Watch-Status DB-Methoden
  • app/services/library.py - tvdb_episode_cache Spalten-Fix + Migration
  • app/static/css/style.css - Redundanz-Zeilen-Style
  • app/static/js/library.js - Redundanz-Erkennung, Batch-Thumbnails
  • app/static/tv/css/tv.css - Player-Badges, Alphabet-Sidebar, Rating-Styles
  • app/static/tv/i18n/de.json + en.json - Rating-Uebersetzungen
  • app/static/tv/js/player.js - Overlay-Sections, Button-Updates
  • app/static/tv/js/tv.js - Gesehen-Buttons, Alphabet-Filter
  • app/templates/library.html - Thumbnails-Button
  • app/templates/tv/login.html - Auto-Fill-Erkennung
  • app/templates/tv/movies.html - Alphabet-Sidebar, data-letter
  • app/templates/tv/player.html - Audio/CC/Quality-Buttons
  • app/templates/tv/profiles.html - Alle User anzeigen
  • app/templates/tv/series.html - Alphabet-Sidebar, data-letter
  • app/templates/tv/series_detail.html - Gesehen-Buttons, Episoden-Beschreibungen

[4.0.0] - 2026-03-01

TV-App: Vollwertiger Streaming-Client

Kompletter Ausbau der TV-App von einfachem Browser zu einem Netflix-aehnlichen Streaming-Client mit Multi-User, Einstellungen, Bewertungen, Merkliste und Internationalisierung.

Internationalisierung (i18n)

  • JSON-basiertes Uebersetzungssystem (static/tv/i18n/de.json, en.json)
  • Jinja2-Template-Funktion t('key.subkey') fuer alle Texte
  • Neuer Service app/services/i18n.py mit Sprach-Loader und Fallback (DE)
  • Pro-User Spracheinstellung (ui_lang in tv_users)
  • Alle Templates komplett auf i18n umgestellt

Multi-User & Profil-Wechsel

  • Quick-Switch: Profilauswahl-Screen (/tv/profiles) ohne erneutes Passwort
  • Mehrere User pro Geraet (Client), Sessions ueber vk_client_id Cookie
  • Profilfarben (Avatar-Kreis) pro User konfigurierbar
  • "Angemeldet bleiben" Option beim Login (permanente vs. 30-Tage-Sessions)
  • Neue DB-Tabelle tv_clients fuer Geraete-Einstellungen

Benutzer-Einstellungen (/tv/settings)

  • Menusprache (DE/EN), Audio-Sprache, Untertitel-Sprache
  • Theme-Auswahl (Dunkel/Mittel/Hell) mit Live-Vorschau
  • Serien- und Film-Ansicht (Raster/Liste/Detail)
  • Autoplay: An/Aus, Countdown-Dauer, Max. Folgen am Stueck
  • Suchverlauf loeschen, Fortschritte zuruecksetzen

Themes (Dark/Medium/Light)

  • CSS Custom Properties (--bg-primary, --text-primary, etc.)
  • data-theme Attribut auf <html>, gespeichert pro User
  • Dunkel (Standard), Mittel (grau), Hell (weiss)
  • Alle TV-Seiten, Player, Settings, Login unterstuetzen Themes

3 Ansichten (Grid / Liste / Detail)

  • Grid: Poster-Kacheln im responsiven Grid (wie bisher)
  • Liste: Kompakte 1-Zeile pro Eintrag mit Mini-Poster
  • Detail: Groesseres Poster + Beschreibung + Metadaten
  • View-Switcher (3 Icons oben rechts) auf Serien- und Filme-Seite
  • Einstellung wird pro User gespeichert (getrennt fuer Serien/Filme)

Episoden-Darstellung (verbessert)

  • Episoden-Thumbnails: TVDB-Bilder oder ffmpeg-Fallback (Frame bei 25%)
  • Episodenbeschreibung aus TVDB-Cache angezeigt
  • Watch-Progress-Balken pro Episode
  • Gesehen-Haekchen bei >= 95% Fortschritt
  • Episodennummer, Titel, Dauer, Codec-Info

Filter & Quellen-Tabs

  • Quellen-Tabs oben: [Alle] [Quelle 1] [Quelle 2] (aus library_paths)
  • Genre-Chips als Filter unterhalb der Tabs
  • Sortierung: Name (A-Z/Z-A), Neueste, Episoden-Anzahl, Bewertung
  • Alle Filter als URL-Parameter (?source=1&genre=Action&sort=title&rating=3)

Merkliste (Watchlist)

  • Herz-Button auf Serien-/Film-Detailseiten (Toggle)
  • Eigene Seite /tv/watchlist mit allen gemerkten Inhalten
  • Tabs fuer Serien/Filme auf der Merkliste-Seite
  • Neue DB-Tabelle tv_watchlist (user_id + series_id/movie_id)
  • Navigation: Merkliste als eigener Tab

Bewertungssystem (Rating)

  • 5-Sterne-Bewertung pro User auf Serien-/Film-Detailseiten
  • Klickbare Sterne mit Hover-Effekt + Entfernen-Button
  • Durchschnittsbewertung aller User angezeigt
  • TVDB-Score als externes Rating-Badge
  • Mini-Sterne in allen 3 Listen-Ansichten (Grid/Liste/Detail)
  • Rating-Filter (Min. Sterne) und Sortierung nach Bewertung
  • Neue DB-Tabelle tv_ratings, neue Spalte tvdb_score

Manueller Watch-Status

  • Pro Episode: Gesehen/Nicht gesehen Toggle
  • Pro Staffel: "Ganze Staffel als gesehen markieren"
  • Pro Serie: "Serie als gesehen markieren"
  • In Einstellungen: "Alle Fortschritte zuruecksetzen"
  • Neue DB-Tabelle tv_watch_status

Player-Verbesserungen

  • Naechste Episode: Overlay-Countdown (konfigurierbar 5-30 Sek.)
  • "Schaust du noch?" Dialog nach X Folgen (Netflix-Style)
  • Player-Overlay-Menue: Audio-Spur, Untertitel, Qualitaet, Geschwindigkeit
  • Audio-Spur-Auswahl aus verfuegbaren Tracks
  • Untertitel-Extraktion (SRT/ASS -> WebVTT) per ffmpeg
  • Fernbedienung-navigierbar (FocusManager)

Streaming-Qualitaeten

  • 4 Modi: UHD (Original), HD (1080p), SD (720p), Low (480p)
  • Video copy wenn Original <= Ziel-Aufloesung, sonst Re-Encoding
  • Audio nach Client-Config (Stereo/Surround/Original)

Suchverlauf

  • Letzte Suchen werden gespeichert und angezeigt
  • Loeschbar ueber Einstellungen oder einzeln

Queue-Bugfix

  • delete_source-Flag wird jetzt korrekt aus der DB geladen (war immer False)
  • Fix in queue.py: job['delete_source'] statt hartcodiertes False

Neue Dateien

  • app/services/i18n.py - Internationalisierungs-Service
  • app/static/tv/i18n/de.json - Deutsche Uebersetzungen (~200 Keys)
  • app/static/tv/i18n/en.json - Englische Uebersetzungen (~200 Keys)
  • app/templates/tv/profiles.html - Profilauswahl (Quick-Switch)
  • app/templates/tv/settings.html - Benutzer-Einstellungen
  • app/templates/tv/watchlist.html - Merkliste

Geaenderte Dateien

  • app/services/auth.py - Multi-User, Watchlist, Status, Rating, Client-Settings, 8 neue DB-Tabellen/Spalten
  • app/services/tvdb.py - Episoden-Bilder, tvdb_score Extraktion
  • app/services/queue.py - delete_source Bugfix
  • app/routes/tv_api.py - ~20 neue Endpunkte (Settings, Profiles, Watchlist, Rating, Status, Filter)
  • app/routes/library_api.py - Thumbnail-Endpunkt, Subtitle-Extraktion
  • app/server.py - i18n-Service Integration
  • app/templates/tv/base.html - i18n, Theme-Support, Navigation erweitert
  • app/templates/tv/home.html - Watchlist-Bereich, i18n
  • app/templates/tv/series.html - 3 Ansichten, Filter, Quellen-Tabs, Rating, i18n
  • app/templates/tv/movies.html - 3 Ansichten, Filter, Quellen-Tabs, Rating, i18n
  • app/templates/tv/series_detail.html - Rating, Watchlist, Episoden-Thumbnails, i18n
  • app/templates/tv/movie_detail.html - Rating, Watchlist, Versionen, i18n
  • app/templates/tv/player.html - Overlay-Menue, Naechste Episode, Audio/Sub-Auswahl
  • app/templates/tv/search.html - Suchverlauf, i18n
  • app/templates/tv/login.html - "Angemeldet bleiben", i18n
  • app/static/tv/js/player.js - Komplett ueberarbeitet (Overlay, Audio, Subs, Quality, Next)
  • app/static/tv/css/tv.css - Themes, 3 Ansichten, Rating, Watchlist, Player-Overlay (~500 neue Zeilen)

Neue DB-Tabellen

  • tv_clients - Geraete-Einstellungen (Sound, Qualitaet)
  • tv_watchlist - Merkliste pro User (Serien + Filme)
  • tv_watch_status - Manueller Watch-Status (Episode/Staffel/Serie)
  • tv_ratings - 5-Sterne-Bewertungen pro User
  • tv_episode_thumbnails - Episoden-Bild-Cache

Neue DB-Spalten (tv_users)

  • preferred_audio_lang, preferred_subtitle_lang, subtitles_enabled
  • ui_lang, series_view, movies_view, avatar_color, theme
  • autoplay_enabled, autoplay_countdown_sec, autoplay_max_episodes

Neue DB-Spalten (library_series/library_movies)

  • tvdb_score (FLOAT) - Externe TVDB-Bewertung

Neue API-Endpunkte

  • GET/POST /tv/settings - Benutzer-Einstellungen
  • GET /tv/profiles - Profilauswahl
  • POST /tv/switch-profile - Profil wechseln
  • GET /tv/watchlist - Merkliste anzeigen
  • POST /tv/api/watchlist - Merkliste Toggle
  • POST /tv/api/rating - Bewertung setzen/loeschen
  • POST /tv/api/watch-status - Watch-Status aendern
  • DELETE /tv/api/search/history - Suchverlauf loeschen
  • GET /api/library/videos/{id}/thumbnail - Episoden-Thumbnail
  • GET /api/library/videos/{id}/subtitles/{index} - Untertitel als WebVTT

[3.1.1] - 2026-02-28

Samsung TV Installation + Streaming-Fix

  • Tizen-App erfolgreich auf Samsung GQ65Q7FAAUXZG installiert
  • Streaming-Fix: movflags=frag_keyframe+empty_moov+default_base_moof
  • Samsung-signierte Zertifikate (nicht Tizen-Standard)

[3.1.0] - 2026-02-28

TV-App komplett

  • TV-App mit Login, Home, Serien, Filme, Player, Suche
  • Auth-System: bcrypt, DB-Sessions (30 Tage Cookie)
  • Pro-User Berechtigungen (Serien, Filme, Admin, erlaubte Pfade)
  • PWA: manifest.json + Service Worker
  • Tizen-App fuer Samsung Smart TVs
  • Admin-Seite: QR-Code + User-Verwaltung
  • Log-API: GET /api/log?lines=100&level=INFO

[3.0.0] - 2026-02-28

Bugfixes, Queue-Pause, Button-Audit

  • Queue-Pause-Funktion
  • Button-Audit aller UI-Elemente
  • Diverse Bugfixes

[2.9.0] - 2026-02-27

Import-System Neustrukturierung

Zweiphasiger Import-Workflow

  • Phase 1 (Analyse): Nur Dateiname-Erkennung (Serie/Staffel/Episode)
  • Phase 2 (Serien-Zuordnung): User ordnet erkannte Serien TVDB-Serien zu
  • Erst nach Zuordnung: Zielpfade berechnen, TVDB-Episodentitel holen, Konflikte pruefen
  • Status-Flow: pending -> analyzing -> pending_assignment -> ready -> importing -> done

Serien-Zuordnungs-UI

  • Neue Ansicht nach Analyse zeigt alle erkannten Serien
  • Pro Serie: Anzahl Dateien, Staffel-Range
  • TVDB-Suche und -Zuordnung pro Serie
  • Erst wenn alle Serien zugeordnet: Import freigeben

Backend-Aenderungen

  • analyze_job() in importer.py: Nur Dateinamen-Parsing, kein TVDB
  • get_pending_series(): Gruppierte Liste aller zuzuordnenden Serien
  • assign_series_mapping(): TVDB-Zuordnung + Zielpfad-Berechnung
  • Neuer Item-Status pending_series fuer noch nicht zugeordnete Dateien

Mindestgroesse fuer Episoden

  • Dateien < 100 MiB werden als Sample/Trailer markiert und uebersprungen
  • Verhindert Import von NFO-begleitenden Samples

Geaenderte Dateien

  • app/services/importer.py - Zweiphasiger Workflow, MIN_EPISODE_SIZE, assign_series_mapping()
  • app/routes/library_api.py - Neue Endpoints fuer Serien-Zuordnung
  • app/static/js/library.js - Serien-Zuordnungs-UI
  • app/templates/library.html - import-series-assign Container

Neue API-Endpoints

  • GET /api/library/import/{id}/pending-series - Zuzuordnende Serien auflisten
  • POST /api/library/import/{id}/assign-series - Serie TVDB zuordnen

[2.5.0] - 2026-02-24

GPU & Deployment

Intel A380 GPU-Konfiguration

  • GPU-Device auf renderD129 (Intel A380) korrigiert - renderD128 war AMD auf Eddys Unraid
  • GPU-Erkennung per /sys/class/drm/renderD*/device/uevent statt vainfo
  • VK_GPU_DEVICE Umgebungsvariable statt hardcoded Device-Mapping
  • AV1 10-Bit (gpu_av1_10bit) als Standard-Preset (bessere Qualitaet bei gleichem Speed)

Docker Entrypoint

  • Neues entrypoint.sh: Kopiert Default-Configs (presets.yaml, settings.yaml) automatisch ins gemountete cfg-Volume bei Erstinstallation
  • cfg_defaults/ Verzeichnis im Image als Backup der Default-Konfigdateien
  • Config._load_presets() mit Fallback auf cfg_defaults falls presets.yaml fehlt
  • Behebt leeres Preset-Dropdown auf Unraid bei frisch gemounteten Volumes

Unraid Docker-Template

  • Neue unraid/my-VideoKonverter.xml fuer Unraid WebGUI-Installation
  • Alle ENV-Variablen mit Defaults vorkonfiguriert
  • GPU-Device, Pfad-Mappings, DB-Konfiguration voreingestellt
  • ExtraParams fuer --group-add video --device=/dev/dri:/dev/dri

Startseite

  • Redirect von / auf /library statt Dashboard

Geaenderte Dateien

  • Dockerfile - cfg_defaults Sicherung, entrypoint.sh statt CMD
  • entrypoint.sh - NEU: Default-Config-Kopie bei Erststart
  • docker-compose.yml - VK_GPU_DEVICE renderD129, /dev/dri komplett, gpu_av1_10bit Default
  • app/config.py - _load_presets() mit cfg_defaults Fallback
  • app/routes/pages.py - Startseite Redirect auf /library
  • unraid/my-VideoKonverter.xml - NEU: Unraid Docker-Template

[2.4.0] - 2026-02-24

Video-Player & Streaming

Browser-Streaming

  • Video-Player mit ffmpeg-Transcoding-Stream (Video copy + Audio->AAC Stereo)
  • Unterstuetzt Formate die Browser nicht nativ abspielen (EAC3, DTS, AC3, TrueHD)
  • Fragmented MP4 mit frag_keyframe+empty_moov+faststart, chunked Transfer-Encoding
  • Endpoint: GET /api/library/videos/{id}/stream?t=0

Play-/Delete-Buttons

  • Play-Button bei jedem Video in Serien-, Film- und Ordner-Ansichten
  • Delete-Button zum Loeschen einzelner Videos (DB-Eintrag + Datei auf Disk)
  • Bestaetigungs-Dialog vor dem Loeschen

Import-System

Nicht-erkannte Dateien zuordnen

  • Modal fuer nicht-erkannte Dateien: Serie/Staffel/Episode manuell zuweisen oder ueberspringen
  • Import-Start blockiert solange ungeloeste Items vorhanden
  • Duplikat-Erkennung bei erneutem Scan nach Import

Technische Aenderungen

ENV-Variablen Refactoring

  • Alle Umgebungsvariablen mit VK_* Prefix (VK_DB_HOST, VK_MODE, VK_PORT etc.)
  • _ENV_MAP in config.py: Zentrales Mapping ENV -> Settings-Pfad mit Typ-Konvertierung
  • Rueckwaertskompatibilitaet per _ENV_ALIASES

WebSocket Server-Log Push

  • Server-Logs werden per WebSocket an alle Clients gepusht (statt HTTP-Polling)
  • WebLogHandler in api.py schreibt Log-Eintraege in den WebSocket-Manager

Audio-Fix

  • channelmap=channel_layout=5.1 Filter fuer libopus bei EAC3/AC3 mit 5.1(side) Layout
  • Behebt Encoder-Fehler bei Surround-Audio-Transcoding

Ordner-Loeschen Fix

  • Filebrowser: Ordner-Loeschen funktioniert jetzt korrekt

Geaenderte Dateien

  • app/config.py - ENV-Mapping, VK_* Prefix, Typ-Konvertierung (+180 Z.)
  • app/routes/library_api.py - Video-Stream, Video-Delete, Import-Zuordnung (+200 Z.)
  • app/services/importer.py - Zuordnungs-Modal, Duplikat-Erkennung (+160 Z.)
  • app/services/encoder.py - channelmap 5.1(side) Fix
  • app/services/library.py - Video-Delete, Rescan-Logik (+70 Z.)
  • app/static/js/library.js - Player, Play/Delete-Buttons, Import-Modal (+270 Z.)
  • app/static/css/style.css - Player-Styles, Button-Styles (+50 Z.)
  • app/templates/library.html - Player-Modal, Import-Zuordnungs-Modal (+60 Z.)
  • app/templates/base.html - WebSocket-Log-Push Integration
  • app/routes/ws.py - Server-Log WebSocket-Broadcast
  • docker-compose.yml - VK_* ENV-Variablen

Neue API-Endpoints

  • GET /api/library/videos/{id}/stream - Video-Transcoding-Stream
  • DELETE /api/library/videos/{id} - Video loeschen (DB + Datei)
  • POST /api/library/import/{id}/assign - Import-Item manuell zuordnen
  • POST /api/library/import/{id}/skip - Import-Item ueberspringen

[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)