Minimax Hailuo 2.3 I2V Pro

Minimax Hailuo 2.3 I2V Pro

Playground

Try it on WaveSpeedAI!

MiniMax Hailuo 2.3 Pro is an image-to-video model for ultra-clear 1080P output and physics-aware scenes with responsive rendering. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Hailuo 2.3 Pro represents the pinnacle of MiniMax’s image-to-video generation technology. It turns static images into cinematic, full-HD 1080p videos with stunning realism, seamless motion, and physics-accurate animation. Built for creators, studios, and digital storytellers, it combines next-generation motion rendering with precise visual fidelity — all in just 5 seconds per clip.


🎬 Why It Looks Great

  • Native 1080p Output – Generates crisp 1080p videos directly from the model (no upscaling), ensuring perfect clarity for big screens and professional use.
  • Advanced Motion Dynamics – Accurately simulates camera motion, object interactions, lighting shifts, and depth transitions.
  • Realistic Physics – Handles subtle natural effects — wind, fabric movement, reflections, and shadows — with organic consistency.
  • Stable Composition – Keeps subject framing, proportions, and color tone stable across all frames.
  • Cinematic Color and Lighting – Fine-tuned tone mapping for film-grade warmth and visual depth.

⚙️ Limits and Performance

  • Input: one reference image (JPEG / PNG)
  • Optional: text prompt to guide motion or camera style
  • Duration: fixed at 5 seconds
  • Resolution: 1080p

💰 Pricing

DurationResolutionCost per Job
5 seconds1080p$0.49

🚀 How to Use

  1. Upload a reference image to define your scene or subject.
  2. ( Optional ) Add a text prompt to describe motion, camera angle, or lighting. Example: “A woman walks through a sunlit market as the camera slowly pans right, dust particles drifting in the air.”
  3. Submit your job ( fixed 5 s duration ).
  4. Download your cinematic video.

💡 Pro Tips

  • Use camera verbs like “pan,” “zoom,” “follow,” or “orbit” to define motion clearly.
  • Mention lighting moodsoft afternoon light, golden hour, neon reflections — for enhanced aesthetic control.
  • Include emotion or atmosphere in your prompt to guide tone (e.g., serene, tense, romantic).
  • For stable results across iterations, reuse the same seed.
  • Pair your video with music or voiceovers for a complete storytelling experience.

🧩 Why Creators Love It

> “Nothing else feels as cinematic straight out of the box — it just moves naturally.” > “The motion and lighting look like real camera work. Perfect for film concepts and game trailers.” > “The best image-to-video balance so far — clean details, zero flicker, amazing physics.”

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-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-2.3/i2v-pro" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; 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 type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  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
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-The model generates video with the picture passed in as the first frame.Base64 encoded strings in data:image/jpeg; base64,{data} format for incoming images, or URLs accessible via the public network. The uploaded image needs to meet the following conditions: Format is JPG/JPEG/PNG; The aspect ratio is greater than 2:5 and less than 5:2; Short side pixels greater than 300px; The image file size cannot exceed 20MB.
promptstringNo-The positive prompt for the generation.
enable_prompt_expansionbooleanNotrue-The model automatically optimizes incoming prompts to enhance output quality. This also activates the safety checker, which ensures content safety by detecting and filtering potential risks.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.