H3 Face Parity · Source-Bound Audit (T8 EXP)
Proving the per-frame repair belongs to the clip you just posted
- stage_result
- face_plan
- source_frames
- av_latent
- candidate_av
- report_json
Automated detailing is a loop: find the region, give it its own pass, put it back. Everyone focuses on the middle step. The step that actually eats weekends is the last one, when the region you re-rendered no longer matches the picture you are compositing it into because a plan got rebuilt, a clip got re-rendered, or a node quietly reused a cached stage.
This is the check for that, for the parity variant of H3 face repair.
What it does
It takes the sampling stage's receipt plus the current parity plan, source frames and input AV, and verifies they still describe the same job. The receipt carries what actually executed; the audit re-derives the contract from the objects in your graph right now; if they diverge, it refuses.
That is the whole node. It does not sample, it does not stitch, it does not score your frames. It turns "the candidate is probably from this clip" into a statement the pack is willing to stand behind.
Inputs and outputs
stage_result- the typed result from the parity sampling stage. A raw LATENT has no receipt, so it cannot be audited; wire the stage result, not the latent, into this input.face_plan- the parity plan currently in the graph. Rebuild the plan and this check fails by design.source_frames- the frames the repair was supposed to be based on.av_latent- the input AV the stage was bound against.
Outputs are candidate_av, which is what you feed into the pack's parity stitch path, and report_json. The node is an output node, so it executes when you queue even if nothing downstream is connected - handy when you are mid-debug and just want the evidence dump.
Why the parity variant gets its own audit
Parity stages are the per-frame denoise ones: the plan carries frame-level denoise values and an optional sampler-mask patch, so the identity of the job includes more moving parts than a plain full-clip face pass. More parameters means more ways to sample with a stale plan, and a stale plan in a per-frame repair is invisible in the output - the frames come back looking plausible and only the composite reveals that some of them were denoised to a different recipe.
So: distinct plan type, distinct bind node, distinct audit, distinct stitch, and no cross-wiring between the standard, parity and window variants. It is more nodes than a single do-everything face refiner, and it is also why you can point at a step when something is wrong.
The two caveats worth repeating
Keep the original source audio for delivery. A locked audio mask constrains where denoising happens; it is not a byte-exactness guarantee, and the sampled audio latent is not your soundtrack.
And unknown sampler completion stays unverified. If the sampler in the stage is not one whose identity the pack can check, the run is still allowed but completion is not certified - no portable proof you could replay tomorrow. That matters if you are building a reproducible chain rather than one clip you are going to eyeball and move on from.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Quit ComfyUI fully and restart: these classes register at import, so a browser refresh is not enough. ComfyUI Manager works too - search "MiniMax H3 Audio T8". The pack installs no pip packages, deliberately, so it cannot replace ComfyUI's own Torch/CUDA stack; optional EXP features check their own dependencies only when used. You still need a recent Core with native H3 support and the H3 weights, Qwen encoder, video VAE and audio VAE in place.
Things that will bite you
Ordering, mostly. Audit after the sampler and before the stitch, every time. If you audit after compositing you have already written the frames you were trying to check, and the report becomes archaeology.
Second, do not treat a passing audit as a quality verdict - this is the node that checks provenance, and the pack is careful to say so. It also will not approve or replace a candidate for you. Face work at low denoise is a judgement call about how much detail to trade against identity, and the audit has nothing to say about that trade; it just guarantees you are looking at the frames you asked for.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| stage_result | T8_STAGE_RESULT | — | |
| face_plan | H3_T8_FACE_REFINE_PARITY_PLAN | — | |
| source_frames | IMAGE | — | |
| av_latent | LATENT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| candidate_av | LATENT | — |
| report_json | STRING | — |