DHan-Minimax H3 Director
Inside the DHan-Minimax H3 Director
- model
- model_ref2va
- clip
- vae
- audio_vae
- model
- positive
- latent
- fps
- negative
The problem this solves
MiniMax H3 is the 33B omni-modal video model MiniMax opened in August 2026: 4–15 seconds at up to 2K/24fps, with stereo audio generated in the same pass rather than bolted on afterwards. ComfyUI shipped day-zero support for it. What ComfyUI did not ship is a way to say "this image at 0s, that image at 2.5s, this prompt in between, and a voice reference for the character" without hand-building conditioning.
That's the DHan-Minimax H3 Director. It's a timeline editor bolted onto ComfyUI's native H3 nodes - the node where you actually author the clip. Everything else in the pack is a companion to it.
What it does, mechanically
The Director does not reimplement H3. It reaches into ComfyUI's own comfy_extras/nodes_minimax_h3.py and calls MiniMaxH3ImageToVideo (FL2VA) or MiniMaxH3ReferenceToVideo (Ref2VA) directly, then applies MiniMaxH3SigmaShift on the way out. That's deliberate: you get the conditioning the core nodes produce.
Your timeline is serialized into the timeline_data widget as JSON and planned by a metadata-only module: which image is the opening frame, which becomes a <Picture i> reference, how the storyboard prompt reads. Frame counts snap to H3's 17k+5 grid, and the trained envelope is 96–360 frames - go past ~15s and the node logs a warning rather than stopping you.
The inputs you'll actually touch
model_type-FL2VA(first/last frame),Ref2VA(reference subjects and media, inside H3's own limits of 9 pictures, 3 video clips and 3 audio clips), orRetake. Ref2VA subject cards live inside the node's own panel; you type@char1,@char2,@char3in prompts and the planner maps them to native references.model/model_ref2va- two lazy single-branch inputs. Only the branch your mode needs gets evaluated, which is what keeps a 33B checkpoint from being staged twice.clip,vae,audio_vae- the video VAE is mandatory (the node raises if it's missing);audio_vaeis only required when Ref2VA actually has audio references.shift_video/shift_audio- default 12 and 3. These are H3's sigma shift; leave them unless you know why you're moving them.negative_prompt+negative_prompting- off by default. Flip it on and the pack's Guider switches from BasicGuider to CFG on its own.custom_width/custom_height/resize_method- set width or height to 0 and the source aspect ratio is preserved automatically.
Timing shows up twice, in seconds and in frames, driven by display_mode; the JS timeline panel is the source of truth and writes both. Retake is the third mode: load a source video, mark a range, prompt the replacement, and the node anchors the new clip on the frames immediately before and after your selection - it uses FL2VA under the hood and returns only the regenerated section, so stitching is on you.
Outputs
model is the sigma-shifted patched model - feed it to the Sampling Preset, and to your Guider (through the Preview Override if you're using one). positive goes to the Guider. negative carries text-only negative conditioning plus two metadata flags the Guider reads. latent is the H3 AV latent, and it smuggles a dhan_h3_long_plan dict along with it that the Long Sampler picks up for anything over 15 seconds. fps reports 24.
Sampling stays external on purpose: this node conditions, it doesn't sample.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/DHan315/Comfyui-DHan-Minimax-H3-Director
# restart ComfyUI
Node weights aren't included - this pack ships code, not the 33B checkpoint, its video VAE or its audio VAE. There's no requirements.txt; the modules import av (PyAV) and torchaudio at load time, so if either is missing, install it into ComfyUI's Python (pip install av torchaudio in the right environment) or the whole pack fails to register. ComfyUI Manager can do the clone for you if you search the pack title.
Where you'll get burned
The node IDs were renamed to the DHan… prefix at some point, so workflows saved against the old IDs show missing nodes - you have to drop in the new nodes and reconnect, not just re-load. Two errors you'll see verbatim are "connect CLIP" and "connect the MiniMax H3 video VAE," which is the node being honest about what H3 conditioning needs. And one non-technical trap: H3's community licence excludes the US, EU, UK and Korea, so "I downloaded the weights" and "I'm licensed to run them" are different statements depending on where you live.
Inputs (36)
| Name | Type | Default | Description |
|---|---|---|---|
| model_type | COMBO | FL2VA | 3 options: FL2VA, Ref2VA, Retake |
| shift_video | FLOAT | 12.000.01–100 | — |
| shift_audio | FLOAT | 3.000.01–100 | — |
| start_second | FLOAT | 0.000–1000 | — |
| end_second | FLOAT | 5.000–1000 | — |
| duration_seconds | FLOAT | 5.000.1–1000 | — |
| start_frame | INT | 00–100000 | — |
| end_frame | INT | 1201–100000 | — |
| duration_frames | INT | 1201–100000 | — |
| timeline_data | STRING | — | |
| local_prompts | STRING | — | |
| segment_lengths | STRING | — | |
| epsilon | FLOAT | 0.00100.0001–0.99 | — |
| guide_strength | STRING | — | |
| modelopt | MODEL | FL2VA H3 model branch. | |
| model_ref2vaopt | MODEL | Ref2VA H3 model branch. | |
| clipopt | CLIP | — | |
| vaeopt | VAE | MiniMax H3 video VAE | |
| audio_vaeopt | VAE | MiniMax H3 audio VAE; required for Ref2VA | |
| use_custom_audioopt | BOOLEAN | false | — |
| use_custom_motionopt | BOOLEAN | true | — |
| inpaint_audioopt | BOOLEAN | true | — |
| frame_rateopt | FLOAT | 241–240 | — |
| display_modeopt | COMBO | seconds | 2 options: frames, seconds |
| custom_widthopt | INT | 00–8192 | Target output width. Set to 0 to use/derive from the source image. |
| custom_heightopt | INT | 00–8192 | Target output height. Set to 0 to use/derive from the source image. |
| resize_methodopt | COMBO | maintain aspect ratio | DHan resize behavior. Use width=0 or height=0 to preserve source aspect ratio automatically. |
| img_compressionopt | INT | 00–100 | — |
| voice_reference_audioopt | COMBO | none | 1 options: none |
| voice_lora_nameopt | COMBO | None | 1 options: None |
| voice_lora_strengthopt | FLOAT | 1.00-10–10 | — |
| voice_identity_guidanceopt | FLOAT | 3.000–100 | — |
| voice_reference_secondsopt | FLOAT | 5.01–30 | — |
| override_audioopt | BOOLEAN | false | — |
| negative_promptopt | STRING | Optional H3 negative prompt. Used by Comfyui-DHan-H3 Guider when Negative Prompting is enabled. | |
| negative_promptingopt | BOOLEAN | false | Enable negative prompting. Comfyui-DHan-H3 Guider automatically switches from BasicGuider to CFG when this is ON. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| latent | LATENT | — |
| fps | FLOAT | — |
| negative | CONDITIONING | — |