Use Image 1 for the ranger's exact face, short silver hair, green field jacket and red neck scarf. Use Image 2 for the narrow stone footbridge and misty mountain valley. Create one continuous five-second live-action shot of this same adult ranger stepping onto the bridge, gripping the stone parapet and turning toward a distant bird call. The red scarf lifts briefly in the mountain breeze. Camera slowly arcs a few degrees, preserving the person and the bridge's spatial geometry. Realistic cloth, mist and subtle facial recognition. Native stereo breeze, one distant bird and footsteps on stone, no speech or music. No extra people, animals in frame, logos, captions or text.
MiniMax H3 Max Reference to Video API
minimax/h3-max/reference-to-videoMiniMax H3 Max Reference to Video creates cinematic video with combined image, video, and audio guidance. It preserves character appearance and motion rhythm while adapting the aspect ratio and delivering multiple HD quality levels.
Drag and drop files, paste from clipboard, or provide a URL. Required: 1–9 static JPEG, PNG or WebP images, up to 30 MB each. Shapes: 1:1, 4:3, 3:4, 16:9, 9:16, 5:2 or 2:5. Normalize image orientation. At most 12 total references.
1/9 files added
Drag and drop files, paste from clipboard, or provide a URL. Optional: up to 3 MP4/MOV videos, up to 50 MB each. Each 2–15 sec; combined ≤15 sec. 16:9 or 9:16, constant 24 fps, square pixels, no rotation metadata. Counted frames after output-duration clipping: 48, 120, 240 or 360. Verified by the server.
1/3 files added
Drag and drop files, paste from clipboard, or provide a URL. Optional: up to 3 MP3/WAV files, up to 15 MB each. Each 2–15 sec and no longer than output duration; combined ≤15 sec. 32 kHz mono/stereo; decoded sample count divisible by 800. Verified by the server.
1/3 files added
Examples
REST API
Quick Start
Make your first reference-to-video request in three steps. The short example shows how to assign a clear role to each reference, then returns a task_id for result retrieval.
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
Run the short example with at least one reference image. Video and audio are optional additions and cannot be submitted without a reference image.
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/reference-to-video",
"input": {
"prompt": "Use Image 1 for the adult female taiko performer's exact face, tied-back hair and indigo happi costume. Use Video 1 for the temple courtyard, large drum and the restrained left-to-right camera movement. Use Audio 1 for the dry wooden attack and low resonant drum atmosphere. In one continuous five-second cinematic shot, she raises both sticks, makes one decisive strike on the large drum, and holds the finish as her sleeve settles. Preserve her identity and drum geometry throughout. Match the drum impact to the generated sound, with the resonance spreading through the quiet courtyard. Late golden sunlight, subtle determined expression, no crowd or dialogue, no text, subtitles, logos or advertisements.",
"duration": 5,
"resolution": "768p",
"enable_safety_checker": true,
"aspect_ratio": "16:9",
"reference_image_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/reference-to-video/v1/01/input-01.png"
],
"reference_video_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/reference-to-video/v1/01/input-02.mp4"
],
"reference_audio_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/reference-to-video/v1/01/input-03.wav"
]
}
}'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": "EY5BASNT7IWV6QKU",
"status": "running",
"created_time": "2026-10-11T22:57:28"
}
}{
"code": 200,
"data": {
"task_id": "EY5BASNT7IWV6QKU",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/minimax/h3-max/reference-to-video/v1/01/output.mp4",
"file_type": "video"
}
],
"created_time": "2026-10-11T22:57:28",
"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/reference-to-video",
"input": {
"prompt": "Use Image 1 for the adult female taiko performer's exact face, tied-back hair and indigo happi costume. Use Video 1 for the temple courtyard, large drum and the restrained left-to-right camera movement. Use Audio 1 for the dry wooden attack and low resonant drum atmosphere. In one continuous five-second cinematic shot, she raises both sticks, makes one decisive strike on the large drum, and holds the finish as her sleeve settles. Preserve her identity and drum geometry throughout. Match the drum impact to the generated sound, with the resonance spreading through the quiet courtyard. Late golden sunlight, subtle determined expression, no crowd or dialogue, no text, subtitles, logos or advertisements.",
"duration": 5,
"resolution": "768p",
"enable_safety_checker": true,
"aspect_ratio": "16:9",
"reference_image_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/reference-to-video/v1/01/input-01.png"
],
"reference_video_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/reference-to-video/v1/01/input-02.mp4"
],
"reference_audio_urls": [
"https://cdn.vidgo.ai/apis/models/minimax/h3-max/reference-to-video/v1/01/input-03.wav"
]
}
}
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/reference-to-video. |
| callback_url | string (URL) | No | — | A public HTTP(S) URL for receiving task completion notifications. |
| input | object | Yes | — | Generation parameters: at least one reference image is required; video and audio are optional. Images, videos and audio must total at most 12 assets. |
| input.prompt | string | Yes | — | Describe scene progression, camera movement, and actions. 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.aspect_ratio | string | No | adaptive | adaptive or 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. |
| input.reference_image_urls | string[] | Yes | — | Required: public HTTP(S) URLs for 1–9 static JPEG, PNG or WebP images, up to 30 MB each. Supported image ratios: 1:1, 4:3, 3:4, 16:9, 9:16, 5:2 or 2:5. Normalize image orientation before uploading. Images, videos and audio must total at most 12 assets. |
| input.reference_video_urls | string[] | No | — | Optional: public HTTP(S) URLs for up to 3 MP4/MOV videos, up to 50 MB each. Each clip must be 2–15 seconds, with at most 15 seconds of video combined. Use 16:9 or 9:16, constant 24 fps, square pixels and no rotation metadata. After capping at the requested output duration, counted frames must be 48, 120, 240 or 360. Verified by the server. |
| input.reference_audio_urls | string[] | No | — | Optional: public HTTP(S) URLs for up to 3 MP3/WAV audio files, up to 15 MB each. Each clip must be 2–15 seconds and no longer than the requested output duration, with at most 15 seconds of audio combined. Use mono or stereo at 32 kHz; the decoded sample count per channel must be divisible by 800. Verified by the server. |
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 total reference count and format limits.
- 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/reference-to-video | Model identifier for asynchronous multimodal reference-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 Reference to Video API FAQ
What is the MiniMax H3 Max Reference to Video API?
MiniMax H3 Max Reference to Video is a multimodal reference-to-video model from MiniMax, optimized through extensive post-training. It combines text prompts with image, video, and audio references to generate coherent, high-fidelity 5–15 second videos with native stereo audio. Its multimodal cross-attention architecture blends character features, motion rhythm, and acoustic style while adding natural narrative expression, lighting, and physical motion to new shots. Access it programmatically through the API or try it directly in the playground above.
Which reference formats does MiniMax H3 Max Reference to Video support?
Reference images support 1–9 JPEG, PNG, or WebP files, up to 30MB each. Reference videos support up to 3 MP4 or MOV files at constant 24fps, up to 50MB each. Reference audio supports up to 3 MP3 or WAV files at 32kHz, up to 15MB each. The combined total must not exceed 12 files.
How does MiniMax H3 Max Reference to Video maintain facial consistency?
Provide 2–3 clear portraits of the same character from different angles or under different lighting, and specify that "the protagonist's facial features and hairstyle must closely match the reference images." The model extracts visual features into multidimensional embeddings to anchor the character's identity throughout the generated sequence.
How does reference audio affect MiniMax H3 Max Reference to Video output?
Reference audio primarily guides the background soundscape's mood, rhythm, dynamics, and timbre. The model analyzes its spectral features and synthesizes native stereo audio with similar acoustic space and atmosphere in the new video.
How is the token allowance calculated for MiniMax H3 Max Reference to Video?
Each request includes a free reference-media allowance of 4,096 tokens, covering typical image and short-video reference needs. Images are metered by aspect ratio and count, video by counted frames, and audio by decoded samples. If the combined usage exceeds that allowance, the excess is billed proportionally at 4 credits per 1,000 tokens, in addition to the base duration fee.
How does adaptive framing work in MiniMax H3 Max Reference to Video?
When aspect_ratio is set to adaptive, the model detects subject composition in the references and the primary image's aspect ratio to choose a suitable output frame. If your distribution platform requires a specific format, explicitly set a fixed ratio such as 16:9 or 9:16.
What is the main difference between Reference to Video and Image to Video?
Image to Video uses the input image as the opening frame or ending frame, imposing strong timeline constraints. Reference to Video treats media as a feature library, drawing selectively from multiple images, action videos, and audio clips for complex work across shots and assets.















