MiniMax H3 ControlNet 2.0 v1 config: a silent load_state_dict failure
Loading the v1 5-block config on the 2.0 checkpoint drops control_blocks.5~9 without an error. Use the post_norm config. Sume rejects bad fields with a 400.

Use minimax_h3_control_inpaint_post_norm.yaml with the 2.0 checkpoint. The model card says loading the v1 config, minimax_h3_control.yaml, builds only half the control branch, and load_state_dict(strict=False) drops control_blocks.5~9 as unexpected keys without raising an error.
Checkpoint facts are from the model card, read 2026-10-01. Sume's request behavior is from Video generation and the Image API.
Why is the failure silent?
The 2.0 checkpoint holds control_proj_in plus 10 control_blocks (about 13.5 GB). The v1 config has 5 control blocks at layers 0, 10, 20, 30 and 40; 2.0 uses layers 0, 5, 10 through 45. With strict=False the loader ignores keys it has no module for, so a mismatched config still returns a model. The card says the rest are misplaced and the outputs come out wrong.
| Item | v1 | 2.0 |
|---|---|---|
| Control blocks | 5 (layers 0, 10, 20, 30, 40) | 10 (layers 0, 5, ..., 45) |
| Checkpoint size | about 6.8 GB | about 13.5 GB |
| Required config | minimax_h3_control.yaml | minimax_h3_control_inpaint_post_norm.yaml |
| Inpaint mask recipe | pre_norm | post_norm |
How do I catch it before a render?
Load with strict=True once, or print the missing and unexpected keys that load_state_dict returns, and fail if control_blocks.5 to control_blocks.9 appear as unexpected. Checking the config filename in your launch script is the cheaper guard. These are generic PyTorch practices, not steps from the card, which only says to always use the post_norm config.
How does Sume treat a field the model does not accept?
Loudly. The image docs say a request that sets a parameter the selected model does not list is rejected with 400 unsupported_parameter rather than silently dropped. The video docs say the same for size (every v1 model reports supported_sizes: null) and for seed (no v1 model accepts it). So a wrong field fails at submit time instead of producing a quietly different render.
What should a retry look like on a hosted video job?
Send Idempotency-Key on the create call. The video docs say it makes retries safe and that a replay returns the original job. A 400 from a bad field is a different case: fix the body, then submit again. The input types a model accepts are advertised in the catalog as supported_input_references, for example image_url, video_url and audio_url; check them before sending references. See also idempotency keys for AI video APIs.
Sources
Related posts
More in Developers
- MiniMax H3 reference input limits: 30 MB, 50 MB, 64 MB request
MiniMax H3 caps images at 30 MB, reference video at 50 MB and the request at 64 MB, and says to use public URLs. A pre-flight list, and how Sume takes URLs.
- MiniMax H3 license: 'Powered by' notice vs required UI display
The MiniMax H3 license only encourages a 'Powered by' notice, but IV.2 requires 'MiniMax H3' on the UI of commercial products. Plus a Sume overlay plate.
- MiniMax H3 license: no training other AI models on its outputs
Section V.3 of the MiniMax H3 license bars using the Works or their Outputs to improve any other AI model. What the clause and Model Derivatives say.
- Modal 150-second web timeout and 303 redirect: Sume polling
Modal web endpoints return a 303 redirect after 150 seconds. Sume returns 202 with status_url and result_url, so a client polls and follows no redirects.
Written by Sume