MiniMax H3 Sequencer (TJ)
The conditioning + latent builder at the heart of the H3 workflow
- clip
- vae
- audio_vae
- first_frame
- last_frame
- ref_images
- ref_video_1
- ref_video_2
- ref_video_3
- ref_video_audio_1
- ref_video_audio_2
- ref_video_audio_3
- ref_audio_1
- ref_audio_2
- ref_audio_3
- audio_lock_source
- prev_latent
- positive
- latent
- audio
- fps
- total_frame
- report
MiniMax H3 - the 33B open-weights omni-modal video model with native stereo audio - doesn't run like an SD checkpoint. It samples video and audio together in one combined latent, on a weird frame grid, and its reference conditioning is a whole ritual of encoding images, videos, and audio into special blocks. Building that graph by hand with ComfyUI's official low-level nodes is doable, but it's a dozen wires and a recipe you'll forget. MiniMax H3 Sequencer (TJ) collapses the conditioning-and-latent side into one node with three modes.
The three mode choices are the shape of what it builds:
- Text - plain text-to-video. Your prompt becomes conditioning, and an empty H3 AV latent gets created at
width×heightforlengthframes. - First-Last - like text, but you also feed
first_frameandlast_frameimages, which become keyframes in the conditioning (resolved_frame_index0 and the final frame). This is the "give me a start and end, fill the middle" mode. - Reference - the full multi-reference mode:
ref_images, up to three reference videos (ref_video_1..3) with optional matching audio, plus up to three standalone audio refs. The node resizes and VAE-encodes everything intominimax_refsconditioning blocks, the same format ComfyUI's official H3 nodes produce.
The length widget is where the H3 weirdness shows up: it's in 24fps frames, and it gets rounded up to H3's 17k+5 grid (the model was trained on that spacing - 124 frames, the default, is 17×7+5). So don't expect 130 frames; you get the next grid-legal length, and total_frame tells you what it actually is. Everything downstream that wants to stay aligned has to live on that grid, and this pack's other nodes do.
Inputs worth knowing beyond the mode stuff:
clip,vae,audio_vae- the H3 CLIP, the video VAE, and the H3 audio VAE. All three are mandatory. If you don't have the audio VAE connected, the node refuses to run.audio_lock+audio_lock_mode/strength/fit- built-in audio locking (see the separate Audio Lock node; this is the same logic inline, without the clobbering bug).one_take- enables the latent-continuation logic when aprev_latentis present.prev_latent- feed the previous clip's sampled latent here for One-Take chaining.
The outputs:
positive(CONDITIONING) - wire into a sampler.latent- the H3 AV latent (video + audio streams in one NestedTensor), ready forSamplerCustomAdvanced.audio- the locked audio passes through here when audio_lock is on.fpsandtotal_frame- 24 and the grid-aligned frame count, for downstream save/stitch/interpolate nodes.report- a STRING describing what the mode, masks, and alignment actually did. Read it; it's how you debug this node.
The genuinely clever bit is in the masks. One-Take and Audio Lock both need to write noise_mask into the latent to tell the sampler "preserve this region." If you chain the standalone Audio Lock into the standalone Latent Continuation, the second node's mask assignment overwrites the first's. The Sequencer computes the video mask and audio mask together and merges them into one NestedTensor mask, so both behaviors coexist - audio locked, video continuation active - without either clobbering the other. That single decision is the reason to use this node over hand-wiring the pair.
Install
Ships in the ComfyUI-TJ_NODE pack:
cd ComfyUI/custom_nodes
git clone https://github.com/designloves2/ComfyUI-TJ_NODE
or ComfyUI Manager → "ComfyUI-TJ_NODE", then restart. The node itself needs no extra Python packages - it uses ComfyUI's built-in H3 support. What you do need is the H3 model files themselves (the ~42.5GB diffusion weights plus the H3 video VAE and audio VAE), which the pack does not download for you. And be aware of the license: the MiniMax H3 Community License excludes the US, EU, UK and South Korea from running the local weights.
Troubleshooting
- "H3 AV latent이 아닙니다" / stream-format errors - the LATENT you fed isn't a proper H3 two-stream latent (video
[B,24,T,H,W]+ audio). It only accepts latents from H3 conditioning nodes. - Reference video under 5 frames - H3 refs need a minimum of ~5 frames (about 0.2s). Trim it.
- Audio lock errors when audio_lock is on -
audio_lock_sourcemust be connected; it's not optional once you flip the switch. - Frames don't match downstream - always read
total_frame, not your rawlength. The grid rounding is the cause of nearly every "why is my video longer/shorter than I asked" complaint.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| auto_set | BOOLEAN | false | — |
| clip | CLIP | — | |
| vae | VAE | — | |
| audio_vae | VAE | — | |
| prompt | STRING | — | |
| mode | COMBO | Text | 3 options: Text, First-Last, Reference |
| width | INT | 134432–8192 | — |
| height | INT | 76832–8192 | — |
| length | INT | 1245–3600 | 24fps 프레임 수, 17k+5 그리드로 정렬됩니다. One-Take를 쓸 때도 클립마다 이 길이(전체 grid) 그대로 생성하고, 겹치는 앞부분만 mask=0으로 보존합니다. |
| ref_image_size | COMBO | match | 2 options: match, max |
| audio_lock | BOOLEAN | false | — |
| audio_lock_mode | COMBO | lock | 2 options: lock, remix |
| audio_lock_strength | FLOAT | 0.500–1 | — |
| audio_lock_fit | COMBO | pad_silence | 3 options: pad_silence, loop, stretch_none |
| one_take | BOOLEAN | false | — |
| first_frameopt | IMAGE | — | |
| last_frameopt | IMAGE | — | |
| ref_imagesopt | IMAGE | — | |
| ref_video_1opt | IMAGE | — | |
| ref_video_2opt | IMAGE | — | |
| ref_video_3opt | IMAGE | — | |
| ref_video_audio_1opt | AUDIO | — | |
| ref_video_audio_2opt | AUDIO | — | |
| ref_video_audio_3opt | AUDIO | — | |
| ref_audio_1opt | AUDIO | — | |
| ref_audio_2opt | AUDIO | — | |
| ref_audio_3opt | AUDIO | — | |
| audio_lock_sourceopt | AUDIO | — | |
| prev_latentopt | LATENT | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| latent | LATENT | — |
| audio | AUDIO | — |
| fps | FLOAT | — |
| total_frame | INT | — |
| report | STRING | — |