Rebels Krea2 Outpaint Composite
The node that puts your original pixels back, byte for byte
- generated
- placed_source
- IMAGE
Outpaint finishes, you decode the latent, and the part of the frame where your source image used to be looks… almost right. Slightly off colors, a shifted detail, a face that isn't quite your face. That's not the LoRA failing - the model re-rendered the known region along with the new one, and a VAE encode/decode cycle always drifts a little. This node exists to undo that. It pastes the exact source pixels back over the generated canvas, with a feathered seam so you can't see where the swap happened.
It's the same instinct as the community's oldest inpainting rule - "composite after you generate, don't let the decode cycle degrade your image" - but done structurally instead of as a habit you have to remember.
What it actually does
Three inputs, one output. generated comes from VAE Decode, placed_source and placement both come from the same Rebels Krea2 Outpaint Canvas node upstream. Internally it takes the placed source, computes an alpha mask that's solid in the center and fades to transparent over seam_px pixels inward from the edge, and pastes that onto the generated image at the recorded bbox. The known pixels are exact - they're the original source, resized, not something the model drew. The feather hides the boundary where the model's version of those pixels meets yours.
The output is a plain IMAGE, ready for Save Image or whatever you want downstream.
Why the feather matters
The model doesn't perfectly reproduce the source region it was told about - it gets the composition and the gist, then re-renders. If you just slapped your source on top with a hard edge, you'd see a crisp rectangle where colors don't quite meet. The inward feather (32px by default, set by seam_px on the Canvas node) ramps your real pixels to transparent over that strip, so the boundary is a soft gradient instead of a seam. If your edge is visible, nudge seam_px up on the Canvas node and re-run.
Installing it
Everything in this pack installs the same way - it's one repo. ComfyUI Manager, search "Rebels Krea2 Outpaint", or:
cd ComfyUI/custom_nodes
git clone https://github.com/RealRebelAI/ComfyUI-Rebels-Krea2-Outpaint
# restart ComfyUI
No extra Python packages. The real prerequisites are the model files: Krea 2 Turbo (or a compatible Krea 2 GGUF fork), the Krea 2 VAE, the Qwen3-VL CLIP, and the krea2_outpaint_rank32.safetensors LoRA in models/loras.
Where people get burned
- "Generated image size does not match the canvas" - the
generatedimage must be exactly the canvas size the placement JSON describes. If you changedtarget_widthortarget_heighton the Canvas node mid-run, or sampled a latent that doesn't match, this throws. Keep one Canvas node feeding one composite, and you won't see it. - Mismatched placement JSON. The
placementyou feed here has to come from the same Canvas node that producedplaced_source. Grab it from a different run or a cached value and the paste lands in the wrong box. It won't warn you - it'll just composite in the wrong place. - It won't fix what the model generated outside your source box. If the extension itself is bad, composite faithfully preserves that badness. Fix the prompt or the placement, not this node.
One nice property worth knowing: because the source pixels are restored here rather than in the latent, you never have to fight a latent-masking mismatch - the reference only anchors the generation, and the composite is what guarantees the original survives intact.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| generated | IMAGE | — | |
| placed_source | IMAGE | — | |
| placement | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |