Skin Luminance Adjust (Eric_)
Brighten skin in L\* space, not vibes — the colorist's way
- image
- skin_mask
- image
Brightening a face sounds easy until you do it and the subject looks like a clown: skin lifted in a flat additive way goes milky, saturation gets weird, and shadows turn into a "painted on" mess. Skin Luminance Adjust (Eric_) is built to avoid exactly that. It changes only the luminance of skin pixels - never hue, and it compensates saturation as it goes - using the same perceptual math (L* space) a colorist uses, so a lift in the shadows and a lift in the highlights look like the same intentional brightening instead of two different hacks.
Two modes, pick your poison.
target_ire- you set the target mean skin luminance in IRE (default 70, which is the broadcast standard for skin tone). The node measures the current mean, computes a multiplicative gain to hit your target, and applies it in L* so it reads as uniform across shadow and highlight. This is the "make it look like a properly-exposed broadcast face" mode.manual_offset- the default. A direct Y offset (manual_offset, -1 to +1): +0.1 lifts skin by about 0.1 Y units (~10 IRE), -0.3 darkens by 0.3. Simple and predictable.
The other knobs. detection_mode works exactly like its sibling in SkinToneCorrector: combined (mask + confidence exclusion holes), hsv_auto (no mask), or mask_only (default here - just your feathered mask). skin_threshold (default 0.1) in combined mode drops the bottom fraction of skin-likeness inside the mask - raise it toward 0.2–0.25 to also exclude lips. feather softens the boundary. And strength (0–1, default 0.5) scales the whole shift - this is the dial to turn if the result looks too aggressive.
There's a nice hidden behavior worth knowing: the node attenuates the correction automatically when darkening, precisely so you don't get that dead "painted" look. It also applies a saturation rolloff - brightening slightly desaturates, darkening slightly saturates - which keeps skin looking like skin rather than plastic.
Where it goes. It's the third step in the pack's recommended chain: ColorCastRemover → SkinToneCorrector → SkinLuminanceAdjust. Fix white balance, then hue, then brightness - in that order, or the luminance pass will fight a cast you haven't removed yet. Output is just the corrected image; run the analyzer afterward and watch skin_ire approach 70.
Installing it. It's in the Eric Color Correction pack:
cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Eric_Color_Correction_ComfyUI
cd Eric_Color_Correction_ComfyUI
pip install -r requirements.txt
Restart ComfyUI (or ComfyUI Manager → "Eric Color Correction"). Pure tensor math, no model downloads, CPU-friendly. Same license reminder as the rest of the pack: non-commercial CC BY-NC-style by default, paid commercial license required for work you sell.
One honest note: this node has more moving parts than the rest of the pack - two modes, three detection modes, threshold, feather, strength - and the defaults (manual_offset, mask_only) are conservative on purpose. If you're a beginner, set a skin mask, leave manual_offset at 0 and strength at 0.5, and nudge the offset a tenth at a time. It's a scalpel, and it rewards small movements.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| mode | COMBO | manual_offset | 2 options: target_ire, manual_offset |
| detection_mode | COMBO | mask_only | 3 options: combined, hsv_auto, mask_only |
| target_ire | FLOAT | 700–100 | Target mean skin luminance in IRE (Y-space). 70 = broadcast standard skin tone. The shift is applied perceptually (L* space) so it looks uniform across shadow and highlight areas of skin. |
| manual_offset | FLOAT | 0.00-1–1 | Direct additive Y offset applied to skin pixels. +0.1 lifts by 0.1 Y units (about 10 IRE). -0.3 darkens by 0.3 Y units. Full range: -1.0 to +1.0. |
| strength | FLOAT | 0.500–1 | — |
| skin_threshold | FLOAT | 0.100.01–0.9 | Skin confidence threshold - behavior depends on detection_mode. COMBINED (recommended): pixels inside the SAM mask whose skin confidence is below this fraction of the PEAK confidence inside the mask are excluded. Skin-tone-agnostic: 0.10 always means 'exclude the bottom 10% of skin-likeness for this person' - eyes, teeth, eyebrows - regardless of complexion. Start at 0.10. Raise to 0.20-0.25 to also exclude lips. Lower to 0.05 if shadow areas of skin are being incorrectly excluded. HSV_AUTO (no mask): threshold applied to raw confidence score (0-1). Start at 0.25-0.35. Raise to exclude warm backgrounds or clothing. |
| feather | FLOAT | 80–64 | Softens the outer boundary of the skin selection. COMBINED: feathers the SAM mask edge (hairline, shoulder, jaw). The skin interior stays clean at weight 1.0 - feather only affects the edge. HSV_AUTO / MASK_ONLY: feathers the confidence or mask boundary directly. |
| skin_maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |