IAMCCS Krea 2 Studio Layout (Fedor V12)
Regional boxes on Krea 2, without a second engine
- builder_prompt
- fedor_regions_json
- bboxes
- studio_data
Krea 2 has a party trick: bounding-box prompting partly works, straight out of the box, because its Qwen3-VL text encoder was trained on boxes. It is also accidental rather than designed - the capability is zero-shot, so the moment you want three characters in three places with separate descriptions, it gets vague on you. That's the gap this node exists to fill.
IAMCCSKrea2StudioLayoutV12 is a translation layer, and it is honest about that. It does not implement regional attention. It takes the pack's draggable-region document and converts it, one-to-one, into the row/box contract expected by Fedor's Krea2RegionalMultiLoRAV12 node, then gets out of the way. One engine, one place where token ownership is decided.
Inputs
canvas_width/canvas_height- default 1024×1024, step 8. These are the coordinates every box is normalised against, so they must match the generation canvas.scene_prompt- the global description. Keep subjects out of it; they belong to regions.regions_json- the region document (more below), default[].spatial_anchor_lora- defaultkrea2_identity_edit_v1_2.safetensors, the community identity-edit LoRA for Krea 2.base_lora_strength- default 1.0, range −10 to 10, multiplies per-region LoRA strengths.spatial_anchor_strength- default 0.001, clamped to a max of 0.05.
That last one looks like a typo and isn't. Local V12 only treats a row as spatially active when it has a non-zero LoRA or an in-node reference, and it only installs its unified attention when at least one LoRA matrix is present. So a region that is text only borrows the identity-edit LoRA at a deliberately negligible weight to switch the routing on. The prompt still owns the region; the LoRA is plumbing. If you zero it out with text-only regions, the node raises a clear error telling you it needs the anchor - and if the anchor LoRA isn't installed, everything falls over at load time.
regions_json
A JSON list, max 16 entries, each with: id, name, enabled, prompt, prompt_strength, lora, lora_strength, feather, priority, and box with normalised x, y, width, height (0–1). Boxes are clamped into the canvas, so a sloppy drag can't produce a negative-width region. In practice the frontend writes this for you; it's worth knowing its shape for the day you edit it by hand.
priority is the interesting field. Regions overlap in real compositions, and priority decides who wins the contested pixels rather than letting the model average two descriptions into a blur.
Outputs
Four strings and a box list, all consumed by the V12 node:
builder_prompt- the structured builder document: a high-level description plus a compositional deconstruction with one element per region, each carrying a 0–1000 normalised bbox and its description.fedor_regions_json- the row contract for V12: name, prompt, lora, strength, enable, per-row reference fields.bboxes- pixel boxes on the canvas.studio_data- a debug/audit trail: contract id, backend, engine, canvas, region counts, resolved anchor and strength, and per-region what-was-routed-where.
Wire builder_prompt into your prompt builder, and fedor_regions_json plus bboxes into V12.
Two details in the routing are worth stealing for your own prompts. A single active region gets extra language reinforcing that it must be a distinct standalone subject, and the global prompt gets rewritten to "background environment only, with no people, creatures or subject-shaped structures" - because with one region, V12's un-owned global span will otherwise try to draw the subject itself. There's also a small disambiguation pass that rewrites a bare "giant" into "a gigantic humanoid giant character", which is a very specific bug fixed by a very specific regex.
Install
Pack first, then the backend it delegates to:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Manager search IAMCCS works too. Then install Krea2RegionalMultiLoRA / Krea2-Multi-Character-Lora-Node-w-bounding-box (Fedor's V12 node) and restart. Without it, this node will happily produce its four outputs and then the consumer is missing - you'll get an error naming Krea2RegionalMultiLoRAV12. You also need Krea 2 itself: the model, the ~8GB Qwen3-VL text encoder and the Qwen-Image VAE, with stock Krea 2 CLIP/UNET loaders. People forget the encoder and VAE constantly and then blame the nodes.
Be realistic about it
Regional prompting on Krea 2 is a workaround for a model whose open weights went through an alignment pass that flattens facial expression and quietly drops prompt clauses. If a region's subject isn't appearing at all, check your prompt wording and your LoRAs before you start moving boxes around. Krea 2 responds to specificity - "Teen Titans (2003)", not "Teen Titans" - and that applies inside a box just as much as outside one.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| canvas_width | INT | 102464–16384 | — |
| canvas_height | INT | 102464–16384 | — |
| scene_prompt | STRING | — | |
| regions_json | STRING | [] | — |
| spatial_anchor_lora | STRING | krea2_identity_edit_v1_2.safetensors | — |
| base_lora_strength | FLOAT | 1.00-10–10 | — |
| spatial_anchor_strength | FLOAT | 0.0010.000001–0.05 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| builder_prompt | STRING | — |
| fedor_regions_json | STRING | — |
| bboxes | BOUNDING_BOX | — |
| studio_data | STRING | — |