minimax-h3-spec
A machine-readable spec sheet for MiniMax H3 (the video model MiniMax also ships as Hailuo 3), plus a small validator that catches the request errors the API only tells you about after it has charged you.
Every field in h3_spec.json carries the source it came from. If a number here disagrees with something you read elsewhere, open an issue — several of the highest-ranking pages about this model contradict MiniMax's own API reference, and I would rather be corrected than copied.
pip install h3check
h3check grid
h3check cost --duration 8 --resolution 2K
h3check validate request.json
No dependencies, at runtime or for the tests. Python 3.9+. python3 -m h3check ... works
too, and the package is two files — copy src/h3check/__init__.py and
src/h3check/h3_spec.json side by side into another project if you would rather vendor it
than depend on it.
Full documentation, including every validation message with its cause and fix, is at minimax-h3-spec.readthedocs.io.
The thing that surprised me: the duration you ask for is not the duration you get
H3 renders on a frame-block grid. Frame count follows 17n + 5, and the output is 24 fps, so most durations land on a fraction of a second:
n frames seconds
6 107 4.458
7 124 5.167
8 141 5.875
9 158 6.583
10 175 7.292
11 192 8.000 <- whole second
12 209 8.708
13 226 9.417
14 243 10.125
15 260 10.833
16 277 11.542
17 294 12.250
18 311 12.958
19 328 13.667
20 345 14.375
Ask for 5 seconds and you get 5.167. Ask for 10 and you get 10.125.
Exactly one value in the 4–15 second range lands on a whole second. Solve (17n + 5) mod 24 = 0, i.e. 17n ≡ 19 (mod 24). Since 17 is its own inverse mod 24, n ≡ 11 (mod 24), and only n = 11 falls in range: 192 frames, exactly 8.000 seconds.
Anyone can check that with a calculator, which is why I was surprised not to find it documented anywhere. If you are cutting to music, or stitching clips end to end, 8 seconds is the only length that will not drift.
Three more things the validator catches
The reference-file caps do not add up the way they look. Nine images, three clips and three audio files is 15, and 15 is the number several write-ups print. The API caps the total at 12. h3check.py validate fails the request before you upload 40 MB of assets.
There is no 1080p and no 4K. Output is 768P or 2K, with nothing in between and nothing above. A request for 1080p is rejected, not downgraded. The 2K path is also not an upscale — the 768P result is fed back through the model together with your original context and generated again, which is why small on-screen text survives it.
Audio is not optional. Picture and 32 kHz stereo come out of the same forward pass. There is no on/off switch and no separate line on the bill, because there is no separate step. If your code sets generate_audio: false, it is being ignored.
Example
$ cat request.json
{
"mode": "ref2va",
"duration": 10,
"resolution": "2K",
"aspect_ratio": "9:16",
"references": {
"images": ["a.png", "b.png", "c.png", "d.png", "e.png",
"f.png", "g.png", "h.png", "i.png"],
"videos": [{"url": "clip.mp4", "seconds": 6}],
"audio": [{"url": "vo1.wav", "seconds": 5},
{"url": "vo2.wav", "seconds": 5},
{"url": "room.wav", "seconds": 5}]
}
}
$ h3check validate request.json
FAIL
ERROR 13 reference files exceeds the total cap of 12 - the per-type caps add up to 15, but the total is 12
note duration 10s renders as 243 frames = 10.125s (n=14). The only whole second in range is 8.000s (192 frames).
note hosted cost at 2K: $1.3163 for 10.125 rendered seconds
Each of those three inputs is legal on its own — nine images is the image cap, one clip is under the clip cap, three audio files is the audio cap. It is the total that fails.
What is actually open
H3 is three stages, and only the middle one was published:
| Stage | Published | What it does |
|---|---|---|
H3-Context-IR |
no | reads and rewrites your multimodal instruction |
H3-Base |
yes | renders 768P picture and 32 kHz stereo in one forward pass |
H3-Regenerate-2K |
no | feeds the 768P result back through with the original context |
So downloading the weights gets you the middle stage. It is also worth saying "open weights" rather than "open source": the MiniMax H3 Community License fails two of the OSI's ten criteria, and Hugging Face's own tag for it is other. The territory restriction is the part most summaries stop short of — §V.4 extends it to the outputs, not just the weights.
Sources and further reading
The spec tables this repo is generated from, with each row linked to its primary source and dated, live at minimax-h3ai.video — that site is also a browser-based MiniMax H3 video generator if you want to check a claim against a real render rather than take my word for it. The first clip runs without an account.
Two pages there go deeper than this README does:
- The reference-to-video caps in full, including per-file size and aspect-ratio bounds
- A clause-by-clause reading of the H3 licence, including the output clause
Primary sources for everything else: MiniMax's API reference and pricing page at platform.minimax.io, the MiniMaxAI/MiniMax-H3 model card on Hugging Face, and the Comfy-Org/ComfyUI release notes for the node-level behaviour.
Disclosure: I maintain minimax-h3ai.video. It is an independent third-party interface and is not affiliated with MiniMax. This repo is MIT-licensed and takes corrections.
Contributing
Found a number that is wrong, or a constraint the validator misses? Open an issue with the source and I will update h3_spec.json. Tests live in test_h3check.py and need no install:
python3 test_h3check.py
Last verified against the API reference: 2026-08-24.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file h3check-0.1.0.tar.gz.
File metadata
- Download URL: h3check-0.1.0.tar.gz
- Upload date:
- Size: 13.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f50c994fc77190111a4a358cae2131f73c81a33c0ebd9a64aa89fa2249281d4
|
|
| MD5 |
5f69b20e886c06fa2f567eea241eef3c
|
|
| BLAKE2b-256 |
aa03661259e29e54c33af978139d3a6765072baeaa1a208a3d598e90efc6ace3
|
File details
Details for the file h3check-0.1.0-py3-none-any.whl.
File metadata
- Download URL: h3check-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b32b531b6c77845980d52bfce602a9eafb5fa6bc890c808602d18b0ebb3292dc
|
|
| MD5 |
79659c86e2b4d2040ab4d0c4301c19e7
|
|
| BLAKE2b-256 |
49812a118f18ce348c96848645a0d2c651b69c132283634fe747728152792fa1
|