H3 Multi-Face · Bind One Character Stage (T8 EXP)
One node per character. Yes, really — that's how multi-face repair works
- face_plan
- source_frames
- parent_frames
- model
- sampler
- sigmas
- av_latent
- model
- sampler
- sigmas
- stage_context
- report_json
What it is
Multi-face repair is for the shot with three people where one of them has gone wrong. Repainting the whole frame is wasteful and it changes a perfectly good performance; instead you repair that character in their own sampled stage, on their own model window, against the unchanged parent source - then stitch and composite in order.
This node binds exactly one such job. Inputs: face_plan (the H3_T8_FACE_REFINE_PARITY_PLAN for this character's window), source_frames, parent_frames (the unchanged parent the repair has to sit inside), model, sampler, sigmas, av_latent, and audio_policy.
Outputs: model, sampler, sigmas, stage_context, report_json.
The one rule that catches people: each character gets its own instance. Two people, two Bind nodes, two plans. It won't multiplex. That's deliberate - the absolute window and padding have to be verified per plan, and a shared stage would blur exactly the bookkeeping this route exists to keep straight.
The audio_policy dropdown
This is the only real knob, and it's a policy statement rather than a parameter:
require_locked(default) - the repair stage must be working against locked audio. You're fixing a face; the soundtrack isn't the thing under repair, and this is how the node insists on that.preserve_existing- for the case where you deliberately want the existing audio state carried rather than newly locked.
Default to require_locked unless you have a specific reason. If you flip it because a graph refused to run, you've probably diagnosed the wrong problem.
Where it sits
face plan (per character)
→ MultiFace Stage Bind → guider → sampler → Stage Sampler
→ MultiFace Stage Audit → Parity Stitch → sequential Composite
The node verifies the absolute window and padding in the plan, and that the actual external MODEL, SAMPLER, SIGMAS and AV latent you connected are the ones being bound. It does not auto-accept anything; acceptance and compositing are separate, human-gated steps in the pack's design philosophy, and this route follows it.
Worth knowing from the pack's own record: frozen multi-person source save/load has been validated on two- and three-person 124-frame graphs down to value-identical picture and audio, including a cold new process. So the underlying mechanism is real, not a sketch - but that's a statement about freezing the source, not a promise about how good your repair will look.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
ComfyUI Manager users: search MiniMax H3 Audio T8, install, then fully exit and restart ComfyUI and refresh the page. If it looks missing while GitHub has it, clone - the registry doesn't sync with the repo's releases.
Models: H3 transformer in models/diffusion_models, Qwen3-VL text encoder in models/text_encoders, video and audio VAEs in models/vae, and whatever face/segmentation models the workflow names for its detection step. The repo ships no weights and deliberately installs no Python packages (requirements.txt exists so it can't overwrite your torch/CUDA build).
Start from examples/workflows/56-face-refine-split - the Face_multiface2_* and multiface3 graphs are the two- and three-character variants, and the plain, EAV, Relay, full-save and cold-delivery flavours all differ in ways worth not re-deriving yourself.
Common issues
Only one character gets repaired. You used one Bind node for multiple people. Make one per character with its own plan.
"Absolute window/padding" mismatch. The plan's window doesn't line up with the parent frames you wired. Check that parent_frames is the actual parent take, not a re-render.
Red nodes or the node missing. Update ComfyUI core, the frontend and Manager together and restart fully; the pack's guide is explicit that a partial update is the usual cause here.
Repair lands in the right place but looks pasted. That's the composite stage's business, not this node's - and this route keeps acceptance manual for that reason. Inspect before you commit.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| face_plan | H3_T8_FACE_REFINE_PARITY_PLAN | — | |
| source_frames | IMAGE | — | |
| parent_frames | IMAGE | — | |
| model | MODEL | — | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| av_latent | LATENT | — | |
| audio_policy | COMBO | require_locked | 2 options: require_locked, preserve_existing |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| sampler | SAMPLER | — |
| sigmas | SIGMAS | — |
| stage_context | T8_STAGE_CONTEXT | — |
| report_json | STRING | — |