MiniMax H3 Skin Finish Multi-Person / 多人肤质收尾 (Advanced)
Finish two people's skin in a long clip without loading SAM twice
- frames
- track_plan
- previous_state
- audio
- candidate
- source
- selected
- audio
- used_skin_mask
- rejected_mask
- difference
- sequence_state
- report_json
- emitted_absolute_start
- emitted_frame_count
MiniMaxH3SkinFinishMultiPersonT8Advanced is the workhorse of the pack's multi-person Skin Finish route: it takes the frames and the SAM3.1 track plan you already generated, and applies the conservative skin finishing per person - each person's skin gets smoothed within their own track, so person A's finish never bleeds into person B's face.
The headline feature is that it does not reload SAM. The track plan (H3_T8_SAM31_MULTIFACE_TRACK_PLAN) is already computed and unloaded by the time this node runs; all it needs is the plan object and the frames. A hashed causal sequence state lets you feed it overlapped chunks of a long video and continue without temporal averaging smearing the result.
How it works
For every frame chunk, CPU YuNet finds faces inside each shot-local person mask, then the node intersects a conservative face region with that person's track. Small, profile, blurred or occluded faces get downweighted rather than processed aggressively - remember this node never sharpens or reconstructs missing detail, it only finishes what's reliably there.
The inputs that matter:
framesandtrack_plan- the batch and its plan; mismatched hashes mean ABSTAIN.absolute_start_frame- the zero-based frame where this chunk starts. First chunk must start at 0; later chunks may overlap a reviewed tail (up tomaximum_overlap_frames, default 8).preset- deliberately limited tosubtleandoil_control. The author's rule: multi-person finishing is shared and color-neutral, no per-person hue/saturation fiddling.amount(0.35),texture_keep(0.9),shine_control(0.35) - same mix as the single-person node.detection_threshold(0.45),minimum_face_height_px(24),minimum_detail(0.01) - face-quality gates;minimum_detailonly downweights already-blurred faces.protect_features(True),include_neck(False) - keep features safe and keep the finish off necks/clothing.accept_candidate- the big one. Source stays selected until you flip it.
Optional previous_state feeds the sequence_state from a prior chunk so long clips continue cleanly; audio passes through as the same AUDIO object. The pack's own warning: don't concatenate duplicated audio from overlapped chunks - that's what the Video Finalize node is for.
Outputs: candidate, source, selected, audio, used_skin_mask, rejected_mask, difference, sequence_state, plus emitted_absolute_start and emitted_frame_count so you know exactly what a chunk covered.
Where it sits
The reference chain is examples/workflows/17-skin-finish/2026-08-24_H3_Skin_Finish_MultiPerson_Video_Finalize_Advanced_EXP.json: SAM tracks once and unloads → this node finishes → Texture Guard hardens → Video Finalize re-encodes and copies the original audio packets. Keep accept_candidate=false until you've reviewed.
Install is the pack standard - Manager search "MiniMax H3 Audio T8" or
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
then restart. No extra pip packages for this node; the SAM3.1 track plan and local YuNet are all it consumes.
Gotchas
- The plan must be from the same frames. Feed it a plan built on a different batch and it fails closed rather than guessing.
- It won't fix what isn't there. If a face is turned away or blurred for half a shot, those frames get downweighted, not regenerated.
- Audio passthrough is identity, not remix. If you need file-level audio handling, go through Video Finalize, not this node's
audiooutput.
This is the node to reach for when your clip has more than one face and you want the same careful, conservative finish as the basic node - without paying for a second SAM load.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| track_plan | H3_T8_SAM31_MULTIFACE_TRACK_PLAN | — | |
| absolute_start_frame | INT | 00–10000000 | Absolute zero-based frame index of this chunk. The first chunk must start at 0; later chunks may overlap a reviewed bounded tail. |
| preset | COMBO | subtle | Multi-person mode intentionally exposes only shared color-neutral finishing. Per-person hue/saturation changes are not automatic. |
| amount | FLOAT | 0.350–1 | — |
| texture_keep | FLOAT | 0.900–1 | — |
| shine_control | FLOAT | 0.350–1 | — |
| detection_threshold | FLOAT | 0.450.1–0.95 | — |
| minimum_face_height_px | FLOAT | 244–512 | — |
| minimum_detail | FLOAT | 0.0100.001–0.1 | Gradient-detail floor used only to downweight already blurred faces. Skin Finish does not sharpen or reconstruct them. |
| bbox_ema_alpha | FLOAT | 0.550–1 | Causal current-observation weight; resets naturally at shot-local tracks. |
| max_missing_frames | INT | 20–8 | — |
| protect_features | BOOLEAN | true | — |
| include_neck | BOOLEAN | false | Off by default. A conservative neck strip is still clipped to the person track. |
| maximum_overlap_frames | INT | 80–32 | — |
| mask_feather_px | INT | 30–64 | — |
| proxy_long_side | INT | 640128–1280 | — |
| chunk_frames | INT | 41–32 | — |
| accept_candidate | BOOLEAN | false | Source remains selected until the candidate has been reviewed. |
| previous_stateopt | H3_T8_SKIN_FINISH_SEQUENCE_STATE | — | |
| audioopt | AUDIO | Passed through as the same AUDIO object. Do not concatenate duplicate audio from overlapped chunks; use Video Finalize for file-level audio. |
Outputs (11)
| Name | Type | Description |
|---|---|---|
| candidate | IMAGE | — |
| source | IMAGE | — |
| selected | IMAGE | — |
| audio | AUDIO | — |
| used_skin_mask | MASK | — |
| rejected_mask | MASK | — |
| difference | IMAGE | — |
| sequence_state | H3_T8_SKIN_FINISH_SEQUENCE_STATE | — |
| report_json | STRING | — |
| emitted_absolute_start | INT | — |
| emitted_frame_count | INT | — |