Nodes/ComfyUI illumorae/Image Infill Boundary Propagate
ComfyUI Node

Image Infill Boundary Propagate

The cheapest content fill in the pack

By CorvaeOboro·Created 8 months ago·Updated 6 days ago· 1
Image Infill Boundary Propagate
  • image
  • mask
  • infilled_image
  • distance_map_viz
  • blur_weight_viz
mask_mode
propagate_iterations50
use_angular_drifttrue
drift_radius3
use_center_blendtrue
center_blend_strength0.10
blur_centertrue
blur_strength10.0
blur_falloff_distance50
feather_amount10
debug_printsfalse

Sometimes you don't need a smart fill - you need a fill. Image Infill Boundary Propagate is the simplest infill in the illumorae pack: it fills a masked region by propagating colors inward from the region's boundary, one ring of pixels at a time, like peeling an onion in reverse. No model, no patch search, no statistics. Just the pixels you already have, smeared sensibly into the hole.

Why reach for it? It's a prep step, not a finish. If you're about to run real inpainting or an edit model over a masked area, a plain fill often gives you better results than feeding the model a hard black hole - the model can see the surrounding colors instead of guessing at empty space. Boundary propagate is also genuinely good at outpainting-ish background extension where the region is a smooth gradient (sky, walls, flat ground) and the fill doesn't have to invent structure. And it's fast. Millisecond-fast.

How it works

The mask defines the target region, and the node works in from the boundary one 8-connected ring at a time. The important design choice is that each frontier pixel gets a random-weighted average of its already-known neighbors rather than a deterministic max-filter dilation - the randomness is what stops the streaky, ridge-like artifacts that naive inward blurring produces. It's the classic Criminisi-style terminology (target region vs. source region) but with none of Criminisi's sophistication: no priority, no structure propagation, just color.

The inputs you'll actually set:

  • mask and mask_mode - auto guesses which polarity means "fill," or you can force white=fill or black=fill if the mask comes in flipped. This is the #1 thing to check when the fill fills the wrong area.
  • propagate_iterations (default 50) - how many rings to propagate; basically the radius of the largest hole it can fill. Too low and the hole isn't closed.
  • use_center_blend / center_blend_strength - blends the final center with a blurred average, which cleans up the middle where the propagation has no real signal left.
  • blur_center / blur_strength / blur_falloff_distance - softens the fill; and feather_amount blends the fill edge back into the original so it doesn't look pasted.
  • use_angular_drift / drift_radius - the randomness control; more drift = smoother but less faithful fills.

Outputs: infilled_image plus two diagnostic visualizations - distance_map_viz (how many propagation steps each pixel is from the boundary) and blur_weight_viz (where the center blur is applied). Both are for eyeballing behavior, not for wiring downstream.

Installing it

Part of CorvaeOboro's ComfyUI_illumorae (CC0, pure code). ComfyUI Manager → search illumorae, or:

cd ComfyUI/custom_nodes
git clone https://github.com/CorvaeOboro/ComfyUI_illumorae

Common issues

  • The fill goes into the wrong region - mask polarity. Check mask_mode and flip white=fill/black=fill.
  • Big holes stay black in the middle - propagate_iterations too low for the hole size, or use_center_blend off when it should be on. This is a propagation fill; holes bigger than your iteration budget simply don't get reached.
  • It's not meant for structure - if you're filling across a wall/road/horizon, this node will smear a gradient and look wrong. That's what the pack's Exemplar Region Fill or PatchMatch nodes are for. Reach for boundary propagate on smooth fills only.
Categoryillumorae

Inputs (13)

NameTypeDefaultDescription
imageIMAGE
maskMASK
mask_modeCOMBO3 options: auto, white=fill, black=fill
propagate_iterationsINT501–5000
use_angular_driftBOOLEANtrue
drift_radiusINT31–8
use_center_blendBOOLEANtrue
center_blend_strengthFLOAT0.100–1
blur_centerBOOLEANtrue
blur_strengthFLOAT10.00–10000
blur_falloff_distanceINT501–5000
feather_amountINT100–1000
debug_printsoptBOOLEANfalse

Outputs (3)

NameTypeDescription
infilled_imageIMAGE
distance_map_vizIMAGE
blur_weight_vizIMAGE