MiniMax
Hailuo 2.3
hailuo-2.3/image-to-video
A video generation model launched by MiniMax that supports both text-to-video and image-to-video, with improvements over the previous generation in anime-style consistency, full-body motion rendering, and the realism of subtle facial expressions, making it suitable for anime shorts and live-action-feel commercial videos
Try hailuo-2.3/image-to-video
Input
Showcases
View all showcasesOutput
videoPricing
hailuo-2.3/image-to-video per video
| Specifications | Unit Price |
|---|---|
| 6S | $0.400 |
| 10S | $0.800 |
Positioning Overview
hailuo-2.3/image-to-video is an image-to-video model in the MiniMax Hailuo 2.3 series that generates video from a single first-frame image, invoked through the unified HiAPI.ai interface. It excels at character motion and subtle facial expressions, maintaining good stability in stylized visuals such as anime and full-body action scenes, making it suitable for developers and creative teams that need to quickly extend static assets into short videos. It supports 6-second or 10-second output and can enable automatic prompt optimization as needed.
Key Highlights
- Lock the visual starting point with a single first-frame image—just provide one first-frame image along with a text description to generate a dynamic video that continues the composition and style.
- More natural character movement and facial details—designed for close-up characters and complex full-body action scenes, with enhanced motion smoothness and realistic micro-expressions.
- More stable output for stylized and commercial subjects—maintains good consistency on special styles such as anime and on product promotional visuals, making it easy to plug directly into workflows.
Capabilities
Single-image-driven video generation: pass in one first-frame image in jpeg, png, or webp format along with a prompt to generate a video—no multi-frame assets required, ideal for quickly extending existing image assets.
Two duration options: output duration can be specified as 6 seconds or 10 seconds, with 6 seconds as the default, making it easy to plan output by placement or storyboard length.
Automatic prompt optimization: prompt_optimizer is enabled by default, letting the model automatically complete and refine descriptions to reduce prompt debugging effort; it can also be disabled to preserve the original intent.
Control visual content with text descriptions: prompts can be up to 2000 characters, used to describe the desired actions, camera movements, and atmosphere while working with the first-frame image to constrain the overall visual direction.
Use Cases
- Anime-style short videos for content creators—input character illustrations or storyboard images to produce stylistically consistent dynamic short-video assets for anime content publishing and editing.
- Motion assets for advertising and product promotion—input product images and scene descriptions to generate short product showcase videos for e-commerce detail pages and feed placements.
- Bringing performance footage to life—use character portrait or still photos to drive generation of clips with full-body movement and facial expressions for short dramas, dance, and social content.
- Rapid visualization of creative scripts—use concept art to quickly test shots at a faster pace and validate camera and motion ideas at low cost for creative review and proposal confirmation.
Limitations and Selection Advice
Only single first-frame-image-driven generation is supported; first-and-last-frame control is not available, so the endpoint of the video cannot be precisely constrained. Output is fixed at 6 or 10 seconds; when more precise duration arrangement is needed, it should be handled during editing. It is suitable for character performance, stylized visuals, and commercial product short videos. If you need to conceive visuals from scratch using only text, switch to the text-to-video line in the same series; if you prioritize faster batch iteration, consider versions in the series that emphasize speed and cost.
What's new
View changelog →- New model New model available: hailuo-2.3-fast/image-to-video
Frequently asked questions
View all FAQs →-
Does Hailuo 2.3 Image to Video require an input image?
Yes. hailuo-2.3/image-to-video is an image-to-video route. The image establishes the subject and opening composition; the prompt directs motion, camera, and environmental change.
-
Which durations and resolutions does Hailuo 2.3 Image to Video support?
The current HiAPI contract supports 6s / 10s. Check the page controls and API docs for the current options.
-
How is Hailuo 2.3 Image to Video billed?
Each generated video is billed at the selected duration tier. The page follows the global display unit, while the successful task record contains the final charge.
-
How can I improve subject consistency?
Use a clear, unobstructed source with a complete composition. Describe the main action and camera first, then name the appearance, material, and background relationships that must remain stable. Validate a short clip first.
Create a generation task
https://api.hiapi.ai/v1/tasks Headers
AuthorizationstringRequiredAccount API key. Required on every request. Example: Bearer YOUR_HIAPI_API_KEY. Get your API key
Content-TypestringOptionalThe request body is always parsed as JSON; when sent, only application/json (optionally with charset) is accepted — any other value returns 415. Example: application/json.
Idempotency-KeystringOptionalIdempotency key, up to 255 bytes. Retries with the same key from the same account create the task only once; replays return the original taskId.
On network timeouts or client retries, the same key creates the task only once — no double charges (scope: the API key's account). Use a business-unique identifier as the key (e.g. "order-42"); replays return the original taskId, and keys expire 24 hours after the first request. See the Unified Async API overview for the full scenario matrix.
Body
modelstringRequiredCurrent fixed value: hailuo-2.3/image-to-video
routestringOptionalCurrent fixed value: default
inputobjectRequired
Business parameters for hailuo-2.3/image-to-video and route default — see the parameter table below.
promptstringRequiredminLength 1maxLength 2000Text prompt describing the video content to generate.
durationstringOptionalDefault: "6"Duration of the generated video in seconds, default 6 seconds.
610image_urlstringRequiredURL of the first-frame image; only a single image is supported. Supported formats are jpeg, png, and webp; SVG is not supported.
prompt_optimizerbooleanOptionalDefault: trueWhether to automatically optimize the prompt for better generation results, default true.
callbackobjectOptional
Terminal-state notification config. When omitted, no callback is delivered — poll the task yourself. See the callback note below.
Provide callback.url when creating a task and HiAPI POSTs to your service once the task reaches a terminal state — no polling needed. The callback payload mirrors the task detail structure; signature verification, delivery retries and idempotency are documented on the Unified Async API overview page.
urlstringRequiredRequired when callback is present. A POST is sent to this URL once the task reaches a terminal state; must be a valid http(s) URL.
whenstringOptionalDefault: "final"Only final is supported today — notified on both success and fail.
finalstoragestringOptionalDefault: "temp"Artifact storage tier: temp (default, retained about 7 days) or persistent (long-term, billed by size). Insufficient balance or exceeding the storage cap silently downgrades to temp; the effective tier is shown in the task detail response.
temppersistentRequest examples
# Submit an async task; returns a taskId immediately (no waiting for generation)
curl -X POST "https://api.hiapi.ai/v1/tasks" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "hailuo-2.3/image-to-video",
"input": {
"prompt": "…",
"duration": "6",
"image_url": "…",
"prompt_optimizer": true
}
}' const res = await fetch("https://api.hiapi.ai/v1/tasks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HIAPI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "hailuo-2.3/image-to-video",
input: {
"prompt": "…",
"duration": "6",
"image_url": "…",
"prompt_optimizer": true
}
}),
});
const task = await res.json();
// { code: 200, message: "success", data: { taskId } } import os, requests
res = requests.post(
"https://api.hiapi.ai/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json={
"model": "hailuo-2.3/image-to-video",
"input": {
"prompt": "…",
"duration": "6",
"image_url": "…",
"prompt_optimizer": True
}
},
)
print(res.json()) # { code, message, data: { taskId } } 200 OK
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR"
}
} 400 Bad Request
{
"code": 400,
"message": "invalid request",
"data": null,
"error_code": "INVALID_REQUEST"
} Get task detail
https://api.hiapi.ai/v1/tasks/:id Response fields
taskIdstringRequiredTask ID, always prefixed with tk-hiapi-.
modelstringRequiredResolved full model name. Tasks submitted with the route parameter return base@route (e.g. gpt-image-2/text-to-image@ext); otherwise identical to the name passed at creation.
routestringOptionalPresent only when the task was submitted with an explicit route parameter; echoes the submitted value.
statusstringRequiredTask status.
queued Queued, not started yet.
handling Being processed.
archiving Processing finished, artifacts being prepared.
success Terminal: completed, artifacts available (output returned).
fail Terminal: failed (error returned).
After submission, check status: success and fail are terminal, everything else is non-terminal. Poll every 1–3 seconds until terminal. On success, download artifacts from output[].url and transfer them before expireAt; pass storage: "persistent" at creation time when long-term retention is needed.
creatednumberRequiredTask creation time (Unix seconds).
completednumberRequiredUnix seconds when the task reached a terminal state; fixed to 0 while not terminal.
outputarrayOptional
Present only when status == success. Artifact list — always an array; a single task may return multiple types at once (e.g. video + first_frame).
Array [ object ]
Array items
urlstringRequiredArtifact URL, directly downloadable.
typestringRequiredCurrent possible values: video, image, audio, first_frame, last_frame, thumbnail; more may be added later.
expireAtnumberRequiredUnix seconds until which the artifact remains accessible; download or transfer before it expires.
errorobjectOptional
Present only when status == fail.
codestringRequiredBusiness error code.
messagestringRequiredError description.
Response examples
Success
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR",
"model": "happyhorse-1-0",
"status": "success",
"created": 1777282033,
"completed": 1777282099,
"output": [
{
"url": "https://cdn.hiapi.ai/tasks/.../video.mp4",
"type": "video",
"expireAt": 1777886899
}
]
}
} Processing (non-terminal)
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "archiving",
"created": 1777282033,
"completed": 0
}
} Failed
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "fail",
"created": 1777282033,
"completed": 1777282099,
"error": {
"code": "TASK_FAILED",
"message": "task failed"
}
}
} Articles
View all articles →Related Models
View all models →Same Type
-
Grok Imagine 1.5 Lite xAI $0.029 /second -
HeyGen Avatar V HeyGen $0.150 /second -
Kling AI Avatar Kuaishou -- -
Kling 3.0 Turbo Kuaishou $0.130 /second -
Veo 3.1 Google $0.290 /second -
Vidu Q4 Preview Vidu $0.051 /second -
HappyHorse 1.1 Alibaba $0.160 /second -
Runway Gen 4.5 Runway $0.172 /second -
Gemini Omni Google -- -
MiniMax H3 MiniMax $0.072 /second -
Kling 3.0 Kuaishou $0.100 /second -
Ray 3.2 Luma $0.214 /video



