MiniMax H3 Chunked Two-Pass Upscale (Advanced EXP/T8)
Run H3's chunked two-pass upscale, and never touch the audio tensor
- model
- conditioning
- latent
- noise
- sampler
- sigmas
- plan
- negative
- latent
- report_json
This is the working half of the pack's chunked two-pass upscale. The Plan node decides what to do; this node does it - runs the learned latent upscale per temporal chunk, re-samples H3 over each chunk, and stitches it all back together. If you're coming from image two-pass workflows (render small, upscale the intermediate, low-denoise second pass - the recipe the KB's upscaling essay treats as the default for anything above native res), this is that idea adapted to a joint audio-video latent that's too big to hold in one go.
The part that matters most for MiniMax H3 specifically is in the description's last sentence: it restores the exact input audio tensor. H3 generates audio jointly with video, and a naive chunked upscale would leave the audio slice in some half-baked state across chunks. This node keeps the audio from the input latent byte-for-byte and only re-samples the video side at higher resolution. So if you've already got a voice or a locked track you like, the upscale can't wreck it - that's a real feature, not a footnote.
What it takes and gives
Inputs are the standard custom-sampler stack, plus the plan:
model,conditioning(and optionalnegative),noise,sampler,sigmas- everything you'd feed a normal sampler. You get these from your H3 model chain and the Plan node's schedule.latent- the joint AV latent you're upscaling.plan- fromMiniMaxH3ChunkedTwoPassPlanT8Advanced. This is non-negotiable; the executor has no opinion of its own.cfg- defaults to 1.0, which is where distilled H3 recipes live. Don't assume SD-style CFG values apply here.
Outputs: the upscaled latent (feed it to your VAE decode) and a report_json with the per-chunk accounting.
The mode that will bite you
The Plan node's spatial_strategy decides how frames are split. In full_frame_safe mode every temporal chunk keeps its whole frame, which preserves H3's global spatial context - this is the mode you should actually use. independent_tiles_exp splits each frame into independent spatial tiles to save memory, and the executor's description is blunt about why it's research-only: those tiles' content can diverge. Your character can subtly change between tiles, and you won't see it until it's too late. If you're under VRAM pressure, the honest lever is smaller temporal chunks or lower target resolution, not independent tiles.
Who it's for
Bigger-than-native H3 output on a mid-range card. The pack's real-world run did 1472×832 at 124 frames, 24fps with strict video/audio decode passing - but read their caveat before you extrapolate: that's one machine, one clip, not a universal 16GB-safety guarantee. Start from the 13-latent-upscale example workflows, keep the first pass at low resolution, and let the second pass's conditioning width/height come straight from the upscale outputs instead of hand-filling a second set of dimensions (the pack explicitly warns against maintaining duplicate size settings).
Install
Same as every node in the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
or ComfyUI Manager → "MiniMax H3 Audio T8" → restart. Update ComfyUI itself first. You need the learned 3D latent upscaler model in ComfyUI/models/latent_upscale_models - without it the plan has nothing to execute.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| conditioning | CONDITIONING | — | |
| latent | LATENT | — | |
| noise | NOISE | — | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| plan | T8_H3_CHUNKED_TWO_PASS_PLAN | — | |
| cfg | FLOAT | 1.00–100 | — |
| negativeopt | CONDITIONING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| report_json | STRING | — |