MiniMax H3 Skin Finish Safety Audit / 肤质候选安全审计 (Advanced EXP)
A fail-closed audit that isn't a beauty score
- source_frames
- candidate_frames
- used_skin_mask
- track_plan
- audio_source
- audio_passthrough
- selected
- gated_candidate
- source
- audio
- hard_gate_pass
- failed_frame_count
- failure_preview
- report_json
Every Skin Finish candidate in this pack is generated on the assumption that a human will look at it before it ships. The Safety Audit node is the mechanical enforcer of that promise: a final, fail-closed gate that rejects candidates with mask spill, excessive pixel changes, treatment jumps between frames, multi-person track spill, or audio mismatch. What it will not do is score beauty or decide a result looks good - the description is explicit that it can't replace human review.
How it works
You feed it the source_frames, the candidate_frames, and the used_skin_mask, and it checks the candidate against a battery of objective gates:
- Mask discipline -
audit_scopepicks how strict the spatial check is:mask_only(no SAM needed),track_union(every edited pixel must be inside a tracked person), orunique_track_owner(also rejects edits where two person masks overlap). The last two take an optionaltrack_plan. - Change magnitude -
maximum_mean_abs_change(0.08) andmaximum_peak_abs_change(0.3) cap how far from source the candidate is allowed to drift. - Temporal consistency -
maximum_temporal_effect_jump(0.04) bounds the change in mask-weighted treatment statistics between adjacent frames (not raw video motion), with shot boundaries resetting the comparison.temporal_policyisreport_onlyorhard_gate. - Track leak -
maximum_track_leak_fraction(0.001) catches edits bleeding outside their owning person. - Audio - optional
audio_source/audio_passthroughinputs so the audit can catch an audio mismatch too.
scene_cut_reset_threshold is the fallback shot detector used only when no track_plan is provided.
The outputs that matter
hard_gate_pass (BOOLEAN) and failed_frame_count (INT) tell you the verdict; failure_preview shows you where it failed; report_json explains. The two image outputs matter most for wiring: selected (which stays the exact source until you flip accept_candidate) and gated_candidate - "the untouched candidate when all hard gates pass; exact source when any hard gate fails." That gated_candidate output is the one your finalizers should consume, because it makes the fail-closed behavior automatic: bad candidate → source, good candidate → candidate, human always has the last say via the toggle.
Why you'd reach for it
Because this pack's whole philosophy is "never auto-accept." When you're stringing together a semantic mask → per-person skin finish → finalize chain, the Safety Audit is the checkpoint that keeps a mask spill or a flickering treatment from ever reaching the exported video. If you're automating a pipeline you're not babysitting frame-by-frame, this is the node that buys you that trust.
Installing it and gotchas
Standard pack install: ComfyUI Manager search "MiniMax H3 Audio T8", or clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git into custom_nodes, update ComfyUI core first, restart. No extra model files (SAM3.1 only if you feed it a track_plan).
Where people get burned: wiring the wrong output. If you hook selected into your finalize and accept_candidate is false - which is the default forever - you'll export bit-exact source and wonder why nothing changed. And remember a passing audit is not a quality judgement: it means "safe to ship mechanically," and the author says the aesthetic call stays with a human. Over-tightening the temporal gate on fast-cutting footage will also spam failed_frame_count for no visual reason, so start with report_only and read the report before going hard_gate.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| source_frames | IMAGE | — | |
| candidate_frames | IMAGE | — | |
| used_skin_mask | MASK | — | |
| audit_scope | COMBO | mask_only | mask_only works without SAM. track_union requires every edited pixel inside a tracked person. unique_track_owner also rejects edits where two person masks overlap. |
| temporal_policy | COMBO | report_only | report_only records source-relative treatment jumps. hard_gate also rejects jumps above the configured limit. |
| maximum_mean_abs_change | FLOAT | 0.0800–1 | — |
| maximum_peak_abs_change | FLOAT | 0.300–1 | — |
| maximum_temporal_effect_jump | FLOAT | 0.0400–1 | Maximum adjacent-frame change in mask-weighted treatment statistics, not raw video motion. Shot boundaries reset the comparison. |
| maximum_track_leak_fraction | FLOAT | 0.00100–1 | — |
| minimum_temporal_pixels | INT | 641–1048576 | — |
| scene_cut_reset_threshold | FLOAT | 0.200–1 | Used only without a track plan. A source-frame mean absolute change above this value resets the temporal comparison. |
| accept_candidate | BOOLEAN | false | Even after hard gates pass, the source remains selected until a human explicitly enables this switch. |
| track_planopt | H3_T8_SAM31_MULTIFACE_TRACK_PLAN | — | |
| audio_sourceopt | AUDIO | — | |
| audio_passthroughopt | AUDIO | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| selected | IMAGE | — |
| gated_candidate | IMAGE | The untouched candidate when all hard gates pass; exact source when any hard gate fails. Finalizers should consume this output. |
| source | IMAGE | — |
| audio | AUDIO | — |
| hard_gate_pass | BOOLEAN | — |
| failed_frame_count | INT | — |
| failure_preview | IMAGE | — |
| report_json | STRING | — |