MiniMax H3 Add Noise (resample)
Stock AddNoise turns your MiniMax H3 resample into a waffle
- model
- noise
- sigmas
- latent_image
- LATENT
The two-pass upscaling trick for MiniMax H3 works like this: sample once at native size, upscale the latent, then run a second sampling pass at low denoise to add detail back - video's version of the classic hi-res fix. To resample the upscaled latent you have to noise it first, which is what AddNoise is for. And this is where a lot of H3 upscale workflows die in a very specific way.
Stock AddNoise looks identical to the job. It is not. This node, MiniMax H3 Add Noise (resample) from rockerBOO's h3-latent-upscaler pack, is a drop-in replacement that exists because stock AddNoise corrupts the second pass on H3 for two independent reasons, both documented in the repo with real runs behind them.
Why stock AddNoise breaks here
Reason one is structural. H3's video+audio latent is a NestedTensor, and stock AddNoise calls torch.count_nonzero and torch.nan_to_num directly on it. NestedTensor doesn't overload either, so feeding it the joint AV latent crashes with must be Tensor, not NestedTensor. The fix in this pack is architectural: you split the AV latent with LTXVSeparateAVLatent, run one of these per branch on the plain video and audio tensors individually, and only rejoin them with LTXVConcatAVLatent right before the second sampler.
Reason two is sneakier and survives even on a plain tensor. When you sample with SamplerCustomAdvanced + DisableNoise on a second pass, the sampler internally calls model_sampling.noise_scaling(sigma, zero_noise, latent_image) again as part of its own setup. For H3's CONST (flow) parameterization that means multiplying by (1-sigma) - which quietly rescales stock AddNoise's already-correct output a second time. At low denoise it's survivable mush; at denoise=0.4 it's destruction. The README is specific about what they saw: decoding stock AddNoise's output before the second sampler even ran gave pure noise, and the final video was a corrupted checkerboard/waffle pattern with zero resemblance to the source.
This node does one extra thing on top of stock AddNoise's logic: it calls inverse_noise_scaling after noise_scaling, so the sampler's redundant rescale cancels out instead of stacking. Same inputs, same shape, plus the one call that makes the math work. It also defensively stashes and restores ModelSamplingAV.latent_shapes so stale shapes from a differently-sized pass 1 don't crash its per-branch scaling.
Inputs and output
These are exactly stock AddNoise's, which makes the swap painless:
model- your H3 model.noise- a NOISE source, e.g. from aRandomNoisenode; the pack's example graphs share one between the video and audio branches.sigmas- SIGMAS from the pass-2BasicScheduler.latent_image- the upscaled video latent (or the audio latent, on the audio branch).- Output: LATENT - noised latent that feeds
LTXVConcatAVLatent, then the pass-2SamplerCustomAdvanced.
Wiring note: you run one instance per branch. The video branch takes the raw pass-2 sigmas; the audio branch takes sigmas that have been through MiniMaxH3ShiftSigmas first (see that node - audio runs on a different schedule and needs less noise than video at any given step). Wire them wrong and you get the audio-side artifacts that node exists to prevent.
Installing and debugging
ComfyUI Manager search h3-latent-upscaler, or:
cd ComfyUI/custom_nodes
git clone https://github.com/rockerBOO/h3-latent-upscaler
restart. No pip dependencies; you need a recent ComfyUI with core H3 support (comfy.ldm.minimax + the comfy_api.latest extension API), so update ComfyUI if the pack's nodes don't load.
The telltale failure is the waffle: if your pass-2 output is a corrupted checkerboard, or your noised latent decodes as static at denoise >= ~0.4, you almost certainly grabbed the stock AddNoise off the menu instead of this one. Swap the node, keep every wire the same, re-run. That symptom plus a NestedTensor crash on the joint latent are the two signatures that you're running the wrong noise node or feeding it the unsplit AV latent.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| noise | NOISE | — | |
| sigmas | SIGMAS | — | |
| latent_image | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |