H3 Chunked · Prepare Global PASS2 State (T8 EXP)
Preparing PASS2 State For Chunked H3
- first_pass_latent
- plan
- noise
- pass2_context
- report_json
Chunked two-pass H3 has one rule that everything else hangs off: the noise for the second pass is generated once, for the whole target AV, and then sliced by absolute timeline coordinates. Not per window. If each window drew its own noise, you'd be sampling independent little clips and stitching the seams, which is a different and worse thing.
This node is where that once-only noise field gets fixed, along with the original full-source mask the second pass has to respect. Three inputs, two outputs, no sampling.
What it takes and what it gives
first_pass_latent is your completed first pass - the full video, low resolution, with its audio. The first pass must be separately completed; this node doesn't run it, and the pack is clear that this isn't a portable result you can cache and pass around.
plan is the T8_H3_CHUNKED_TWO_PASS_PLAN, the same plan your segments and lifts reference. It supplies the target geometry, which is how the noise field knows how big "the whole thing" is.
noise is the NOISE object. From the node description: use the same NOISE seed at PASS2. The prepare step derives the global field from the seed you gave it, so if the seed drifts between prepare and sampling, the field the scheduler slices no longer matches the field you prepared. The report records the seed - check it against the noise node in your PASS2 branches.
Output is pass2_context, typed T8_CHUNKED_PASS2_CONTEXT, plus report_json. That context object is a required input on the learned lift, on the segment sampler, and on the EAV and Relay adapters. If you're wondering why half your nodes are red, it's probably this.
V1–V4, and what V5 is
The description scopes it: this prepares the mask and noise for the v1–v4 chunked contracts. V5 has another contract entirely, with its own window load/save storage nodes and a stricter source-identity story. The pack keeps the families separate rather than pretending one generalises to the other, and the older family's saved workflows aren't rewritten when new ones ship.
So: if you're building against a v5 example and can't find a slot for this context, that's not you being confused. Different route.
Where it sits
pass1 complete → [Prepare PASS2 state] → pass2_context
↑
plan + your NOISE (remember the seed)
Then: slice the first pass into segments, lift each segment with MiniMaxH3ChunkedLearnedLiftEXPT8, sample each with its own PASS2 model and the carried context, optionally bind external effects, audit, and carry the cumulative AV forward.
Two things this node deliberately isn't: it isn't sampling, and it isn't a portable result. There's no resume handed to you here. The pack's resumable story goes through explicit stage storage with paths and SHAs, not through passing a context object across processes and hoping.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Or via Manager, searching MiniMax H3 Audio T8. Then fully quit ComfyUI and relaunch: node classes register at startup, and a browser refresh does not re-register them. Zero pip dependencies by design - the pack's requirements file is empty so an install can never replace the Torch or CUDA build ComfyUI is running on. Requires a recent ComfyUI with native H3 support. Weights are separate downloads into models/diffusion_models (H3), models/text_encoders (Qwen) and models/vae (video and audio VAEs).
Where it goes wrong
- A different seed on the PASS2 noise. The most common silent inconsistency in this route. Match the seed.
- Prepare before pass one is done. The first pass must be complete; there's nothing to derive the source mask from otherwise.
- Assuming it caches. It doesn't create a portable result, and the pack won't pretend it does.
- Mass-expecting
unexpected keyword argument 'parity_report_json'. That's the classic shadow-install symptom in this pack - an old test copy of the nodes incustom_nodesproviding a stale builder. Check/object_infofor the node'spython_module, delete the stale directory, restart. - Treating
temporal_chunk_frameslike the 5/22/39 context values. They're different parameters for different jobs; the pack calls this out because people keep equating them.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| first_pass_latent | LATENT | — | |
| plan | T8_H3_CHUNKED_TWO_PASS_PLAN | — | |
| noise | NOISE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pass2_context | T8_CHUNKED_PASS2_CONTEXT | — |
| report_json | STRING | — |