🍒Whitening_👧🏻牛奶肌
The 'milk skin' beauty filter that only touches skin
- image
- whitened_image
Whitening_Node is the pack's headliner beauty feature - the README literally calls it "milk skin," the glossy-clear-skinned look popular in Chinese portrait retouching. It exists to strip the slightly waxy, oily, overly-smooth AI texture off a face and push the skin toward bright, translucent, porcelain territory without touching the background. If you generate portraits and they keep coming out with that telltale plastic skin, this is the node that fixes it in one step.
How it works
It's a three-stage pipeline, all built on OpenCV, and the clever part is that it's skin-masked - it detects skin regions and only modifies those.
- Skin detection. It converts the image to YCrCb and thresholds with the classic skin-tone range, then erodes/dilates and blurs to make a soft mask. That mask is what confines the whole effect to faces and skin.
- Translucent-skin adjustment. In LAB color space it pulls the yellow-blue (b) channel down, which removes the sallow/yellow cast.
Translucent_skincontrols this - higher values give that cooler, "translucent" tone. - Whitening. It builds a lookup table that lifts midtones most aggressively (a soft curve, so highlights barely move) and applies it over the skin region.
Then the kicker: auto_whitening. When it's on, the node analyzes the skin in LAB - average brightness, brightness spread, what fraction of skin pixels are blown-out highlights, how dark the shadows are - and picks a whitening strength between 0 and 80 based on rules like "very bright images get almost no whitening" and "dark skin gets boosted more." It prints the full analysis to the console, which is genuinely useful for understanding why it chose what it chose.
The inputs that matter
- auto_whitening (default on) - let the node judge how much whitening the image needs. This is the default for a reason.
- whitening_strength, 0–100, default 50 - only used when auto_whitening is off. Manual override.
- Translucent_skin, 0–20, default 10 - the cool, de-yellowed "translucent" amount.
One output: whitened_image, same dimensions as the input.
Installation
It's part of ComfyUI_KimNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/wjl0313/ComfyUI_KimNodes
Restart ComfyUI. Needs OpenCV (cv2), which any working ComfyUI install already has - no model downloads, nothing extra.
Common issues
The honest caveats. First, it processes only the first image in a batch - if you feed it a stack of frames expecting them all whitened, you'll get one. For video, that plus auto_whitening is a recipe for brightness flicker between frames, because the auto strength changes with each image's skin statistics; turn auto off and fix the strength manually for consistency. Second, the skin detection is tuned for faces - a full-body shot with lots of skin works okay, but weird lighting (blue stage light, strong shadows) can make the detector miss and then nothing happens. And there's a limit to how much it can do: if the source skin is already blown out at 200+ L-channel brightness, the node correctly backs off to protect highlights, so you can't force it brighter. Treat it as a retouch node, not a sun-fix. Within those limits, it's one of the more genuinely impressive utilities in this pack.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| auto_whitening | BOOLEAN | true | — |
| whitening_strength | INT | 500–100 | — |
| Translucent_skin | INT | 100–20 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| whitened_image | IMAGE | — |