Nodes/ComfyUI-MiniMaxH3-Director/MiniMax H3 Director
ComfyUI Node

MiniMax H3 Director

Edit MiniMax H3 like a storyboard instead of hand-writing its 500-word prompt

By seesee75-commits·Created 21 days ago·Updated 9 days ago· 250
MiniMax H3 Director
  • clip
  • vae
  • model
  • model_ref2va
  • audio_vae
  • ref_images
  • model
  • positive
  • latent
  • combined_audio
  • fps
  • width
  • height
  • length
  • prompt
  • retake_info
start_second0.00
end_second5.00
duration_seconds5.00
start_frame0
end_frame120
duration_frames120
timeline_data
local_prompts
segment_lengths
guide_strength
global_prompt
use_custom_audiofalse
use_custom_motiontrue
inpaint_audiotrue
frame_rate24
display_modeseconds
custom_width0
custom_height0
resize_methodcrop
divisible_by32
img_compression0
override_audiofalse
ref_image_sizematch
shift_video12.00
shift_audio3.00
ref_image_notes
start0.00
end0.00
duration0.00
width0
height0

MiniMax H3 is genuinely good - a 33B omni-modal model that renders video and native stereo audio in one pass, takes images, videos and audio as references, and anchors on a first and last frame. The catch is the input format. Everything you feed it arrives through one structured text prompt in MiniMax's own guide notation: subject_definitions, retention_analysis, detailed_description with [Shot N] markers and MM:SS.mmm timestamps, a 350–500 word budget, dialogue tagged with speaker IDs. Stock ComfyUI makes you hand-assemble that text and count frames onto H3's 17k+5 grid. MiniMax H3 Director replaces the whole job with a timeline, and compiles the prompt for you.

It's a port. The editing frontend is WhatDreamsCost's LTX Director, the timeline editor the LTX community converged on (Director 2.0 was a +486 thread on its own), now running an H3 backend. Same tracks, same ruler, same drag-resize-copy-paste: a main track for shots, a reference-video track, an audio track, and subject slots for @ref1@ref9.

How it works

You drop assets on tracks and write a plain sentence per segment. Segments become [Shot N] entries with timestamps. Images on the main track become first/last keyframes on the Refs OFF (fl2va) path, or <Picture i> references on Refs ON (ref2va). The reference-video track becomes <Video k>, audio clips become <Audio j> and a muxable mixdown. The node then compiles the whole MiniMax-notation prompt live, and the COMPILED PROMPT panel shows exactly what the model will receive before you spend a render on it: shot count, frame count, reference tally, word count, and warnings for the things that silently bite.

Two model inputs exist because H3 ships as two separate trainings. model takes the fl2va checkpoint (text→video, keyframes), model_ref2va the ref2va one (references). The toolbar switch picks which, and the losers are lazy - wiring both costs you ~42 GB of disk, not RAM, because the unselected loader never reads from disk.

The inputs and outputs that matter

Wire it by hand and only a few sockets are yours to worry about: clip (a CLIPLoader with type set to minimax - the Qwen3-VL-32B encoder), vae (the video VAE), duration_seconds (snaps up to the 17k+5 grid), and global_prompt for style and scene above the storyboard. The timeline_data, local_prompts and segment_lengths widgets are auto-managed JSON from the editor - don't hand-edit them. start/end/duration/width/height are connection-only automation sockets: wire a resolution node's two integers into width/height and the panel's own fields step aside.

Outputs: a patched model, positive conditioning, the joint AV latent, combined_audio (the mixdown), fps (always 24), width/height, length (frames actually generated), prompt (the compiled text) and retake_info for the Retake Stitch node. The joint latent goes to both VAEDecode (video VAE) and VAEDecodeAudio (audio VAE) - each pulls its own half out - and CreateVideo muxes them.

UNETLoader ×2 → model, model_ref2va
CLIPLoader (minimax) → clip
Director → model → BasicGuider → SamplerCustomAdvanced
           latent ──────────────────────────────→ sampler
           combined_audio → CreateVideo.audio
           fps → CreateVideo.fps

Sampler res_multistep, scheduler simple, ~20 steps, through BasicGuider with no CFG.

Installing it

ComfyUI Manager → search MiniMax H3 Director → install, or:

cd ComfyUI/custom_nodes
git clone https://github.com/seesee75-commits/ComfyUI-MiniMaxH3-Director

There's nothing to pip install - the package declares no third-party dependencies. You need ComfyUI ≥ 0.30.0. The models come from Comfy-Org/MiniMax-H3: two ~21 GB fp8 diffusion checkpoints, a ~15 GB Qwen3-VL text encoder, and two VAEs - budget ~60 GB of disk. 16 GB VRAM works with ComfyUI offloading at 480–768p; below that, heavy swapping.

Gotchas

  • Hard-reload the browser (Ctrl+F5) after installing. The timeline is a frontend extension; a stale cached .js is the single most common "node looks broken" report.
  • Length snaps, it doesn't stay put. 5 s becomes 124 frames → 5.17 s. That's H3's grid, not a bug.
  • Flat grey video but fine audio (every pixel the same value) is a NaN in the fp16 video VAE. Restart ComfyUI with --fp32-vae.
  • The license. H3's weights are geofenced: the MiniMax H3 Community License excludes the US, EU, UK and Korea. If you're in one of those, running the local weights isn't licensed - worth knowing before you invest in the downloads.

Retake Mode is in the toolbar: load a base video, mark a range, and H3 regenerates only that range anchored on the base video's own frames either side - wire retake_info into MiniMax H3 Retake Stitch to get the full video back. That one's a separate article.

CategoryMiniMax H3

Inputs (37)

NameTypeDefaultDescription
clipCLIPQwen3-VL-32B MiniMax text encoder (CLIPLoader type 'minimax').
vaeVAEminimax_h3_video_vae — encodes keyframes and references.
start_secondFLOAT0.000–1000Start of the render window, in seconds.
end_secondFLOAT5.000–1000End of the render window, in seconds.
duration_secondsFLOAT5.000.1–1000Render length in seconds. Snapped up to H3's 17k+5 frame grid at 24 fps.
start_frameINT00–10000Start of the render window, in timeline frames.
end_frameINT1201–10000End of the render window, in timeline frames.
duration_framesINT1201–10000Render length in timeline frames (at the timeline's frame_rate).
timeline_dataSTRINGJSON state of the timeline editor (auto-managed; do not edit by hand).
local_promptsSTRINGAuto-populated from the timeline editor.
segment_lengthsSTRINGAuto-populated from the timeline editor (pixel-space frame counts).
guide_strengthSTRINGAuto-populated from the timeline editor. H3 has no per-keyframe strength, so it is ignored.
modeloptMODELThe fl2va weights (minimax_h3_fl2va_*), used when the toolbar is on 'Refs OFF'. Connect both models and the node loads whichever the toolbar switch calls for — the other one is never read from disk.
model_ref2vaoptMODELThe ref2va weights (minimax_h3_ref2va_*), used when the toolbar is on 'Refs ON'. Optional — with only one model connected that one is used either way.
audio_vaeoptVAEminimax_h3_audio_vae. Only needed when audio references are used (ref2va).
global_promptoptSTRINGConditions the whole video: style, scene, characters. Written above the storyboard.
use_custom_audiooptBOOLEANfalseON: timeline audio clips are used as <Audio j> references (ref2va). The mixdown is always available on combined_audio regardless.
use_custom_motionoptBOOLEANtrueON: the reference-video track feeds <Video k> references (ref2va).
inpaint_audiooptBOOLEANtrueUnused on H3 — audio is generated jointly with the video and cannot be inpainted.
frame_rateoptFLOAT241–240Timeline editing rate. Output is always 24 fps; times are converted via seconds.
display_modeoptCOMBOsecondsShow the ruler and segment ranges in frames or seconds.
custom_widthoptINT00–8192Output width. With height set too this is a BOX: 'maintain aspect ratio' keeps the first image's aspect inside it. 0 = derive from the image.
custom_heightoptINT00–8192Output height. See custom_width.
resize_methodoptCOMBOcropHow timeline images are fitted to the output canvas.
divisible_byoptINT321–256Snap output dimensions to this multiple. H3 needs 32.
img_compressionoptINT00–100H.264 CRF baked into each keyframe. 0 = off (recommended for H3).
override_audiooptBOOLEANfalseUse the reference video's own soundtrack as the timeline audio.
ref_image_sizeoptCOMBOmatchref2va only. 'match' scales references to the output pixel area (fast); 'max' keeps a 2048 px short edge for identity, at real speed cost.
shift_videooptFLOAT12.000.01–100Video flow sigma shift (H3 default 12.0).
shift_audiooptFLOAT3.000.01–100Audio flow sigma shift (H3 default 3.0).
ref_imagesoptIMAGEExtra <Picture i> references (single image or batch), appended after the character slots. ref2va only.
ref_image_notesoptSTRINGOne line per image on 'ref_images', describing what it is: 'the kitchen set', 'a storyboard reference for the opening'. Without a line the picture is still numbered but the prompt says nothing about it. Blank lines count, so line 3 always belongs to the third image.
startoptFLOAT0.00Automation (connection-only). Window start in SECONDS.
endoptFLOAT0.00Automation (connection-only). Window end in SECONDS.
durationoptFLOAT0.00Automation (connection-only). Render length in SECONDS.
widthoptINT0Automation (connection-only). Output width in pixels, overriding the settings panel's Width. Wire a resolution node here; leave it unconnected to use the panel.
heightoptINT0Automation (connection-only). Output height. See width.

Outputs (10)

NameTypeDescription
modelMODEL
positiveCONDITIONING
latentLATENTJoint video+audio latent. Wire to SamplerCustomAdvanced.
combined_audioAUDIOTimeline audio mixdown. Wire into CreateVideo to replace the generated audio.
fpsFLOATAlways 24.0 — H3's native output rate. Wire into CreateVideo.
widthINT
heightINT
lengthINTFrame count actually generated (snapped to the 17k+5 grid).
promptSTRINGThe compiled storyboard prompt that was encoded.
retake_infoSTRINGJSON describing the retake window. Wire into MiniMax H3 Retake Stitch to splice the result back into the base video. Empty when retake is off.