78 lines
4.8 KiB
Markdown
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.
|