MiniMax H3 Needs a Schema, Not Prose
We rewrote a camera move and the walk direction and got a byte-identical video. We changed only the seed and got a different film. What H3 actually listens to, measured on a local 16 GB GPU.

Key takeaways
- H3 takes a named-field schema, not prose — and the open-source wrapper we ran passes your text through verbatim, so if you do not write the schema nobody does.
- Rewriting the camera move and walk direction produced zero pixel change; changing only the seed produced a different film. Budget seeds, not rewrites.
- There is no negative prompt field: 'no text, no logos' preceded a garbled wordmark appearing, and naming the empty area as a material fixed it.
- 'Static shot' drifted into a push-in in 2 of 3 runs. Write a real, small move instead.
- Same seed and same step count re-rendered byte-identical four days later; a different step count gave a different performance.
The fields H3 expects
MiniMax H3 is trained on structured prompts. For text-to-video and first/last-frame work, the official structure is three fields, in order:
- integrated_multimodal_description — the whole timeline: subjects, action, camera, cuts, dialogue and on-screen music.
- overall_soundscape — ambience, action sounds and non-verbal sounds, in one to four sentences.
- non_diegetic_music — the score only: instrumentation, tempo, dynamics, with no mood words; "N/A" when there is none.
Dialogue never goes in the soundscape field. It is written inline, with only the literal words inside the dialogue tag and the delivery outside it.
The open-source wrapper we run H3 in passes prompt text through verbatim, and its shipped example prompts are plain prose. Starting from those examples is the bug.
The seed decides the shot
Our most uncomfortable result: we reversed a character's walk direction and changed the camera move in the prompt, and the output had zero pixel change across 124 frames. Changing only the seed produced a different film.
In the same test, explicit lines such as "holds her profile for the entire shot" and "never rotates toward the lens" were ignored. On our runs, the prompt set the scene, subject, wardrobe, mood and audio — not the blocking or the camera.
The practical consequence: when a shot is wrong, render three or four seeds and pick, rather than rewriting the prompt again and again.
Writing camera moves it will follow
Camera instructions have three parts in the official guide: the type (push in, pull out, truck, pan, tilt and so on), the amplitude (small or large — there is no medium) and the speed (slow or fast). "Push in" on its own is underspecified.
"Static shot" is not a lock. In our tests two of three static shots drifted into push-ins, and one flipped night to day. A small, slow lateral truck held. When a shot must look locked, a slow pull-out with small amplitude was the safer choice.
A push-in re-renders the subject, and re-rendering invents: fine ornament degraded into a plain ring, and an emblem appeared on a blank panel. On a wide profile shot, any increase in scale acted as a request to turn — the face went from profile to frontal within two seconds.
Why 'no X' backfires
H3 has no negative prompt field, so everything you type is positive conditioning. After a prompt said "no text, no logos", a garbled wordmark faded into an empty black background.
What held was naming the empty area as a material: "seamless black velvet infinity backdrop". The official examples work the same way — short positive states such as "her lips remain completely closed" instead of lists of what must not happen.
Empty space is the related trap. A grey wall left blank for later compositing came back with a second woman, studio lamps and a runway show, on two of two seeds. Describe what fills every region, or the model will.
Image-to-video: what frame zero must contain
In our tests the subject had to be large, sharp and unambiguous in the first frame. Back-view frames with a hidden face failed five of five times — the model turned her to camera. A small reflection, about 200 pixels, was replaced by a full street scene.
Unfilled time summons the same human prior as unfilled space. A lone chrome balloon failed five of five single-frame runs, always around two seconds in, with a person invented in the basket. The same plate with start and end keyframes ran the full ten seconds without drifting.
Expression comes from the start frame, not the prompt. A start frame already at the peak of a laugh gave a sustained five-second laugh.
Settings that fit a 16 GB GPU
| Setting | Result |
|---|---|
| 704×1280 (9:16) | Delivery setting; about 10 GB in reference mode |
| 1088×1920 | Thrashes: 248 s per step and heavy shared-memory spill |
| 832×480 | Runs at 56 s per step, but soft and landscape |
| 704×1280, 8 steps | 7 min 21 s |
| 704×1280, 4-step LoRA | 5 min 15 s, preferred in 3 of 3 frame pairs |
In image-to-video, resolution is a pixel budget and the output follows the start image's aspect: a 3:4 plate requested at 704×1280 came out at 832×1088. Decide the aspect at the still stage.
Rendering is deterministic. The same seed and step count re-rendered byte-identical four days later. But a different step count is a different take: at 4.8 seconds the 8-step render had the eyes open toward the lens and the 4-step render had them closed. Record the step count alongside the seed.
Audio comes in the same file
H3 generates stereo audio with the video. A healthy run measured a mean of about −17 dB. Two things to watch:
- Silent audio still shows up as an audio stream. Check loudness, not presence.
- Unused speaking time gets filled with invented gibberish. Shorten the clip or give the character something to do.
An action can also beat a line of dialogue: in four of four clips where a character held a drink, the drink-and-react action took over and the spoken line never arrived. Check dialogue with speech recognition, not loudness — room tone alone measured about −20 dB.



