Projekt aus Docker-Image videoconverter:2.9 extrahiert. Enthält zweiphasigen Import-Workflow mit Serien-Zuordnung. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
448 lines
18 KiB
Markdown
448 lines
18 KiB
Markdown
# Changelog
|
|
|
|
Alle relevanten Aenderungen am VideoKonverter-Projekt.
|
|
|
|
## [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)
|