H3 AudioFirst Skip Blocks (final step)
Skip Ten Blocks on H3's Last Step — and Don't Wire It Anywhere Else
- model
- MODEL
What this node is for
MiniMax H3 is a 33B omni-modal video model: picture and stereo audio come out of the same transformer pass, which is why a 14-second clip with dialogue costs minutes even on a distilled 4-step setup. The H3 AudioFirst X2 Stream pack claws time back without wrecking the voice - audio first on a tiny 32×32 pass, locked, then the video pass runs with the sound frozen. This node is the last, smallest lever: ten of H3's fifty DiT blocks do nothing during the final high-resolution step.
Per the author's bench (RTX 4070 12 GB, single runs), that's 126.0 s → 99.8 s on a 14-second 1088×1920 clip versus the fast LBH variant, about 21% off. Scope: not a VRAM saver, doesn't touch the audio pass, and it only makes sense inside the pack's "speed mode" workflow. In a stock 4-step graph it saves a slice of one step and buys you almost nothing.
The mechanism, briefly
H3's DiT is 50 double blocks. Hand the node a model and it clones it, installing a patches_replace entry on the dit / double_block hook for all fifty indices. A skipped index returns its input as its output - {"img": args["img"]} - so the block never runs; the rest hand off to whatever was already installed (block-sparse attention, QKV reuse), so it composes with upstream patches rather than fighting them.
The default list, 9,10,11,12,14,15,16,17,18,20, isn't a guess. The author bypassed one block at a time in the last step at 256×448, 14 s, seed 48, measured how much the latent changed, and kept the ten that changed it least - a vital-layer analysis in the spirit of Stable Flow. Blocks 0–2, 29–33, 48 and 49 matter most, and a cheaper rule that landed on 3–17 lost iris detail.
One honest caveat: in a 14 s close-up test, running the last step without skipping "made almost no difference" - the softness came from the 256×448 early steps. Garnish on speed mode, not the main course.
The two fields
model takes the H3 MODEL, usually the padded model coming out of the LBH chain. Anything that doesn't report exactly 50 blocks is refused: Block skipping requires the 50-block MiniMax H3 DiT.
blocks is comma-separated indices, 0–49. Spaces are fine, duplicates collapse, order is irrelevant; an out-of-range number raises Block indices must be between 0 and 49. An empty string means all fifty blocks run - a free A/B switch instead of bypassing the node.
One output, MODEL, into one place only: the BasicGuider for the final high-res step.
Wiring is the whole trick
In the speed examples the model output splits: one branch runs into the earlier guiders, the other goes through this node into the last step's BasicGuider and on to that step's SamplerCustomAdvanced. Same model, two branches, skip applied to one.
Don't put it upstream of everything. The audio pass uses that same model, so a global patch starves the audio steps too - and the locked, clean audio is the whole reason you're running this pack. Voices go thin after you add a node? Check the wiring first. To test the node itself, bypass it and re-run the seed: if the picture barely moves, the skip wasn't your problem.
Install
ComfyUI Manager, searching the pack title, is the easy path - install H3 AudioFirst X2 Stream, plus H3 X2 Stream (every example saves through it) and H3 LBH X2 Stream for speed mode. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/sepiablue-ai/ComfyUI-H3-AudioFirst-X2-Stream
# restart ComfyUI
requirements.txt names no packages at all - it says so outright, since X2 Stream supplies av and comfy-kitchen. You do need a ComfyUI with native MiniMax H3 (MiniMaxH3ImageToVideo, MiniMaxH3SigmaShift) and BlockSparseAttention; 0.38.0 is the declared floor. Weights go in by hand: the INT8 turbo diffusion model, the Qwen3-VL text encoder, the video, audio and X2 Detail VAEs, and the LBH latent upscaler for speed mode.
Windows users also get setup.bat, which resolves the ComfyUI's own Python and refuses global Python. Pick one method: Manager installs into custom_nodes/h3-audiofirst-x2-stream, setup.bat into ComfyUI-H3-AudioFirst-X2-Stream - running both registers the nodes twice.
Common issues
Slower than the README's numbers. Those come from the whole speed workflow (256×448 low-res steps), not this node - on the standard or fast workflow it shortens one step. If the speed examples won't run at all, look for the missing LBH pack or 3D latent upscaler first.
You added it and can't tell the difference. Correct behaviour. Skipping measured PSNR 24 dB / SSIM 0.85 against an unskipped last step within one run, while two unskipped runs of the same seed differed by 40.9 dB / 0.987 - small and deliberate, with line sharpness and flicker unchanged.
You want to hand-tune the list. The default was tuned at one resolution, one clip length, one seed - start there, A/B against an emptied field, then improvise.
There's essentially no community write-up of block skipping for H3 - it's one person's measured workflow, shipped with numbers. Take the defaults, A/B once on your own footage, and if you can't see a difference, keep them.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| blocks | STRING | 9,10,11,12,14,15,16,17,18,20 | Comma-separated DiT block indices (0-49) whose output is replaced by their input |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |