ComfyUI Extension: lip_mask_from_pose
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.
A ComfyUI custom node that generates precise mouth and lip masks from DWPose output with multiple mask modes for inpainting teeth, lips, or mouth regions.
Looking for a different extension?
Custom Nodes (0)
README
Lip Mask from Pose Keypoints
A ComfyUI custom node that generates precise mouth and lip masks from DWPose POSE_KEYPOINT output.
Installation
Copy this folder into your ComfyUI/custom_nodes/ directory:
ComfyUI/custom_nodes/lip_mask_from_pose/
├── __init__.py
├── lip_mask_node.py
└── README.md
Restart ComfyUI. The node appears under mask/pose → Lip Mask from Pose Keypoints.
Requirements
No additional dependencies — uses only numpy, cv2, and torch (already in ComfyUI).
Inputs
| Input | Type | Description |
|-------|------|-------------|
| pose_keypoint | POSE_KEYPOINT | Connect from DWPreprocessor's POSE_KEYPOINT output |
| mask_mode | Dropdown | Which mouth region to mask (see below) |
| blur_radius | INT (0-100) | Gaussian feathering radius. 0 = hard edge |
| grow_pixels | INT (0-200) | Dilate mask outward by N pixels |
| person_index | INT (0-99) | Which detected person (0 = first) |
| confidence_threshold | FLOAT (0-1) | Skip frames with low keypoint confidence |
Mask Modes
-
inner_mouth— Only the mouth cavity (teeth, tongue, dark interior). Leaves lips completely untouched during inpainting. Best for replacing teeth/smile without changing lip shape. -
outer_lips— Full lip region including lip skin. Use when you want to regenerate both lips and mouth. -
lips_only— Just the lip flesh (outer contour minus inner mouth). Regenerates lip shape/color while preserving the mouth interior. -
outer_expanded— Same as outer_lips but designed to be used withgrow_pixelsfor a wider mask with soft falloff.
Typical Workflow
[Load Video] → [DWPreprocessor (detect_face=enable)]
↓
POSE_KEYPOINT
↓
[Lip Mask from Pose Keypoints]
↓
MASK → [WAN 2.2 VACE Inpaint / KSampler]
Face Landmark Reference (iBUG 300-W 68-point)
Outer lip contour: indices 48-59 (12 points)
Inner lip contour: indices 60-67 (8 points)
48 54
49 53
50 51 52 53 52
60 64
61 63
62 63 62
(inner mouth opening)
67 65
66 66
Tips
- For teeth-only inpainting: use
inner_mouth+grow_pixels=3+blur_radius=5 - For lip reshaping: use
outer_lips+blur_radius=8for soft blend - Combine with SAM-2 for even more precise boundaries: use this mask as a coarse region, then refine with SAM point prompts placed at the mask centroid
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.