homelab-brain/ki-video/PLAN.md

592 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# KI-Video — Lokale Produktionspipeline
**Stand: 16.03.2026**
## Ziel
Lokale, praktisch nutzbare Produktionsstrecke fuer YouTube-Videos im Commentary-/Erklaerstil.
Kein Spielzeug-Demo, kein Forschungsprojekt: Thema rein → fertiges Video raus.
## Videoformat
Referenz-Stil: **"Geld & Imperien"** / **"Money & People"** (YouTube, geopolitische Commentary-Kanaele)
Beispielvideos:
- https://youtu.be/4XfhrrbklbM (24 Min, "Irans Hyperschall-Schlag", Geld & Imperien)
- https://youtu.be/MIkAOwJYaP0 (19 Min, "Irans Machtuebernahme", Money & People)
| Eigenschaft | Beschreibung |
|---|---|
| **Typ** | Commentary, Erklaervideos, Meinungs-/Analyseformate |
| **Laenge** | 10-30 Minuten |
| **Stil** | Professionelle Erzaehlstimme + Bilder + Karten + Infografiken + Text-Overlays + Ken-Burns |
| **Avatar** | **Sprechender KI-Avatar als PiP-Overlay (~20% Bildschirm, unten rechts)** |
| **Kein** | Echte Face-Cam, Realfilm, Hollywood-VFX |
### Avatar-Konzept (Picture-in-Picture)
```
┌─────────────────────────────────────────────────────────┐
│ │
│ HAUPTBILD (80%) │
│ Karten, Infografiken, Szenenbilder │
│ Ken-Burns, Zoom, Ueberblendungen │
│ │
│ │
│ │
│ ┌─────────────┐ │
│ │ │ │
│ │ AVATAR │ │
│ │ (~20%) │ │
│ │ lip-sync │ │
│ │ sprechend │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────┘
1920 x 1080 (Full HD)
Avatar-Overlay:
- Groesse: ~384 x 384 px (20% der Bildhoehe)
- Position: unten rechts, 40px Padding
- Hintergrund: halbtransparenter Kreis oder abgerundetes Rechteck
- Inhalt: Sprechende Person (SadTalker) synchron zum Voiceover
- Stil: professionell, Brustbild, neutraler Hintergrund
```
Der Avatar laeuft DURCHGEHEND waehrend des gesamten Videos.
Das Referenzbild fuer SadTalker ist ein einmalig generiertes Portraet (FLUX/SDXL).
Die Lippenbewegung wird aus dem XTTS-Voiceover-Audio abgeleitet.
### Anatomie eines 20-Min-Videos (Referenz)
| Element | Menge | Beschreibung |
|---|---|---|
| **Skript** | ~3500-5000 Woerter | Monolog, professioneller Ton, analytisch |
| **Szenenbilder** | 80-120 Stueck | Karten, Infografiken, Symbolbilder, Illustrationen |
| **Hero-Bilder** | 10-15 Stueck | Hochwertige Key-Visuals fuer Titelszenen/Kapitelwechsel |
| **Text-Overlays** | 20-40 Stueck | Zahlen, Namen, Fakten als Einblendung |
| **Avatar-Video** | 20 Min (durchgehend) | SadTalker lip-sync, PiP unten rechts, ~20% Bildschirm |
| **Voiceover** | 20 Min Audio | XTTS v2, natuerliche deutsche Maennerstimme |
| **Hintergrundmusik** | 1-2 Tracks | Ambient, dezent, lizenzfrei |
| **Uebergaenge** | ~80-120 | Ken-Burns, Ueberblendungen, Zoom-Ins |
## Produktions-Pipeline (5 GPUs parallel)
Kernidee: **Phase 1 ist seriell (Skript), Phase 2 nutzt alle 5 GPUs parallel, Phase 3 ist Assembly.**
Das macht aus 3-4 Stunden seriellem Rendern ca. 40-60 Minuten Gesamtzeit.
```
PHASE 1 — SKRIPT (ki-tower, seriell, ~10-15 Min)
══════════════════════════════════════════════════
Thema + Recherche-Notizen (manuell)
Qwen 14B (vLLM, :8401) → Skript (~4000 Woerter, 20 Min Lesezeit)
Qwen 14B → Szenenplan: 100 Szenen mit je:
- Bildprompt (EN, fuer FLUX/SDXL)
- Szenentyp (hero / standard / infografik / karte)
- Text-Overlay (falls noetig)
- Geschaetzte Dauer (Sekunden)
Skript + Szenenplan als JSON → Orchestrator
PHASE 2a — TTS-VOICEOVER (3080 #0, ~15 Min, startet sofort)
═════════════════════════════════════════════════════════════
Orchestrator schickt Skript-Text an XTTS v2 Worker.
Output: 20 Min deutsches Voiceover als WAV-Datei.
Muss VOR SadTalker fertig sein (Avatar braucht Audio als Input).
PHASE 2b — PARALLEL-PRODUKTION (alle 5 GPUs, ~30-40 Min)
══════════════════════════════════════════════════════════
┌──────────────────────────────────────────────────────────────────┐
│ ORCHESTRATOR (ki-tower CPU) │
│ Verteilt Jobs, pollt Status, sammelt Ergebnisse │
└──────┬──────────┬──────────┬──────────┬──────────┬───────────────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌──────────┐┌──────────┐┌──────────┐┌──────────┐┌──────────┐
│ 3090 ││ 3080 #0 ││ 3080 #1 ││ 3080 #2 ││ 3080 #3 │
│ ki-tower ││ Worker ││ Worker ││ Worker ││ Worker │
│ ││ ││ ││ ││ │
│ FLUX.1 ││ SDXL ││ SDXL ││ SadTalker││ ESRGAN │
│ Hero- ││ Standard-││ Standard-││ AVATAR ││ Upscale │
│ Bilder ││ Szenen ││ Szenen ││ lip-sync ││ + Whisper│
│ 15 Stk ││ ~50 Stk ││ ~50 Stk ││ 20 Min ││ Untertit.│
│ ~15 Min ││ ~25 Min ││ ~25 Min ││ ~25 Min ││ ~10 Min │
└──────────┘└──────────┘└──────────┘└──────────┘└──────────┘
Ablauf 3080 #0: XTTS v2 Voiceover (15 Min) → sobald fertig → SDXL Bilder (10 Min)
Ablauf 3080 #2: Wartet auf Voiceover → SadTalker Avatar (25 Min, GPU-intensivster Job)
Alle anderen starten sofort parallel.
Engpass = SadTalker Avatar-Rendering (~25 Min fuer 20 Min Video).
SadTalker-Details:
- Input: Referenz-Portraet (einmalig generiert) + Voiceover-Audio (aus Phase 2a)
- Output: 20 Min Video (384x384 px) mit synchroner Lippenbewegung
- Verarbeitung in ~30s-Clips, sequentiell auf 3080 #2
- ~6 GB VRAM (passt auf 10 GB 3080)
- Laengster Einzeljob → bestimmt Gesamtdauer Phase 2
PHASE 3 — ASSEMBLY + EXPORT (ki-tower, seriell, ~15-20 Min)
════════════════════════════════════════════════════════════
FFmpeg: Bilder + Ken-Burns + Zoom + Ueberblendungen → Hintergrund-Video
FFmpeg: Avatar-PiP compositen (unten rechts, 384x384, halbtransparenter Rahmen)
│ ┌─────────────────────────────────────────────┐
│ │ Hauptbild (Szene/Karte/Infografik) │
│ │ │
│ │ │
│ │ ┌──────────┐ │
│ │ │ Avatar │ │
│ │ │ lip-sync │ │
│ │ └──────────┘ │
│ └─────────────────────────────────────────────┘
FFmpeg: Audio-Mix (Voiceover + Hintergrundmusik + Lautstaerke-Normalisierung)
FFmpeg: Text-Overlays (Fakten, Zahlen, Namen) einbrennen
FFmpeg: Untertitel (SRT aus Whisper) einbetten
NVENC: H.264/H.265 Encoding → fertiges MP4 (1080p)
Export: Thumbnail (FLUX hero-Bild, upscaled) + Titel + Description + Tags
```
### Zeitschaetzung: 20-Minuten-Video mit Avatar
| Phase | Dauer | GPUs aktiv | Engpass |
|---|---|---|---|
| 1. Skript + Szenenplan | ~15 Min | 1 (3090) | LLM-Inferenz |
| 2a. TTS-Voiceover | ~15 Min | 1 (3080 #0) | XTTS v2 Inferenz |
| 2b. Parallel-Produktion | ~25 Min | 5 (alle) | **SadTalker Avatar** |
| 3. Assembly + Export | ~20 Min | 1 (3090 NVENC) | FFmpeg PiP-Compositing |
| **Gesamt** | **~75 Min** | | |
SadTalker ist jetzt der Engpass (statt Bildgenerierung).
20 Min Lip-Sync-Video auf 3080 = ~25 Min Renderzeit.
Zum Vergleich: Seriell auf nur 1 GPU = ~5-6 Stunden.
### GPU-Auslastung waehrend Phase 2
| GPU | Schritt 1 | Dauer | Schritt 2 (wenn fertig) | Dauer | Output |
|---|---|---|---|---|---|
| **3090** | FLUX.1-dev Hero-Bilder | ~15 Min | idle / Thumbnail-Varianten | ~5 Min | 15 Key-Visuals |
| **3080 #0** | **XTTS v2 Voiceover** | ~15 Min | **SDXL Restbilder** | ~10 Min | 20 Min Audio + ~20 Bilder |
| **3080 #1** | SDXL Standard-Szenen | ~25 Min | — | — | ~50 Szenenbilder |
| **3080 #2** | (wartet auf Audio) | — | **SadTalker Avatar** | ~25 Min | 20 Min Lip-Sync-Video (384x384) |
| **3080 #3** | Real-ESRGAN Upscaling | ~5 Min | Whisper → SRT | ~5 Min | Upscaled Bilder + Untertitel |
Ablauf-Kette: **TTS muss vor SadTalker fertig sein** (Audio → Lip-Sync).
Deshalb: 3080 #0 macht zuerst TTS, dann SDXL. 3080 #2 wartet auf Audio, dann SadTalker.
Alle anderen GPUs starten sofort.
## Konkretes Beispiel: "Irans Hyperschall-Schlag" (24 Min)
So wuerde ein Video im Stil von "Geld & Imperien" durch die Pipeline laufen:
```
INPUT:
Thema: "Irans neue Hyperschallrakete — geopolitische und wirtschaftliche Folgen"
Recherche: 3-4 Quellenlinks, eigene Stichpunkte
PHASE 1 — Qwen 14B generiert:
├── Skript: ~4500 Woerter, 24 Min Lesezeit
│ "Was ich euch heute zeige, veraendert die Welt..."
│ Kapitel: Waffentechnik → Strategie → Oel → Europa → Fazit
└── Szenenplan (JSON): 105 Szenen
Szene 001: { typ: "hero", prompt: "dramatic missile launch, night sky, photorealistic",
overlay: "Mach 15 — Irans Hyperschallwaffe", dauer: 8s }
Szene 002: { typ: "karte", prompt: "middle east map, iran highlighted, military bases marked",
overlay: null, dauer: 12s }
Szene 003: { typ: "standard", prompt: "patriot missile defense system, desert, realistic photo",
overlay: "Patriot-System: $3 Mio pro Abfangrakete", dauer: 10s }
...
Szene 105: { typ: "hero", prompt: "world map with shifting power balance, dramatic lighting",
overlay: "Die neue Weltordnung", dauer: 15s }
PHASE 2a — TTS zuerst (3080 #0, 15 Min):
3080 #0: XTTS v2 → 24 Min deutsches Voiceover (WAV)
PHASE 2b — Alles parallel (alle 5 GPUs, 25 Min):
3090: 15 Hero-Bilder (FLUX.1-dev) → Titel, Kapitelwechsel, Outro
3080 #0: (TTS fertig) → 30 Standardbilder (SDXL) → Militaer, Wirtschaft
3080 #1: 50 Standardbilder (SDXL) → Karten, Infografiken, Symbolbilder
3080 #2: SadTalker → 24 Min Avatar-Video (384x384, lip-sync aus Voiceover)
3080 #3: Upscaling aller Bilder auf 1920x1080 + Whisper → Untertitel-SRT
PHASE 3 — Assembly (20 Min):
FFmpeg: 105 Szenen × Ken-Burns/Zoom → Hintergrund-Videospur
FFmpeg: Avatar-PiP compositen (unten rechts, 20%, halbtransparenter Rahmen)
FFmpeg: Audio-Mix (Voiceover + Ambient-Musik)
FFmpeg: Text-Overlays + Untertitel einbrennen
NVENC: H.265 Encoding
Output: "irans-hyperschall-2026-03.mp4" (1080p, ~1.5 GB)
Bonus: Thumbnail + YouTube-Description + Tags
```
Gesamtzeit: **~75 Minuten** fuer ein 24-Minuten-Video mit sprechendem Avatar. Fertig zum Hochladen.
## Hardware
### ki-tower — Hauptmaschine (Muldenstein, geplant)
| Eigenschaft | Wert |
|---|---|
| **CPU** | AMD Ryzen 7 7700 (8C/16T) |
| **RAM** | 64 GB DDR5 |
| **GPU** | NVIDIA RTX 3090 (24 GB VRAM) |
| **Storage** | 1 TB NVMe |
| **OS** | Debian 12 + Docker + CUDA |
| **Logischer Name** | ki-tower |
| **Rolle** | Chef. Alle schweren Aufgaben, Orchestrierung, Hauptpfad. |
### gpu-worker — NVIDIA-Rig (Muldenstein, geplant) — PRIMAERER WORKER
| Eigenschaft | Wert |
|---|---|
| **GPUs** | 4x NVIDIA RTX 3080 (je 10 GB GDDR6X, PCIe 4.0 x16) |
| **CUDA** | Voll unterstuetzt, identischer Stack wie ki-tower |
| **OS** | Debian 12 + Docker + CUDA |
| **Logischer Name** | gpu-worker |
| **Rolle** | Produktiver Worker-Pool. CUDA-nativ, kein Workaround noetig. |
| **Vorteil** | Selber Code wie auf der 3090 — kein Portierungsaufwand. |
### gpu-reserve — AMD-Rig (Muldenstein, Reserve)
| Eigenschaft | Wert |
|---|---|
| **GPUs** | 8x AMD RX 6600 XT Dual (je 8 GB GDDR6, PCIe 4.0 x8) |
| **ROCm** | Inoffiziell (gfx1032, Workaround noetig) |
| **Logischer Name** | gpu-reserve |
| **Rolle** | Reserve/Nebenrolle. Nur Whisper + CPU-Batch wenn 3080-Rig ausgelastet. |
| **Status** | Zurueckgestellt. Entscheidung nach 3080-Rig-Aufbau. Alternative: verkaufen. |
## Rollenverteilung — Was laeuft wo
### ki-tower (RTX 3090) — Hauptpfad
| Aufgabe | Modell | VRAM | Anmerkung |
|---|---|---|---|
| **Skripte** | Qwen 2.5 14B (Q5) | ~12 GB | Default. 32B nur wenn 14B nachweislich nicht reicht. |
| **Hero-Bilder** | FLUX.1-dev | ~12 GB | Hochwertige Key-Visuals (Kapitelwechsel, Titel, Outro) |
| **Compositing** | FFmpeg | CPU | Ken-Burns + Avatar-PiP + Overlays + Audio-Mix |
| **Encoding** | FFmpeg + NVENC | ~1 GB | Hardware-beschleunigt |
| **Orchestrator** | Python | CPU | Steuert alle Schritte, verteilt Jobs an Worker |
Auf der 3090 nur: LLM + FLUX + Assembly. Keine TTS, kein Avatar — das machen die 3080er.
### gpu-worker (4x RTX 3080) — Produktive Worker-Jobs
| 3080 | Primaeraufgabe | VRAM | Sekundaeraufgabe | Anmerkung |
|---|---|---|---|---|
| **#0** | **XTTS v2** (Voiceover) | ~4 GB | → SDXL Restbilder (~7 GB) | TTS zuerst, dann Bilder |
| **#1** | **SDXL** (Standard-Szenen) | ~7 GB | — | Bildgenerierung durchgehend |
| **#2** | **SadTalker** (Avatar) | ~6 GB | — | Lip-Sync, laengster Job, wartet auf Audio |
| **#3** | **Real-ESRGAN** + **Whisper** | ~3 GB | Thumbnail-Varianten | Upscaling + Untertitel |
Feste Zuordnung pro Video-Produktion. Kein dynamisches Scheduling.
Kernvorteil: Identischer CUDA-Stack wie ki-tower.
### gpu-reserve (8x RX 6600 XT) — Reserve/Nebenrolle
| Aufgabe | VRAM | Karten | Anmerkung |
|---|---|---|---|
| **Whisper** (whisper.cpp) | ~1.5 GB | 1-2 | Einziger gut getesteter AMD-Usecase |
| **CPU-Batch-Jobs** | — | — | Piper TTS, FFmpeg, Text-Vorverarbeitung |
Realistisch nutzbar: 1-2 Karten fuer Whisper, Rest bringt kaum Mehrwert.
Empfehlung: Erst aufbauen wenn 3080-Rig voll ausgelastet. Alternative: verkaufen.
### NICHT auf das AMD-Rig
| Aufgabe | Warum nicht |
|---|---|
| SDXL / Bildgenerierung | ROCm inoffiziell, CUDA-Version laeuft auf 3080 besser |
| XTTS v2 | PyTorch + ROCm ungetestet, auf 3080 CUDA-nativ |
| SadTalker | CUDA-only |
| Qwen / LLMs | PyTorch + ROCm + Textgen = Frust auf inoffizieller HW |
| Irgendwas Produktionskritisches | Workaround-basierte HW darf Produktion nicht blockieren |
## Hardware-Priorisierung: 3080 vs. 6600 XT
**Klare Rangfolge:**
| Rang | Hardware | Rolle | Begruendung |
|---|---|---|---|
| 1 | **RTX 3090** (ki-tower) | Chef | 24 GB VRAM, schwere Modelle, Orchestrierung |
| 2 | **4x RTX 3080** (gpu-worker) | Produktiver Worker | CUDA-nativ = selber Code wie ki-tower. 10 GB VRAM pro Karte reicht fuer SDXL, XTTS, SadTalker, Whisper. Kein Portierungsaufwand. |
| 3 | **8x RX 6600 XT** (gpu-reserve) | Reserve / ggf. verkaufen | ROCm inoffiziell. Jeder Usecase, den die 6600 XT kann, kann die 3080 besser + einfacher. Einziger Vorteil: Kartenanzahl fuer massiv-paralleles Whisper. Realistisch nicht gebraucht. |
**Warum 4x 3080 > 8x 6600 XT:**
- Gleicher Software-Stack wie ki-tower (CUDA). Code einmal schreiben, ueberall deployen.
- 10 GB VRAM vs. 8 GB VRAM. Klingt wenig, macht bei SDXL/SadTalker den Unterschied.
- PyTorch + CUDA ist getestet, stabil, dokumentiert. ROCm auf Navi 23 ist Kampf.
- Weniger Karten = weniger Strom, weniger Kuehlung, weniger moegliche Fehlerquellen.
- 4 parallele CUDA-Worker decken den gesamten Bedarf ab.
**Empfehlung AMD-Rig:**
Nicht aktiv aufbauen. Falls 3080-Rig irgendwann an Kapazitaetsgrenzen stoesst: 1-Karten-Test mit Whisper.
Wenn selbst das nicht lohnt: verkaufen und in NVMe-Storage oder RAM investieren.
## Worker-Architektur
```
ki-tower (3090, Chef) gpu-worker (4x 3080, Worker) gpu-reserve (RX 6600 XT)
┌─────────────────────────┐ ┌──────────────────────────────┐ ┌──────────────────┐
│ Orchestrator (Python) │ │ Debian 12 + Docker + CUDA │ │ Reserve/Whisper │
│ ├── Job Queue (SQLite) │ Tailscale │ │
│ ├── /api/submit-job │◄────────────►│ GPU #0: xtts+sdxl :8501 │ │ Whisper :8601 │
│ ├── /api/job-status │ │ GPU #1: sdxl-worker :8502 │ │ CPU-Batch :8602 │
│ └── /api/get-result │ Tailscale │ GPU #2: sadtalker :8503 │ │ (nur bei Bedarf)│
│ │ │ GPU #3: esrgan+whisper :8504 │ └──────────────────┘
│ Qwen 14B (vLLM) :8401 │ │ │
│ FLUX.1 (ComfyUI):8402 │ │ 10 GB VRAM pro Karte │
│ FFmpeg (lokal) │ │ CUDA-nativ, kein Workaround │
└─────────────────────────┘ └──────────────────────────────┘
```
Prinzipien:
- 1 Container = 1 GPU = 1 Aufgabe. Feste Zuordnung, kein dynamisches Scheduling.
- SQLite als Job-Queue. Ein User, nicht tausend. Eine Datei reicht.
- HTTP-APIs pro Worker. Orchestrator ruft per REST auf, pollt Status.
- Kein Service-Mesh, kein Kubernetes. Tailscale verbindet die zwei Maschinen.
## VRAM-Budget (ki-tower, sequentiell)
```
Schritt 1: Skript → Qwen 14B → ~12 GB VRAM
Schritt 2: Bilder → FLUX.1-dev → ~12 GB VRAM
Schritt 3: TTS → Piper (CPU) → 0 GB VRAM
Schritt 4: Compositing → FFmpeg (CPU) → 0 GB VRAM
Schritt 5: Encoding → NVENC → ~1 GB VRAM
```
Mit Qwen 14B statt 32B: kein VRAM-Flush zwischen Schritt 1 und 2 noetig.
Geschaetzte Produktionszeit:
- v1 (nur ki-tower, seriell, ohne Avatar): ~2-3 Stunden pro 10-Min-Video
- v1.5 (5 GPUs parallel, mit Avatar): ~75 Min pro 20-Min-Video
- Langfristig mit Optimierung: ~60 Min pro 20-Min-Video
## Nicht-Ziele
- Kein Forschungsprojekt
- Keine Bastelwiese ohne Ergebnis
- Keine Dauerabhaengigkeit von Cloud-Abos
- Keine Architektur die nur auf dem Papier funktioniert
- Keine ueberkomplizierte Proxmox-/VM-Orgie auf dem Rig
- Kein Schoenreden von AMD-ROCm-Limitierungen
## v1 — Minimal Viable Pipeline (nur ki-tower)
v1 beweist: die Pipeline funktioniert auf einer Maschine. Schritte manuell anstossen.
```
v1 Pipeline (alles auf ki-tower, seriell):
Thema (manuell)
Qwen 14B → Skript + Szenenplan (vLLM, :8401)
FLUX.1-dev → 30-50 Bilder (ComfyUI, :8402) ← seriell, ~30-45 Min
Piper TTS → Voiceover (CPU, :8504) ← parallel moeglich
FFmpeg → Ken-Burns + Audio + Overlays → fertiges MP4
```
Was v1 NICHT hat:
- Kein 3080 Worker-Rig (alles seriell auf 3090)
- Keinen Avatar
- Keine XTTS v2 (Piper reicht fuer v1)
- Keine automatische Orchestrierung
- Geschaetzte Produktionszeit: ~2-3 Stunden pro 10-Min-Video
Erfolgskriterium v1: Ein 10-Minuten-Video komplett lokal produziert.
## v1.5 — 5-GPU-Parallelisierung + Avatar (ki-tower + 3080-Rig)
v1.5 ist der grosse Sprung: **5 GPUs parallel + sprechender Avatar.**
```
v1.5 Pipeline (5 GPUs parallel, mit Avatar):
Thema (manuell)
Qwen 14B → Skript + Szenenplan JSON (ki-tower)
Orchestrator Phase 2a (TTS zuerst):
└── 3080 #0: XTTS v2 → 20 Min deutsches Voiceover (WAV)
Orchestrator Phase 2b (alle 5 GPUs parallel):
├── 3090: FLUX.1-dev → Hero-Bilder
├── 3080 #0: (TTS fertig) → SDXL Restbilder
├── 3080 #1: SDXL → Standard-Szenen
├── 3080 #2: SadTalker → 20 Min Avatar-Video (lip-sync, 384x384)
└── 3080 #3: Real-ESRGAN + Whisper → Upscaling + Untertitel
FFmpeg → Assembly:
├── Hintergrund: Bilder + Ken-Burns + Zoom
├── Avatar-PiP: unten rechts, ~20% Bildschirm, halbtransparenter Rahmen
├── Audio-Mix: Voiceover + Hintergrundmusik
├── Text-Overlays + Untertitel
└── NVENC Export → MP4 + Thumbnail + YouTube-Metadaten
```
Was v1.5 bringt:
- **Sprechender Avatar** als PiP durchgehend im Video (~20% Bildschirm)
- XTTS v2 statt Piper (natuerlichere Stimme, Voice-Cloning)
- Produktionszeit: **~75 Min** statt ~5-6 Stunden fuer 20-Min-Video
- Automatische Untertitel
- Orchestrator verteilt und sammelt automatisch
Erfolgskriterium v1.5: 20-Min-Video mit Avatar in unter 90 Minuten produziert.
### Avatar-Referenzbild (einmalig)
Das Portraet fuer SadTalker wird EINMAL generiert und dann fuer alle Videos wiederverwendet.
So entsteht ein konsistenter "Sprecher" / "Moderator" fuer den Kanal.
```
Generierung (einmalig, auf 3090 mit FLUX.1-dev):
Prompt: "professional male news anchor, german, mid-30s, neutral expression,
chest up portrait, clean studio background, photorealistic, 8k"
Output: referenz-avatar.png (512x512)
Nachbearbeitung: ggf. manuelles Feintuning in GIMP/Photoshop
SadTalker nutzt dann:
- referenz-avatar.png (festes Bild)
- voiceover.wav (pro Video neu)
→ Output: avatar-video.mp4 (384x384, 25fps, lip-sync)
```
## v2 — Erweiterungen (nach funktionierender v1.5)
| Feature | Abhaengigkeit |
|---|---|
| **Avatar-Varianten** | Verschiedene Gesichtsausdruecke/Posen je Szene |
| **Mehrere Sprecher** | Zweiter Avatar fuer Interview-/Dialog-Format |
| **Qwen 32B** statt 14B | Nur wenn 14B-Skripte nachweislich zu schwach |
| **Batch-Produktion** | Mehrere Videos in Queue, automatisch nacheinander |
| **YouTube-Upload-API** | Automatischer Upload mit Metadaten |
## v3+ — Spaeter
| Feature | Anmerkung |
|---|---|
| YouTube-Upload-Automation | Manueller Upload = 2 Klicks. Lohnt erst bei >3 Videos/Woche |
| Multi-User / geklonte Instanzen | Erst ein funktionierendes Produkt haben |
| Prompt-Templates Bibliothek | Waechst organisch mit der Produktion |
| Research-Hub-Integration | Themenvorschlaege automatisch aus RSS/News |
## Umsetzungsreihenfolge
```
PHASE 1 — ki-tower Grundinstallation (Woche 1-2)
├── Debian 12 + NVIDIA-Treiber + CUDA 12 + Docker
├── vLLM + Qwen 2.5 14B → erster Skript-Test
└── Ergebnis: "Ich kann lokal ein Skript generieren"
PHASE 2 — Bildgenerierung (Woche 3-4)
├── ComfyUI + FLUX.1-dev in Docker
├── Workflow: Skript-Szene → Bildprompt → Bild
└── Ergebnis: "Ich kann passende Bilder zu einem Skript erzeugen"
PHASE 3 — TTS + Assembly (Woche 5)
├── Piper TTS in Docker (CPU)
├── FFmpeg-Pipeline: Bilder + Audio → Video mit Ken-Burns
└── Ergebnis: "Erstes komplettes Video, lokal produziert"
PHASE 4 — Polieren + erstes echtes Video (Woche 6)
├── Prompt-Templates fuer Skripte verfeinern
├── FFmpeg-Presets fuer verschiedene Szenentypen
├── Erstes Video auf YouTube hochladen
└── Ergebnis: "v1 steht und produziert"
PHASE 5 — 3080-Rig Aufbau + v1.5 mit Avatar (Woche 7-10)
├── Debian 12 + NVIDIA-Treiber + CUDA + Docker (selber Stack wie ki-tower)
├── 4 Worker: XTTS+SDXL, SDXL, SadTalker, ESRGAN+Whisper
├── Tailscale + Job-API anbinden
├── SadTalker Avatar einrichten:
│ ├── Referenz-Portraet generieren (FLUX auf 3090)
│ ├── SadTalker Docker-Container auf 3080 #2
│ ├── Lip-Sync Pipeline: Audio → 30s-Clips → zusammenfuegen
│ └── Test: 5-Min-Testvideo mit Avatar-PiP
├── XTTS v2 statt Piper (bessere Stimme, Voice-Cloning)
├── FFmpeg PiP-Compositing: Avatar unten rechts, ~20% Bildschirm
├── Python-Orchestrator: TTS → SadTalker → Bilder → Assembly
└── Ergebnis: "20-Min-Video mit Avatar in unter 90 Min, 5 GPUs parallel"
PHASE 6 — v2 Features (nach stabiler v1.5-Produktion)
├── Avatar-Varianten: verschiedene Ausdruecke/Posen je Kapitel
├── Automatische Thumbnail-Generierung (FLUX hero + Text-Overlay)
├── YouTube-Metadaten-Generator (Titel, Description, Tags aus Skript)
├── Batch-Produktion: mehrere Videos in Queue
└── Ergebnis: "Semi-automatische Videoproduktion mit Worker-Pool"
PHASE 7 — AMD-Rig Entscheidung (optional, spaeter)
├── Bewertung ob 3080-Rig Kapazitaet reicht
├── Falls nicht: 1-Karten-Test mit RX 6600 XT + Whisper
├── Falls ja: AMD-Rig verkaufen, Erloese in Storage investieren
└── Ergebnis: "Klare Entscheidung ueber AMD-Hardware"
```
## Entscheidungen (getroffen)
| Frage | Entscheidung | Begruendung |
|---|---|---|
| OS ki-tower | **Debian 12** | Einfacher fuer GPU, Docker, kein Hypervisor-Overhead |
| OS gpu-worker | **Debian 12** | Identisch mit ki-tower, CUDA-nativ, kein Sonderweg |
| Worker-Rig | **4x RTX 3080** | CUDA-nativ > 8x RX 6600 XT mit ROCm-Workarounds |
| LLM-Modell | **Qwen 14B** (Default) | 12 GB VRAM, laesst Platz. 32B nur als Upgrade. |
| LLM-Server | **vLLM** | Schneller als llama.cpp bei Batch, Model-Unloading |
| Bildgenerierung | **ComfyUI + FLUX.1-dev** | Flexibel, Workflow-basiert, gute Qualitaet |
| TTS v1 | **Piper TTS** (CPU) | Kein GPU-Verbrauch, sofort einsatzbereit |
| TTS v2 | **XTTS v2** (3090 oder 3080) | Voice-Cloning, natuerlichere Stimme. 4 GB VRAM, passt auf 3080. |
| Avatar | **SadTalker, ab v1.5** | PiP ~20% unten rechts, durchgehend im Video. Kernbestandteil. |
| Job-Queue | **SQLite** | Ein User, kein Redis/RabbitMQ noetig |
| Netzwerk | **Tailscale** | Verbindet ki-tower + gpu-worker, fertig |
## Risiken
| # | Risiko | Wahrscheinlichkeit | Impact | Mitigation |
|---|---|---|---|---|
| 1 | **ROCm auf RX 6600 XT instabil** | Hoch | **Niedrig** | Betrifft nur Reserve-Rig. 3080-Worker ist CUDA-nativ. |
| 2 | **Piper TTS deutsch zu robotisch** | Mittel | Mittel | v1-only-Problem. XTTS v2 ab v1.5 loest das. OpenAI TTS als Bruecke (~0.50€/Video). |
| 3 | **VRAM-Tetris auf 3090** | Mittel | Mittel | 14B statt 32B. Sequentiell. vLLM Model-Unloading. |
| 4 | **Pipeline wird zu komplex vor v1** | Hoch | Hoch | v1 brutal einfach. Bash-Scripts, keine Frameworks. |
| 5 | **SadTalker Qualitaet/Artefakte** | Mittel | **Hoch** | Avatar ist Kernbestandteil. Wenn Lip-Sync schlecht: LivePortrait oder Wav2Lip als Alternative testen. Fallback: Avatar nur bei Kapitelwechseln (5-10% Screentime statt durchgehend). |
| 6 | **SadTalker Renderzeit 20+ Min** | Mittel | Mittel | 30s-Clips parallel auf 2 GPUs verteilen wenn noetig. Oder Resolution reduzieren (256x256). |
| 7 | **Stromkosten Rig vs. Nutzen** | Mittel | Niedrig | 3080-Rig nur bei Batch-Jobs einschalten. AMD-Rig im Zweifel verkaufen. |
## Kosten-Schaetzung
| Posten | Einmalig | Monatlich |
|---|---|---|
| ki-tower Hardware | vorhanden | — |
| gpu-worker Hardware | vorhanden | — |
| Strom ki-tower (24/7) | — | ~30-40 EUR |
| Strom gpu-worker (bei Bedarf) | — | ~10-30 EUR (nicht 24/7) |
| Cloud-APIs (Fallback TTS) | — | ~5-10 EUR |
| **Gesamt** | 0 EUR | ~45-80 EUR |
Zum Vergleich: Vollstaendig cloud-basierte Videoproduktion (Runway, ElevenLabs, GPT-4) = 100-300 EUR/Monat.