Nodes/MiniMax H3 Audio T8/MiniMax H3 Skin Finish Multi-Person Semantic Mask / 多人语义皮肤遮罩 (Advanced EXP)
ComfyUI Node

MiniMax H3 Skin Finish Multi-Person Semantic Mask / 多人语义皮肤遮罩 (Advanced EXP)

Per-person skin masks in a two-person shot, without rerunning SAM

By T8mars·Created 20 days ago·Updated a day ago· 807
MiniMax H3 Skin Finish Multi-Person Semantic Mask / 多人语义皮肤遮罩 (Advanced EXP)
  • frames
  • track_plan
  • identity_assignment
  • semantic_skin_mask
  • mask_preview
  • report_json
parser_modelfacexlib_parsenet_v0.2.2_pinned
detection_threshold0.45
minimum_face_height_px32
minimum_detail0.010
minimum_person_overlap0.20
minimum_track_quality0.10
minimum_class_probability0.55
feature_protection_px3
include_neckfalse
minimum_skin_area_per_face0.0001
maximum_skin_area_per_frame0.35
maximum_alignment_rms0.080
minimum_ready_frame_fraction0.50
preview_count6

The single-person semantic mask node is good, but it's not built for a two-shot where you want person A's skin finished and person B's left alone, or where a cut switches between speakers mid-clip. MiniMaxH3SkinFinishMultiPersonSemanticMaskT8Advanced is the multi-person version, and it's clever about it: instead of re-detecting faces from scratch, it reuses the SAM3.1 multi-person track plan you already generated for the clip, then lines each face up against its person's track and parses skin per face.

The result is a semantic_skin_mask where each reliable face is tied to exactly one person track, so finishing can't cross the line from one actor into another.

How it works

The chain: the pack's MiniMaxH3SAM31MultiPersonTrackT8Advanced (or the Face Refine route that produces the H3_T8_SAM31_MULTIFACE_TRACK_PLAN) already tracked every person through every shot - but note SAM is not loaded here. This node takes the finished track plan, runs pinned CPU YuNet for five-point face alignment, aligns each reliable face to the FFHQ 512 template, runs the pinned ParseNet on CPU, then projects the semantic skin result back and intersects it with that person's own track mask.

Inputs that matter:

  • frames and track_plan - the exact source batch and its hash-valid SAM3.1 plan. If the hashes don't line up, you get an empty mask, not a mislabeled one.
  • identity_assignment (optional) - an H3_T8_MULTIFACE_IDENTITY_ASSIGNMENT that can label tracks across cuts. The author is explicit: it's a report label, a suggestion, not proof, and it never silently changes skin parameters.
  • detection_threshold (0.45), minimum_face_height_px (32), minimum_person_overlap (0.20), minimum_track_quality (0.10) - who counts as a reliable face. Small, profile, blurred or occluded faces get downweighted or rejected.
  • maximum_alignment_rms (0.08) - how tight the five-point alignment residual has to be on the 512 canvas. Too loose and the node aborts rather than propagates a bad transform.
  • minimum_ready_frame_fraction (0.5) - if fewer than half the frames contain at least one reliable tracked face, the whole batch returns an empty mask instead of patchy processing.
  • include_neck - off by default; clothing is always protected regardless.
  • preview_count (6) - preview frames.

Outputs: semantic_skin_mask, mask_preview, and report_json. Fail closed is the rule - any missing evidence, unstable alignment, or parser problem yields an empty mask and ABSTAIN, never a half-painted frame.

Model requirements

Same pinned ParseNet checkpoint as the single-person node, plus the local YuNet and the existing SAM3.1 track plan. ParseNet must sit at ComfyUI/models/facedetection/parsing_parsenet.pth (85,331,193 bytes, SHA-256 3d558d8d0e42c20224f13cf5a29c79eba2d59913419f945545d8cf7b72920de2). No runtime downloads; the parser runs on CPU and is released after execution.

Where it fits

Reference workflow: examples/workflows/17-skin-finish/2026-08-24_H3_Skin_Finish_MultiPerson_Semantic_Mask_Advanced_EXP.json. Install is the pack default -

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
  • restart, then feed the mask into the multi-person finish node and on to Texture Guard and Video Finalize, keeping every accept_candidate switch off until you've reviewed.

One caveat from the pack's own testing: the multi-person parser has passed a low-load six-frame/two-person mechanical check with real YuNet and ParseNet, but that used a source-bound fixture, so it's not a substitute for a full SAM run or a human quality pass on your clip. And the shared finishing is intentionally color-neutral per person - it won't re-color one actor's skin to match another's.

CategoryT8/MiniMax H3/Post FX/Experimental

Inputs (17)

NameTypeDefaultDescription
framesIMAGE
track_planH3_T8_SAM31_MULTIFACE_TRACK_PLAN
parser_modelCOMBOfacexlib_parsenet_v0.2.2_pinned1 options: facexlib_parsenet_v0.2.2_pinned
detection_thresholdFLOAT0.450.05–0.99
minimum_face_height_pxFLOAT328–1024
minimum_detailFLOAT0.0100–0.2
minimum_person_overlapFLOAT0.200–1
minimum_track_qualityFLOAT0.100–1
minimum_class_probabilityFLOAT0.550–1
feature_protection_pxINT30–32
include_neckBOOLEANfalseNeck remains excluded by default; clothing is always protected.
minimum_skin_area_per_faceFLOAT0.00010–0.1
maximum_skin_area_per_frameFLOAT0.350.01–1
maximum_alignment_rmsFLOAT0.0800.005–0.25Normalized five-landmark residual on the 512 parser canvas.
minimum_ready_frame_fractionFLOAT0.500–1If fewer frames contain at least one reliable tracked face, the whole batch returns an empty mask instead of intermittent processing.
preview_countINT61–8
identity_assignmentoptH3_T8_MULTIFACE_IDENTITY_ASSIGNMENT

Outputs (3)

NameTypeDescription
semantic_skin_maskMASK
mask_previewIMAGE
report_jsonSTRING