ComfyUI Node

MediaPipe Nose + Eyes Mesh

One mask for the eyes and nose — the 'what are you looking at' region

By Runware·Created 2 years ago·Updated about a month ago· 140
MediaPipe Nose + Eyes Mesh
  • image
  • image
settings.confidence0.50
settings.maskBlur5
settings.maskPadding10
settings.maxDetections6
ttlfalse
ttl_value60
outputFormatJPG

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.

CategoryRunware/Image/runware

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
settings.confidenceoptFLOAT0.500–1Confidence threshold for detections. Only detections above this score are included.
settings.maskBluroptINT50–100Blur radius for mask edges, creating smooth transitions.
settings.maskPaddingoptINT100–200Pixel amount to extend (positive) or shrink (negative) the mask area.
settings.maxDetectionsoptINT61–20Maximum number of detections. Prioritizes highest confidence scores if exceeded.
ttloptBOOLEANfalseEnable to set ttl. Off uses the model's default.
ttl_valueoptINT60Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`.
outputFormatoptCOMBOJPGFile format for the generated image.

Outputs (1)

NameTypeDescription
imageIMAGE