# Changelog Alle relevanten Aenderungen am VideoKonverter-Projekt. ## [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 ``, 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 `"` 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)