MiniMax H3 Flow Director
Chain MiniMax H3 clips into multi-minute videos without OOM
- clip
- vae
- sampler
- sigmas
- model
- model_ref2va
- audio_vae
- noise
- ref_images
- first_frame_override
- model
- positive
- latent
- images
- audio
- fps
- width
- height
- length
- prompt
- last_image
- retake_info
MiniMax H3 is genuinely good at generating video locally - but it tops out at a 15-second clip. If you want a minute of footage, or five, the honest answer was "run it on the API" or "stitch in an editor and pray the seams aren't visible." This node is the "no" to both of those. It's a visual timeline director that cuts your long video into small chunks, generates them one at a time, and glues the blocks back together so the joins are invisible - all while keeping VRAM flat no matter how long the timeline gets.
The trick is chaining instead of sampling. Each block on the timeline gets sampled and decoded on its own, so a 1000-frame render never actually exists in memory at once. The decoded last frame of block i is automatically fed back in as the first frame of block i+1 - no manual keyframe handoff - and the duplicate boundary frame is dropped so playback doesn't stutter at the seam. Drop an image onto any later block and it becomes a destination frame the model transitions toward, which is the cleanest way to steer a long scene: the H3 clip morphs into your target instead of you hoping the prompt holds.
The author's own framing is the right one: keep each chunk at 5–10 seconds, chain as many as you like, and control the direction with text and target images rather than one giant prompt.
What you actually plug in
The node is a wrapper around ComfyUI's native H3 pipeline, so the required inputs are the H3 parts you already need for a single clip: the clip (MiniMax's Qwen3-VL text encoder), the vae (video VAE), a sampler from KSamplerSelect, and sigmas from BasicScheduler. Optional but important:
- model vs model_ref2va - the fl2va weights for plain text/image-to-video, or the ref2va weights when the timeline toolbar has "Refs ON". Only one is actually used per run; the node checks which you need.
- audio_vae - wire the H3 audio VAE in for joint audio generation and decoding. Skip it and you still get video; audio is then mixed from any audio tracks you dropped on the timeline.
- global_prompt - conditions every block (style, atmosphere, characters). This is the "keep it coherent" lever; the per-block prompts live in the timeline editor.
- noise from RandomNoise, plus the power-user knobs (
shift_video,shift_audio, custom canvas,divisible_by,first_frame_override).
You don't hand-edit timeline_data - that's the JSON state the built-in editor writes automatically. Drag blocks, drop images and audio onto them, and the node eats the state.
The outputs are the payoff: images (full concatenated decoded frames at 24 fps), audio (stereo at 44.1 kHz), and fps (always 24.0). Wire all three straight into a VHS Video Combine and you're done - no manual assembly.
Installing it
ComfyUI Manager → search "MiniMax H3 Flow Director", or:
cd ComfyUI/custom_nodes
git clone https://github.com/AlonAshken/ComfyUI-MiniMaxH3-FlowDirector.git
Restart ComfyUI. The requirements (av, numpy, Pillow, torch) are usually already in your environment. The real dependency isn't Python - it's ComfyUI itself. This node imports comfy_extras/nodes_minimax_h3.py, the native H3 support that landed with day-zero H3 support, so you need a current ComfyUI and the H3 model files (fl2va, ref2va, the Qwen3-VL text CLIP, video VAE, audio VAE). Expect roughly 42 GB for the full weights, and note the H3 Community License excludes the US, EU, UK and South Korea from the local-weights path - if you're in one of those, check your terms before downloading.
Where people get burned
First: chunking keeps VRAM constant, it doesn't shrink the model. A 33B model on a card that can't hold it will still fail - the node just means the 12th block won't be the one that OOMs. Second, if you see the "update ComfyUI" style error about nodes_minimax_h3.py not being found, that's a stale ComfyUI, not a broken install. Third, it's a brand-new pack with zero traction so far - expect rough edges and a changelog that moves. For a first run, load the included MINIMAX_H3_FLOW_DIRECTOR_ULTRA_TURBO.json workflow and copy its wiring rather than guessing.
Inputs (41)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | MiniMax Qwen3-VL text encoder. | |
| vae | VAE | minimax_h3_video_vae. | |
| sampler | SAMPLER | Sampler from KSamplerSelect. | |
| sigmas | SIGMAS | Sigmas from BasicScheduler. | |
| timeline_data | STRING | JSON state of the timeline editor (auto-managed). | |
| modelopt | MODEL | fl2va weights (minimax_h3_fl2va_*), used when toolbar is 'Refs OFF'. | |
| model_ref2vaopt | MODEL | ref2va weights (minimax_h3_ref2va_*), used when toolbar is 'Refs ON'. | |
| audio_vaeopt | VAE | minimax_h3_audio_vae for joint audio generation and decoding. | |
| noiseopt | NOISE | Noise from RandomNoise. | |
| global_promptopt | STRING | Conditions all blocks: style, atmosphere, characters. | |
| start_secondopt | FLOAT | 0.000–10000 | — |
| end_secondopt | FLOAT | 5.000–10000 | — |
| duration_secondsopt | FLOAT | 5.000.1–10000 | — |
| start_frameopt | INT | 00–1000000 | — |
| end_frameopt | INT | 1201–1000000 | — |
| duration_framesopt | INT | 1201–1000000 | — |
| use_custom_audioopt | BOOLEAN | false | — |
| use_custom_motionopt | BOOLEAN | true | — |
| inpaint_audioopt | BOOLEAN | true | — |
| local_promptsopt | STRING | — | |
| segment_lengthsopt | STRING | — | |
| frame_rateopt | FLOAT | 241–240 | — |
| display_modeopt | COMBO | seconds | 2 options: frames, seconds |
| guide_strengthopt | STRING | — | |
| custom_widthopt | INT | 00–8192 | — |
| custom_heightopt | INT | 00–8192 | — |
| resize_methodopt | COMBO | crop | 5 options: maintain aspect ratio, stretch to fit, pad, pad green, crop |
| divisible_byopt | INT | 321–256 | — |
| img_compressionopt | INT | 00–100 | — |
| override_audioopt | BOOLEAN | false | — |
| ref_image_sizeopt | COMBO | match | 2 options: match, max |
| shift_videoopt | FLOAT | 12.000.01–100 | — |
| shift_audioopt | FLOAT | 3.000.01–100 | — |
| ref_imagesopt | IMAGE | Extra reference images for ref2va. | |
| ref_image_notesopt | STRING | — | |
| startopt | FLOAT | 0.00 | — |
| endopt | FLOAT | 0.00 | — |
| durationopt | FLOAT | 0.00 | — |
| widthopt | INT | 0 | — |
| heightopt | INT | 0 | — |
| first_frame_overrideopt | IMAGE | Optional external image to seed Block 0 (overriding timeline image). |
Outputs (12)
| Name | Type | Description |
|---|---|---|
| model | MODEL | Patched model output. |
| positive | CONDITIONING | Conditioning output. |
| latent | LATENT | Latent output. |
| images | IMAGE | Full concatenated and decoded video frames (24 fps). Wire directly into VHS Video Combine. |
| audio | AUDIO | Full concatenated and decoded stereo audio waveform (44.1 kHz). Wire directly into VHS Video Combine. |
| fps | FLOAT | Always 24.0 — MiniMax H3 native output rate. Wire into VHS Video Combine. |
| width | INT | Output canvas width. |
| height | INT | Output canvas height. |
| length | INT | Total rendered frame count. |
| prompt | STRING | The compiled storyboard prompt. |
| last_image | IMAGE | Last frame of the final block. |
| retake_info | STRING | Retake window info. |