视频生成
Hailuo 系列
MiniMax 海螺视频 — Hailuo 2.3 / 2.3 Fast,15 种中括号运镜指令
POST
/
v1
/
tasks
Hailuo 系列
curl --request POST \
--url https://www.qingbo.dev/v1/tasks \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"action": "<string>",
"prompt": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"duration": 123,
"image_urls": [
"<string>"
],
"callback_url": "<string>",
"callback_events": [
"<string>"
]
}
'import requests
url = "https://www.qingbo.dev/v1/tasks"
payload = {
"model": "<string>",
"action": "<string>",
"prompt": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"duration": 123,
"image_urls": ["<string>"],
"callback_url": "<string>",
"callback_events": ["<string>"]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
action: '<string>',
prompt: '<string>',
aspect_ratio: '<string>',
resolution: '<string>',
duration: 123,
image_urls: ['<string>'],
callback_url: '<string>',
callback_events: ['<string>']
})
};
fetch('https://www.qingbo.dev/v1/tasks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.qingbo.dev/v1/tasks"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"action\": \"<string>\",\n \"prompt\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"duration\": 123,\n \"image_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"<string>\",\n \"callback_events\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.qingbo.dev/v1/tasks")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"action\": \"<string>\",\n \"prompt\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"duration\": 123,\n \"image_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"<string>\",\n \"callback_events\": [\n \"<string>\"\n ]\n}")
.asString();{
"task_id": "task-wave1775285160b950328499",
"model": "minimax-hailuo-2.3",
"action": "generate",
"status": "queued",
"created_at": 1775285160040,
"progress": 0
}
MiniMax 海螺(Hailuo)视频生成系列。
两档可选 —
实际费用 = 单价 / 秒 ×
提交后用
minimax-hailuo-2.3(2.3 主版,新增 15 种运镜指令)、minimax-hailuo-2.3-fast(2.3 加速档,更快更便宜,适合预览/批量)。
支持文生视频(T2V)与图生视频(I2V)。
定价
按 分辨率 × 时长 计费,单位$ / 秒。
| 模型 | 768p | 1080p |
|---|---|---|
minimax-hailuo-2.3 | $0.0549 / 秒 | $0.081 / 秒 |
minimax-hailuo-2.3-fast | $0.0279 / 秒 | $0.0477 / 秒 |
duration。例:minimax-hailuo-2.3 1080p 6 秒 = $0.081 × 6 = $0.486。
调用示例
curl -X POST https://www.qingbo.dev/v1/tasks \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-hailuo-2.3",
"prompt": "一只柴犬穿宇航服在月球上行走,电影感光影",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "16:9"
}'
curl -X POST https://www.qingbo.dev/v1/tasks \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-hailuo-2.3",
"prompt": "人物缓缓走向镜头",
"image_urls": ["https://cdn.example.com/portrait.jpg"],
"duration": 6,
"resolution": "1080p"
}'
curl -X POST https://www.qingbo.dev/v1/tasks \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-hailuo-2.3",
"prompt": "[推进] 山间雾气缭绕的古寺,[变焦推近] 屋檐下的铜铃随风轻摆",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "16:9"
}'
curl -X POST https://www.qingbo.dev/v1/tasks \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-hailuo-2.3-fast",
"prompt": "城市夜景,霓虹灯沿街闪烁",
"duration": 6,
"resolution": "768p",
"aspect_ratio": "16:9"
}'
{
"task_id": "task-wave1775285160b950328499",
"model": "minimax-hailuo-2.3",
"action": "generate",
"status": "queued",
"created_at": 1775285160040,
"progress": 0
}
GET /v1/tasks/{task_id} 轮询状态,详见 任务系统。
可用模型
| 模型 ID | 分辨率 | 时长(秒) | Actions | 备注 |
|---|---|---|---|---|
minimax-hailuo-2.3 | 768p / 1080p | 6 / 10 | generate | 2.3 主版,prompt ≤ 2000 字符 |
minimax-hailuo-2.3-fast | 768p / 1080p | 6 / 10 | generate | 加速档,单价更低 |
通用参数
string
必填
模型 ID,可选值:
minimax-hailuo-2.3minimax-hailuo-2.3-fast
string
默认值:"generate"
操作类型,固定为
generate。传入 image_urls 即自动走 图生视频(I2V),否则为文生视频(T2V)string
默认值:"16:9"
画面宽高比,可选值:
16:9— 横版宽屏9:16— 竖版长屏1:1— 正方形
integer
默认值:"6"
视频时长(秒)。支持
6 / 10string[]
参考图片 URL 数组,触发 I2V 模式;支持公网 URL 或 Base64
string[]
订阅的回调事件类型,默认全部终态
模型特定参数
两档均无额外特定参数,所有可选项见 通用参数。运镜指令(2.3 / 2.3-fast)
Hailuo 2.3 系列独家亮点 — 在prompt 中以 [指令] 中括号嵌入 即可触发对应镜头运动;同一句可叠加多个标签,后端会按顺序解析。
| 类别 | 指令 | 效果 |
|---|---|---|
| 位移 | [左移] | 镜头水平向左平移 |
[右移] | 镜头水平向右平移 | |
[上升] | 镜头垂直向上抬升 | |
[下降] | 镜头垂直向下落下 | |
| 推拉 | [推进] | 镜头物理向前推进 |
[拉远] | 镜头物理向后拉远 | |
| 摇镜 | [左摇] | 机身固定向左摇头 |
[右摇] | 机身固定向右摇头 | |
[上摇] | 机身固定向上仰 | |
[下摇] | 机身固定向下俯 | |
| 变焦 | [变焦推近] | 焦距变化模拟推近(机身不动) |
[变焦拉远] | 焦距变化模拟拉远(机身不动) | |
| 特殊 | [晃动] | 手持感抖动 |
[跟随] | 跟随主体运动 | |
[固定] | 完全静止机位 |
写法示例 —
"[推进] 古镇青石板路,[变焦推近] 雨水从屋檐滴落" —— 镜头先向前推,再聚焦屋檐细节。资源限制
| 项目 | 限制 |
|---|---|
参考图片(image_urls) | URL 或 Base64,JPG/PNG/WEBP |
| Prompt 长度 | ≤ 2000 字符 |
| 时长 | 6 / 10 秒 |
| 输出 | MP4,链接 24 小时有效 |
相关文档
⌘I
Hailuo 系列
curl --request POST \
--url https://www.qingbo.dev/v1/tasks \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"action": "<string>",
"prompt": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"duration": 123,
"image_urls": [
"<string>"
],
"callback_url": "<string>",
"callback_events": [
"<string>"
]
}
'import requests
url = "https://www.qingbo.dev/v1/tasks"
payload = {
"model": "<string>",
"action": "<string>",
"prompt": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"duration": 123,
"image_urls": ["<string>"],
"callback_url": "<string>",
"callback_events": ["<string>"]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
action: '<string>',
prompt: '<string>',
aspect_ratio: '<string>',
resolution: '<string>',
duration: 123,
image_urls: ['<string>'],
callback_url: '<string>',
callback_events: ['<string>']
})
};
fetch('https://www.qingbo.dev/v1/tasks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.qingbo.dev/v1/tasks"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"action\": \"<string>\",\n \"prompt\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"duration\": 123,\n \"image_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"<string>\",\n \"callback_events\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.qingbo.dev/v1/tasks")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"action\": \"<string>\",\n \"prompt\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"duration\": 123,\n \"image_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"<string>\",\n \"callback_events\": [\n \"<string>\"\n ]\n}")
.asString();{
"task_id": "task-wave1775285160b950328499",
"model": "minimax-hailuo-2.3",
"action": "generate",
"status": "queued",
"created_at": 1775285160040,
"progress": 0
}