MiniMax H3 Text to Video generates coherent 2K videos from text prompts, with flexible 5-15 second duration and adaptive or custom aspect ratios for cinematic scenes, creative videos, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle
$0.7per run·~14 / $10
Speeder chase across a cliff city (single continuous shot) From a monumental cliffside city carved into stone, the camera dives toward a tiny streak of light ripping along a narrow ledge-road. Lock-on: a speeder hugging the wall at insane speed. The camera slingshots ahead, whips back, then drops tight to the rear thrusters: heat haze, grit snapping off the ledge, warning lights flashing. A collapsing balcony rains debris; the rider snaps a last-inch swerve under a falling arch, then threads through hanging laundry lines and open windows in one fluid line. The camera darts through the same openings, staying glued to the motion. One final bend and sudden calm: the camera blasts outward into a reveal of the city opening onto a boundless waterfall-fed valley, mist turning into rainbow.
制作 15 秒,16:9 横版搞笑侦探主题电影片头动画,原创侦探题材视觉元素,全程不出现任何现有 IP 形象、知名影视人物,全部为原创图形与剪影,规避版权风险。 视觉风格:复古美式动画片头美学,硬边原创剪影、漫画拼贴构图、不规则非对称分屏、高冲击力几何色块,搭配英文片头演职员署名,少量日文假名作为装饰元素;整体氛围配比:60% 诙谐喜剧 + 40% 冷感爵士气质,风格灵动戏谑,美式复古街头质感,禁止做成轻快欢乐爵士 MV。 动态设计逻辑:动态图形拼贴动画,时序跟随音乐鼓点。画面生成顺序:黑色细线边框率先浮现,分屏分割边界快速划出,几何色块、独立漫画画格逐块嵌入画面;原创侦探道具剪影、线索特写、英文演职员名称跟随节拍依次滑入、弹出、遮罩渐显。定位为片头包装动画,禁止写实叙事剧情。 文字动画规范:英文署名清晰工整无拼写错误;动效方案:细线边框先行绘制完成,文字从边框内部滑入,字母循序逐个显现,利用色块遮罩完成文字揭示,最终画面短暂定格。 硬性文字规则:每一条英文署名仅出现一次;不存在重复职位、重复人物,同一个人物不能兼任多个岗位;禁止出现乱码、错字、凭空生成多余文字。 转场效果合集:圆形黑幕过渡、硬切式车门分割转场、长阴影擦屏、红线切割画面、巨型英文字母遮罩切换、分屏边框重组、几何色块硬切、漫画画格拼贴入场;全部转场跟随鼓点触发,节奏干脆利落,具备悬疑喜剧漫画质感;禁用柔和溶解转场、流体变形转场。 音频规范(15 秒原创纯背景音乐) 情绪配比:60% 诙谐喜剧氛围,40% 内敛爵士风格。 配器构成:持续低音长音、俏皮弦乐拨奏、冷调合成器脉冲、底鼓、稀疏爵士鼓刷、Walking Bass、低音萨克斯短句、短促铜管点缀。 音乐时间轴: 0-2s:神秘低频音效 + 踩镲铺垫,铺垫侦探悬念感; 3s:低沉鼓点正式进入; 6s:加入爵士贝斯律动,增添喜剧松弛感; 10s:切入短促萨克斯与铜管 Riff,强化诙谐氛围; 13-15s:俏皮强力和弦搭配鼓点收尾定格。 曲风约束:戏谑复古气质,爵士风格克制不张扬,整体不能过度欢快明亮,禁止照搬、抄袭现有歌曲旋律。
MiniMax H3 Text-to-Video generates high-resolution videos from text prompts. Describe the video scene, action, camera movement, and visual style, then choose aspect ratio and duration to create a 2k video output.
Text-to-video generation
Generate videos directly from natural-language prompts.
2K video output
Create high-resolution video outputs with the fixed 2k resolution tier.
Flexible aspect ratios
Supports wide, landscape, square, portrait, and vertical formats including 21:9, 16:9, 4:3, 1:1, 3:4, and 9:16.
Selectable duration
Generate videos from 4 to 15 seconds.
Simple generation workflow
Provide a prompt, choose aspect ratio and duration, then generate the final video.
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text description of the video scene, action, camera movement, and style. Minimum length: 1 character. |
| aspect_ratio | No | Output aspect ratio: 21:9, 16:9, 4:3, 1:1, 3:4, or 9:16. |
| resolution | No | Output video resolution. Supported values: 768p or 2k. |
| duration | No | Output video duration in seconds. Supported values: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, or 15. |
4 to 15 seconds.Pricing is based on output resolution and generated video duration.
| Resolution | Per second | 5s | 10s | 15s |
|---|---|---|---|---|
| 768p | $0.10 | $0.50 | $1.00 | $1.50 |
| 2K | $0.14 | $0.70 | $1.40 | $2.10 |
16:9 for widescreen video, 9:16 for vertical mobile content, and 1:1 for square layouts.21:9 for cinematic wide-frame scenes.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/minimax/h3/text-to-video with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for H3 Text To Video below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"aspect_ratio": "16:9",
"resolution": "768p",
"duration": 5
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/minimax/h3/text-to-video" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL=$(printf '%s' "$TASK" | jq -r '.urls.get // empty')
if [ -z "$RESULT_URL" ]; then
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
fi
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
-H "Authorization: Bearer $WAVESPEED_API_KEY")
RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
case "$STATUS" in
completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
failed|cancelled|timeout) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/minimax/h3/text-to-video";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"aspect_ratio": "16:9",
"resolution": "768p",
"duration": 5
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
`https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"aspect_ratio": "16:9",
"resolution": "768p",
"duration": 5
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/minimax/h3/text-to-video", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout"}:
raise RuntimeError(result)
if status not in {"created", "processing"}:
raise RuntimeError(f"Unexpected status: {status}")
time.sleep(2)H3 Text To Video is a MiniMax model for video generation, exposed as a REST API on WaveSpeedAI. MiniMax H3 Text to Video generates coherent 2K videos from text prompts, with flexible 5-15 second duration and adaptive or custom aspect ratios for cinematic scenes, creative videos, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/minimax/minimax-h3-text-to-video.
H3 Text To Video starts at $0.70 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `aspect_ratio`, `resolution`, `duration`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/minimax/minimax-h3-text-to-video.
Median end-to-end generation time on WaveSpeedAI is around 250 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.
Commercial usage rights depend on the model's license, set by its provider (MiniMax). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.