Nodes/Comfyui-DHan-Minimax-H3-Director/DHan-Minimax H3 Director
ComfyUI Node

DHan-Minimax H3 Director

Inside the DHan-Minimax H3 Director

By DHan315·Created 2 days ago·Updated a day ago· 0
DHan-Minimax H3 Director
  • model
  • model_ref2va
  • clip
  • vae
  • audio_vae
  • model
  • positive
  • latent
  • fps
  • negative
◄model_typeFL2VA►
◄shift_video12.00►
◄shift_audio3.00►
◄start_second0.00►
◄end_second5.00►
◄duration_seconds5.00►
◄start_frame0►
◄end_frame120►
◄duration_frames120►
◄timeline_data►
◄local_prompts►
◄segment_lengths►
◄epsilon0.0010►
◄guide_strength►
◄use_custom_audiofalse►
◄use_custom_motiontrue►
◄inpaint_audiotrue►
◄frame_rate24►
◄display_modeseconds►
◄custom_width0►
◄custom_height0►
◄resize_methodmaintain aspect ratio►
◄img_compression0►
◄voice_reference_audionone►
◄voice_lora_nameNone►
◄voice_lora_strength1.00►
◄voice_identity_guidance3.00►
◄voice_reference_seconds5.0►
◄override_audiofalse►
◄negative_prompt►
◄negative_promptingfalse►

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), or Retake. Ref2VA subject cards live inside the node's own panel; you type @char1, @char2, @char3 in 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_vae is 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.

CategoryComfyui-DHan/Minimax H3 Director

Inputs (36)

NameTypeDefaultDescription
model_typeCOMBOFL2VA3 options: FL2VA, Ref2VA, Retake
shift_videoFLOAT12.000.01–100—
shift_audioFLOAT3.000.01–100—
start_secondFLOAT0.000–1000—
end_secondFLOAT5.000–1000—
duration_secondsFLOAT5.000.1–1000—
start_frameINT00–100000—
end_frameINT1201–100000—
duration_framesINT1201–100000—
timeline_dataSTRING—
local_promptsSTRING—
segment_lengthsSTRING—
epsilonFLOAT0.00100.0001–0.99—
guide_strengthSTRING—
modeloptMODELFL2VA H3 model branch.
model_ref2vaoptMODELRef2VA H3 model branch.
clipoptCLIP—
vaeoptVAEMiniMax H3 video VAE
audio_vaeoptVAEMiniMax H3 audio VAE; required for Ref2VA
use_custom_audiooptBOOLEANfalse—
use_custom_motionoptBOOLEANtrue—
inpaint_audiooptBOOLEANtrue—
frame_rateoptFLOAT241–240—
display_modeoptCOMBOseconds2 options: frames, seconds
custom_widthoptINT00–8192Target output width. Set to 0 to use/derive from the source image.
custom_heightoptINT00–8192Target output height. Set to 0 to use/derive from the source image.
resize_methodoptCOMBOmaintain aspect ratioDHan resize behavior. Use width=0 or height=0 to preserve source aspect ratio automatically.
img_compressionoptINT00–100—
voice_reference_audiooptCOMBOnone1 options: none
voice_lora_nameoptCOMBONone1 options: None
voice_lora_strengthoptFLOAT1.00-10–10—
voice_identity_guidanceoptFLOAT3.000–100—
voice_reference_secondsoptFLOAT5.01–30—
override_audiooptBOOLEANfalse—
negative_promptoptSTRINGOptional H3 negative prompt. Used by Comfyui-DHan-H3 Guider when Negative Prompting is enabled.
negative_promptingoptBOOLEANfalseEnable negative prompting. Comfyui-DHan-H3 Guider automatically switches from BasicGuider to CFG when this is ON.

Outputs (5)

NameTypeDescription
modelMODEL—
positiveCONDITIONING—
latentLATENT—
fpsFLOAT—
negativeCONDITIONING—