minimax-h3 — 接続ガイド
model にはこのページの正確な ID を指定します。以下に記載されたエンドポイントのみが、このモデルの接続ガイドの対象です。
model: minimax-h3
モデルとエンドポイント
| 対応エンドポイント | HTTP |
|---|---|
videos.generations | POST /v1/videos/generations |
準備と認証
すべての例は環境変数 ZAI_API_KEY を読み込みます。Python は標準ライブラリのみを使い、SDK は不要です。キーはサーバーに保管し、ブラウザーのコードに含めないでください。呼び出しは課金対象になるため、例では少量だけ生成します。
export ZAI_API_KEY="<your-api-key>"
パラメーターと制限
以下は本プラットフォームでの最小構成です。全選択肢や上限値を示すものではありません。記載のない高度なパラメーターは本ガイドでは未検証です。他の提供元やモデルの制限を流用しないでください。
検証済み構成は duration=5 秒、resolution=768P、aspect_ratio=16:9、テキストの prompt です。開始フレーム image(data URL または公開 https リンク)と 2 枚の reference_images も検証済みです。resolution は 768P の 1 段階のみ、duration は 1〜15 の整数、aspect_ratio は 21:9、16:9、4:3、1:1、3:4、9:16 のいずれかです。出力は常に音声トラック付きで、generate_audio は受け付けません。開始・終了フレームと reference_images は同じリクエストで併用できません。reference_images は最大 9 枚で、prompt では配列順に <Picture 1>、<Picture 2>… と書いて指します(半角山括弧、P は大文字、番号の前に半角スペース 1 つ。それ以外の書き方は普通の文字として扱われます)。開始・終了フレームは番号を持ちません。prompt は最大 7,000 文字です。last_frame と reference_audios は本ページでは未検証で、seed、watermark、ネガティブプロンプトには対応していません。
完全な呼び出し例
import json
import os
import urllib.error
import urllib.request
BASE = "https://api.ourzai.com/v1"
KEY = os.environ["ZAI_API_KEY"]
def call(path, body=None, timeout=180):
headers = {"Authorization": f"Bearer {KEY}"}
data = None
if body is not None:
headers["Content-Type"] = "application/json"
data = json.dumps(body).encode("utf-8")
request = urllib.request.Request(BASE + path, data=data, headers=headers)
try:
with urllib.request.urlopen(request, timeout=timeout) as response:
return response.read()
except urllib.error.HTTPError as error:
raise RuntimeError(f"HTTP {error.code}: {error.read().decode(errors='replace')}") from error
import time
from pathlib import Path
from urllib.parse import quote
created = json.loads(
call(
"/videos/generations",
{
"model": "minimax-h3",
"prompt": "A red mug on a table, slow camera movement",
"duration": 5,
"resolution": "768P",
"aspect_ratio": "16:9",
},
)
)
task_id = created.get("request_id") or created.get("id")
if not task_id:
raise RuntimeError(created)
print("task_id:", task_id, flush=True)
path = "/videos/" + quote(task_id, safe="")
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
status = json.loads(call(path))
if status.get("status") == "done":
Path("result.mp4").write_bytes(call(path + "/content"))
break
if status.get("status") in ("failed", "expired"):
raise RuntimeError(status)
time.sleep(5)
else:
raise TimeoutError(f"Keep task ID {task_id} and query its status later")
結果とエラー処理
受付成功は動画完成を意味しません。例は request_id/id に対応し、pending → done を確認してから同じキーで /content を取得します。video.url は相対パスの場合があります。failed/expired は終了状態、409 は未完成です。他ドメインにキーを送らないでください。タイムアウト時は重複課金を避けるため、再送前に既存タスクを確認します。
この一覧は接続方法を示すもので、稼働状況ではありません。キーで利用できるモデルは GET /v1/models、料金はコンソールで確認してください。掲載モデルでも上流障害やクールダウン中は 502/503 になる場合があります。待機時間を増やして再試行してください。