Rebels Krea2 Outpaint Canvas
The node that decides where your source image lives on the bigger canvas
- source
- condition
- placed_source
- placement
- canvas_width
- canvas_height
The krea2-outpaint LoRA isn't a normal "extend this image" edit. It's a registered LoRA: the source image is placed at an explicit bounding box on a bigger canvas, and the model is told exactly which coordinates those known pixels occupy. This node is the geometry half of that deal. You feed it your source image and a direction, it hands you the canvas size, the placed image, and a JSON string that the other three nodes in this pack all read. Think of it as the pack's brain, and the rest as arms.
Why reach for it instead of padding the image yourself? Because Krea 2 Turbo has no dedicated outpainting checkpoint, and slapping your source onto a bigger latent with an empty-mask hack works poorly - the model treats the whole thing as noise it should redraw. This pack ports the diffusers pipeline the LoRA was trained with, so the reference lands in the target latent grid at the exact spot the LoRA expects. The known region is carried only by that registered reference. No latent masking, no API, no key.
What it actually does
The node builds a bounding box that preserves your source's aspect ratio and spans the full complementary canvas dimension - full height for a horizontal extend, full width for a vertical one. Then it emits five outputs:
condition- a coarse downscaled copy of the placed source (max edge capped bysource_max_edge) for the encode node to VAE-encode as the reference latent.placed_source- the full-resolution placed image, for the composite node at the end.placement- a JSON string (bbox, canvas size, seam width, pass count) that the Model Patch and Composite nodes both consume.canvas_width/canvas_height- the target canvas, snapped to a multiple of 16. Wire these straight into an EmptyLatentImage.
The inputs you actually set: source, direction (one of extend_right, extend_left, extend_down, extend_up, extend_width_both, extend_height_both), and target_width / target_height. Leave source_max_edge at its 384 default and seam_px at 32 unless you have a reason - seam_px only matters downstream at composite time.
Installing it
This is a ComfyUI Manager install - search "Rebels Krea2 Outpaint" - or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/RealRebelAI/ComfyUI-Rebels-Krea2-Outpaint
# restart ComfyUI
No extra Python dependencies, which is refreshing. The real work is the model files: you need Krea 2 Turbo (or a Krea 2 GGUF fork), the Krea 2 VAE, the Qwen3-VL CLIP, and the LoRA itself, krea2_outpaint_rank32.safetensors from huggingface.co/yijunwang2/krea2-outpaint, dropped into models/loras.
Where people get burned
- "No room for a horizontal extend" - that error means the source at full canvas height would already fill the whole width, so there's nothing left to paint. Crank up
target_width(or pick a vertical extend). The node raises with a clear message, so it's not silent. - Single pass only, for now. The source box spans the full width or full height, which covers extend-in-one-direction and centered-both-sides. Fully interior boxes (canvas on all four sides) need the two-pass plan the pack ships but doesn't chain for you - the
placementJSON reportspass_count, and "interior placement has been a pain with everything else I've used" is a sentiment you'll find echoed in the release thread for the LoRA. You'll be doing that chaining manually.
The rest of the wiring is in the pack's README and worth copying exactly: Model Patch goes after Load LoRA, and you sample with 8 steps, euler, CFG 1.0, denoise 1.0 - Turbo convention, with the empty latent being pure noise.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| source | IMAGE | — | |
| direction | COMBO | extend_right | 6 options: extend_right, extend_left, extend_down, extend_up, extend_width_both, extend_height_both |
| target_width | INT | 153616–8192 | — |
| target_height | INT | 102416–8192 | — |
| source_max_edge | INT | 384128–768 | — |
| seam_px | INT | 320–256 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| condition | IMAGE | — |
| placed_source | IMAGE | — |
| placement | STRING | — |
| canvas_width | INT | — |
| canvas_height | INT | — |