Nodes/comfyui-minimax-h3-audio-T8/MiniMax H3 Skin Finish Guided Surface / 引导滤波肤质收尾 (Advanced EXP)
ComfyUI Node

MiniMax H3 Skin Finish Guided Surface / 引导滤波肤质收尾 (Advanced EXP)

The guided-filter skin finisher that refuses to eat the texture

By T8mars·Created about a month ago·Updated a day ago· 1,031
MiniMax H3 Skin Finish Guided Surface / 引导滤波肤质收尾 (Advanced EXP)
  • source_frames
  • used_skin_mask
  • audio
  • surface_candidate
  • source
  • selected
  • audio
  • effective_mask
  • rejected_mask
  • difference
  • report_json
amount0.65
surface_smoothing0.70
texture_keep0.85
highlight_compression0.65
broad_highlight_compression0.45
broad_highlight_start0.68
broad_highlight_end0.94
blemish_balance0.35
surface_radius_percent2.0
maximum_radius_px32
edge_epsilon0.0025
edge_protection_scale0.055
highlight_threshold0.006
blemish_threshold0.008
maximum_surface_delta0.080
minimum_texture_ratio0.82
minimum_reference_texture0.003
maximum_mean_abs_change0.035
maximum_peak_abs_change0.18
minimum_mask_area0.0001
maximum_mask_area0.50
maximum_new_clipped_fraction0.0005
clipping_epsilon0.0039
chunk_frames2
accept_candidatefalse

If you've ever reached for a bilateral or guided filter to smooth skin without killing edges, you already know the trick - and this node is that idea taken seriously. The Guided Surface node is a clean-room skin-finish candidate built on a scalar-luma guided filter, designed to balance compact highlights, broad oily sheen, and blemishes while explicitly retaining source texture. It's the pack's most complete "matte and soften without the beauty-filter look" attempt.

How it works

A guided filter smooths based on a second signal's structure rather than blindly blurring - that's what keeps edges and detail where they belong. On top of that base, the node adds two bounded passes: compression for compact highlights (spots of shine), and a photographic luminance shoulder for broad highlights (whole-cheek sheen, which lives in the low frequencies and would survive a normal smooth). The v2 refinement the author shipped is the important part: broad highlight energy is measured as the positive difference from a mask-weighted local skin-illumination estimate, so uniformly bright skin receives no broad correction, and treatment fades to zero inside the hard mask edge (a two-pixel gate) so you don't get a tell-tale mask ring.

The controls, reduced to what you'll actually set:

  • amount (0.65) - global correction strength.
  • surface_smoothing (0.7) and texture_keep (0.85) - the smooth vs. texture trade. This pair is the heart of the node; if you want "matte the shine, keep the grain," these two are where you live.
  • highlight_compression (0.65) for compact shine, broad_highlight_compression (0.45) for the wide sheen, gated by broad_highlight_start/end (0.68 → 0.94) in luma.
  • blemish_balance (0.35) - how hard to soften small blemishes versus keeping them.
  • The guard rail: maximum_surface_delta, minimum_texture_ratio, maximum_mean_abs_change/maximum_peak_abs_change - frames that overstep bounce to exact source.

The input/output shape

Required: source_frames and used_skin_mask, plus the knob set. Optional audio. Outputs follow the family contract: surface_candidate, source, selected (bit-exact source until you flip accept_candidate), audio, effective_mask, rejected_mask, difference, report_json. Mask exterior, alpha, auxiliary channels, and audio are exact-source contracts - never touched.

Why you'd reach for it

When the plain frequency split or the specular split feels too weak and you want one node that handles both the shiny forehead and the pimples while keeping the skin reading as skin. The guided-filter lineage is exactly the "soften without losing edges" tool the post-processing playbook recommends for skin.

Honest expectations

T8's verification is again the adult in the room. The first surface version was measurably safe but "visually weak," and a full 960x544x124 stream got a blind review where source won overall, with the candidate winning nothing. The later v2/static candidate cleared the objective gates - zero fallbacks, exact audio, max temporal jump tiny - but review 8e89bff3bc95 came back all-ten-criteria-tied. Translation: this is a rigorously-constrained, display-referred finisher whose parameters have not been shown to produce a perceptible win. Use it as a principled option in your chain and judge for yourself; don't assume the defaults will visibly improve anything.

Installing it

Ships in the comfyui-minimax-h3-audio-T8 pack: 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 model downloads - CPU-only, chunked (chunk_frames default 2).

CategoryT8/MiniMax H3/Post FX/Experimental

Inputs (28)

NameTypeDefaultDescription
source_framesIMAGE
used_skin_maskMASK
amountFLOAT0.650–1
surface_smoothingFLOAT0.700–1
texture_keepFLOAT0.850–1
highlight_compressionFLOAT0.650–1
broad_highlight_compressionFLOAT0.450–1
broad_highlight_startFLOAT0.680–0.99
broad_highlight_endFLOAT0.940.01–1
blemish_balanceFLOAT0.350–1
surface_radius_percentFLOAT2.00.1–5
maximum_radius_pxINT321–128
edge_epsilonFLOAT0.00250.000001–0.1
edge_protection_scaleFLOAT0.0550.001–0.5
highlight_thresholdFLOAT0.0060–0.1
blemish_thresholdFLOAT0.0080–0.1
maximum_surface_deltaFLOAT0.0800–0.25
minimum_texture_ratioFLOAT0.820–1
minimum_reference_textureFLOAT0.0030–0.1
maximum_mean_abs_changeFLOAT0.0350–0.25
maximum_peak_abs_changeFLOAT0.180–1
minimum_mask_areaFLOAT0.00010–0.25
maximum_mask_areaFLOAT0.500.05–1
maximum_new_clipped_fractionFLOAT0.00050–0.25
clipping_epsilonFLOAT0.00390.0001–0.05
chunk_framesINT21–16
accept_candidateBOOLEANfalseFalse keeps the exact source selected. Enable only after labelled full-video review and downstream Texture/Safety gates.
audiooptAUDIO

Outputs (8)

NameTypeDescription
surface_candidateIMAGE
sourceIMAGE
selectedIMAGE
audioAUDIO
effective_maskMASK
rejected_maskMASK
differenceIMAGE
report_jsonSTRING