Spec field reference¶
h3_spec.json is the data half of the project. The code contains no constants of its
own beyond the frame-block arithmetic — everything else is read from this file at import
time, so correcting a number here corrects the validator, the cost calculator and the CLI
choices at once.
Every top-level section carries a source field. Several carry a commonError field,
which records what widely published pages say when it differs from the API reference.
model¶
| Field | Value | Notes |
|---|---|---|
name / alternateName |
MiniMax H3 / Hailuo 3 |
Same model, two product names |
announced |
2026-07-31 |
|
weightsPublished |
2026-08-02 |
|
weightsScope |
H3-Base only |
See pipeline below |
licence |
MiniMax H3 Community License | |
licenceIsOsiOpenSource |
false |
Fails 2 of the OSI's 10 criteria; Hugging Face tags it other |
The licenceIsOsiOpenSource flag exists so that downstream tooling can refuse to print
"open source" for this model. Open weights is the accurate term.
pipeline¶
H3 is three stages, and only the middle one was published.
| Stage | Hosted | Published | Does |
|---|---|---|---|
H3-Context-IR |
yes | no | reads and rewrites the multimodal instruction |
H3-Base |
yes | yes | renders 768P picture plus 32 kHz stereo in one forward pass |
H3-Regenerate-2K |
yes | no | feeds the 768P result back through with the original context |
This is why a local graph and the hosted demo produce different results from the same prompt: downloading the weights gets you the middle third. The instruction rewriting in front of it and the 2K regeneration behind it are not in the release.
duration¶
| Field | Value |
|---|---|
min / max |
4 / 15 |
integerOnly |
true |
commonError |
"Many write-ups state a 5-second floor. The API reference accepts 4." |
frameGrid¶
| Field | Value |
|---|---|
formula |
frames = 17n + 5 |
fps |
24 |
nRangeWithinDuration |
[6, 20] |
wholeSecondSolutions |
n = 11, 192 frames, 8.0 s |
verifiedFrameCeiling |
362 |
wholeSecondProof carries the modular arithmetic in full; it is reproduced in
Validation rules.
resolution¶
| Field | Value |
|---|---|
allowed |
["768P", "2K"] |
shortEdge |
768 / 1440 |
no1080p / no4k |
true / true |
twoKMethod |
re-generation — not an upscale |
aspectRatios¶
21:9, 16:9, 4:3, 1:1, 3:4, 9:16.
audio¶
| Field | Value |
|---|---|
sampleRate / channels |
32000 / 2 |
generatedInSamePass |
true |
canBeDisabled / billedSeparately |
false / false |
dialogueLanguages |
11 |
videoFlowShift / audioFlowShift |
12 / 3 |
The two flow-shift values are the useful entry here for anyone assembling their own sampler. Picture and audio run on different flow schedules. A single-clock sampler over-samples the audio: invisible at 20 steps, audible as clipping at 4.
prompt¶
| Field | Value |
|---|---|
maxCharacters |
7000 |
structure |
subject, action_and_camera, sound |
speakerTags |
(S1), (S2) |
referenceInputs¶
| Field | Value |
|---|---|
maxFilesTotal |
12 |
image.maxCount / maxBytes |
9 / 30 MB |
image.formats |
jpg, jpeg, png, webp, heic, heif |
image.pixelRange / aspectRatioRange |
[256, 5760] / [0.4, 2.5] |
video.maxCount / maxBytes |
3 / 50 MB |
video.containers / videoCodecs / audioCodecs |
mp4, mov / h264, h265 / aac, mp3 |
video.perClipSeconds / totalSeconds |
[2, 15] / 15 |
video.fpsRange |
[23.976, 60] |
audio.maxCount / maxBytes |
3 / 15 MB |
audio.formats |
wav, mp3 |
audio.perClipSeconds / totalSeconds |
[2, 15] / 15 |
requestBodyMaxBytes |
64 MB — prefer public URLs over base64 |
image.roles records that one image may be first_frame, one may be last_frame, and up
to nine may be reference_image — which is the other reason the per-type numbers do not
simply add up.
modes¶
| Mode | Input |
|---|---|
t2va |
text only |
i2va |
text + one image as first_frame or last_frame |
fl2va |
text + two images bracketing the shot |
ref2va |
text + any mix of reference image / video / audio |
regeneration |
exactly one video item with role=base_video |
hostedPricing¶
| Field | Value |
|---|---|
perOutputSecond |
768P $0.08, 2K $0.13 |
eightSecond2kClip |
$1.04 |
comparison.veo31StandardEightSecond1080p |
$3.20 |
The keys of perOutputSecond are what populate --resolution on the
cost subcommand.
taskLifecycle¶
| Field | Value |
|---|---|
queryWindowDays |
7 — older task IDs return invalid task_id |
outputUrlExpires |
true — download or re-host promptly |
Both matter for archival. If your pipeline records task IDs and expects to resolve them later, it has a week.
comfyui¶
| Field | Value |
|---|---|
minimumUsableVersion |
0.32.0 |
oomRootCause |
host RAM and the memory planner, not VRAM |
oomWorkaround |
--disable-pinned-memory, not combined with --lowvram |
resolutionSelectorMultiple |
32 |
0.30.0 added the nodes, 0.31.0 shipped six audio fixes, 0.32.0 fixed peak memory. Almost every tutorial says "0.30.0 or later", which hands the reader corrupted audio and an OOM.
docs¶
Four URLs on the maintainer's site, carried in the spec file so that tooling generating error messages can link to a fuller explanation of a constraint. The spec tables with each row linked to its primary source, and a browser front-end you can use to check a claim against a real render, are at minimax-h3ai.video — an independent third-party interface, not MiniMax's own.
lastVerified¶
The date the whole file was last checked against primary sources. Treat anything older than a month or two as suspect; this model's tooling has moved three times since launch.