From 23f4bd0fda8c91f1a95918f38c086eef8c513a2c Mon Sep 17 00:00:00 2001 From: Code-Barby Date: Fri, 24 Jul 2026 09:01:54 +0200 Subject: [PATCH] Ticket #96: MiniMax Hailuo Video-Failover additiv verdrahtet (Default AUS, Testclip braucht Baer-GO) --- 2026-07-24-ticket96-minimax-video-failover.md | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 2026-07-24-ticket96-minimax-video-failover.md diff --git a/2026-07-24-ticket96-minimax-video-failover.md b/2026-07-24-ticket96-minimax-video-failover.md new file mode 100644 index 0000000..cc0e46f --- /dev/null +++ b/2026-07-24-ticket96-minimax-video-failover.md @@ -0,0 +1,77 @@ +# #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.