LLS Native Inpaint Conditioning
The 2026 recipe for true masked inpainting, wrapped in one node
- model
- positive
- negative
- vae
- image
- mask
- model
- positive
- negative
- latent
- inpaint_info
There's a specific recipe that the inpainting community converged on for getting modern edit models to do true masked inpainting - the kind where the unmasked pixels stay untouched. The short version: use InpaintModelConditioning instead of an empty latent, and you get a latent whose masked region is actually conditioned on the surrounding image. That's exactly what this node is: a thin wrapper around ComfyUI's InpaintModelConditioning, with one LLS twist on top.
The twist is FLUX. FLUX-family models want a Differential Diffusion patch applied to the model so masked inpainting behaves correctly instead of treating the mask as just another img2img denoise. Set patch_mode to auto (the default) and the node applies Differential Diffusion automatically when it detects a FLUX-family model, at patch_strength (default 1.0). Set it to disabled and it won't touch your model; differential_diffusion forces it on.
What it does, mechanically
You feed it a model, positive/negative conditioning, a vae, the image, and the mask. It returns the patched model, re-encoded positive/negative, and a latent with the noise mask attached - the full conditioning bundle a KSampler needs. It also returns an inpaint_info JSON describing what it detected (model family, profile, which patch was applied). The optional model_info lets you override family detection if the auto-sniff gets a merge wrong.
The noise_mask boolean (default on) controls whether the latent carries the noise mask - keep it on for standard masked inpainting.
Why this node exists
ComfyUI's stock InpaintModelConditioning already does the core job; this node exists to make it family-aware and to remove the FLUX Differential Diffusion gotcha. In the LLS pack it slots into the repair chain as the "native" route, alongside the pack's own Simple Repair Prepare. If you're coming from the KB's inpainting guide, this is the same recipe - InpaintModelConditioning, basic scheduler so you get denoising strength back, mask in - but packaged so you don't have to find and wire the pieces yourself.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/Gin3601/LLS-node
# restart ComfyUI
Or ComfyUI Manager → search "LLS-node". It calls ComfyUI core, so no pip dependencies.
Gotchas
The FLUX auto-patch depends on your ComfyUI build shipping the Differential Diffusion support it expects - if you're on a stripped-down or very old build, check the inpaint_info output to confirm whether a patch was actually applied. And remember the broader lesson from the inpainting discourse: masked inpainting with modern models is now the deliberate choice when you need unmasked pixels untouched or full-resolution detail on a small region - for whole-frame edits, an instruction editor (Qwen Edit, Klein) without a mask is usually faster.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| image | IMAGE | — | |
| mask | MASK | — | |
| patch_mode | COMBO | auto | 3 options: auto, disabled, differential_diffusion |
| patch_strength | FLOAT | 1.000–1 | — |
| noise_mask | BOOLEAN | true | — |
| model_infoopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| inpaint_info | STRING | — |