- 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>
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
/adminnach/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-rowPadding/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_configProperty, Docstringapp/services/hls.py-_tv_setting()Methode, Config statt Konstanten, Max-Sessions-Check, konfigurierbare Timeoutsapp/server.py-config=self.configan HLSSessionManager uebergebenapp/routes/pages.py-/tv-adminRoute + Handler,POST /htmx/tv-settingsSave-Handlerapp/routes/tv_api.py- HLS-Sessions-API (GET/DELETE),watched_threshold_pctim Template-Contextapp/templates/base.html- Nav-Link "TV Admin" mit Active-Stateapp/templates/tv_admin.html- NEU: Komplettes TV-Admin-Template (Settings, Sessions, Users)app/templates/admin.html- TV-Sektion + JS komplett entferntapp/templates/tv/series_detail.html- Threshold-Variable statt hardcoded 95app/templates/library.html- Enter-Key-Handler auf Suchfeldapp/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 veryfastwenn GPU fehlschlaegt (Exit < 1s)
Geaenderte Dateien
Dockerfile- hls.js Library, VAAPI-Paketeentrypoint.sh- /tmp/hls Verzeichnisapp/services/hls.py- NEU: HLSSessionManager (600+ Zeilen)app/services/queue.py- SIGSTOP/SIGCONT Integrationapp/routes/tv_api.py- HLS-Endpunkteapp/static/tv/js/lib/hls.min.js- NEU: hls.js Libraryapp/static/tv/js/player.js- HLS-Integration, Codec-Erkennung, Kompakt-Popupapp/static/tv/css/tv.css- Loading-Spinner, Popup-Stylesapp/templates/tv/player.html- HLS-Player-Markupapp/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.pykonnte 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-Parsingapp/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:
_lastContentFocusmerkt 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: hiddenfuer bessere Render-Performance
Geaenderte Dateien (4 Dateien, +211/-21 Zeilen)
app/routes/library_api.py- On-Demand Poster-Download + Pillow-Resize-Cacheapp/routes/tv_api.py-_localize_posters()Helper fuer lokale Poster-URLsapp/static/tv/css/tv.css- Input-Editing-Style, Content-Visibilityapp/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
overviewundimage_urlhinzugefuegt (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 startenGET /api/library/thumbnail-status- Thumbnail-Fortschritt abfragen
Geaenderte Dateien (19 Dateien, +821/-122 Zeilen)
app/routes/library_api.py- Batch-Thumbnails + aiomysql Importapp/routes/tv_api.py- Gesehen-Status, Rating-Filter, Genre-Selectapp/server.py- Route-Registrierung Fixapp/services/auth.py- Watch-Status DB-Methodenapp/services/library.py- tvdb_episode_cache Spalten-Fix + Migrationapp/static/css/style.css- Redundanz-Zeilen-Styleapp/static/js/library.js- Redundanz-Erkennung, Batch-Thumbnailsapp/static/tv/css/tv.css- Player-Badges, Alphabet-Sidebar, Rating-Stylesapp/static/tv/i18n/de.json+en.json- Rating-Uebersetzungenapp/static/tv/js/player.js- Overlay-Sections, Button-Updatesapp/static/tv/js/tv.js- Gesehen-Buttons, Alphabet-Filterapp/templates/library.html- Thumbnails-Buttonapp/templates/tv/login.html- Auto-Fill-Erkennungapp/templates/tv/movies.html- Alphabet-Sidebar, data-letterapp/templates/tv/player.html- Audio/CC/Quality-Buttonsapp/templates/tv/profiles.html- Alle User anzeigenapp/templates/tv/series.html- Alphabet-Sidebar, data-letterapp/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.pymit Sprach-Loader und Fallback (DE) - Pro-User Spracheinstellung (
ui_langin 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_idCookie - Profilfarben (Avatar-Kreis) pro User konfigurierbar
- "Angemeldet bleiben" Option beim Login (permanente vs. 30-Tage-Sessions)
- Neue DB-Tabelle
tv_clientsfuer 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-themeAttribut 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/watchlistmit 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 Spaltetvdb_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 immerFalse)- Fix in
queue.py:job['delete_source']statt hartcodiertesFalse
Neue Dateien
app/services/i18n.py- Internationalisierungs-Serviceapp/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-Einstellungenapp/templates/tv/watchlist.html- Merkliste
Geaenderte Dateien
app/services/auth.py- Multi-User, Watchlist, Status, Rating, Client-Settings, 8 neue DB-Tabellen/Spaltenapp/services/tvdb.py- Episoden-Bilder, tvdb_score Extraktionapp/services/queue.py- delete_source Bugfixapp/routes/tv_api.py- ~20 neue Endpunkte (Settings, Profiles, Watchlist, Rating, Status, Filter)app/routes/library_api.py- Thumbnail-Endpunkt, Subtitle-Extraktionapp/server.py- i18n-Service Integrationapp/templates/tv/base.html- i18n, Theme-Support, Navigation erweitertapp/templates/tv/home.html- Watchlist-Bereich, i18napp/templates/tv/series.html- 3 Ansichten, Filter, Quellen-Tabs, Rating, i18napp/templates/tv/movies.html- 3 Ansichten, Filter, Quellen-Tabs, Rating, i18napp/templates/tv/series_detail.html- Rating, Watchlist, Episoden-Thumbnails, i18napp/templates/tv/movie_detail.html- Rating, Watchlist, Versionen, i18napp/templates/tv/player.html- Overlay-Menue, Naechste Episode, Audio/Sub-Auswahlapp/templates/tv/search.html- Suchverlauf, i18napp/templates/tv/login.html- "Angemeldet bleiben", i18napp/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 Usertv_episode_thumbnails- Episoden-Bild-Cache
Neue DB-Spalten (tv_users)
preferred_audio_lang,preferred_subtitle_lang,subtitles_enabledui_lang,series_view,movies_view,avatar_color,themeautoplay_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-EinstellungenGET /tv/profiles- ProfilauswahlPOST /tv/switch-profile- Profil wechselnGET /tv/watchlist- Merkliste anzeigenPOST /tv/api/watchlist- Merkliste TogglePOST /tv/api/rating- Bewertung setzen/loeschenPOST /tv/api/watch-status- Watch-Status aendernDELETE /tv/api/search/history- Suchverlauf loeschenGET /api/library/videos/{id}/thumbnail- Episoden-ThumbnailGET /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 TVDBget_pending_series(): Gruppierte Liste aller zuzuordnenden Serienassign_series_mapping(): TVDB-Zuordnung + Zielpfad-Berechnung- Neuer Item-Status
pending_seriesfuer 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-Zuordnungapp/static/js/library.js- Serien-Zuordnungs-UIapp/templates/library.html- import-series-assign Container
Neue API-Endpoints
GET /api/library/import/{id}/pending-series- Zuzuordnende Serien auflistenPOST /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/ueventstattvainfo VK_GPU_DEVICEUmgebungsvariable 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-KonfigdateienConfig._load_presets()mit Fallback aufcfg_defaultsfalls presets.yaml fehlt- Behebt leeres Preset-Dropdown auf Unraid bei frisch gemounteten Volumes
Unraid Docker-Template
- Neue
unraid/my-VideoKonverter.xmlfuer 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/librarystatt Dashboard
Geaenderte Dateien
Dockerfile- cfg_defaults Sicherung, entrypoint.sh statt CMDentrypoint.sh- NEU: Default-Config-Kopie bei Erststartdocker-compose.yml- VK_GPU_DEVICE renderD129, /dev/dri komplett, gpu_av1_10bit Defaultapp/config.py- _load_presets() mit cfg_defaults Fallbackapp/routes/pages.py- Startseite Redirect auf /libraryunraid/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_MAPin 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)
WebLogHandlerin api.py schreibt Log-Eintraege in den WebSocket-Manager
Audio-Fix
channelmap=channel_layout=5.1Filter fuer libopus bei EAC3/AC3 mit5.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) Fixapp/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 Integrationapp/routes/ws.py- Server-Log WebSocket-Broadcastdocker-compose.yml- VK_* ENV-Variablen
Neue API-Endpoints
GET /api/library/videos/{id}/stream- Video-Transcoding-StreamDELETE /api/library/videos/{id}- Video loeschen (DB + Datei)POST /api/library/import/{id}/assign- Import-Item manuell zuordnenPOST /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/importAPI 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_seriesListe im Job-Status fuer betroffene Ordner- Statt
reloadAllSections()nurloadSectionData(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-foldermit 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}/convertAPIGET /api/library/series/{id}/convert-statusfuer 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}/cleanupAPI
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=IDliefert 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-JobsPOST /api/library/delete-folder- Ordner loeschenPOST /api/library/series/{id}/convert- Serie konvertierenGET /api/library/series/{id}/convert-status- Codec-StatusPOST /api/library/series/{id}/cleanup- Alte Dateien loeschenGET /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"fuer sichere HTML-Attribute - 4 Stellen in
library.jskorrigiert (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()undopenTvdbModal()
Auto-Match Progress-Variable nicht im Scope
pollAutoMatchStatus()referenzierteprogressausstartAutoMatch()-Scope- Variable wird jetzt lokal in
pollAutoMatchStatus()definiert
TVDB-Sprache wurde nicht gespeichert
pages.pyHTMX-Save-Handler fehltetvdb_languageFeld- Hinzugefuegt:
settings["library"]["tvdb_language"] = data.get("tvdb_language", "deu")
Geaenderte Dateien
app/static/js/library.js- +escapeAttr(), +cleanSearchTitle(), 4x Attribut-Escaping, Progress-Fixapp/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/languagezum Lesen/Aendern der Sprache - Episoden-Refresh:
POST /api/library/tvdb-refresh-episodesaktualisiert alle gecachten Episoden - Alle TVDB-API-Aufrufe nutzen
self._languageProperty
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_moviesfuer 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-Lookupapp/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 Integrationapp/cfg/settings.yaml- tvdb_language, import-Settings, cleanup keep_extensions
Neue API-Endpoints
GET /api/tvdb/language- Aktuelle TVDB-SprachePUT /api/tvdb/language- TVDB-Sprache aendernPOST /api/library/tvdb-refresh-episodes- Alle Episoden-Caches aktualisierenPOST /api/library/tvdb-auto-match- Review-Vorschlaege sammelnPOST /api/library/tvdb-confirm- Einzelnen TVDB-Match bestaetigenGET /api/library/movies- Filme auflistenPOST /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 Bibliothekapp/templates/library.html- Bibliothek-Hauptseite mit Filter-Sidebarapp/static/js/library.js- Bibliothek-Frontend (Filter, TVDB, Scan-Progress)
Geaenderte Dateien
app/server.py- LibraryService + TVDBService Integrationapp/routes/pages.py- Route /library + TVDB-Settings speichernapp/templates/base.html- Nav-Link "Bibliothek" hinzugefuegtapp/templates/admin.html- TVDB-Settings + Scan-Pfad-Verwaltungapp/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-Verknuepfunglibrary_videos- Videos mit vollstaendigen ffprobe-Metadatentvdb_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 CRUDPOST /api/library/scan- Komplett-ScanPOST /api/library/scan/{id}- Einzel-ScanGET /api/library/scan-status- Scan-FortschrittGET /api/library/videos- Videos mit FilternGET /api/library/series- Alle SerienGET /api/library/series/{id}- Serien-Detail mit EpisodenGET /api/library/series/{id}/missing- Fehlende EpisodenPOST /api/library/series/{id}/tvdb-match- TVDB zuordnenGET /api/library/duplicates- Duplikate findenPOST /api/library/videos/{id}/convert- Direkt konvertierenGET /api/library/stats- Bibliotheks-StatistikenGET /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)