Animate this starting frame into one continuous five-second shot. The adult kyudo archer steadily completes the draw, releases one arrow toward a target off camera, and holds the final follow-through. Maintain the exact face, dark hakama, long bow shape and autumn garden. The bowstring snaps once, the front sleeve settles, and a few maple leaves flutter gently. Camera makes a restrained lateral move while keeping both hands and the bow visible. Natural real-time motion, correct human anatomy, no duplicated arrows or rubber bow. Native bowstring twang and dry leaves, no dialogue, music, subtitles or logos.
MiniMax H3 Max Image to Video API
minimax/h3-max/image-to-videoMiniMax H3 Max Image to Video turns still images into video with native stereo audio, start and end frame control, and lip-synced dialogue. It preserves the source subject's identity and textures while adding fluid, natural motion and camera work.
Drag and drop files, paste from clipboard, or provide a URL. Required. Add 1–2 images in order: starting frame, then optional ending frame.
2/2 files added
Examples
REST API
Quick Start
Make your first request in three steps. Start with the short example, confirm that it returns a task_id, then retrieve the generated video.
Connect to the Vidgo API
Create an API key, keep it on your server, and send it in the Authorization header as a Bearer token.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one generation task
Choose a language and run the short example. A successful submission returns a task_id; it does not wait for the video to finish.
curl --request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "minimax/h3-max/image-to-video",
"input": {
"prompt": "Connect the supplied first and last frames in one continuous five-second documentary shot. The same conservator gently peels the thin conservation tissue away from the old fresco, lowering the removed sheet with both hands. Reveal the warm restored pigments gradually; the delicate tissue flexes naturally without melting into the wall. Keep her face, hands, pale linen shirt, chapel and fresco design consistent. Slow subtle camera push toward her pleased expression, warm dust-filled light unchanged. End on the exact supplied final composition with the sheet lowered. Native quiet paper rustling and chapel room tone, no speech or music, no text or logos.",
"duration": 5,
"resolution": "768p",
"enable_safety_checker": true,
"image_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/image-to-video/v1/01/input-01.png",
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/image-to-video/v1/01/input-02.png"
]
}
}'Wait for the result
Use the returned task_id to check the same task until it reaches finished or failed. On success, read data.files[].file_url.
Track status
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll about every 2 seconds while the status is not_started or running. Stop on finished or failed; on success, read data.files[].file_url. For long-running jobs, increase the interval gradually, or add callback_url to the submit request to receive the final result asynchronously.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "LFE4X1JIHVQ67QET",
"status": "running",
"created_time": "2026-10-11T23:00:59"
}
}{
"code": 200,
"data": {
"task_id": "LFE4X1JIHVQ67QET",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/minimax/h3-max/image-to-video/v1/01/output.mp4",
"file_type": "video"
}
],
"created_time": "2026-10-11T23:00:59",
"error_message": null,
"progress": 100
}
}Complete runnable example
Open this after the three-step flow is clear. It combines submission, polling, terminal-state handling, and result extraction in one script.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "minimax/h3-max/image-to-video",
"input": {
"prompt": "Connect the supplied first and last frames in one continuous five-second documentary shot. The same conservator gently peels the thin conservation tissue away from the old fresco, lowering the removed sheet with both hands. Reveal the warm restored pigments gradually; the delicate tissue flexes naturally without melting into the wall. Keep her face, hands, pale linen shirt, chapel and fresco design consistent. Slow subtle camera push toward her pleased expression, warm dust-filled light unchanged. End on the exact supplied final composition with the sheet lowered. Native quiet paper rustling and chapel room tone, no speech or music, no text or logos.",
"duration": 5,
"resolution": "768p",
"enable_safety_checker": true,
"image_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/image-to-video/v1/01/input-01.png",
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/image-to-video/v1/01/input-02.png"
]
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
while true; do
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep 2
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters
model and callback_url belong at the request root; generation parameters belong inside input.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | Fixed to minimax/h3-max/image-to-video. |
| callback_url | string (URL) | No | — | A public HTTP(S) URL for receiving task completion notifications. |
| input | object | Yes | — | An object containing the parameters required for generation. |
| input.prompt | string | Yes | — | Describe action development, camera movement, and dialogue. The original input must not exceed 50,000 characters, including leading and trailing whitespace, and must not be empty after trimming. |
| input.duration | integer | No | 5 | Generation duration: any whole number from 5–15 seconds. |
| input.resolution | string | No | 768p | Video resolution: 480p, 768p, or 1080p. |
| input.enable_safety_checker | boolean | No | true | Whether to enable the generated-content safety checker. |
| input.image_urls | string[] | Yes | — | An image array containing 1–2 public HTTP(S) URLs: the first image is the opening frame, and the optional second image is the ending frame. |
Response Fields
Submission returns the task identity immediately. Status responses add progress, output files, or a failure message as the task advances.
| Field | Type | Description |
|---|---|---|
| code | integer | Application result code. Successful responses use 0 or 200. |
| message | string | Human-readable response or error message when present. |
| data.task_id | string | Task identifier used in the status endpoint path. |
| data.status | string | Current state: not_started, running, finished, or failed. |
| data.created_time | string | Task creation time in date-time format. |
| data.progress | number | Completion percentage when the provider reports progress. |
| data.files[] | array | Generated output files returned after a successful task. |
| data.files[].file_url | string | Public URL of the generated video. |
| data.files[].file_type | string | Generated file type, such as video. |
| data.files[].watermark_url | string | null | Watermarked output URL when one is available. |
| data.error_message | string | null | Failure detail when status is failed. |
Task Lifecycle
Treat not_started and running as non-terminal states. finished and failed are terminal alternatives; stop polling when either is returned.
not_startedThe task has been accepted and is queued to start.
runningThe video is being generated. Continue polling the status endpoint.
finishedThe task is complete. Read the video URL from data.files[].file_url.
failedGeneration failed. Read data.error_message for details and stop polling.
Polling and Errors
- Authentication401 indicates a missing or invalid Bearer API Key. Check your key in the dashboard before retrying.
- Validation400 indicates invalid request parameters. Check the image_urls count and prompt length.
- Polling intervalPoll the status every 2 seconds. For longer tasks, use exponential backoff to gradually increase the interval to 5 seconds.
- Terminal statesPoll only while the status is not_started or running. Stop immediately on finished or failed.
- Callback optionProvide callback_url to receive an automatic notification when generation finishes, without continuous polling.
Model Specifications
| Specification | Value | Description |
|---|---|---|
| Model | minimax/h3-max/image-to-video | Model identifier for asynchronous image-to-video generation. |
| Duration | 5–15 | Whole seconds; defaults to 5 seconds. |
| Resolution | 480p | 768p | 1080p | Multiple output resolution levels; defaults to 768p. |
| Pricing | 10 / 16 / 32 credits/s | Corresponds to the 480p / 768p / 1080p tiers, respectively. |
Related Models
MiniMax H3 Max Image to Video API FAQ
What is the MiniMax H3 Max Image to Video API?
MiniMax H3 Max Image to Video is an image-to-video model from MiniMax, optimized through extensive post-training. Using a first-frame image or start and end frames, it follows prompts to generate cinematic 5–15 second videos with native stereo audio and lip sync. Its multimodal spatiotemporal diffusion foundation preserves the subject's identity, clothing textures, and composition while adding coherent, natural motion, lighting, and camera work. Access it programmatically through the API or try it directly in the playground above.
Does MiniMax H3 Max Image to Video support end-frame control?
Yes. Add a second public image URL to the image_urls array to use it as the end frame. The model plans a natural motion path from the opening image to the final composition, making it useful for returning to a target pose, ending on a specific action, or creating smooth transitions.
Can MiniMax H3 Max Image to Video preserve facial identity?
Yes. Post-training closely binds facial features, skin textures, hairstyles, hair strands, and clothing details. As long as the requested movements stay within a natural physical range, the character can closely retain the first frame's identity throughout the shot.
How does MiniMax H3 Max Image to Video generate dialogue and lip movements from a still image?
When the first image shows a clear front or three-quarter view of a face, specify the character's words in the prompt, such as a short English line. In a single generation, the model creates natural lip movements and subtle facial expressions alongside synchronized native speech and ambient sound.
How are resolution and aspect ratio determined in MiniMax H3 Max Image to Video?
The generated video follows the first image's original aspect ratio by default, so no separate aspect_ratio parameter is needed. Choose 480p, 768p, or 1080p; the model scales the image proportionally and adds super-resolution detail within the selected tier.
How is MiniMax H3 Max Image to Video billed?
Billing depends entirely on the requested duration parameter and selected resolution: 480p costs 10 credits per second ($0.050/second), 768p costs 16 credits per second ($0.080/second), and 1080p costs 32 credits per second ($0.160/second). Adding an end-frame image incurs no extra image-processing fee.
What is the difference between Image to Video and Reference to Video?
Image to Video uses the first image as the opening frame and an optional second image as the ending frame, controlling the shot's timeline endpoints. Reference to Video uses images, video, and audio as a feature library, drawing on character appearance, motion rhythm, or style across shots.















