Minimax H3 Controlnet Union API Documentation
Playground
Try it on WaveSpeedAI!MiniMax H3 Open Weights ControlNet Union generates a new video that follows the motion and composition of a source video. Pose, depth, edges, lines, scribble or grayscale structure is extracted from the source automatically and guides the output, optionally with reference images for the subject or style, with native stereo audio generated in the same pass. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
MiniMax H3 ControlNet Union Open Weights generates a new video while following the motion, structure, and composition of a source video. The model automatically extracts the selected control signal — such as pose, depth, edges, lines, scribble, or grayscale structure — so you can guide generation with a normal source video instead of preparing control maps manually.
Use pose for motion and character-performance transfer, depth for preserving spatial layout and camera movement, edge-based controls for structural restyling, or gray for recoloring and relighting. Optional reference images and audio can provide additional subject, style, or sound guidance.
Why Choose This?
-
Seven control types in one model
Choosepose,depth,canny,soft_edge,lines,scribble, orgraydepending on what should be preserved from the source. -
Automatic control extraction
Upload a normal source video and let the model derive the selected control signal automatically. -
Character motion transfer
Combineposewith reference images to generate a different character performing the source video’s motion. -
Structure-preserving restyling
Use depth or edge controls to change the visual style, environment, or subject while retaining source composition and movement. -
Recoloring and relighting
Usegrayto preserve luminance structure while changing color, lighting, or overall grading. -
Multimodal reference guidance
Add up to9reference images and3reference audio inputs for additional subject, style, or sound control. -
Generated or preserved audio
Generate native audio with the new video, or disable audio generation to preserve the source soundtrack. -
Four resolution tiers
Generate at480p,540p,768p, or1080p.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text description of the desired output. Reference optional inputs as <Picture 1>–<Picture 9> and <Audio 1>–<Audio 3>. |
| video | Yes | Source video URL. Up to the first 15 seconds are used. The control signal is extracted automatically, and the output follows the processed source duration and aspect ratio. |
| control_type | No | Control signal to extract: pose, depth, canny, soft_edge, lines, scribble, or gray. Default: pose. |
| control_strength | No | Strength of the extracted control signal. Range: 0–2. Default: 1. |
| reference_images | No | Optional reference images for subject, appearance, or style guidance. Supports up to 9 images. |
| reference_audios | No | Optional reference audio inputs for audio guidance. Supports up to 3 inputs. |
| resolution | No | Output resolution: 480p, 540p, 768p, or 1080p. Default: 480p. |
| generate_audio | No | Generate audio together with the output video. Default: true. Set to false to preserve the source video’s audio track. |
| seed | No | Random seed for generation. A negative value selects a random seed. |
Choosing a Control Type
| Control Type | Preserves from Source | Best For |
|---|---|---|
pose | Body, hand, and face motion | Character animation, dance, performance transfer |
depth | Spatial layout and camera movement | Scene replacement, structural restyling, composition preservation |
canny | Precise edges | Detailed and faithful structural restyling |
soft_edge | Softer object boundaries | Stylized re-rendering with more visual freedom |
lines | Straight-line structure | Architecture, interiors, products, geometric scenes |
scribble | Loose structural lines | Creative reinterpretation with approximate composition |
gray | Brightness and luminance structure | Recoloring, relighting, grading, appearance changes |
How to Use
- Upload a source video — Provide the footage whose motion or structure should guide the new result.
- Choose a control type — Select the source information you want to preserve.
- Write the prompt — Describe the new subject, scene, appearance, style, lighting, and audio direction.
- Add reference images optional — Supply visual references when subject identity or style needs additional guidance.
- Add reference audio optional — Provide audio references when sound direction matters.
- Adjust control strength optional — Lower the value for more freedom or increase it for stronger source adherence.
- Choose resolution — Select
480p,540p,768p, or1080p. - Configure audio — Keep
generate_audio=truefor newly generated audio, or disable it to preserve the source soundtrack. - Set seed optional — Use a fixed seed when reproducibility is needed.
- Submit — Generate the controlled video.
Pricing
Pricing is based on the processed source-video duration and selected resolution, plus any reference-image or reference-audio charges.
Source duration is rounded up to the next whole second, with a minimum billed duration of 3 seconds and a maximum of 15 seconds.
| Resolution | Per Second | 3s | 5s | 10s | 15s |
|---|---|---|---|---|---|
| 480p | $0.10 | $0.30 | $0.50 | $1.00 | $1.50 |
| 540p | $0.15 | $0.45 | $0.75 | $1.50 | $2.25 |
| 768p | $0.20 | $0.60 | $1.00 | $2.00 | $3.00 |
| 1080p | $0.40 | $1.20 | $2.00 | $4.00 | $6.00 |
Reference Pricing
| Reference Type | Price |
|---|---|
| Reference image | $0.02 each |
| Reference audio | $0.02 each |
control_type, control_strength, generate_audio, prompt, and seed do not add separate charges.
Example Costs
| Configuration | Calculation | Cost |
|---|---|---|
| 5s source, 480p | 5 × $0.10 | $0.50 |
| 8s source, 768p + 1 reference image | 8 × $0.20 + $0.02 | $1.62 |
| 20s source, 1080p | 15 × $0.40 | $6.00 |
For source videos longer than 15 seconds, only the first 15 seconds are processed and billed.
Best Use Cases
- Character animation — Transfer body and performance motion to a different character using
pose. - Dance and performance transfer — Recreate choreography or gestures while changing the performer.
- Scene restyling — Change environments, visual styles, or subjects while retaining source structure.
- Camera-motion preservation — Use
depthto keep spatial layout and camera movement while rebuilding the scene. - Architecture and product workflows — Use
linesor edge controls to preserve geometric structure. - Recoloring and relighting — Use
grayto retain brightness structure while changing color and lighting. - Creative video transformation — Combine source-video control with image and audio references for more directed generation.
Pro Tips
- Use
posewith a clear full-body reference image when transferring human motion to another character. - Source videos with the full subject visible make pose-based control easier to follow.
- Use
depthwhen camera movement and spatial layout matter more than exact surface details. - Use
cannyfor stronger structural adherence andsoft_edgewhen you want more creative freedom. - Lower
control_strengthwhen the prompt should have more influence. - Increase
control_strengthwhen the result drifts too far from the source structure. - Use
generate_audio=falsewhen the original soundtrack should remain unchanged. - Use
480pfor lower-cost testing before moving to higher resolutions.
Notes
promptandvideoare required.- Up to the first
15seconds of the source video are processed. - Output duration follows the processed source-video duration.
- Output aspect ratio follows the source video.
control_typedefaults topose.control_strengthdefaults to1.reference_imagessupports up to9images.reference_audiossupports up to3inputs.resolutiondefaults to480p.generate_audiodefaults totrue.- When
generate_audio=false, the source video soundtrack is preserved.
Related Models
- MiniMax H3 Video Edit Open Weights — Edit an existing video using natural-language instructions.
- MiniMax H3 Reference-to-Video Open Weights — Generate videos with image, video, and audio reference guidance.
- MiniMax H3 Image-to-Video Open Weights — Animate a first-frame image with prompt-guided motion and audio.
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'
{
"prompt": "A cinematic ocean wave at sunrise, highly detailed",
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"control_type": "pose",
"control_strength": 1,
"resolution": "480p",
"generate_audio": true
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/minimax-h3/controlnet-union" \
-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="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 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|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | Describe the output video. The source video's motion and composition are carried over through the selected control. Refer to reference inputs as <Picture 1>..<Picture 9> and <Audio 1>..<Audio 3>. | |
| video | string | Yes | - | URL of the source video (up to 15 seconds are used). The control signal is extracted from it automatically and drives motion and composition; the output keeps its duration and aspect ratio. | |
| control_type | string | No | pose | pose, depth, canny, soft_edge, lines, scribble, gray | What to keep from the source video: pose (body, hand and face motion), depth (spatial layout), canny (precise edges), soft_edge (softer outlines), lines (straight lines, for architecture and interiors), scribble (loose sketch lines), gray (brightness structure, for recoloring). |
| control_strength | number | No | 1 | 0 ~ 2 | How strongly the control signal constrains the output. Lower values give the prompt more freedom. |
| reference_images | array<string> | No | - | 0 ~ 9 items | Optional reference image URLs, e.g. the character to animate or a target style. Refer to them in the prompt as <Picture 1>..<Picture 9>. |
| reference_audios | array<string> | No | - | 0 ~ 3 items | Optional reference audio URLs to guide audio generation. Refer to them in the prompt as <Audio 1>..<Audio 3>. |
| resolution | string | No | 480p | 480p, 540p, 768p, 1080p | Output video resolution. 768p is the model's native canvas; 480p is a faster, lower-cost tier; 540p is a mid tier at 1.5x the 480p price. 1080p is the highest-quality full-HD tier at 2x the 768p price (generation takes longer). |
| generate_audio | boolean | No | true | - | Whether to generate native audio. When set to false, the source video's audio track is preserved on the output instead. |
| seed | integer | No | - | - | The random seed to use for the generation. A negative value means a random seed will be used. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<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.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |