H3 Continuation · Deliver Completed Window (T8 EXP)
Handing off a finished continuation without pretending to be an editor
- high_result
- accepted_source
- av_latent
- mux_audio
- conditioned_prompt
- media_map_json
- report_json
Every long-video workflow eventually grows a node that quietly does six things: appends the new segment, updates the timeline, writes the candidate, accepts it, and emails somebody. Then it breaks and you can't tell which of the six things was wrong.
H3 Continuation · Deliver Completed Window is the opposite. It revalidates the selected accepted parent, returns the completed HIGH unchanged, and stops. Its own description lists the things it doesn't do: no writing a candidate, no accepting, no appending, no composing. Those remain the job of the existing candidate/accept/compose flow in the pack. This node is a check, not an editor.
Inputs and outputs
Two required inputs: high_result (the typed T8_PROGRESSIVE_HIGH_RESULT from the HIGH sampling stage) and accepted_source (the same accepted-parent identity the chain started from).
Outputs: av_latent, mux_audio, conditioned_prompt, media_map_json and report_json. It's an output node - nothing downstream needs to consume it.
The two audio paths are the part to get right. By default the graph uses the natively generated audio, and mux_audio coming back empty/None means exactly that: use the native decoded generated audio. If you deliberately configured a final_audio on the phase conditioning node, you must wire the final video's audio input to mux_audio from here instead - an explicitly selected PCM is preserved, and it is not re-generated. Getting this backwards is the classic "my audio doesn't match the picture" complaint on this family.
The two delivery shapes
The pack's example set (examples/workflows/45-progressive-continuation-split) ships four operations per recipe, and they're genuinely different uses of this node:
- Full_NoSave - run both phases, deliver, persist nothing. Good for experimenting.
- Full_Save - run both phases, save the LOW boundary and the completed HIGH, and copy out the real paths and SHAs.
- Cold_HIGH - resume from the frozen LOW boundary and run only HIGH. No LOW model, conditions, effects or sampling in the graph at all.
- Load_Completed_HIGH - verify the direct parent, read the completed HIGH, and deliver a single continuation segment. No sampling model loaded, no context re-encoding, no re-sampling.
That last one is where this node earns its keep: a fully sampled HIGH stage can be delivered later, in a fresh process, without any diffusion model in the graph.
What it does not promise
The description is unusually explicit: there's no equivalence claim between today's edited recipe and a previous job. Selecting an accepted parent authenticates that parent clip. It does not certify that the model, LoRA, prompt or sampler you have loaded now are the ones that produced the frozen HIGH. If you changed the recipe, the honest move is a rerun, not a reuse.
And delivery isn't acceptance. The node returns a segment; whether it joins the previous one convincingly - seam, identity, voice - is a human call made in the existing candidate/accept flow. The README's own fine print repeats that the pack doesn't guarantee exact voice, per-word timing or seamless joins, and that dual-pass stitching has a known slight seam colour shift.
Install
Manager → search MiniMax H3 Audio T8, or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Fully quit and restart ComfyUI, then refresh the browser tab. Recent Core with native H3 support is required. The pack adds no pip packages on purpose - requirements.txt is empty so installation can't replace your Torch/CUDA build - while the models (H3 main model, Qwen text encoder, video and audio VAE, learned 3D upscaler) are separate downloads per the README's model table.
Where it goes wrong
Audio mismatch. You set final_audio somewhere upstream and didn't rewire the final video's audio input to mux_audio. With nothing wired, you get the native generated audio - which is usually what you want, as long as you know that's what happened.
Stale accepted parent. If the accepted project, revision or file bytes changed after the graph was built, the revalidation refuses. Re-select explicitly instead of forcing it.
Expecting an auto-append. It isn't one. Use the candidate/accept/compose flow; delivery just produces the segment.
Placeholder receipts in example graphs. Parent IDs, paths and SHAs in the shipped graphs are illustrative. Fill in real ones before queueing, especially on the cold and load-completed variants.
Duplicate installs. Missing nodes after an update are almost always a stale second copy of the pack sitting in custom_nodes and shadowing the real one. Rename it with a .disabled suffix - a leading underscore does not disable a node pack - restart, and check python_module in /object_info.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| high_result | T8_PROGRESSIVE_HIGH_RESULT | — | |
| accepted_source | T8_CONTINUATION_ACCEPTED_SOURCE | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| av_latent | LATENT | — |
| mux_audio | AUDIO | — |
| conditioned_prompt | STRING | — |
| media_map_json | STRING | — |
| report_json | STRING | — |