Beautify Photo
A face-tune pipeline that needs zero VRAM and zero models
- image
- image
BeautifyPhoto is the phone-camera "beauty mode" as a ComfyUI node: skin smoothing, whitening, brightness, contrast, saturation and sharpening, all in one box. The reason it's worth having in a graph is what it doesn't use - no diffusion model, no face detector, no VRAM. It's pure OpenCV running on the pixels, which means it's instant, it runs on a potato, and it slots in as a final polish step after a generation or a restore.
The honest framing: this is the "make it prettier" node, not the "make it real" node. Use it with restraint.
How it works
Six inputs, and they map to a classic Chinese-style beautification pipeline, applied in a fixed order in the source:
- grind_skin (0–10) - the famous one. Portrait skin smoothing via a bilateral filter blend ("grinding" the skin), tuned so it flattens blemishes without smearing edges.
- whitening_strength (0–100) - a LUT-based whitening pass, the "make the skin brighter/whiter" effect.
- brightness_strength / contrast_strength (–100 to 100) - plain
cv2.convertScaleAbsbrightness and contrast. - saturation_strength (–100 to 100) - HSV saturation shift.
- sharpen_strength (0–10, default 0.1) - unsharp-style sharpening, applied last.
All zero by default except sharpen's 0.1, so the node is a no-op until you turn things up - which is exactly what you want for a "maybe I'll add polish" node. The order matters if you're chasing a specific look: smoothing happens first, sharpening last, so you won't re-introduce the texture you just smoothed away.
The inputs and outputs
The three you'll actually touch: grind_skin (the whole point - start at 1–3), whitening_strength (10–30 is a subtle glow, 100 is a different person), and sharpen_strength (nudge up after smoothing to claw back crispness). The brightness/contrast/saturation sliders are just a convenience so you don't need three extra nodes. One output, image, same size, ready to feed a Save or a viewer.
How to install
It ships with the rest of billwuhao/ComfyUI_PortraitTools:
cd ComfyUI/custom_nodes
git clone https://github.com/billwuhao/ComfyUI_PortraitTools.git
cd ComfyUI_PortraitTools
pip install -r requirements.txt # or: ./python_embeded/python.exe -m pip install -r requirements.txt
No models, no downloads, no face-detection weights - it's just opencv-python, PyYAML and huggingface_hub. The only dependency you could miss is that it expects opencv to be present, which requirements.txt covers.
Where people get burned
- This is the "too smooth" trap, in node form. The photorealism crowd has spent years teaching models to stop producing airbrushed skin - pores and micro-texture are the tell of a real photo. Crank
grind_skinto 10 and you've recreated the exact uncanny beauty filter everyone warns about. 1–3 smooths; past that you're sculpting plastic. - It's global, not face-aware. It smooths the whole image - a textured shirt or a beard gets the same treatment as skin. That's the trade-off for being model-free.
- Whitening at high strength changes skin tone, not just "glow." If the result looks washed out, it's doing exactly what you asked.
- It only processes the first image in a batch (single-image pipeline) - run it per-image if you need a whole batch beautified.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| whitening_strength | INT | 00–100 | — |
| brightness_strength | INT | 0-100–100 | — |
| contrast_strength | INT | 0-100–100 | — |
| saturation_strength | INT | 0-100–100 | — |
| sharpen_strength | FLOAT | 0.10–10 | — |
| grind_skin | INT | 00–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |