ComfyUI Node

NO8D-Generate

Sampling, inpainting, outpainting, and edit-model references in one node

By no8d·Created 2 months ago·Updated 14 days ago· 271
NO8D-Generate
  • model
  • positive
  • vae
  • latent
  • canvas
  • negative
  • image
steps6
cfg1.0
sampler_nameeuler
schedulersimple
seed0
denoise1.00
mask_feather50

The whole second half of image work is fixing what the first half got wrong, and ComfyUI makes you assemble that by hand: a KSampler here, a mask node there, a padding node for outpainting, a different graph entirely if you're feeding a reference image to an edit model. NO8D-Generate is the pack's attempt to collapse that into one node - sampling controls, image preview, inpainting, and outpainting in a single UI shell that figures out which mode you're in and builds the right graph for it.

Here's the architectural fact that makes it trustworthy: it expands exclusively to ComfyUI core nodes. The node is a UI shell. When you hit run, it reads its canvas state and constructs the underlying sampler/mask/padding graph out of stock ComfyUI nodes via the engine's graph builder, then executes it. So you're not getting a mysterious black-box sampler - you're getting a hand-assembled core graph that happens to be built for you. The tradeoff is that it only knows the modes it knows; beyond those, it's just a sampler.

The inputs that matter

  • model, positive, vae, latent - the standard generation stack. Wire your loaded model, your encoded positive, your VAE, and your empty latent.
  • steps, cfg, sampler_name, scheduler, seed, denoise - the sampling controls, with sane defaults for a low-CFG model: 6 steps, CFG 1, euler, simple. This node is clearly aimed at the modern CFG-1 era; if you're feeding it an SDXL-style checkpoint, adjust accordingly.
  • mask_feather (0–100) - feathering for painted masks, default 50. The softening on the mask edges.
  • canvas - the special NO8D_GENERATE_CANVAS input that carries everything visual: canvas aspect and size, the base image, the source image, the painted mask, and outpaint state. You don't feed this from a wire; it's populated by the node's own canvas UI.
  • negative (optional) - a negative conditioning. If you don't connect one, the node zeroes out the positive for the negative slot, which is the right move for CFG-1 models that need a negative slot but no real negative text.

Output is image - the final generated image, and nothing else. Deliberately: the project log notes it no longer outputs the latent or mask, because mixing image-space composite and latent outputs after inpainting causes semantic confusion downstream.

How the modes decide themselves

The node watches its canvas state and picks the path: no mask and no extended canvas means plain generation; a painted mask means native inpainting; a canvas larger than the base means outpainting. Inpainting uses the base image plus your lasso mask with feathering, opacity, and invert controls. Outpainting places the source and fills the added region.

Then there are the reference paths. If it detects a Flux2 Klein model upstream it routes into Klein's native reference-latent workflow; if it detects a Krea2 edit model it uses the Krea2 native source-patch plus grounded-image conditioning - the same mechanism the dedicated Krea2 nodes in this pack expose (see NO8DKrea2ReferenceModel and NO8DKrea2GroundedEncode). The ordinary latent still drives plain generation when no reference model is in play.

Gotchas

The classic error is running with a painted mask before the mask upload finishes - you'll get a message about the painted mask not being saved. That's the canvas UI's async upload racing your run; wait for it and rerun. If your graph "does nothing," check whether you're parked in a mask/outpaint state you didn't mean to be in. And because it's a shell, its reach is bounded by its built-in modes - for exotic custom sampling, a hand-built KSampler graph is still the floor.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/no8d/ComfyUI-NO8D-controls.git
python -m pip install -r requirements.txt

ComfyUI Manager → "NO8D-controls". No model downloads in the pack - you supply the checkpoint, VAE, and (for edit paths) the Klein or Krea2 edit model yourself. Restart and hard-refresh; the canvas editor is frontend JS and a stale tab shows a dead canvas.

CategoryNO8D-controls

Inputs (13)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
vaeVAE
latentLATENT
stepsINT61–10000
cfgFLOAT1.00–100
sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOsimple9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
seedINT00–18446744073709550000
denoiseFLOAT1.000–1
mask_featherINT500–100
canvasNO8D_GENERATE_CANVAS
negativeoptCONDITIONING

Outputs (1)

NameTypeDescription
imageIMAGE