From 2c9f07dbb76b8a6476f214126c6b1559063a2b7a Mon Sep 17 00:00:00 2001 From: Homelab Cursor Date: Fri, 27 Mar 2026 14:54:47 +0100 Subject: [PATCH] docs: Save.TV Enricher Dokumentation (Enricher, Web-UI, Umbenennung) --- homelab-ai-bot/SAVETV_ENRICHER.md | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 homelab-ai-bot/SAVETV_ENRICHER.md diff --git a/homelab-ai-bot/SAVETV_ENRICHER.md b/homelab-ai-bot/SAVETV_ENRICHER.md new file mode 100644 index 00000000..088efd35 --- /dev/null +++ b/homelab-ai-bot/SAVETV_ENRICHER.md @@ -0,0 +1,47 @@ +# 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/` 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