Nodes/comfyui-minimax-h3-audio-T8/MiniMax H3 Skin Finish Specular-Aware Split / 高光感知纹理解耦 (Advanced EXP)
ComfyUI Node

MiniMax H3 Skin Finish Specular-Aware Split / 高光感知纹理解耦 (Advanced EXP)

The frequency split that cares about highlights (specular-aware, not a replacement)

By T8mars·Created about a month ago·Updated a day ago· 1,031
MiniMax H3 Skin Finish Specular-Aware Split / 高光感知纹理解耦 (Advanced EXP)
  • source_frames
  • candidate_frames
  • used_skin_mask
  • audio
  • specular_frequency_candidate
  • source
  • selected
  • audio
  • effective_mask
  • rejected_mask
  • difference
  • report_json
low_frequency_strength1.00
source_detail_gain1.00
separation_radius_percent3.00
maximum_radius_px32
highlight_detail_suppression0.65
highlight_start0.60
highlight_end0.92
positive_detail_threshold0.004
treatment_intent_scale0.0040
maximum_specular_delta0.040
minimum_mask_area0.0001
maximum_mask_area0.50
maximum_new_clipped_fraction0.0005
clipping_epsilon0.0039
chunk_frames4
accept_candidatefalse

Plain frequency splitting has a blind spot: when you strip a skin-finish candidate down to its low-frequency tone and re-add source detail, you also throw away the candidate's highlight work. Oily shine on a forehead or nose bridge is high-frequency-ish energy, and a naive split discards the whole point of an oil-control pass. The Specular-Aware Split is the append-only alternative that runs the ordinary Frequency Split first, then selectively restores the darker highlight treatment that the split lost.

How it works

The pipeline is: run the unchanged Frequency Split, then walk back only the bright, positive detail the split erased - but only where three things agree: bright semantic skin, positive local source detail, and the input candidate's own treatment. That agreement requirement is what stops it from inventing shine that was never there.

The knobs that matter:

  • highlight_detail_suppression (default 0.65) - how much of the lost bright detail comes back from the input candidate. 0 returns the exact ordinary split; the correction can never overshoot the candidate.
  • highlight_start / highlight_end (0.6 → 0.92) - the luma band that counts as "highlight."
  • positive_detail_threshold (default 0.004) and treatment_intent_scale - what counts as positive detail worth restoring and how hard to apply it.
  • maximum_specular_delta (default 0.04) - a hard per-pixel luma cap before the Texture Guard runs, so no single pixel gets slammed.

Everything else - the separation radius, mask-area limits, clipping epsilon, chunk size - mirrors the Frequency Split node, because it is that node underneath. The correction is a convex interpolation between the frequency result and the input candidate, so mathematically it cannot produce a stronger subtraction than the candidate itself.

The input/output shape

Same skeleton as Frequency Split: source_frames, candidate_frames, used_skin_mask required; optional audio. Outputs specular_frequency_candidate, source, selected, audio, effective_mask, rejected_mask, difference, report_json. And the same fail-closed personality: source stays selected until you review and flip accept_candidate.

Why you'd reach for it

If you're doing oil control on footage with real shine - forehead, nose bridge, cheeks - the plain split is the wrong tool because it eats the highlight correction along with the pores. This node is the middle ground: it keeps the candidate's darker-highlight intent on exactly the pixels that had bright detail, while the mask exterior, alpha, auxiliary channels, and audio all stay bit-exact.

Honest expectations

T8's own verification is refreshingly unimpressed with itself here. On a six-frame calibration, the ordinary/0.35/0.65 routes all passed the guards but the labelled contact sheet "still looked subtle," and the harder oil-control parameter run retained only ~25–32% of the raw average treatment while protecting texture. So: this is a conservative highlight-restoring tool, not a "make this face matte" button. If you're after dramatic de-shining you'll be fighting the texture guards the whole way, and that's by design - the author would rather you under-treat than wipe the pores.

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 first, restart). No extra models; pure CPU post-processing.

CategoryT8/MiniMax H3/Post FX/Experimental

Inputs (20)

NameTypeDefaultDescription
source_framesIMAGE
candidate_framesIMAGE
used_skin_maskMASK
low_frequency_strengthFLOAT1.000–1
source_detail_gainFLOAT1.000–1.25
separation_radius_percentFLOAT3.000.1–5
maximum_radius_pxINT321–128
highlight_detail_suppressionFLOAT0.650–1Restores the input candidate only where bright positive detail was lost. The correction cannot pass beyond that candidate; 0 is exact ordinary split.
highlight_startFLOAT0.600–0.95
highlight_endFLOAT0.920.05–1
positive_detail_thresholdFLOAT0.0040–0.05
treatment_intent_scaleFLOAT0.00400.0001–0.1
maximum_specular_deltaFLOAT0.0400–0.1Hard per-pixel luma correction cap before Texture Guard.
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_framesINT41–32
accept_candidateBOOLEANfalseThe source stays selected until the labelled candidate is reviewed.
audiooptAUDIO

Outputs (8)

NameTypeDescription
specular_frequency_candidateIMAGE
sourceIMAGE
selectedIMAGE
audioAUDIO
effective_maskMASK
rejected_maskMASK
differenceIMAGE
report_jsonSTRING