MediaPipe Nose + Eyes Mesh
One mask for the eyes and nose — the 'what are you looking at' region
- image
- image
The eyes and nose are where a face says the most, and they're also where generation models slip up the most - mismatched pupils, an eye that's staring off-axis, a nose bridge that looks melted. If you're fixing that whole central region in one inpaint pass, you don't want two separate masks fighting for territory. This node gives you both in a single, fused mask.
What it does
An imageMasking node: your image goes to Runware's cloud, MediaPipe landmarks find the eyes and nose, and you get back one image mask covering both regions. It's a combined-region mask, which matters for the workflow: one mask means one inpaint call with a contiguous protected area, instead of stitching two edits together and hoping the boundary doesn't show.
As with the other MediaPipe nodes in the pack, the output is a grayscale IMAGE tensor. Convert it with core ImageToMask if your sampler wants the MASK type, or hand it to a Runware inpaint node that accepts IMAGE masks. The classic masked-inpainting benefit applies: everything outside the mask is bit-identical, which whole-image editors can't promise.
The settings
Four shared widgets:
settings.confidence(default 0.5) - detection threshold. Raise it if the mask is picking up noise, lower it if detections vanish.settings.maskBlur(default 5) - edge feathering. The eye/nose boundary is high-detail territory, so don't crank this - too much blur and the inpaint softens the eyes themselves.settings.maskPadding(default 10) - extend or shrink the region. Positive padding reaches toward the brow and cheeks, which you usually don't want for eye work.settings.maxDetections(default 6) - max faces processed.
ttl, ttl_value, and outputFormat are pack plumbing; leave them be.
Install
Part of ComfyUI-Runware - install once, get all the mask nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart (or ComfyUI Manager → search "Runware"). Nothing heavy downloads - the model runs in the cloud. You just need a Runware API key: Settings → Runware API key, the RUNWARE_API_KEY env var, or runware auth login.
Gotchas
Every run is a paid cloud call; the title bar shows cost and a NSFW flag. And the usual reminder: the mask is an image, not a MASK socket type, so convert before wiring into a standard sampler. If you're only fixing one eye, the combined mask means the other eye gets regenerated too - that's the point of the node, but know it's coming.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| settings.confidenceopt | FLOAT | 0.500–1 | Confidence threshold for detections. Only detections above this score are included. |
| settings.maskBluropt | INT | 50–100 | Blur radius for mask edges, creating smooth transitions. |
| settings.maskPaddingopt | INT | 100–200 | Pixel amount to extend (positive) or shrink (negative) the mask area. |
| settings.maxDetectionsopt | INT | 61–20 | Maximum number of detections. Prioritizes highest confidence scores if exceeded. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |