MiniMax H3 Fun ControlNet Union 2.0 in ComfyUI: Eight Control Types
Alibaba PAI's ControlNet Union 2.0 for MiniMax H3 adds Scribble, Layout and Gray control and doubles the injection blocks, with same-day ComfyUI support.
The previous checkpoint (MiniMax H3 Fun ControlNet Union, August 24, 2026) shipped Canny, Depth, HED, MLSD and Pose with five control blocks. Version 2.0 keeps that interface and rebuilds the control branch: the new checkpoint is about 13.5 GB and ComfyUI supports it natively on the same day it was published.
What changed in 2.0
| v1 (August 2026) | v2.0 (this release) | |
|---|---|---|
| Control conditions | 5: Canny, Depth, HED, MLSD, Pose | 8: adds Scribble, Layout, Gray |
| Control branch depth | 5 control blocks (0, 10, 20, 30, 40) | 10 control blocks (0, 5, 10, ..., 45) |
| Inpaint masked-pixel recipe | pre_norm (holes ≈ -2, near black) | post_norm (holes at 0, mid-gray) |
| Checkpoint contents | control_proj_in + 5 blocks (~6.8 GB) | control_proj_in + 10 blocks (~13.5 GB) |
| Required config | minimax_h3_control.yaml | minimax_h3_control_inpaint_post_norm.yaml |
Everything else carries over: control_in_dim = 49 (latent + masked latent + mask, so one branch handles both control and inpainting), control_apply_audio = false, guidance-distilled weights that run at guidance_scale = 1.0, and a zero-gated skip add into the main branch.
The injection layout is the notable change. Control signals now attach to ten of the 50 transformer blocks instead of five, roughly doubling the injection points, which the model card credits with tighter structural adherence.
Eight control conditions
| Condition | Control signal | New in 2.0 |
|---|---|---|
| Canny | Canny edge map | |
| Depth | Monocular depth map | |
| HED | HED edge detection | |
| MLSD | Line-segment detection | |
| Pose | DWPose skeleton | |
| Scribble | Free-hand or sketch lines | ✅ |
| Layout | Bounding-box layout video | ✅ |
| Gray | Grayscale (luminance) video | ✅ |
Layout follows the layout recipe from Wan2.1-VACE: per-subject boxes are rendered as color-coded rectangles on a white background and fed in as an ordinary RGB video. Generative follows the control video in frame count (snapped down to the largest 17 * n + 5 the video VAE can decode, capped at 15 seconds), aspect ratio and a fixed 24 fps.
Running it in ComfyUI
ComfyUI gained support for the new checkpoint in PR #16471 (CORE-462, merged September 22, 2026), which updates the MiniMax H3 control path in three places:
comfy/ldm/minimax/controlnet.pylearns theinpaint_post_normflag, so masked pixels are zeroed after VAE normalization instead of before it.comfy_extras/nodes_minimax_h3.pyadds the ImageNet mean back into the masked region when that flag is set, matching how the 2.0 checkpoint was trained.comfy_extras/nodes_model_patch.pynow derives the injection layers from the checkpoint itself (range(0, 50, 50 // num_blocks)), so one loader handles both the 5-block v1 and the 10-block v2.0 weight files.
In a graph you use the same two nodes as before: ModelPatchLoader for the control branch and MiniMaxH3FunControlNetApply to bind the control video to the sampler. The published checkpoint is the raw control branch, so ComfyUI users load one of the converted patches from Kijai's MiniMax H3 repository instead:
- minimax_h3_fun_controlnet_union_2.0_pruned_bf16.safetensors
- minimax_h3_fun_controlnet_union_2.0_pruned_int8_convrot.safetensors
The official template that ships with ComfyUI, video_minimax_h3_fun_controlnet_union, already wires up the whole chain for pose control (resolution selector, H3 reference-to-video node, VAE pair, an SDPose video-pose preprocessing subgraph, and the sampler). Swap the patch file in ModelPatchLoader to the 2.0 build and it runs the new checkpoint.
Preview render shipped with the official pose-control template in ComfyUI
Second preview render from the same template
Results
The model card publishes a control video and a generated output for every condition, all at 40 inference steps with guidance_scale = 1.0 and control_context_scale = 1.00. In each pair below the left image is the control signal and the right image is the output.
![]() | ![]() |
|---|---|
| Pose control video | Generated output |
![]() | ![]() |
|---|---|
| Layout control video (new in 2.0) | Generated output |
![]() | ![]() |
|---|---|
| Scribble control video (new in 2.0) | Generated output |
The full clips, including the inpainting pair, are on the model page.
Availability
The checkpoint runs through the VideoX-Fun inference pipeline, as with v1: clone VideoX-Fun, place the base MiniMax H3 model and the 13.5 GB control branch under models/Diffusion_Transformer/, and point examples/minimax_h3_fun/predict_v2v_control.py at the new weights. The model card flags one trap in particular: loading the v1 config (minimax_h3_control.yaml) against the 2.0 checkpoint is a silent failure because only half the control branch is built, so control_blocks.5~9 are dropped as unexpected keys and the rest are misplaced. Always use minimax_h3_control_inpaint_post_norm.yaml.
control_context_scale still scales every control skip before it is added to the main branch: 1.0 for the strongest control, lower values for weaker guidance, and 0.0 to switch the control branch off entirely.






Comments
Sign in with GitHub to join the discussion.