Nodes/RC Image Compositor/RC High/Low Frequency Skin Smoothing
ComfyUI Node

RC High/Low Frequency Skin Smoothing

Skin smoothing that doesn't turn faces into plastic

By kj863257·Created 11 months ago·Updated 10 months ago· 16
RC High/Low Frequency Skin Smoothing
  • image
  • mask
  • IMAGE
low_frequency_radius8.0
high_frequency_strength0.70
skin_tone_protection0.80
preserve_fine_detailstrue
edge_protection0.30
methodfrequency_separation

The reason so much AI "portrait retouching" looks like a mannequin is that it smooths everything uniformly - pores, edges, eyelashes, all of it - until the face has the texture of a ping-pong ball. Frequency separation exists to avoid exactly that. You split the image into a smooth low-frequency layer (color and tone) and a detail high-frequency layer (pores, texture), smooth only the low frequencies, and put the detail back on top. Skin gets softer; edges and texture stay.

RC High/Low Frequency Skin Smoothing automates that whole pipeline with skin-tone detection and edge protection built in. It's the rare one-click retouching node that understands the difference between a blemish and an eyebrow.

How it works

The core method (frequency_separation) is textbook: blur the image with a Gaussian at low_frequency_radius to get the low-frequency layer, subtract it from the original to isolate high-frequency detail, smooth the low-frequency layer, and recombine. The high_frequency_strength slider controls how much of that detail comes back - 0 is maximum smoothing, 1.0 restores original detail, above 1.0 actually sharpens texture.

Around that core sit the safeguards:

  • skin_tone_protection - masks the effect toward detected skin tones. At 0.8 (default), 80% of the smoothing budget is reserved for skin, leaving hair, clothing, and background alone.
  • preserve_fine_details - keeps eyelashes, eyebrows, and hair from being smoothed into mush.
  • edge_protection - preserves hard edges (jawlines, lips) from blur bleed.
  • method - you can also pick surface_blur or selective_gaussian, two alternative smoothing approaches that some find more forgiving on texture. Frequency separation is the classic for a reason, though.
  • mask (optional) - a MASK input to limit smoothing to specific regions. White = smooth, black = preserve. If the auto skin detection misses, this is your override.

Output is a single IMAGE tensor.

How to install it

Part of the RC Image Compositor pack:

cd ComfyUI/custom_nodes
git clone https://github.com/kj863257/ComfyUI_RC_Image_Compositor
cd ComfyUI_RC_Image_Compositor
pip install -r requirements.txt

Restart ComfyUI, or install via ComfyUI Manager by searching "RC Image Compositor". Deps: pillow, numpy, opencv-python.

Common issues

The biggest practical mistake is cranking high_frequency_strength to 0 and expecting beauty - at 0 you've thrown away all texture, and even with edge protection the result is waxy. Keep it at 0.5–0.7 for a "still human" retouch and only drop lower for a deliberate airbrush look.

Second, low_frequency_radius controls what counts as "texture" vs. "tone." Too small (1–3) and the low-frequency layer still contains pores, so smoothing does little; too large (20+) and you start softening facial contours, which reads as a plastic face. Start at 8 and move in 2-unit steps.

Third, if you're feeding it an already-upscaled 2K portrait, the same radius covers fewer feature pixels than it would at 512. Scale your radius with resolution - a rule of thumb is roughly 1 unit of radius per 100px of face size. And when the auto skin detection fails on unusual lighting or heavy makeup, feed it your own mask from a segmentation pass rather than fighting the slider.

CategoryRC/Filters

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
low_frequency_radiusFLOAT8.01–50Low frequency separation radius - determines the size of skin texture features to smooth
high_frequency_strengthFLOAT0.700–2High frequency detail strength (0=maximum smoothing, 1=original detail, >1=enhanced detail)
skin_tone_protectionFLOAT0.800–1Skin tone protection level (0=affect all areas, 1=only affect detected skin tones)
preserve_fine_detailsBOOLEANtruePreserve fine details like eyelashes, eyebrows and hair
edge_protectionFLOAT0.300–1Edge protection strength (0=no protection, 1=maximum edge preservation)
methodCOMBOfrequency_separationSmoothing method: - frequency_separation: Classic PS frequency separation - surface_blur: Surface blur for texture preservation - selective_gaussian: Selective Gaussian blur
maskoptMASKOptional mask to limit smoothing to specific areas (1.0=smooth, 0.0=preserve)

Outputs (1)

NameTypeDescription
IMAGEIMAGE