Overview
MiniMax H3 is an open-weight, general-purpose omni-modal video generation model from MiniMax, built around a 33B-parameter dense single-stream Transformer. It understands text, images, video and audio within a single context and generates video with native stereo audio in one pass, covering text-to-video, first/last-frame video, and omni-reference generation guided by images, video and audio. MiniMax says it excels at instruction following, text and brand rendering, and video motion transfer, making it suited to advertising, branding, e-commerce, product design, gaming and other commercial work. TokenFab serves 768P output, 4–15 seconds long.
Multimodal context understanding
Combine text, reference images, reference videos and reference audio in one request and describe in natural language how they relate to the target shot; the model works out the role of each asset.
Joint audio-video generation
Dialogue, ambience, sound effects and music are generated together with the video in native stereo, with lip movement matching the action, so no separate dubbing or post-mixing is needed.
Precise first/last-frame control
Give only a first frame, only a last frame, or both to pin down exactly how the video starts and ends.
Omni-reference generation
Combine up to 9 reference images, 3 reference videos and 3 reference audios to keep characters, style, motion, camera work or voice consistent.
Features
Pricing
| Resolution | Output video | Input video | Input image前 5 张免费,超出部分计费 |
|---|---|---|---|
| 768P | ¥0.5/sec | ¥0.5/sec | ¥0.2/image |
Billed by output video length; applies to text-to-video, image-to-video, first/last-frame and omni-reference generation, 4–15 seconds (whole seconds). Input video and input images are free for a limited time.
Specifications
API Reference
| Method | Path | Purpose |
|---|---|---|
| POST | https://api.tokenfab.cn/v1/files/upload | Upload media (images, video, audio) |
| POST | https://api.tokenfab.cn/minimax/v2/video_generation | Create a video generation task |
| GET | https://api.tokenfab.cn/minimax/v2/query/video_generation/{task_id} | Query task status and result |
Request Example
Text to video
# 1. Create the task and get a task_id
curl https://api.tokenfab.cn/minimax/v2/video_generation \
-H "Authorization: Bearer $TOKENFAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [
{"type": "text", "text": "A puppy flies through the sky as white clouds drift past, tracking shot, cinematic look"}
],
"resolution": "768P",
"duration": 5,
"ratio": "16:9"
}'
# 2. Poll the task (every 5 s is recommended) until status is succeeded or failed
curl https://api.tokenfab.cn/minimax/v2/query/video_generation/5708273498515694596 \
-H "Authorization: Bearer $TOKENFAB_API_KEY"import os
import time
import requests
BASE_URL = "https://api.tokenfab.cn"
headers = {"Authorization": f"Bearer {os.environ['TOKENFAB_API_KEY']}"}
resp = requests.post(
f"{BASE_URL}/minimax/v2/video_generation",
headers=headers,
json={
"model": "MiniMax-H3",
"content": [{"type": "text", "text": "A puppy flies through the sky as white clouds drift past, tracking shot, cinematic look"}],
"resolution": "768P",
"duration": 5,
"ratio": "16:9",
},
)
resp.raise_for_status()
task_id = resp.json()["task_id"]
while True:
task = requests.get(f"{BASE_URL}/minimax/v2/query/video_generation/{task_id}", headers=headers).json()["task"]
if task["status"] in ("succeeded", "failed"):
break
time.sleep(5)
if task["status"] == "succeeded":
with open(f"{task_id}.mp4", "wb") as f:
f.write(requests.get(task["content"]["url"]).content)
else:
print(task["error"])Image to video
# 1. Upload the first-frame image to get a file_id
curl https://api.tokenfab.cn/v1/files/upload \
-H "Authorization: Bearer $TOKENFAB_API_KEY" \
-F purpose=video_generation_input \
-F file=@first.png
# 2. Reference the first frame with mm_file://<file_id>
curl https://api.tokenfab.cn/minimax/v2/video_generation \
-H "Authorization: Bearer $TOKENFAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [
{"type": "text", "text": "The person in the frame slowly turns to look at the camera as a breeze lifts their hair"},
{"type": "image_url", "image_url": {"url": "mm_file://371903373357265086"}, "role": "first_frame"}
],
"resolution": "768P",
"duration": 5
}'First/last frame
curl https://api.tokenfab.cn/minimax/v2/video_generation \
-H "Authorization: Bearer $TOKENFAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [
{"type": "text", "text": "The subject transitions naturally from the first frame to the last, with smooth, continuous camera movement"},
{"type": "image_url", "image_url": {"url": "mm_file://<first_frame_file_id>"}, "role": "first_frame"},
{"type": "image_url", "image_url": {"url": "mm_file://<last_frame_file_id>"}, "role": "last_frame"}
],
"resolution": "768P",
"duration": 5
}'Reference to video
curl https://api.tokenfab.cn/minimax/v2/video_generation \
-H "Authorization: Bearer $TOKENFAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [
{"type": "text", "text": "The person in image 1 dances hip-hop following the moves in video 1, with background music referencing audio 1"},
{"type": "image_url", "image_url": {"url": "mm_file://<image_file_id>"}, "role": "reference_image"},
{"type": "video_url", "video_url": {"url": "mm_file://<video_file_id>"}, "role": "reference_video"},
{"type": "audio_url", "audio_url": {"url": "mm_file://<audio_file_id>"}, "role": "reference_audio"}
],
"resolution": "768P",
"duration": 5,
"ratio": "16:9"
}'Response Example
{
"task": {
"id": "5708273498515694596",
"model": "MiniMax-H3",
"status": "succeeded",
"created_at": 1792736400,
"updated_at": 1792736475,
"content": { "url": "https://.../video-media/out/...(signed query omitted)" },
"resolution": "768P",
"duration": 5,
"ratio": "16:9",
"usage": {
"total_seconds": 5, "input_seconds": 0, "output_seconds": 5,
"input_image_count": 0,
"total_tokens": 0, "prompt_tokens": 0, "completion_tokens": 0
},
"task_type": "generation"
}
}Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | ✓ | Fixed to "MiniMax-H3". |
content | array | ✓ | Content list, up to 32 elements. It must contain exactly one text element (at most 7000 characters); the rest are media elements (image_url / video_url / audio_url). Reference media with mm_file://<file_id> (recommended; upload via /v1/files/upload first) or a publicly reachable https:// URL; http:// and data: URIs are not supported. The request body must not exceed 1 MB, so upload media and reference it rather than embedding it in the body. |
content[].role | string | — | Media role. image_url takes first_frame / last_frame / reference_image; video_url can only be reference_video and audio_url only reference_audio, and both may be omitted. When several media are given, every image must carry a role; first/last frames cannot be mixed with reference_* media; at most 1 first frame and 1 last frame, reference images ≤ 9, reference videos ≤ 3, reference audios ≤ 3, 15 media in total. |
resolution | string | ✓ | Output resolution; only "768P" is supported. |
duration | integer | ✓ | Video length in seconds, an integer from 4 to 15; the example uses 5. |
ratio | string | — | Aspect ratio: 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 / adaptive. Required for text-to-video and cannot be adaptive there; may be omitted when a first/last frame is given, in which case the output follows the first frame's ratio. |
callback_url | string | — | Not supported yet; omit it or pass an empty string, and poll the query endpoint for the result. |
aigc_watermark | bool | — | Not supported yet; omit it or pass false. |