MiniMax H3 Director
Edit MiniMax H3 like a storyboard instead of hand-writing its 500-word prompt
- clip
- vae
- model
- model_ref2va
- audio_vae
- ref_images
- model
- positive
- latent
- combined_audio
- fps
- width
- height
- length
- prompt
- retake_info
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
.jsis 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.
Inputs (37)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | Qwen3-VL-32B MiniMax text encoder (CLIPLoader type 'minimax'). | |
| vae | VAE | minimax_h3_video_vae — encodes keyframes and references. | |
| start_second | FLOAT | 0.000–1000 | Start of the render window, in seconds. |
| end_second | FLOAT | 5.000–1000 | End of the render window, in seconds. |
| duration_seconds | FLOAT | 5.000.1–1000 | Render length in seconds. Snapped up to H3's 17k+5 frame grid at 24 fps. |
| start_frame | INT | 00–10000 | Start of the render window, in timeline frames. |
| end_frame | INT | 1201–10000 | End of the render window, in timeline frames. |
| duration_frames | INT | 1201–10000 | Render length in timeline frames (at the timeline's frame_rate). |
| timeline_data | STRING | JSON state of the timeline editor (auto-managed; do not edit by hand). | |
| local_prompts | STRING | Auto-populated from the timeline editor. | |
| segment_lengths | STRING | Auto-populated from the timeline editor (pixel-space frame counts). | |
| guide_strength | STRING | Auto-populated from the timeline editor. H3 has no per-keyframe strength, so it is ignored. | |
| modelopt | MODEL | The 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_ref2vaopt | MODEL | The 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_vaeopt | VAE | minimax_h3_audio_vae. Only needed when audio references are used (ref2va). | |
| global_promptopt | STRING | Conditions the whole video: style, scene, characters. Written above the storyboard. | |
| use_custom_audioopt | BOOLEAN | false | ON: timeline audio clips are used as <Audio j> references (ref2va). The mixdown is always available on combined_audio regardless. |
| use_custom_motionopt | BOOLEAN | true | ON: the reference-video track feeds <Video k> references (ref2va). |
| inpaint_audioopt | BOOLEAN | true | Unused on H3 — audio is generated jointly with the video and cannot be inpainted. |
| frame_rateopt | FLOAT | 241–240 | Timeline editing rate. Output is always 24 fps; times are converted via seconds. |
| display_modeopt | COMBO | seconds | Show the ruler and segment ranges in frames or seconds. |
| custom_widthopt | INT | 00–8192 | Output 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_heightopt | INT | 00–8192 | Output height. See custom_width. |
| resize_methodopt | COMBO | crop | How timeline images are fitted to the output canvas. |
| divisible_byopt | INT | 321–256 | Snap output dimensions to this multiple. H3 needs 32. |
| img_compressionopt | INT | 00–100 | H.264 CRF baked into each keyframe. 0 = off (recommended for H3). |
| override_audioopt | BOOLEAN | false | Use the reference video's own soundtrack as the timeline audio. |
| ref_image_sizeopt | COMBO | match | ref2va only. 'match' scales references to the output pixel area (fast); 'max' keeps a 2048 px short edge for identity, at real speed cost. |
| shift_videoopt | FLOAT | 12.000.01–100 | Video flow sigma shift (H3 default 12.0). |
| shift_audioopt | FLOAT | 3.000.01–100 | Audio flow sigma shift (H3 default 3.0). |
| ref_imagesopt | IMAGE | Extra <Picture i> references (single image or batch), appended after the character slots. ref2va only. | |
| ref_image_notesopt | STRING | One 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. | |
| startopt | FLOAT | 0.00 | Automation (connection-only). Window start in SECONDS. |
| endopt | FLOAT | 0.00 | Automation (connection-only). Window end in SECONDS. |
| durationopt | FLOAT | 0.00 | Automation (connection-only). Render length in SECONDS. |
| widthopt | INT | 0 | Automation (connection-only). Output width in pixels, overriding the settings panel's Width. Wire a resolution node here; leave it unconnected to use the panel. |
| heightopt | INT | 0 | Automation (connection-only). Output height. See width. |
Outputs (10)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| latent | LATENT | Joint video+audio latent. Wire to SamplerCustomAdvanced. |
| combined_audio | AUDIO | Timeline audio mixdown. Wire into CreateVideo to replace the generated audio. |
| fps | FLOAT | Always 24.0 — H3's native output rate. Wire into CreateVideo. |
| width | INT | — |
| height | INT | — |
| length | INT | Frame count actually generated (snapped to the 17k+5 grid). |
| prompt | STRING | The compiled storyboard prompt that was encoded. |
| retake_info | STRING | JSON describing the retake window. Wire into MiniMax H3 Retake Stitch to splice the result back into the base video. Empty when retake is off. |