homelab-brain/homelab-ai-bot/SAVETV_ENRICHER.md

47 lines
2.1 KiB
Markdown

# Save.TV Film-Enricher — Dokumentation
## Übersicht
Automatische KI-Anreicherung von Save.TV-Filmarchiv mit Beschreibungen, Darstellern, Land, Jahr und Genre.
## Komponenten
### 1. savetv_enrich.py (im Git)
- **Pfad CT 116:** `/opt/homelab-ai-bot/savetv_enrich.py`
- **Cronjob:** `0 */3 * * *` (alle 3 Stunden)
- **KI-Modell:** `qwen2.5:14b` (Primary), `qwen3:30b-a3b` (Fallback)
- **API:** Ollama native `/api/chat` mit `think=False`, `num_predict=1024`
- **Cache:** `/mnt/savetv/.filminfo_cache.json`
- **Schutz:** `fcntl.flock` File-Lock gegen parallele Instanzen
- **Sleep:** 0.5s zwischen Anfragen
### 2. savetv_web.py (im Git)
- **Pfad CT 116:** `/opt/homelab-ai-bot/savetv_web.py`
- **Port:** 8765, Service: `savetv-web`
- **Sortierung:** Neueste Filme zuerst (nach `DSTARTDATE` absteigend)
- **Anzeige:** Aufnahmedatum, KI-Beschreibung, Darsteller, Genre, Land, Jahr
- **Tailscale:** `http://100.123.47.7:8765`
- **Cloudflare:** `https://savetv.orbitalo.net`
### 3. savetv_extra_routes.py (NICHT im Git, nur lokal CT 116)
- **Pfad:** `/opt/savetv_extra_routes.py`
- **Umbenennung:** `_rename_to_jellyfin``Titel (Jahr).mp4`
- **Fuzzy-Match:** `_find_cache_match` normalisiert Sonderzeichen (Apostrophe, Doppelpunkte, Kommas) für Cache-Lookup
- **Downloads:** `/files/<filename>` zum Browser-Download
- **Wikidata:** Fallback für Jahr-Lookup wenn nicht im KI-Cache
## Erfahrungen / Gotchas
- `qwen2.5:14b` ist zuverlässiger für JSON-Output als `qwen3:30b-a3b`
- `qwen3` füllt `reasoning`-Feld statt `content` → native API mit `think=False` nutzen
- `_is_mostly_latin` Filter gegen chinesische Beschreibungen
- `_normalize_actors` wandelt dict-Actors `{"name": "..."}` in Strings um
- Parallele Enricher-Prozesse verursachen leere Ollama-Antworten → File-Lock pflicht
- Dateinamen verlieren Sonderzeichen (`I, Tonya``I Tonya`) → Fuzzy-Match nötig
## Änderungen 27.03.2026
- Enricher: File-Lock, Debug-Logging, Sleep 2.0→0.5s, atomarer Cache-Save
- Web-UI: Sortierung neueste zuerst, Aufnahmedatum in Film-Karten
- Extra-Routes: Fuzzy-Match für Jahres-Lookup bei Umbenennung
- 8 fehlende Jahreszahlen per KI nachgeholt und Dateien umbenannt