Krea 2 accepts reference latents, but they arrive with no position, so the model treats them as a loose style hint: it borrows the look and reinvents the content. That is the whole reason an outpaint drifts instead of continuing the photo. Krea 2 Encode attaches the reference latents and emits the negative from the same node, so a turbo graph at CFG 1.0 stops carrying a second text encode that does nothing. Krea 2 Outpaint Model Patch registers those reference tokens into the target grid at the rectangle the stitcher records, on frame axis 1. Load Image + Pad gained a `reference` output - the unpadded source, fitted to a 384px long edge and a multiple of 16, because the VAE downsamples by 8 and the DiT patchifies by 2. It is APPENDED after `stitcher`, never inserted: a workflow stores links by output slot index, so any other position silently rewires every saved graph. The stitcher now records where the source sits, as source_bbox in pixels and bbox_normalized in 0..1. Padding knows the rectangle exactly, so it rides with the canvas instead of a parallel wire that can be left unplugged. apply_stitch reads neither key, so an older stitcher stitches identically. Ported from the lab rather than copied: the lab's _krea2_helpers had its own pad_image, feather_pad_mask, plan_pad_canvas, parse_fill_color and build_canvas_stitcher. Duplicating the padding engine here would let the outpaint path and the inpaint path disagree about what a stitcher is, so the public module keeps only what is specific to Krea 2 and uses the existing helpers for the rest. Two departures from the lab version. The model patch declared a kv_cache input and never read it - the cache was always on - so it is wired up now. And it imports comfy's flux internals when you run it rather than at startup: a core release that moves one then surfaces as an error on that node, instead of deleting it from the menu and leaving saved workflows reporting it missing.
1.9 KiB
1.9 KiB
Krea 2 Outpaint Model Patch
Tells Krea 2 where a reference image sits on the canvas.
Reference latents normally arrive as extra tokens with no position, so the model treats them as a loose style hint — it borrows the look and reinvents the content. This patch registers those tokens into the target grid at the rectangle the stitcher reports, which is what makes an outpaint continue the source rather than paint something adjacent to it.
Place it after any LoRA loader and before the sampler.
Controls
- model: A Krea 2 model. Patch last, so a LoRA loaded afterwards does not replace the patched forward pass.
- stitcher: From Load Image + Pad 🆎. Supplies the source rectangle. A stitcher that carries no rectangle — one from Crop For Inpaint, or an older saved graph — places the reference over the full frame, which is what an unpatched model already assumes.
- kv_cache: Compute the reference's keys and values once per run instead of once per step. The reference does not change while sampling, so this is free speed. Turn it off only to rule the cache out when debugging.
Output
- MODEL: The model with reference tokens registered into the canvas grid.
Notes and limitations
- Nothing happens without reference latents. If the conditioning carries none, the patched forward pass calls straight through to the original. Wire Krea 2 Encode 🆎 with a VAE and a reference image.
- It patches comfy internals. The placement reaches into the flux attention layers, so a ComfyUI release that moves them can break this node specifically. It imports those internals when you run it rather than at startup, so a break surfaces as an error on this node instead of the node disappearing from the menu.
- Reference tokens cost attention. The reference is fitted to a short edge before encoding for that reason — see Krea 2 Encode 🆎.