MiniMax H3 Creator
Write a sentence, attach media with @, press Render
You know the drill with video models in ComfyUI: eleven nodes, a conditioning
socket you forgot to connect, a VAE somewhere in the middle, and the audio
comes out of a separate gizmo you only remembered at export. The MiniMax H3
Creator is the opposite. One node holds the whole generation - you type a
sentence, attach media with @, press Render, and a finished clip with its
sound already in it comes back. No model loader, no sampler to reassemble,
nothing to wire. It's the flagship node of the ComfyUI-MiniMax-Creator pack,
and the only one you actually need to know about to make H3 video.
Quick reality check first. H3 is MiniMax's 33B open-weights omni-modal model - text, image, video and audio in one context, native stereo sound, 4–15 s clips at up to 2K/24fps. It's genuinely good; the launch threads called it "very, VERY good" and the motion transfer "like Kling." But it's also huge (roughly 42 GB of weights) and its community licence excludes the US, EU, UK and South Korea from the territory where you're allowed to run it. The pack itself is MIT and needs no key - all local - but check your region before you download the model.
How it works
Under the hood the Creator isn't an ordinary node. Because it samples, it has
to be the sampler, so when you queue it, it expands into a subgraph -
loaders → segment → accelerators → KSampler → reel → save, all emitted
automatically. That's why it has zero outputs and the internal nodes never
appear on your canvas. Everything you fiddle with is serialised into one JSON
blob (creator_data), the node's memory: prompt, aspect, short edge,
segments, attached assets, LoRAs.
The mode badge shows which checkpoint the render will land on, and you never
pick it: nothing attached is T2VA, attached frames push you to FL2VA, any
reference at all pulls in Ref2VA. The @ mentions are the load-bearing bit -
H3 reads <Picture N> / <Video N> / <Audio N> labels in tokenizer order,
not free text. Typing "use @img-1 for their face" assigns those ordinals for
you, which is the difference between a reference that works and one that
silently drifts.
The inputs that matter
creator_data- the whole piece as JSON. You won't edit this by hand; the UI does it as you type.seed- one seed for the entire piece; every segment, refine and face pass inside them runs on it. Consecutive shots are separated by prompts and seams, not fresh noise.steps/cfg/sampler_name/scheduler- defaults 20 / 1.0 /res_multistep/simple. For reference-heavy prompts, switch the scheduler tobetaornormal.shift_video(12) andshift_audio(3) - the checkpoints' own values. A wrong audio shift distorts the soundtrack before it touches the picture.block_cache,spectrum,attention,chunk_ffn,fp16_accumulation- the accelerator row. Every cache trades fidelity for speed - A/B against a native render before trusting one on a final piece.attention'skitchenis core's own int8 kernel, nothing to install;sageneeds KJNodes plus sageattention and an NVIDIA card.chunk_ffnis the one free low-VRAM switch - it rearranges arithmetic, so the frames are the same ones.fp16_accumulationmostly does nothing on the released bf16 checkpoints, which is exactly why the tooltip says so.
One quirk worth knowing before it bites you: H3's temporal packing means a
clip's frame count must satisfy n % 17 == 5 at 24 fps - there is no such
thing as a 6.00-second H3 video. The duration pill shows whole seconds and the
compiler lands on the nearest legal count, so "6 seconds" becomes 5.79 or
6.58. Annoying the first time, invisible after.
Installing
ComfyUI Manager, search "MiniMax Creator", or:
cd ComfyUI/custom_nodes
git clone https://github.com/roadmaus/ComfyUI-MiniMax-Creator
Restart ComfyUI. No pip install - the pack's dependency list is empty
because the model lives in core (comfy_extras/nodes_minimax_h3.py), so you
need a ComfyUI recent enough to ship it. Then the weights, where ComfyUI
already looks: FL2VA and Ref2VA checkpoints into models/diffusion_models,
the text encoder into models/text_encoders (CLIPLoader type minimax), the
video and audio VAEs into models/vae, and taeh3.safetensors from
madebyollin's taehv repo into models/vae_approx so the preview looks like
the video. Pick everything on the node's weights pill - anything a render
needs and doesn't have is refused before the queue starts, naming the field
and folder, so you don't find out five minutes into sampling. GGUF checkpoints
and text encoders work via ComfyUI-GGUF if you'd rather run quantized.
Two machine notes from the README. fp8 checkpoints only speed up sampling on
cards with hardware fp8 matmul (RTX 40-series and later); on older cards they
still halve memory and change nothing else. And if a long render dies with a
HostBuffer.read_file_slice CUDA OOM, that's ComfyUI's Dynamic VRAM streaming
weights in a way H3 fights with - start ComfyUI with --disable-dynamic-vram
and the render usually survives.
There's also a whole second machine inside the same node: click "Write the next shot" under the prompt and it becomes a timeline, with per-shot prompts, references and LoRAs, chained or compiled into a single generation. That's its own story - the Timeline article covers it. For a single shot, this is the whole workflow. Drop the node, type, press Render.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| creator_data | STRING | { "version": 2, "prompt": "", "aspect": "16:9", "short_edge": 768, "output_prefix": "minimax/renders/H3", "models": {}, "segments": [ { "prompt": "", "assets": [], "loras": [], "duration_s": 6, "checkpoint": "auto" } ] } | — |
| seed | INT | 00–18446744073709550000 | The seed for the whole piece: every segment, chained or single, and every refine and face pass inside them, runs on this number. What separates consecutive shots is their prompts and their seams, not their noise. |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 1.00–100 | — |
| sampler_name | COMBO | res_multistep | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | simple | The templates use 'simple'; for reference-heavy prompts they suggest 'beta' or 'normal' instead. |
| shift_video | FLOAT | 12.000.01–100 | The video flow shift. 12 is the checkpoints' own value; a turbo LoRA's card may name another. |
| shift_audio | FLOAT | 3.000.01–100 | The audio flow shift. 3 is the checkpoints' own value. A wrong one distorts the soundtrack before it touches the picture. |
| block_cache | COMBO | off | Step caching, one implementation at a time. safe/fast/aggressive are FirstBlockCache presets (needs ComfyUI-MiniMaxH3-FirstBlockCache); 'easy' is core's EasyCache; 'tea' is TeaCache (needs ComfyUI-MiniMaxH3-TeaCache). All trade fidelity for speed — A/B before trusting one on a final render. |
| spectrum | BOOLEAN | false | Spectrum: forecast features across steps instead of evaluating every one. Needs ComfyUI-Spectrum-MiniMax-H3. Combines with block_cache; cannot be combined with EasyCache. |
| spectrum_blend | FLOAT | 0.500–1 | Spectrum's video spectral share. Higher is faster and further from a native render. Ignored unless 'spectrum' is on. |
| sage | BOOLEAN | false | Deprecated — use 'attention'. A workflow saved with this on still runs sage attention. |
| attention | COMBO | default | Which attention H3 runs. 'default' is the checkpoint's own; 'sage' is quantized attention (needs ComfyUI-KJNodes and the sageattention package, NVIDIA only); 'kitchen' is core's own int8 kernel, with nothing to install. One at a time — a model has one attention. Both are faster and lower on peak VRAM, and both compose with the caches and with Spectrum. |
| chunk_ffn | BOOLEAN | false | Low VRAM: run H3's feed-forward in chunks over the packed sequence (KJNodes' Chunk FFN). Lowers the peak a render has to fit in, and the frames are the same ones — activations are quantized per token, so chunking is a rearrangement rather than a trade. Needs ComfyUI-KJNodes. Composes with everything above. |
| fp16_accumulation | BOOLEAN | false | Fast math: let cuBLAS accumulate fp16 matmuls in fp16 while this model runs, and put the flag back afterwards (KJNodes' fp16 accumulation). It reaches fp16 matmuls only — the released H3 checkpoints run bf16, and their quantized layers go through comfy-kitchen's kernels rather than cuBLAS, so on those there is nothing for it to change. For a genuinely fp16 model it is faster where the card supports it, at some precision. Needs ComfyUI-KJNodes and torch 2.7 or newer, and raises rather than pretending on a torch without the flag. |
Outputs (0)
No outputs