H16-3 · Project External Relay to Window (T8 EXP)
Prompt Relay was built for a whole clip. This squeezes it into one H3 window.
- raw_high_model
- relay_model
- relay_positive
- relay_full_av_latent
- prompt_relay_plan
- source_segment
- lifted_segment
- segment_spec
- pass2_context
- plan
- sigmas
- previous_result
- model
- positive
- runtime
- report_json
Prompt Relay is the pack's answer to "I want the prompt to change ten seconds in" - you write timed events and a route that re-weights the conditioning across the clip, so the model gets local and global text at once. It's built against a full-clip packed layout.
Once you chunk a clip into 34-frame H16 windows, that layout is wrong. A window doesn't span the timeline; it's a slice with a guarded overlap. Handing a full-clip Relay layout to a window sampler is how you get conditioning that references frames that aren't in this window.
So this node authenticates a full-clip external Relay MODEL/CONDITIONING pair and projects only what a window needs - the event clock and the packed layout - onto one exact guarded H16 PASS2 window.
What comes out of it, and why both wires matter
The output is a pair: model and positive, plus a typed runtime and a report_json. You connect both the returned MODEL and CONDITIONING to that window's sampler chain. That's not a stylistic preference - Relay is a paired contract, and the pack's checks reject a MODEL/conditioning pair that didn't come from the same projection. If you splice the projected positive onto a raw model, you'll get an error, and you should be glad you did.
What it doesn't do: it doesn't sample, and it doesn't own your text. The ordinary Relay nodes still do the encoding and the plan authoring. This is an adapter that re-anchors the timeline. The prompt_relay_plan input is where those global keyframe coordinates come in; the legacy sampler re-anchors the conditioning once, immediately before the actual window forward, which is why the conditioning keeps global coordinates rather than local ones.
Inputs, briefly
Eleven required, and they fall into three groups. Identity and provenance: raw_high_model, relay_model, relay_positive, relay_full_av_latent, prompt_relay_plan. Window geometry: source_segment, lifted_segment, segment_spec, pass2_context, plan. Execution: sigmas and audio_output, plus the optional previous_result so window N's projection knows about window N-1.
audio_output defaults to preserve_first_pass, matching the window node. Keep both nodes on the same setting - the window chain checks the audio policy as part of its previous-result validation, and a mismatch is a hard stop.
Wiring, in order
Loader/model → Relay conditioning (stock nodes) → this node → your H16 PASS2 window node, with model and positive both going to the window, and the runtime set aside for the audit node. One projection per window. If you want different timed events on different windows, duplicate the Relay plan per window rather than trying to share one projection across the chain.
Then audit it. The standalone MiniMaxH3H16RelayAuditEXPT8 reads routed attention and completed forwards for exactly this kind of projected window. Relay + EAV on the same window wants the EAV joint audit instead.
Install
Part of the standard pack install. Manager → 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
Full restart, recent ComfyUI core, H3 base + Qwen3-VL encoder + both VAEs, and the learned upscaler in models/latent_upscale_models/. The pack ships no pip requirements on purpose - it won't replace your Torch.
Where people get burned
Three things, in rough order of frequency.
First, expecting this node to invent a window layout from a full-clip plan. It won't: it checks that the plan and window identity match, and refuses if the full-clip Relay latent doesn't correspond to this window's source.
Second, projecting for window 0 and then reusing the same outputs for window 1. Each window needs its own projection, with previous_result supplied where the guarded overlap depends on it, otherwise the timeline gets re-anchored against nothing.
Third - and this is the one that wastes an evening - assuming that because Relay is connected, it's active. Audit the first window. The author's repeated line is that connection proves no effect, and with one projection node per window there are now seven places for that mistake to hide.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| raw_high_model | MODEL | — | |
| relay_model | MODEL | — | |
| relay_positive | CONDITIONING | — | |
| relay_full_av_latent | LATENT | — | |
| prompt_relay_plan | H3_T8_PROMPT_RELAY_PLAN | — | |
| source_segment | LATENT | — | |
| lifted_segment | LATENT | — | |
| segment_spec | T8_CHUNKED_SOURCE_SEGMENT | — | |
| pass2_context | T8_CHUNKED_PASS2_CONTEXT | — | |
| plan | T8_H3_CHUNKED_TWO_PASS_PLAN | — | |
| sigmas | SIGMAS | — | |
| audio_output | COMBO | preserve_first_pass | 2 options: preserve_first_pass, refined_exp |
| previous_resultopt | T8_H16_PASS2_RESULT | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| runtime | T8_H16_RELAY_RUNTIME | — |
| report_json | STRING | — |