跳到正文

萬相 / 快樂馬:影片生成 API

用萬相 3.0 與快樂馬 1.1 生成影片:參數、回傳與注意事項。

萬相 3.0 與快樂馬 1.1 按官方原始路徑提交非同步影片任務,輪詢 HopBase 任務 ID 取得成片。

項目值
Base URLhttps://api.hop-base.com
提交任務POST /api/v1/services/aigc/video-generation/video-synthesis
查詢任務GET /api/v1/tasks/{task_id}
密鑰分組萬相「萬相 3.0 官方直連」,快樂馬「快樂馬 1.1 官方直連」

HopBase 按官方介面格式提供萬相與快樂馬影片生成,並保持原始路徑。用官方 SDK 或 HTTP 寫好的程式碼遷移過來只需改 base URL 和密鑰——請求體、回應結構、路徑都不用動。

可用型號

模型 ID時長解析度輸入官方價
wan3.0-video2-30 秒整數(預設 5)480P / 720P / 1080P首幀 / 尾幀,或參考組$0.0441起/ 秒
happyhorse-1.1-t2v3-15 秒整數(預設 5)480P / 720P / 1080P僅提示詞$0.0662起/ 秒
happyhorse-1.1-i2v3-15 秒整數(預設 5)480P / 720P / 1080P恰好 1 張 first_frame 圖片$0.0662起/ 秒
happyhorse-1.1-r2v3-15 秒整數(預設 5)480P / 720P / 1080P1-9 張 reference_image 圖片$0.0662起/ 秒

萬相 3.0 的時長也可以傳 -1 表示自動。它的參考組最多 10 張參考圖、5 段參考影片、5 段參考音訊、1 個文件、1 個網頁連結。

請使用上表中的精確 ID。未登記任何別名,未知模型名會被拒絕。wan3.0-video-prime、happyhorse-1.1-video-edit 以及快樂馬 1.0 系列均未上架。

wan3.0-video 與 happyhorse-1.1-* 分屬兩個分組——萬相 3.0 官方直連與快樂馬 1.1 官方直連,密鑰須包含模型所在的分組才能調用;一把密鑰可以同時包含兩個分組。請在發起付費任務前用 GET /v1/models 確認密鑰能呼叫哪些模型。

分檔價與完整規格見模型卡:wan3.0-video、happyhorse-1.1-t2v、happyhorse-1.1-i2v、happyhorse-1.1-r2v。

請求參數

所有請求使用 Authorization: Bearer sk-your-key 與 Content-Type: application/json。你不需要額外送出非同步請求標頭,任務始終非同步執行。

{
  "model": "wan3.0-video",
  "input": { "prompt": "...", "media": [{ "type": "first_frame", "url": "..." }] },
  "parameters": { "resolution": "1080P", "duration": 5 }
}
參數必填型別與限制預設值說明
model必填上表四個 ID 之一—精確 ID
input.promptwan3.0-video:與 media 至少其一
-t2v / -r2v:必填
-i2v:選填
字串;萬相 3.0 ≤20,000 字符,快樂馬 ≤5,000 字符—見下方說明
input.mediawan3.0-video:與 prompt 至少其一
-i2v / -r2v:必填
-t2v:不接受
{ "type", "url" } 陣列;各類型限制見下表——
parameters選填物件,見下文—可整體省略

快樂馬的中文 prompt 在 2,501-5,000 字之間不報錯,但會被截斷到約 2,500 字。

input.media

type必填型別與限制預設值說明
first_frame-i2v 必填圖片;萬相 3.0 ≤1;-i2v 恰好 1 張—-t2v / -r2v 不接受
last_frame選填圖片;僅萬相 3.0,≤1——
reference_image-r2v 必填圖片;萬相 3.0 ≤10;-r2v 1-9 張——
reference_video選填僅萬相 3.0;≤5 段,合計 ≤15 秒—按輸入時長計費;輸入 + 輸出 ≤30 秒
reference_audio選填僅萬相 3.0;≤5 段,合計 ≤15 秒——
file選填僅萬相 3.0;1 個文件,≤100 MB、≤50 頁—與 link 互斥
link選填僅萬相 3.0;1 個公開網頁位址,不能是 data:——

file 接受的格式:docx / doc / xlsx / xls / pptx / ppt / pdf / txt / key / pages / numbers / md。

對萬相 3.0,首尾幀輸入與參考組(reference_*、file、link)在同一次請求中互斥。

url 接受絕對的公網 http(s) 位址或 data: 內嵌(base64)。oss:// 會被拒絕——該物件歸屬你自己的雲端帳號,閘道無法代取。

類型、數量與組合在提交時校驗;檔案大小、尺寸、編碼、時長與頁數由服務在執行時校驗。整個 JSON 請求體上限 128 MiB(含 base64 體積),大素材請用 URL。

parameters

參數必填型別與限制預設值說明
resolution選填480P / 720P / 1080P1080P決定計費檔位
duration選填整數秒;萬相 3.0:2-30 或 -1(自動);快樂馬:3-155—
ratio選填萬相 3.0:adaptive / 16:9 / 4:3 / 1:1 / 3:4 / 9:16;快樂馬 -t2v / -r2v:16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 4:5 / 5:4 / 9:21 / 21:9;-i2v:不接受服務預設-i2v 成片比例隨輸入圖
audio選填布林;僅萬相 3.0true開關聲音價格相同
prompt_extend選填布林;僅萬相 3.0true提示詞智慧改寫
watermark選填布林萬相 3.0:false;快樂馬:true見下方提示
seed選填整數 0-2147483647——

模型不支援的參數回傳 400,不會被忽略。閘道總會送出 resolution 與 duration(預設值見上表);其他沒傳的欄位不會送出,由服務預設值生效。

快樂馬預設帶浮水印:

快樂馬 watermark 的官方預設值是 true,會在成片上打「Happy Horse」標記。HopBase 不覆蓋官方預設值,需要乾淨輸出請顯式傳 "watermark": false。

圖生影片範例:

{
  "model": "happyhorse-1.1-i2v",
  "input": {
    "prompt": "鏡頭緩緩推進,光影在場景中流動",
    "media": [{ "type": "first_frame", "url": "data:image/jpeg;base64,..." }]
  },
  "parameters": { "resolution": "720P", "duration": 5, "watermark": false }
}

回傳結果

提交回應

提交成功回傳 200,HopBase 任務 ID 在官方回應結構的 output.task_id(形如 blt…):

{
  "output": {
    "task_id": "blt60x4115010d-d361-4bfc-b131-a382f1c400a5",
    "task_status": "PENDING"
  },
  "request_id": "..."
}

任務查詢欄位

輪詢 GET /api/v1/tasks/{task_id}。

欄位說明
output.task_idHopBase 任務 ID,blt…
output.task_statusPENDING / RUNNING / SUCCEEDED / FAILED
output.video_url成功時的成片位址,24 小時有效
output.orig_prompt成功時回顯的提示詞
output.code / output.message失敗時:code 恆為 TaskFailed,原因看 message
model任務使用的模型 ID
usage成功時的計量與扣費,見「計費」
usage.cost / usage.cost_usd / usage.currency本任務扣費:cost_usd 為從餘額實際扣除的美元金額,cost 為同一筆的人民幣金額,currency 恆為 CNY

output.task_status(大寫)依序經過 PENDING → RUNNING → SUCCEEDED | FAILED,只有後兩者是終態,其他任何值都按進行中處理。一條片子通常 1-5 分鐘完成,萬相 3.0 的長片更久。建議約 15 秒輪詢一次。

進行中

{
  "output": {
    "task_id": "blt60x4115010d-d361-4bfc-b131-a382f1c400a5",
    "task_status": "RUNNING"
  },
  "model": "wan3.0-video"
}

成功

成功時回應在 output.video_url 攜帶成片位址:

{
  "output": {
    "task_id": "blt60x4115010d-d361-4bfc-b131-a382f1c400a5",
    "task_status": "SUCCEEDED",
    "video_url": "https://api.hop-base.com/...",
    "orig_prompt": "..."
  },
  "usage": { "video_count": 1, "duration": 5, "SR": 1080, "output_video_duration": 5, "input_video_duration": 0, "ratio": "16:9", "billed_seconds": 5, "billing_bucket": "1080p", "cost": 4.08, "cost_usd": 0.6, "currency": "CNY" }
}

失敗

失敗任務不計費。code 恆為 TaskFailed,只能看 output.message 區分原因(非同步任務失敗):

{ "output": { "task_id": "blt60x...", "task_status": "FAILED", "code": "TaskFailed", "message": "..." } }

最小範例

BASE=https://api.hop-base.com
# 1. 提交
curl "$BASE/api/v1/services/aigc/video-generation/video-synthesis" \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video",
    "input": {
      "prompt": "日出時分空拍雲海之上的雪山"
    },
    "parameters": {
      "resolution": "1080P",
      "duration": 5,
      "ratio": "16:9"
    }
  }'

# 2. 用回傳的 output.task_id 輪詢,約 15 秒一次
curl "$BASE/api/v1/tasks/blt你的任務ID" \
  -H "Authorization: Bearer sk-your-key"

注意事項

非法參數十分鐘後才失敗:

官方在提交階段幾乎不校驗參數:一個非法的 resolution 照樣會回傳任務 ID,約十分鐘後才報錯。HopBase 嚴格解碼請求體,直接以 400 當場拒絕。

  • 未知欄位與第二個 JSON 值會在請求送出前就被拒絕。這是刻意的。
  • 參考素材由官方側下載,而不是 HopBase 下載。屏蔽機房 IP 的圖床(很多免費圖床都會)會讓任務在提交幾分鐘後失敗,建議用 data: 內嵌或你自己的物件儲存 / CDN。
  • 輪詢 GET /api/v1/tasks/{task_id}。注意這個路徑前面不帶 /v1,和其他頁面的影片查詢介面不同。沒有列表介面,任務 ID 需要自行留存。
  • 建立超過 2 小時仍未結束的任務會被自動判為失敗,這兩個系列的任務都不支援取消。
  • output.video_url 是 api.hop-base.com 網域下的簽名位址,自任務完成起 24 小時有效。
  • 再次查詢返回同一位址、不會延長,過期存取回傳 410,請在有效期內下載保存。
  • usage.ratio 回報的是成片實際比例,可能是原始尺寸(如 1632:937)而不是請求裡的列舉值。

常見報錯 → 改法

請求錯誤回傳 {"code":…,"message":…}。

狀態code原因 / 處理
400InvalidParameter欄位或取值非法;按 message 指出的欄位修正
400DataInspectionFailed內容審核未通過;改寫 prompt 或更換素材
400InvalidFile / InvalidURL素材檔案或 URL 不可用;更換
413InvalidParameter請求體超限;改用 URL,不要 data:
404InvalidParameter任務 ID 格式錯誤或任務不存在
429Throttling...觸發限流;退避後重試

413 與 404 的 message 原文:

request body exceeds the 128 MiB limit (received N bytes)
invalid task ID format
task not found            # 用其他使用者的密鑰查詢也是這條

其他欄位(OpenAI 的 size / n / image、萬相 2.x 的 img_url / negative_prompt / shot_type、media 元素裡的多餘鍵)一律回傳 400:

400 {"code":"InvalidParameter","message":"request body does not match the JSON contract: json: unknown field \"size\""}

任務失敗時按 output.message 處理:

message處理
invalid request parameters: ...
... parameters or reference media were rejected ...
修正後重新提交
a reference media file could not be downloaded ...改用 data: 或可存取的託管位址
... declined by content moderation ...
... blocked by content moderation ...
... may infringe intellectual property rights ...
改寫 prompt 或更換素材
video generation failed ...
... stopped before completion ...
... finished without a usable video ...
重新提交;反覆出現請聯絡客服
... did not finish within 2 hours ...重新提交;反覆出現請帶任務 ID 聯絡客服

計費

提交任務時按「可用餘額 − 進行中任務的預估費用 − 本次預估費用」判斷,不足回傳 402,code 為 insufficient_balance,任務結束後預估自動釋放。影片任務通用規則詳見影片總覽。失敗任務不計費。

兩個系列都按影片秒數計費,單價隨解析度檔位不同,不按 token 計量:

本次扣費 = usage.billed_seconds × usage.billing_bucket 檔的單價

檔位由 usage.SR(成片的解析度檔位,480 / 720 / 1080)決定;同一檔位下兩個系列單價不同。

兩者的計費時長口徑不同:

  • 萬相 3.0 官方寫明輸入影片與輸出影片都計費,計費時長 = 輸入影片時長 + 輸出影片時長,所以 usage.input_video_duration 也計入計費秒數——無影片輸入時它是 0.0。
  • 快樂馬 1.1 三個模型只計輸出,其中參考生影片的 input_video_duration 官方文件寫明固定為 0。

任務結束後,查詢回應根物件的 usage 還會帶 cost_usd(本任務從餘額實際扣除的美元金額,未扣費的失敗為 0)、cost(同一筆的人民幣金額)與 currency(恆為 CNY)。

官方牌價見價格頁。你的實際單價以登入後的模型廣場為準,每次請求的實際扣費見用量記錄。

下一步