hermes-erkenntnisse/2026-07-24-ticket96-minimax-video-failover.md

78 lines
4.8 KiB
Markdown

# #96 — MiniMax Hailuo Video-Failover verdrahtet (2026-07-24)
**Ziel:** MiniMax Hailuo Video als guenstigen Video-Failover scharf verdrahten (lokal
primaer, extern nur Ueberlauf). Katalog #94 + Routingkarte #61 waren bereits gebaut,
MiniMax-Video dort nur dokumentiert, nicht aktiv.
## 1. Credentials (gefunden, nicht in Klartext hier)
Vaultwarden-Item "KI API Keys" (Code-Barby-Sammlung), Eintrag `MINIMAX` ->
`sk-api-...` (URL `https://api.minimaxi.chat/v1`, alte Domain). Zusaetzlich
`platform.minimax.io`-Login (matthias@consoro.eu) und ein separater
`MCP: minimax_api_key`-Eintrag vorhanden. Key ist da, **noch nicht** in die
Orchestrator-Umgebung (`MINIMAX_API_KEY`) eingetragen -- bewusst, siehe Punkt 5.
## 2. API verstanden (offizielle Doku, verifiziert 2026-07-24)
- Submit: `POST https://api.minimax.io/v1/video_generation` (Bearer-Auth), Modelle
u.a. `T2V-01` (guenstigstes), `MiniMax-Hailuo-02`, `MiniMax-Hailuo-2.3`. Felder:
`model`, `prompt` (<=2000 Zeichen), `duration` (6 oder 10s), `resolution`
(720P/768P/1080P je Modell), `prompt_optimizer`. Antwort: `task_id`.
- Poll: `GET https://api.minimax.io/v1/query/video_generation?task_id=...` ->
`status` (Preparing/Queueing/Processing/Success/Fail), bei Success `file_id`.
- Download: `GET https://api.minimax.io/v1/files/retrieve?file_id=...` -> `download_url`
(9h gueltig) -> direkter GET auf die URL liefert die MP4-Bytes.
- Kosten: ~$0,017-0,045/s API pay-as-you-go; 6s/720p ca. $0,19-0,56 laut aktueller
Web-Recherche (Stand 2026-07).
## 3. Test-Clip -- NICHT ausgeloest (ehrlich)
Kein echter bezahlter API-Call durchgefuehrt. Das waere ein Kaufvorgang mit einem
hinterlegten API-Key (echtes Geld, wenn auch klein) -- nach den geltenden
Sicherheitsregeln fuer diese Session braucht das eine explizite Freigabe von Baer
im Chat, die in diesem (Sub-)Agent-Kontext nicht live eingeholt werden konnte.
**Offener Schritt fuer Baer:** GO im Chat -> `MINIMAX_API_KEY` (aus Vaultwarden) +
`CLOUD_VIDEO_FALLBACK_ENABLED=1` in der Orchestrator-Umgebung setzen -> ein 6s-Clip
generieren lassen -> Kosten/Ergebnis hier nachtragen.
Stattdessen wurde die komplette Routing-Logik mit einem **gemockten** Call
(0 Kosten, kein Netzwerk-Request an MiniMax) end-to-end verifiziert -- siehe Punkt 4.
## 4. Verdrahtung (additiv, reversibel) -- `B:\barby\orchestrator\main.py`
- Neue Konstanten: `MINIMAX_API_BASE`, `MINIMAX_API_KEY` (env, aktuell leer),
`MINIMAX_VIDEO_MODEL=T2V-01`, `MINIMAX_VIDEO_DURATION_S=6`,
`MINIMAX_VIDEO_RESOLUTION=720P`.
- Neue Funktion `call_minimax_video(prompt)`: Submit -> Poll (max 600s) -> File-Retrieve
-> Download, wirft bei jedem Fehler eine Exception (Aufrufer faengt sie ab, lokal
bleibt unberuehrt).
- `run_video_job()`: wenn ComfyUI/A40 nicht erreichbar UND
`CLOUD_VIDEO_FALLBACK_ENABLED=1` UND `MINIMAX_API_KEY` gesetzt -> automatischer
Failover-Aufruf, sonst **exakt das alte Verhalten** (Fehlermeldung, kein externer
Call). Default ist AUS (Env-Var nicht gesetzt) -- Live-Betrieb unveraendert.
- Hybrid-Nachbearbeitung: heruntergeladener Clip laeuft lokal durch
`interpolate_motion()` (ffmpeg minterpolate, gleiche Pipeline wie die lokalen
Wan2.2-Segmente); bei Fehler faellt der Code auf das unbearbeitete Rohvideo zurueck.
- `/health`, `/pool-status`, `routing_tiers.json` (Video-Tier-5) zeigen den neuen
Zustand introspektierbar an (`video_overflow_minimax`, `aktiviert: false`).
- Backups vor jeder Aenderung: `main.py.bak-minimaxfailover-20260724-084640`,
`routing_tiers.json.bak-minimaxfailover-20260724-084641`.
## 5. Verify (Overflow-Beleg, ohne echten Kostenaufwand)
Test-Skript (Scratchpad, gegen den echten `main.py`-Code importiert, `comfy_system_stats`
+ `call_minimax_video` gemockt):
- **Szenario A** (Flag aus, Default-Zustand wie live): `status=error`,
Fehlermeldung nennt MiniMax als nicht scharf geschaltet -- **kein** externer Call.
- **Szenario B** (Flag an + Key gesetzt, simuliert Baer-Freigabe): automatischer
Overflow ausgeloest, `job.plan.video_quelle == "minimax_hailuo_failover"`,
lokale Nachbearbeitung versucht (bei Fake-Bytes erwartungsgemaess auf Rohvideo
zurueckgefallen -- Fallback-Pfad funktioniert).
- Danach: `py_compile` gruen, Testinstanz auf Port 8250 hochgefahren und per
`/health` + `/routing-map` verifiziert (HTTP 200), erst DANACH die produktive
Scheduled-Task `BarbyOrchestrator` (Port 8197) sauber neu gestartet (0 laufende
Jobs zum Zeitpunkt des Neustarts, `jobs.gesamt` unveraendert 39 -> kein Job
unterbrochen). Live-`/health`, `/pool-status`, `/routing-map` zeigen die neue
Verdrahtung, `minimax_aktiviert: false`.
## Offen fuer Baer
1. GO fuer den echten bezahlten Testclip (~$0,19-0,56) inkl. Key-Uebergabe an die
Orchestrator-Umgebung.
2. Danach `CLOUD_VIDEO_FALLBACK_ENABLED=1` dauerhaft setzen (Scheduled-Task-Umgebung),
wenn der Testclip ueberzeugt.