# #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.