MiniMax H3 Skin Finish Semantic Mask / 语义皮肤遮罩 (Advanced EXP)
A skin mask that knows eyes from cheeks, so your finish doesn't smear
- frames
- face_plan
- semantic_skin_mask
- mask_preview
- report_json
The Skin Finish nodes are only as good as the mask they're allowed to touch. Hand them a sloppy mask and your "even out the skin" pass happily smooths over eyebrows, lips and hair. MiniMaxH3SkinFinishSemanticMaskT8Advanced is the fix for that: it produces a semantic skin mask - a pixel-level map that knows what is skin and what is eyelid, brow, nose, lip, mouth, hair or accessory - so the finish node downstream only ever touches actual skin.
It's the single-person route in the T8mars H3 pack. You already ran face detection and built a Face Refine Plan for this clip; this node takes that plan plus your frames, runs a fixed local ParseNet classifier on CPU, and hands back a MASK you feed straight into MiniMaxH3SkinFinishT8 (or the Advanced variant's external_exact input) as skin_mask.
How it works
The heavy lifting is done by a pinned FaceXLib ParseNet checkpoint - "pinned" meaning the pack checks the exact byte size and SHA-256 hash and refuses anything else. No network download, no persistent model cache, loaded on CPU with weights_only=True, unloaded after it runs. Eyes, brows, nose, lips, mouth, hair and accessories are excluded by class; the mask you get is skin, conservatively bounded.
Inputs that matter:
framesandface_plan- the same batch of frames you used to build the plan (source binding is a hard contract; mismatch means an empty mask).parser_model- fixed to the pinnedfacexlib_parsenet_v0.2.2checkpoint, no choice.crop_expansion(1.45) - how wide a square around each face box gets parsed. Existing face plans don't carry five-point landmarks, so this is an expanded upright box, not affine alignment.include_neck- off by default, and you want it off. Off keeps the finish from spilling onto neck or clothing.minimum_face_weight(0.35),minimum_class_probability(0.55),feature_protection_px(3) - the confidence and protection gates. The author's explicit warning: don't crank probabilities down just to get more skin area. That's how masks leak into features.preview_count(6) - how many frames getmask_previewthumbnails.
Outputs are semantic_skin_mask, mask_preview, and report_json.
The model you have to supply
This is the one Skin Finish node with a real external dependency. You need:
- the FaceXLib code (the pack uses it as a library), and
- the fixed checkpoint at
ComfyUI/models/facedetection/parsing_parsenet.pth, exactly 85,331,193 bytes, SHA-2563d558d8d0e42c20224f13cf5a29c79eba2d59913419f945545d8cf7b72920de2.
If the file is missing, the wrong size, or the hash doesn't match, the node fails closed to an empty mask and reports - it will not download anything and won't accept an arbitrary model path. Get the file right, and the pack's own validation (a real three-frame run on the fixed weights) shows the route working.
Install and the flow
Install is the pack's standard:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
then restart ComfyUI (or use Manager and search "MiniMax H3 Audio T8"). The example is examples/workflows/17-skin-finish/2026-08-24_H3_Skin_Finish_Semantic_Mask_Advanced_EXP.json - same source frames build the Face Refine Plan, then the ParseNet mask, then the finish, with green=skin / red=protected-features previews.
Honest limits: this single-person route uses an expanded face box because Face Refine Plans don't retain landmarks, so it's less precise than the multi-person five-point route. It's also not a beautifier on its own - it just makes the mask the finish nodes deserve. If your clip has multiple faces, look at MiniMaxH3SkinFinishMultiPersonSemanticMaskT8Advanced instead.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| face_plan | H3_T8_FACE_REFINE_PLAN | — | |
| parser_model | COMBO | facexlib_parsenet_v0.2.2_pinned | 1 options: facexlib_parsenet_v0.2.2_pinned |
| include_neck | BOOLEAN | false | Off by default so face finishing cannot spill onto neck or clothing. |
| crop_expansion | FLOAT | 1.451–3 | Expanded upright square around each source-bound face box. Existing face plans do not retain five-point landmarks, so this is not affine alignment. |
| minimum_face_weight | FLOAT | 0.350–1 | — |
| minimum_class_probability | FLOAT | 0.550–1 | — |
| feature_protection_px | INT | 30–32 | Protection dilation in the fixed 512x512 parser canvas. |
| minimum_skin_area | FLOAT | 0.00050–0.25 | — |
| maximum_skin_area | FLOAT | 0.250.01–1 | — |
| preview_count | INT | 61–8 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| semantic_skin_mask | MASK | — |
| mask_preview | IMAGE | — |
| report_json | STRING | — |