Face Beauty Blend
Blend your retouched plate back without a seam
- base
- retouched
- mask
- blended
The hard part of face retouching is rarely the retouch itself - it's getting the edited result back onto the original frame without a seam. You've got a base (the untouched frame) and a retouched plate (the smoothed, warped, or inpainted face), and you need them to merge so nobody can find the border. JHPixelProFaceBeautyBlend is the pack's finishing node for exactly that: a mask-aware blend with feathering and a strength control.
Mechanically it's simple and that's the point. It takes base, retouched, and a mask (the region of the retouched plate you want to keep), optionally feathers the mask with a Gaussian blur via feather, then alpha-composites through strength. It doesn't invent a face mask for you - mask quality is on you, and the README says it plainly: "This node does not invent a face mask; it only composites with the mask you supply." Feed it a good mask (a skin mask from the pack's mask-refinement group, or a JHPixelProFaceLandmarks-driven region) and the seam disappears; feed it a bad one and no amount of feather will save you.
The two dials
strength(default 1.0): the overall blend. This is the control that makes the node worth keeping around - instead of committing to a binary on/off composite, you dial the edit in at 0.6 and the retouch becomes "enhanced" instead of "replaced." It's the difference between a surgical fix and an obvious photoshop.feather(0–64, default 0): Gaussian feather radius in pixels, applied to the mask edge. 0 = hard mask, and yes, you will often want at least a few pixels. Note it's a spatial blur, not semantic edge awareness - it softens the boundary, it doesn't find it.
The output is blended, same shape as the base. Base and retouched must match shape exactly or the node raises a ValueError - pre-scale them to match upstream.
Where it sits in the pipeline
The README frames it as the lightweight finishing node of the face pipeline, and that's the right mental model. It's the natural sink for the output of JHPixelProFaceWarp (warped face → blend back onto the frame), or for any external beauty pass you did on a face plate. It's also the place where inpainting seams get forgiven: inpaint a face region, wire the inpainted plate as retouched, mask it, feather, and the hard edge the model left behind stops being a hard edge.
Install
ComfyUI Manager → search ComfyUI-JH-PixelPro, or:
cd ComfyUI/custom_nodes
git clone https://github.com/jetthuangai/ComfyUI-JH-PixelPro.git
cd ComfyUI-JH-PixelPro
pip install -r requirements.txt
Restart ComfyUI; it's under ComfyUI-JH-PixelPro/face. The pack needs ComfyUI ≥ 0.43.x, Python ≥ 3.10, and installs kornia, mediapipe, opencv-python-headless, scipy.
The trap to avoid: reaching for this node thinking it'll fix a bad retouch. It won't - it will faithfully blend your bad retouch back onto the frame with a nice edge. Do the retouch right (or mask it right), and this node makes the handoff invisible. That's the whole job, and it does it without drama.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| base | IMAGE | — | |
| retouched | IMAGE | — | |
| mask | MASK | — | |
| strength | FLOAT | 1.000–1 | Overall blend strength. |
| feather | INT | 00–64 | Gaussian feather radius in pixels. 0 = no feather. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| blended | IMAGE | — |