MiniMax Hailuo 02 Pro, an image-to-video model tuned for clear 1080P output and responsive handling of complex physics-driven scenes. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
En attente
$0.49par exécution·~20 / $10
A surfer rides a massive, curling wave at sunset. The ocean spray glistens, and the sky is painted in hues of orange and purple.
The boxer in the image throws fast punches in a gritty underground gym, bobbing and weaving, sweat flying, dramatic lighting with dust in the air, camera circles around with intense close-ups
The girl in the image performs a fierce boxing combo in a spotlighted ring, quick jabs and powerful hooks, breath visible in cold air, fast handheld camera movement, cinematic action vibe
The artist in the image balances on a tall unicycle while juggling fire torches, intense focus and slow motion during difficult moments, wide-angle lens captures crowd reactions
The performer in the image gestures boldly as a tiger leaps through a flaming hoop behind him, red and gold circus backdrop, camera zooms and shakes slightly for dramatic tension
The girl in the image walks a tightrope above a circus stage, balancing pole in hand, wind fluttering dress, camera tracks from below as the spotlight follows her
A mountain biker navigates a challenging rocky trail, kicking up dust as they speed down a steep incline surrounded by dense forest.
Ice crystals rapidly form on a cold window pane, showing their delicate, fractal patterns growing in real-time.
A snowboarder performs a high-flying aerial trick off a massive jump in a snow-covered mountain range,
A young write girl with curly hair eating ice cream, colorful city background, realistic lighting, street-style photography look, lifelike details
Hailuo 02 is a breakthrough in AI video generation, engineered for creators who demand cinematic realism, physical accuracy, and HD output — all with unmatched speed and cost-efficiency. Whether you’re making short-form content, cinematic sequences, or creative storytelling, Hailuo 02 transforms static images into vivid, motion-rich video scenes that look straight out of a movie.
Enjoy full HD quality straight from the model — not upscaled. Every frame maintains clarity and fine texture, delivering a professional-grade look ideal for ads, explainers, or cinematic shorts.
5-second video clips for flexible storytelling. Mix, merge, and prototype your ideas without sacrificing fidelity or wasting render time.
Hailuo 02 understands movement like never before. It captures dynamic action, natural camera motion, and physical realism — from flying particles to dramatic lighting transitions — ensuring a smooth, film-like experience.
Forget awkward cuts. Frame stitching and temporal blending have been improved to emulate real camera motion and continuity, creating seamless cinematic sequences.
Hailuo 02 offers excellent prompt adherence and repeatability, giving professionals predictable output quality even across multiple runs or edits.
At just $0.49 per generation !!!
Q1: Does Hailuo 02 generate audio? No — visuals only. You can easily sync your generated clip with custom music or voiceovers.
Q2: Is it suitable for commercial projects? Yes, provided you comply with licensing and platform usage terms.
Q3: How long does it take to generate a clip? Typically 30–90 seconds, depending on prompt complexity and server load.
Q4: Can I use it on mobile? Yes — Hailuo 02 runs smoothly on most mobile browsers and interfaces.
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/minimax/hailuo-02/i2v-pro 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 Hailuo 02 I2v Pro below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"enable_prompt_expansion": true
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/minimax/hailuo-02/i2v-pro" \
-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/hailuo-02/i2v-pro";
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({
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"enable_prompt_expansion": true
}),
});
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 = {
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"enable_prompt_expansion": True
}
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/hailuo-02/i2v-pro", 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)Hailuo 02 I2v Pro is a MiniMax model for video generation from images, exposed as a REST API on WaveSpeedAI. MiniMax Hailuo 02 Pro, an image-to-video model tuned for clear 1080P output and responsive handling of complex physics-driven scenes. 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-hailuo-02-i2v-pro.
Hailuo 02 I2v Pro starts at $0.49 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`, `image`, `enable_prompt_expansion`, `end_image`. 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-hailuo-02-i2v-pro.
Median end-to-end generation time on WaveSpeedAI is around 199 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.