Color Adjust (Face Parsing) New
Color-grade the face, not the whole frame
- image
- IMAGE
The name is a spoiler: this is the pack's color-adjust node, and the "(Face Parsing)" suffix is what makes it interesting. It's built for the moment after an InstantID or face-restore pass when the face comes back slightly off - too dark, washed out, skin tone not matching the reference - and you want to fix the face without dragging the whole background through a color-grade with it. This is the Sunx.ai comfyui_sunxAI_facetools pack's answer to that, and the "Face Parsing" half refers to how the pack carves out the face region for the adjustment.
The controls. It's a classic five-slider color-correction stack, all on an IMAGE input:
contrast(0–255, default 1)brightness(-255 to 255, default 1)saturation(0–255, default 1)hue(-0.5 to 0.5, default 0)gamma(0–255, default 1)
Neutral is 1 for everything except hue, where it's 0. The node skips any slider sitting at its neutral value - that's not just an optimization, it means you can leave most of them alone and the image stays untouched. The output is a single IMAGE you can feed straight into the next step or into a SaveImage.
The gating bit. Like the other "New" nodes in this pack, it takes an optional has_face boolean. When it's False, the node returns the input image unchanged - no point color-correcting a region that doesn't exist. Wire has_face from DetectFaceByIndex and you get a pipeline that color-grades faces only when there's actually a face to grade, in batch runs where most frames are empty this saves real time.
Where it fits. In the pack's native workflow it sits between face detection/cropping and the final output: you restore or restyle a face, the face comes back at a different luminance or saturation than the rest of the frame, and this node reconciles it. Skin-tone matching to a reference is the classic use - nudge hue and saturation until the face sits naturally in the scene instead of floating on top of it.
One honest caveat. The color science here is plain torchvision adjust_* operations - brightness and contrast as straightforward multipliers, gamma as a power curve. It's fast and predictable, but it's not a photographic-grade correction tool. If you need curves, color grading in LAB, or per-channel correction, you'll want a dedicated image-processing pack. This is the quick "make the face match the room" knob, and it's good at exactly that.
Install. It ships with the pack: ComfyUI Manager → search comfyui_sunxAI_facetools, or:
cd ComfyUI/custom_nodes
git clone https://github.com/upseem/comfyui_sunxAI_facetools
then restart. Pack-wide dependencies are heavy - insightface, onnxruntime, ultralytics, mediapipe, transformers - and the face-parsing model (a Segformer, jonathandinu/face-parsing) is fetched from Hugging Face on first use, so don't panic if the first run takes a moment to download it.
When your generated face looks right but sits in the frame wrong, this is the node that fixes the sitting.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| contrast | FLOAT | 1.000–255 | — |
| brightness | FLOAT | 1.00-255–255 | — |
| saturation | FLOAT | 1.000–255 | — |
| hue | FLOAT | 0.000-0.5–0.5 | — |
| gamma | FLOAT | 1.000–255 | — |
| has_faceopt | BOOLEAN | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |