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

4.8 KiB

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