H3 Face Window · Source-Bound Candidate Audit (T8 EXP)
Read this before you decode and review a repaired face crop
- stage_result
- face_plan
- source_frames
- parent_frames
- window_plan
- window_mapping
- source_audio
- window_audio
- av_latent
- candidate_av
- report_json
Here is the failure this node prevents. You extract a 24-frame window, run the repair, decode the crop, and look at it. It is beautiful. You commit it. Somewhere in the composite the window is stitched against frames that came from a slightly different parent revision, and the result is a face that pops for two seconds. By then you have spent twenty minutes and a full sampling pass, and you have nothing you can trust.
So the pack puts a check between the sampling stage and your eyeballs. This is the window variant of that check.
What it verifies
The candidate against everything it claims to be: the current parent source, the repair window, the frame map, and both the original and window audio. Inputs are the stage's receipt (stage_result), the parity plan (face_plan), source_frames, parent_frames, the window_plan and window_mapping that describe the extraction, source_audio, window_audio, and the input av_latent.
If any link in that chain changed since the stage was bound, the audit says so. That includes the cases you cannot see: a rebuilt plan, a re-extracted window, a parent re-render with the same filename, an audio pair that no longer corresponds to the frames in scope.
Outputs: candidate_av, which goes into the crop decode and then to the manual or studio review nodes, and report_json with the checked values.
It sits before the decode and review deliberately. Checking after you have already watched and approved the crop is checking a decision you have made.
What it refuses to claim
Two things, and both are stated in the author's description rather than discovered by you later.
The sampled audio latent is not your delivered soundtrack. Locked masks constrain denoising; they do not make audio bit-exact. Deliver the original source audio and stop expecting the repair pass to preserve a track it never had.
And it does not approve. No quality score, no automatic acceptance, no replacement. The audit is a provenance check - it tells you these frames were produced by the job you think produced them. Whether the repaired profile looks better than the soft one is entirely your call, and low-denoise face work is exactly the kind of trade where a technically clean result can still lose the likeness. Compare against the unfixed window before committing.
Wiring
Window Bind → parity stage sampler → Window Audit → crop decode → manual / studio review → commit.
It is an output node, so it executes on queue even with nothing attached downstream - useful when you want the report from a one-off test run without wiring a save.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Quit and restart ComfyUI completely; new node classes register at import, so a page refresh will not surface this one. Manager users can search "MiniMax H3 Audio T8" instead. The pack deliberately installs no pip dependencies - the base nodes rely on ComfyUI's own torch, numpy, Pillow and safetensors, and optional EXP features check their own requirements only when used, which keeps this pack out of the dependency-hell fights that break so many video setups. You still need a recent Core with native H3 support, plus H3 weights, Qwen encoder, video VAE and audio VAE.
Things that will bite you
If the audit fails on a workflow that ran yesterday, something upstream of it moved - that is what the node is for, and the fix is to rebuild the window plan and mapping rather than to hunt for a bypass. There is no force-continue switch, and the pack's stated posture is to refuse rather than re-infer.
The subtler trap is treating a pass as permission. The audit tells you the candidate is the right candidate. It does not tell you the candidate is good, and it cannot see the frames next to your window - the seam between a repaired crop and its neighbours is a judgement no source-bound check makes for you. Decode, watch it in motion, then commit.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| stage_result | T8_STAGE_RESULT | — | |
| face_plan | H3_T8_FACE_REFINE_PARITY_PLAN | — | |
| source_frames | IMAGE | — | |
| parent_frames | IMAGE | — | |
| window_plan | H3_T8_FACE_REFINE_WINDOW_PLAN | — | |
| window_mapping | H3_T8_FACE_REFINE_WINDOW_MAPPING | — | |
| source_audio | AUDIO | — | |
| window_audio | AUDIO | — | |
| av_latent | LATENT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| candidate_av | LATENT | — |
| report_json | STRING | — |