MiniMax H3 Skin Finish / H3肤质收尾 (T8)
The honest way to 'finish' H3 skin without a face-fix trip
- frames
- skin_mask
- audio
- candidate
- source
- audio
- used_skin_mask
- report_json
If your H3 clip comes back with skin that looks blotchy or a little too shiny in close-ups, the temptation is to feed it to some face-refine chain that regenerates the whole face and hope. This node is the opposite of that. MiniMaxH3SkinFinishT8 builds a candidate frame - a conservative, non-generative low-frequency skin-tone and oiliness clean-up - strictly inside a mask you give it, and it refuses to invent anything. No identity reconstruction, no sharpening, no lip-sync rescue. It's the post-FX step you reach for after AV decode and face refine, when all you want is to even out skin without letting the model redraw a face.
It comes from the T8mars pack for MiniMax H3 (the 33B open-weight omni-modal video model that lands in ComfyUI with native joint audio). The whole pack is one author's deep, experimental-heavy workflow layer, and every Skin Finish node shares the same philosophy: source by default, candidate only when you explicitly accept it.
How it works
"Non-generative" is the whole pitch. Given a mask that marks skin, the node applies a low-frequency skin-color correction and reduces bright oily patches inside that mask, then preserves the pixels outside it exactly. Nothing is diffused or resampled; it's a light tonal operation on decoded SDR frames. The strength dials are all yours:
preset-subtleis the safe default;oil_controlspecifically knocks down bright oily patches;tone_evenfavors low-frequency tone consistency.amount(0.35),texture_keep(0.9) andshine_control(0.35) - the actual finishing mix.texture_keepnear 1.0 is what stops the result from turning into plastic.execution_mode-candidate_only/review_only/bypass. Everything defaults to not clobbering your source.
The one input that matters most is skin_mask. Without a reliable explicit mask the node doesn't guess - it returns the source untouched and reports ABSTAIN. Feed it a MASK (an RGBA image with alpha in the example workflows; a plain image with no alpha gives you an empty mask and an ABSTAIN), and optionally an audio stream that passes straight through.
Outputs are the candidate, the untouched source, the passed-through audio, the used_skin_mask (so you can see exactly what it touched) and a report_json explaining what it decided. Wire candidate into the Preview/Audit node and keep source in a side branch until you've eyeballed it.
Install
The pack installs like any other: search "MiniMax H3 Audio T8" in ComfyUI Manager (Registry) or
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
then restart ComfyUI. No mandatory pip dependencies - the pack's requirements.txt is literally "no extra packages." It won't download H3 weights for you; you supply the model, CLIP, VAEs and LoRAs. There's a ready workflow at examples/workflows/17-skin-finish/2026-08-24_H3_Skin_Finish_External_Mask_Advanced_EXP.json that shows Basic, Advanced and Preview/Audit wired together with NOTE nodes explaining every parameter.
Where people get burned
- No mask, no work. If you see
ABSTAINand your frames come back identical, check your mask's alpha channel. The example's secondLoadImageexpects an RGBA mask. - Expecting a fix. This won't repair a warped eye, a blurry face or bad lip sync. If you need that, that's a different node - this is finishing, not surgery.
- Over-polish. Crank
amountto 1 withtexture_keepat 0.5 and you'll get waxy skin. Keeppreset=subtle,texture_keep=0.9until you've actually reviewed a frame.
The honest reading: it's a small, careful node that does one narrow thing well and fails closed when it can't. Exactly what you want in a post-pipeline where a wrong guess is worse than no change.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| preset | COMBO | subtle | subtle is the safe default; oil_control reduces bright oily patches; tone_even favors low-frequency tone consistency. |
| amount | FLOAT | 0.350–1 | — |
| texture_keep | FLOAT | 0.900–1 | — |
| shine_control | FLOAT | 0.350–1 | — |
| tone_adjust | FLOAT | 0.00-1–1 | — |
| execution_mode | COMBO | candidate_only | 3 options: candidate_only, review_only, bypass |
| chunk_frames | INT | 41–32 | — |
| skin_maskopt | MASK | Required for processing. Without a reliable explicit mask the node returns the source unchanged and reports ABSTAIN. | |
| audioopt | AUDIO | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| candidate | IMAGE | — |
| source | IMAGE | — |
| audio | AUDIO | — |
| used_skin_mask | MASK | — |
| report_json | STRING | — |