Nodes/comfyui-mudknight-utils/Inpaint (full-pipe)
ComfyUI Node

Inpaint (full-pipe)

Two-pass inpainting with a full-pipe front door

By mudknight·Created 8 months ago·Updated 2 months ago· 1
Inpaint (full-pipe)
  • full_pipe
  • mask
  • image
  • full_pipe
  • image
inpaint_samplereuler_ancestral_cfg_pp
inpaint_schedulerkarras
inpaint_steps20
inpaint_cfg1.5
inpaint_denoise1.00
detail_samplereuler_ancestral_cfg_pp
detail_schedulerkarras
detail_steps20
detail_cfg1.5
detail_denoise0.20
upscale_model
blur_radius20

Inpaint (full-pipe) is the pack's answer to "I need to fix this one region without touching the rest of the image." It does what the community still calls real inpainting - mask in, regenerate just the masked area - wrapped in a two-pass routine that is noticeably smarter than a single masked pass, and it plugs straight into a full-pipe workflow.

If you arrived here in 2026 wondering why you'd use a mask at all when Qwen-Edit and friends can edit from a sentence: the KB's inpainting essay makes the case better than I can. Edit models take the whole image into context and emit a whole new image, so unmasked regions come back close-but-not-identical, and the drift compounds across a chain of edits. Mask-based inpainting still owns bit-identical unmasked pixels and the denoise dial. That's what this node is for: leave everything else alone.

How the two passes work

The node is called "full-pipe" because its guts are shared with the plain InpaintNode; the pipe version just reads model, VAE, conditioning, and seed from the FULL_PIPE instead of asking for them separately.

  • Pass 1 - coarse fill at 1MP. It downscales the image and mask to roughly a megapixel (rounded to multiples of 8), attaches the mask as a latent noise mask, and samples at full inpaint_denoise (default 1.0). Small image, cheap-ish sample, gets the region filled.
  • Pass 2 - detail and blend at full resolution. The pass-1 result is upscaled back to the original resolution (optionally through an upscale model), composited onto the original image through the original mask, then re-sampled at low detail_denoise (default 0.2) with a Gaussian-blurred mask (blur_radius, default 20) so the seams blend into the surroundings.

The two-pass structure is the whole point: you get a full-denoise reconstruction where it matters and a low-denoise blend everywhere the mask fringes out, instead of a hard-edged patch.

The inputs that matter

Required: full_pipe and a mask. Then two full sets of sampler controls - inpaint_sampler/scheduler/steps/cfg/denoise for pass 1, detail_... for pass 2 - plus upscale_model and blur_radius. The defaults (euler_ancestral_cfg_pp, karras, 20 steps, CFG 1.5) are sensible for SDXL-family; only tune if you know why.

  • inpaint_denoise (default 1.0) - how completely pass 1 rewrites the masked area. Lower it for img2img-style partial fills.
  • detail_denoise (default 0.2) - the seam-blending pass. Too high and you'll regenerate beyond the mask; too low and you'll see the boundary.
  • Optional image input overrides the pipe's image; otherwise it uses whatever image the pipe is carrying.

Outputs: the updated full_pipe (with the result stored as image) and the image itself, which is the one to wire into a Save or a preview.

Installing

Part of the mudknight utils pack. ComfyUI Manager → search comfyui-mudknight-utils, or:

cd ComfyUI/custom_nodes
git clone https://github.com/mudknight/comfyui-mudknight-utils

Restart. No model downloads for this node. It leans on core ComfyUI nodes (VAEEncode/Decode, SetLatentNoiseMask, ImageScale), so no Impact Pack required here.

Gotchas

  • "No image provided and full_pipe has no image." - the pipe is empty of an image. Load one first with Load Image to Latent (full-pipe) or wire the optional image input.
  • Seams visible - raise detail_denoise a bit or bump blur_radius; a 20px blur on a 2K image is conservative.
  • The mask semantics - the mask is the kept-or-replaced region depending on how you draw it; if it looks like you're inpainting the background instead of the subject, your mask is inverted relative to what you expect. This node does not flip masks for you.

It's a small pack with zero comfy.icu impressions, but if you're already on the full-pipe train this is the cleanest way to do masked edits without bolting a separate inpaint workflow onto the side.

Categorymudknight/inpainting

Inputs (15)

NameTypeDefaultDescription
full_pipeFULL_PIPE
maskMASK
inpaint_samplerCOMBOeuler_ancestral_cfg_pp44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
inpaint_schedulerCOMBOkarras10 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +4
inpaint_stepsINT201–10000
inpaint_cfgFLOAT1.50–100
inpaint_denoiseFLOAT1.000–1
detail_samplerCOMBOeuler_ancestral_cfg_pp44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
detail_schedulerCOMBOkarras10 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +4
detail_stepsINT201–10000
detail_cfgFLOAT1.50–100
detail_denoiseFLOAT0.200–1
upscale_modelCOMBO1 options: none
blur_radiusINT200–512Gaussian blur radius applied to mask before pass 2.
imageoptIMAGE

Outputs (2)

NameTypeDescription
full_pipeFULL_PIPE
imageIMAGE