Face Region Mask
Face paint, eye bands and mouth masks from DWPose face landmarks, in one node
- image
- pose_keypoint
- limit_mask
- mask
- debug_image
Face Region Mask builds facial masks from detected face landmarks - full face, left/right half, forehead, an eye band, or the mouth area - without you drawing a single thing. The README's use cases are face paint, makeup, cybernetic markings, scars, and facial tattoos, and that list is the honest pitch: this is the node you reach for when the decal is going on a face and the placement region needs to follow the actual face geometry, not a guess.
It's different from the other mask nodes in one important way: pose_keypoint is a required input, not optional. There's no manual-mask fallback here. You need DWPose output - wire in a DWPreprocessor from ComfyUI ControlNet Aux Preprocessors, the same pose preprocessor the rest of this pack leans on.
How it works
The node pulls the face keypoints from the pose data (face_keypoints_2d - DWPose gives you a dense set, unlike the 70-point estimate of classic OpenPose), computes their bounding box, and expands it by expand (0.12 by default, as a fraction of box width/height; negative values shrink). Then the face_region choice shapes the mask inside that box:
face_full- an ellipse over the whole box.face_left/face_right- the same ellipse split along the vertical center, so you can decal one cheek.forehead- the top portion of the face box, for forehead markings.eye_band- a rounded rectangle across the eye area, for cybernetic visor bands or warpaint stripes.mouth_area- a lower ellipse around the mouth, for face paint that traces the lower face.
If no face keypoints are present, it falls back to estimating a face box from the nose/ears/neck body keypoints - so a profile shot where face landmarks are sparse still produces a usable mask, just a cruder one.
After the region shape, limit_mask multiplies in, invert flips, and feather (0–80 px) softens the edges. Outputs are mask and debug_image - the debug shows the mask tinted magenta with the face box outlined, and you should trust it over your eyes.
Where it fits
The mask is generic, so it can feed Body Decal Apply as clip_mask or user_region_mask, or Body Decal Composite as clip_mask - clip usage is the natural fit, confining a decal to the face while the region geometry handles placement. It also works standalone: a face mask is a useful ingredient for non-decal work like selective editing.
Gotchas
Two things bite. First, it always uses the first person found in the pose data - if the frame has multiple faces and the largest isn't first, you may get the wrong face, so crop to your subject. Second, side profiles lean on the fallback box and the face regions get cruder; don't expect surgical eye-band masks on a 90-degree profile. And as with the whole pack, no pose data means an empty black mask with no error - check the debug image before assuming the node is broken. Install via Manager ("ComfyUI Body Decal") or git clone https://github.com/verias/comfyui-body-decal.git into ComfyUI/custom_nodes and restart.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| pose_keypoint | POSE_KEYPOINT | — | |
| face_region | COMBO | 6 options: face_full, face_left, face_right, forehead, eye_band, mouth_area | |
| expand | FLOAT | 0.12-0.5–1 | — |
| feather | INT | 80–80 | — |
| invert | BOOLEAN | false | — |
| debug | BOOLEAN | true | — |
| limit_maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| mask | MASK | — |
| debug_image | IMAGE | — |