Nodes/RedNode Studio/RedNode Paint In (composite back)
ComfyUI Node

RedNode Paint In (composite back)

The node that stitches your painted fix back in, feather and all

By RedNodeAI·Created 2 months ago·Updated 3 days ago· 4
RedNode Paint In (composite back)
  • image
  • paint
  • image
strength1.00
run_token

RedNode Paint Out hands your painted region to any renderer - a hosted model, a different architecture, another pack's img2img. RedNode Paint In is the other half of that deal: it takes whatever that renderer produced and composites it back through the Paint tab's feathered mask, so only the region you painted changes and every other pixel of the image comes back bit-identical. If you've ever had an inpainting pass drift the whole image, you know exactly why this matters.

The inputs are the two things you'd expect plus a clever timing mechanism. image is whatever your renderer produced; paint is the RN_PAINT bundle that comes out of RedNode Paint Out, which carries the original picture, the mask, and where the region came from - so none of that needs wiring twice. strength (default 1.0) is how much of the render actually lands: 1.0 replaces the masked area completely, lower values blend it with what was there, which is the rescue valve when a render went too far and you want to keep only part of it. The fourth input, run_token, is the interesting one: leave it empty. The Paint tab's Generate button fills it in for its own runs; while it's empty, this node sits out of normal queues entirely, and the renderer feeding it is never executed. That's how the whole paint system avoids burning a render on a crop nobody asked for - the token is the "this run was actually requested" signal.

That gating behavior is worth internalizing if you're wiring this into a workflow by hand. Because the node uses lazy evaluation (it declares it doesn't need its inputs while run_token is empty), an ordinary queue costs nothing: nothing renders, nothing composites, the image just passes through untouched. Clear the token and press Generate on the Paint tab, and the full round-trip fires. It means you can leave a full paint rig sitting in your graph permanently without paying for it run-to-run.

Where this sits in the wider picture: masked inpainting still owns the one property instruction-editing models can't give you - bit-identical unmasked pixels. An edit model takes the whole image into context and emits a whole new one, and the unmasked regions drift slightly with every edit. The paint-in/paint-out pair keeps the untouched 95% of the frame literally untouched, which is the correct behavior when all you wanted to fix was one jacket or one face.

Pair it with Paint Out on one side (to get the image and mask out to your renderer) and you've built a custom inpainting branch that uses whatever model you like - Krea 2, a detailer checkpoint, even a remote API. The pack's own Paint Render does this internally with its own sampler; Paint In/Paint Out is the version where you choose the renderer.

Installation is the pack:

cd ComfyUI/custom_nodes
git clone https://github.com/RedNodeAI/ComfyUI-RedNodeStudio.git

or search RedNode Studio in ComfyUI Manager, restart. No pip dependencies; works with any model.

CategoryRedNode/Image

Inputs (4)

NameTypeDefaultDescription
imageIMAGEwhatever your renderer produced
paintRN_PAINTfrom RedNode Paint Out. Carries the original picture, the mask and where the region came from, so none of it needs wiring twice.
strengthFLOAT1.000–1How much of the render lands. 1.0 replaces the masked area completely; lower blends it with what was there, which can rescue a result that went too far.
run_tokenSTRINGleave this empty. The Paint tab's Generate button fills it in for its own runs. While it is empty this node sits out, and the renderer feeding it is never executed, so an ordinary queue costs nothing. Clear it and press Generate to paint.

Outputs (1)

NameTypeDescription
imageIMAGE