H3 Face Parity/Window · Bind Local Relay (T8 EXP)
When the only prompts that matter belong to the repaired window
- model
- relay_positive
- relay_av_latent
- relay_plan
- face_plan
- source_frames
- stage_av_latent
- stage_context
- parent_frames
- window_plan
- window_mapping
- source_audio
- window_audio
- model
- positive
- report_json
Most prompt-planning advice assumes one plan for the whole film. That works right up until you are repairing a 24-frame window of somebody talking, where the relevant prompt is not "the whole movie's timeline" but "these three lines of description for this face, in this crop, right now".
This node exists for that case. It pairs a local Relay plan and its conditioning with one signed face repair window - cropping the prompt scope down to the same scope as the pixels.
The point of "local"
The author is explicit that the plan here is local and not a silently sliced piece of your global film events. That distinction matters a lot in practice. A global plan projected onto a window carries the film's absolute timing; a local plan is written for the window itself, at the window's own scale, and the parent/window mapping stays source-bound so the plan cannot drift onto the wrong frames.
It also means you choose the local text. Repainting a face is usually about detail and expression - skin texture, a slightly different mouth shape, the eyes. The global description of the movie is not the useful input; three well-chosen lines about the face are.
Inputs, required and optional
Required: model, relay_positive, relay_av_latent, relay_plan, plus the face side - face_plan (a parity plan - this node handles parity and window stages, unlike the standard-only relay bind), source_frames, stage_av_latent, stage_context.
Optional, and this is where the local variant gets its flexibility: parent_frames, window_plan, window_mapping, source_audio, window_audio. Wire them when you are repairing an extracted window, because the mapping is what keeps the plan bound to the right absolute frames. Leave them out when the "window" you are repairing is effectively the whole crop set.
Outputs are model and positive - the pairing to hand your face sampling stage - and report_json.
The warning worth repeating
Sampled audio is not the delivered source soundtrack. That line appears on most of the face nodes in this pack and it is not boilerplate: a locked audio mask constrains where denoising happens, it does not make the audio tensor bit-exact. If the soundtrack must survive untouched, keep the original audio as your delivery path and treat whatever comes out of the sampled latent as a by-product.
Wiring
Local Relay plan + conditioning + face plan/source (+ window plan, mapping, audio) → Local Relay Bind → parity/window face stage → audit → review → commit.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Then quit ComfyUI completely and start it again - a page refresh will not register new node classes. Manager install works too: search "MiniMax H3 Audio T8". The pack ships no pip dependencies by design, so it will not overwrite ComfyUI's Torch/CUDA environment; optional EXP features check their own requirements only when actually used. You still need a recent Core with native H3 support, plus the H3 checkpoint, Qwen encoder, video VAE and audio VAE.
Things that will bite you
Do not try to make this node carry the film's timeline. If your shot needs events timed across the whole video, that is the global Relay path with its projection and apply nodes; this is the repair-scoped one. Mixing the two roles is how you end up with a face pass that re-times your dialogue.
Second: the mapping is a signed object, not a memory of an offset. Re-extract the window with different bounds, or re-render the parent, and the old mapping is invalid - rebuild rather than nudge. The node will refuse, which is the outcome you want; the alternative is a repaired crop from the wrong part of the film.
Third, one honest caveat about the whole approach: face repair at low denoise is a trade, and a technically clean pass can still lose likeness. Compare the repaired window against the original side by side, in motion, before you commit. Everything mechanical in this pack stops short of telling you it looks better, and that restraint is correct.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| relay_positive | CONDITIONING | — | |
| relay_av_latent | LATENT | — | |
| relay_plan | H3_T8_PROMPT_RELAY_PLAN | — | |
| face_plan | H3_T8_FACE_REFINE_PARITY_PLAN | — | |
| source_frames | IMAGE | — | |
| stage_av_latent | LATENT | — | |
| stage_context | T8_STAGE_CONTEXT | — | |
| parent_framesopt | IMAGE | — | |
| window_planopt | H3_T8_FACE_REFINE_WINDOW_PLAN | — | |
| window_mappingopt | H3_T8_FACE_REFINE_WINDOW_MAPPING | — | |
| source_audioopt | AUDIO | — | |
| window_audioopt | AUDIO | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| report_json | STRING | — |