MiniMax H3 Pass-2 AV Prepare
Turn a video-only upscale into a full H3 pass-2 latent
- upscaled_video
- source_audio
- model
- noise
- sigmas
- state
- latent
- width
- height
- status
MiniMax H3 Pass-2 AV Prepare is the node that takes the output of a video-only learned upscaler and turns it into a proper joint H3 pass-2 latent. The reason it exists is that H3 is an AV model: its latent has both video and audio streams, and if you upscale just the video you've silently dropped half the contract. This node puts the audio back, re-noises the video region correctly, and hands you a latent ready for a Disable-Noise pass-2 sample.
Here's the pipeline it sits in. Your first pass rendered an H3 scene and saved the joint AV latent as a checkpoint. In the deferred upscale loop, "Upscale Current Scene" exposes that as separate video and audio latents. A video-only upscaler like LBH (the bundled "Deferred Upscale + De-Rope - H3 LBH 3D" workflow uses LBH 3D) consumes the video latent and emits a bigger, cleaner video latent. But its output has no audio member, and it wasn't built for H3's AV joint structure. Pass-2 Prepare recombines.
The inputs
upscaled_video- the 24-channel clean H3 video latent from LBH's 2D/3D latent upscaler.source_audio- the untouched 32-channel audio latent from H3 Upscale Current Scene. This is your saved audio, and it's about to be locked so pass 2 can't rewrite speech.model- the exact pass-2 H3 model, after LoRA and sigma-shift patches. Pass 2 is a different sampling stage, so it gets its own patched model.noise- pass-2 random noise. Only the video member is generated; audio stays at the saved x0.sigmas- the pass-2 sigma schedule. Its first sigma is used for the NestedTensor-safe CONST re-noise.state(optional) - current Upscale state. When the source scene uses Drift-Control AV, the previous HQ latent tail replaces and protects the pass-2 prefix.
What it does, in order
It rejoins the saved audio to the upscaled video, applies MiniMax CONST re-noise to the open video region only (the parts pass 2 is allowed to regenerate), protects a Drift-Control AV prefix from the previous HQ latent when available, inverse-scales for Disable Noise sampling, and locks the audio with a zero denoise mask so speech can't be rewritten. The output latent is a joint H3 AV latent ready for Sampler Custom Advanced with Disable Noise. There's also width/height (exact output pixels inferred from the upscaled latent) and status (stream geometry, audio lock, sigma start).
That "locks audio" step is the part people under-appreciate. Without it, pass 2 would happily re-denoise the audio stream too - a tiny re-noise over a clean audio x0 that turns dialogue into mush. The zero-mask keeps your performance intact while the video region gets its full regeneration budget.
Where it fits
It's the LBH/de-rope child-loop path, distinct from the LTX 2.5 decoded-video V2V path and the whole-video SeedVR2 path. Reach for it when you want spatial upscaling and de-roping in the same regeneration pass, so a later independent upscale can't undo the recovered motion timing - that's a documented design decision, and it's why the bundled workflow exists.
Installing it
Part of ComfyUI-MiniMaxH3-Contex-Loop (ComfyUI Manager: "MiniMax H3 Contex Loop"), or:
cd ComfyUI/custom_nodes && git clone https://github.com/ethanfel/ComfyUI-MiniMaxH3-Contex-Loop.git
Restart ComfyUI. It doesn't bundle LBH or MAINodes - the de-rope path needs ComfyUI-MAINodes (matlowai) installed separately, and the upscaler of your choice. Standing requirements: H3 weights, current ComfyUI with native Add Guide (PR #15439).
Common issues
The classic failure is feeding it a latent from the wrong upscaler - it must be a clean 24-channel H3 video latent from LBH, not a decoded-video upscale or a composite. If pass 2 comes out with artifacts, check that model is the fully patched pass-2 model and that noise was generated for the pass-2 schedule. And the audio-lock isn't optional: if you bypass it, expect speech damage.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| upscaled_video | LATENT | 24-channel clean H3 video latent emitted by LBH's 2D/3D latent upscaler. | |
| source_audio | LATENT | Untouched 32-channel audio latent from H3 Upscale Current Scene. | |
| model | MODEL | The exact pass-2 H3 model after LoRA and sigma-shift patches. | |
| noise | NOISE | Pass-2 random noise. Only the video member is generated; audio stays at the saved x0. | |
| sigmas | SIGMAS | Pass-2 sigma schedule. Its first sigma is used for NestedTensor-safe CONST re-noise. | |
| stateopt | H3_CHAIN_UPSCALE_STATE | Current Upscale state. When the source scene uses Drift-Control AV, its previous HQ latent tail replaces and protects the pass-2 prefix. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | Joint H3 AV latent ready for Sampler Custom Advanced with Disable Noise; video is re-noised and audio is masked clean. |
| width | INT | Exact output pixel width inferred from the upscaled latent. |
| height | INT | Exact output pixel height inferred from the upscaled latent. |
| status | STRING | Verified stream geometry, audio lock, and sigma start. |