tutorial6 分鐘閱讀

MiniMax Hailuo 2.3 API 整合:用影片介面生成複雜人體運動

面向開發者的 ToAPIs MiniMax Hailuo 2.3 影片 API 指南:人體運動提示詞寫法、目前 6/10 秒與 768P/1080P 請求約定,以及 cURL/Python 示例。

ToAPIs Engineering & Evaluation Team
TL;DR - 核心要點
  • 文生影片與首幀圖生影片使用目錄字串 MiniMax-Hailuo-2.3;MiniMax-Hailuo-2.3-Fast 僅支援圖生影片。
  • 目前約定允許 6 或 10 秒,解析度 768P 或 1080P;1080P 只支援 6 秒,提示詞上限為 2,000 個字元。
  • 文件中的運鏡指令如 [Push in] 寫在提示詞文本裡,不是獨立欄位。Hailuo 2.3 沒有尾幀輸入。
  • 請持久化任務 id,輪詢 GET /v1/videos/generations/{id},並確認目前帳戶定價,不要沿用未經核實的每秒單價。

MiniMax Hailuo 2.3 API 整合:用影片介面生成複雜人體運動

目標模型: MiniMax-Hailuo-2.3
推理端點: https://api.toapis.com/v1/videos/generations
相關閱讀: MiniMax H3 API 指南 · H3 運鏡提示詞 · 自動化 R2V 流水線


1. 核心摘要與性能速覽 (TL;DR)

  • 任務:在 ToAPIs 的影片生成端點上提交文生影片,或帶首幀的圖生影片,用來製作角色與人體運動鏡頭。
  • 約定:MiniMax-Hailuo-2.3 接受整數時長 6 或 10 秒,解析度 768P 或 1080P。1080P 只支援 6 秒。目前 API 參考將提示詞上限寫為 2,000 個字元。
  • 模型 ID:文生影片與圖生影片使用目錄字串 MiniMax-Hailuo-2.3。MiniMax-Hailuo-2.3-Fast 僅支援圖生影片,且必須提供首幀 URL。這兩個 ID 都不能與 minimax-h3 互換。
  • 運鏡用語:ToAPIs 的 Hailuo 2.3 參考文件列出了 [Push in]、[Pan left, Pedestal up] 這類括號指令。下表是目前文件中的詞彙,硬編碼前請再對一次線上文件。
  • 協定:Bearer REST。從提交響應裡取出任務 id,在截止時間內輪詢 GET /v1/videos/generations/{task_id}(或 GET /v1/tasks/{task_id})。用戶端逾時並不等於上遊任務已經失敗。

2. 複雜人體運動的提示詞寫法

ToAPIs 公開目錄把 MiniMax Hailuo 2.3 描述為面向角色運動、表情與風格的影片模型,適合表現性敘事和角色短片。這是產品定位,不是「肢體絕不變形」的獨立測評。正式上線前,請用清晰的動作語言寫提示詞,並人工覆核取樣。

一條好用的人體運動提示詞,會先寫清身體力學,再寫風格:誰在動、哪條肢體先動、重心如何轉移、動作如何起勢和收勢。對比時長或解析度時,先穩住這一段核心描述,以免把措辭變化誤當成模型差異。

ToAPIs Hailuo 2.3 API 參考將下列運鏡指令寫在提示詞裡,而不是單獨的請求欄位。前端請求約定仍然把 prompt 當作文本校驗。同一對括號裡最多組合 3 條指令表示同時運動,或在句子裡按順序寫出先後運鏡。

類別文件中的指令
橫搖[Pan left]、[Pan right]
俯仰[Tilt up]、[Tilt down]
推 / 拉[Push in]、[Pull out]
升降[Pedestal up]、[Pedestal down]
橫移[Truck left]、[Truck right]
變焦[Zoom in]、[Zoom out]
其他[Shake]、[Tracking shot]、[Static shot]

抽象的首幀姿態節點圖進入 ToAPIs 閘道並分出多路運動取樣

圖 1:把靜止姿態當作首幀輸入,在提示詞裡寫隨後的動作,再透過 ToAPIs 閘道提交一次生成請求。

一條方便測試的壓縮模板:

text
SUBJECT and PRIMARY ACTION (lead limb, weight shift, follow-through), ENVIRONMENT, [CAMERA], STYLE NOTES

示例:A contemporary dancer in a black practice leotard plants the left foot, then uncoils a slow 360-degree turn with the right arm leading and the torso stacked over the standing leg, warehouse skylight, [Tracking shot], photorealistic, no morphing limbs.

圖生影片時,在 image_urls 裡放一個可公開存取的首幀 URL。圖片是起始幀,提示詞描述隨後的運動。目前文件中的圖片限制是:JPG、JPEG、PNG 或 WebP;小於 20 MB;短邊大於 300 px;寬高比介於 2:5 與 5:2 之間。不要在 image_urls 裡傳 base64,本機檔案請先上傳。

MiniMax-Hailuo-2.3-Fast 不接受文生影片,必須提供首幀 URL。Hailuo 2.3 沒有文件化的尾幀欄位;首尾幀過渡屬於 MiniMax-Hailuo-02,不是這個 ID。不要把 H3 的 ratio 或 reference_videos 等欄位直接套到 Hailuo 2.3 請求上。

Playground 選項可能會顯示小寫的 768p / 1080p,目前 API 示例使用 768P 和 1080P。批量自動化前,先確認你的帳戶實際接受哪一種寫法。把同樣的運鏡措辭拿到 MiniMax H3 上也可以作為提示詞文本,但時長、解析度和媒體模式約定不同,換 ID 前請重讀那篇指南。


3. 生產級實作:cURL 與 Python

步驟 1:用 cURL 提交

bash
curl -X POST "https://api.toapis.com/v1/videos/generations" \
  -H "Authorization: Bearer $TOAPIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMax-Hailuo-2.3",
    "prompt": "A contemporary dancer in a black practice leotard plants the left foot, then uncoils a slow 360-degree turn with the right arm leading and the torso stacked over the standing leg, warehouse skylight, [Tracking shot], photorealistic, no morphing limbs",
    "duration": 6,
    "resolution": "768P"
  }'

步驟 2:Python 輔助函式與輪詢

官方文件目前寫的是公開源站 https://toapis.com(中國大陸請使用 https://toapis.cn)。本系列其他指南使用 https://api.toapis.com。選定一個基址並保持一致。下面的示例遵循文件中的任務查詢路徑以及 completed / failed 狀態;上線前請對照你帳戶的 API 參考,確認 id、result.data[0].url 和回應包絡。

python
import os
import time
import requests

API_KEY = os.environ["TOAPIS_API_KEY"]
BASE = "https://api.toapis.com"
ENDPOINT = f"{BASE}/v1/videos/generations"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}


def dispatch_motion_clip(
    prompt: str,
    duration: int = 6,
    resolution: str = "768P",
    image_url: str | None = None,
    model: str = "MiniMax-Hailuo-2.3",
) -> str:
    if resolution == "1080P" and duration != 6:
        raise ValueError("1080P currently supports a 6-second duration only")
    payload = {
        "model": model,
        "prompt": prompt,
        "duration": duration,
        "resolution": resolution,
        "metadata": {"prompt_optimizer": True, "aigc_watermark": False},
    }
    if image_url:
        payload["image_urls"] = [image_url]
    elif model == "MiniMax-Hailuo-2.3-Fast":
        raise ValueError("MiniMax-Hailuo-2.3-Fast requires a first-frame image_urls value")
    res = requests.post(ENDPOINT, headers=HEADERS, json=payload, timeout=30)
    res.raise_for_status()
    data = res.json()
    task_id = data.get("id") or data.get("task_id")
    if not task_id:
        raise RuntimeError(f"Unexpected submission envelope: {data}")
    return task_id


def poll_task(task_id: str, deadline_s: int = 300) -> str:
    poll_url = f"{BASE}/v1/videos/generations/{task_id}"
    interval = 5.0
    start = time.time()
    while time.time() - start < deadline_s:
        time.sleep(interval)
        poll = requests.get(poll_url, headers=HEADERS, timeout=15)
        if poll.status_code == 429:
            retry_after = poll.headers.get("Retry-After")
            time.sleep(float(retry_after) if retry_after else min(interval * 2, 30))
            continue
        poll.raise_for_status()
        data = poll.json()
        status = data.get("status")
        if status == "completed":
            return data["result"]["data"][0]["url"]
        if status == "failed":
            raise RuntimeError(f"Generation failed: {data.get('error')}")
        interval = min(interval * 1.5, 10.0)
    raise TimeoutError(f"Task {task_id} exceeded {deadline_s}s; check status before retrying")


if __name__ == "__main__":
    prompt = (
        "A contemporary dancer in a black practice leotard plants the left foot, "
        "then uncoils a slow 360-degree turn with the right arm leading and the "
        "torso stacked over the standing leg, warehouse skylight, [Tracking shot], "
        "photorealistic, no morphing limbs"
    )
    task_id = dispatch_motion_clip(prompt)
    print("Task:", task_id)
    print("Video:", poll_task(task_id))

把提示詞模板版本和任務記錄放在一起,這樣才能分清是模型變了還是措辭變了。若要做首幀任務,給 dispatch_motion_clip 傳入 image_url=。Fast SKU 必須提供該參數。

Hailuo 2.3 的基礎時長是 6 或 10 秒。不要把 1080P 和 duration: 10 一起發送。若你需要連續的 4–15 秒時長、參考媒體或尾幀輸入,那是另一套約定,請看 H3 API 指南 和 R2V 流水線教程。


4. 錯誤處理與狀態碼對照

下表只是排查起點,並不保證與 ToAPIs 的精確錯誤碼一一對應。HTTP 查詢成功後,仍然要讀取任務 status。

HTTP 狀態常見類別建議操作
400欄位非法、組合不受支援,或媒體模式衝突核對精確模型 ID,確認時長只能是 6 或 10,1080P 只能搭配 6 秒,Fast 任務必須帶 image_urls。不要在 Hailuo 2.3 上發送尾幀欄位
401缺少或無效的 API 金鑰在 ToAPIs 控制臺輪換金鑰,並確認 Authorization 頭
429速率或並發限制如有 Retry-After 就按其等待;加抖動退避;只在安全時重試
5xx 或網絡逾時閘道或上遊暫時異常重新提交前先查任務狀態;使用有上限的重試策略

WaitTime=min⁡(MaxWait,BaseInterval×2attempt)+Uniform(0,1)\text{WaitTime} = \min(\text{MaxWait}, \text{BaseInterval} \times 2^{\text{attempt}}) + \text{Uniform}(0, 1)


5. 定價與 FinOps ROI

Estimated cost=successful billable jobs×current account rate for that model, duration, and resolution\text{Estimated cost} = \text{successful billable jobs} \times \text{current account rate for that model, duration, and resolution}

  • 不要沿用策劃稿裡的單價。 按秒或按條計費、計費單位,以及對失敗任務的處理,都會隨模型、解析度、時長、線路和帳戶變化。ToAPIs 定價頁上的官方廠商參考行僅供展示,未必等於你帳戶的實際扣費。預測鏡頭成本前,請查閱目前目錄和你的帳戶報價。
  • Fast 是另一個 SKU,不是同一 ID 上的免費加速開關。文件寫明 MiniMax-Hailuo-2.3-Fast 僅支援圖生影片,請單獨確認它的帳戶價格。
  • 把花費控制在提示詞層:先用 768P 和 6 秒打樣,保留帶版本的模板,一次只改一個變量;用戶端逾時後,先查任務狀態再決定是否重提。
  • 廠商直籤合同常帶年框、席位和預付門檻。ToAPIs 計費通常是按量付費,請以帳戶目前條款為準。

6. 常見問題

結構化問答見文章 frontmatter 中的 FAQ。摘要:請求裡的模型字串是 MiniMax-Hailuo-2.3,不是連字號形式的頁面 slug,也不是 H3 的 ID;1080P 僅支援 6 秒;Fast 必須提供首幀 URL,且不支援文生影片;文件中的運鏡指令寫在提示詞裡,不是獨立欄位;Hailuo 2.3 沒有尾幀輸入。


7. 行動清單

  • 在 ToAPIs 開發者入口 建立金鑰。
  • 用 MiniMax-Hailuo-2.3、resolution: "768P" 和 6 秒時長連通測試上面的 cURL。
  • 確認帳戶接受的是 768P 還是 768p,並對 GET /v1/videos/generations/{id} 做有截止時間的輪詢。
  • 接下來:若需要另一套時長或媒體約定,閱讀 H3 運鏡指南;並在 Hailuo 2.3 模型指南 查看目前目錄狀態。

本文提及的模型與介面

MiniMaxVIDEO

minimax-hailuo-2.3

當前費率:38.8 credits /request
MiniMaxVIDEO

minimax-hailuo-2.3-fast

當前費率:27.2 credits /request
MiniMaxVIDEO

minimax-h3

當前費率:20.8 credits /second

相關技術文章

tutorial5 分鐘閱讀

用 MiniMax H3 API 搭建自動化圖生影片(R2V)流水線

用 MiniMax H3 搭建自動化圖生影片流水線的工程教程:首幀輸入、素材暫存、有截止時間的任務輪詢,以及 ToAPIs 前端目前的請求約定。

TO
ToAPIs 研發評測組
#MiniMax H3
tutorial3 分鐘閱讀

Seedance 2.0 Mini API 評測:低成本高吞吐影片生成

開發者向的 Seedance 2.0 Mini 評測:約 16–20 秒出片、原生 720p/24fps,以及 $0.012/秒的高併發社媒與廣告流水線成本結構。

TO
ToAPIs 研發評測組
#Seedance 2.0 Mini