Nodes/IAMCCS-nodes/IAMCCS Krea 2 Studio Layout (Fedor V12)
ComfyUI Node

IAMCCS Krea 2 Studio Layout (Fedor V12)

Regional boxes on Krea 2, without a second engine

By IAMCCS·Created 11 months ago·Updated about 17 hours ago· 113
IAMCCS Krea 2 Studio Layout (Fedor V12)
    • builder_prompt
    • fedor_regions_json
    • bboxes
    • studio_data
    canvas_width1024
    canvas_height1024
    scene_prompt
    regions_json[]
    spatial_anchor_lorakrea2_identity_edit_v1_2.safetensors
    base_lora_strength1.00
    spatial_anchor_strength0.001

    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 - default krea2_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.

    CategoryIAMCCS/Krea 2 Studio

    Inputs (7)

    NameTypeDefaultDescription
    canvas_widthINT102464–16384
    canvas_heightINT102464–16384
    scene_promptSTRING
    regions_jsonSTRING[]
    spatial_anchor_loraSTRINGkrea2_identity_edit_v1_2.safetensors
    base_lora_strengthFLOAT1.00-10–10
    spatial_anchor_strengthFLOAT0.0010.000001–0.05

    Outputs (4)

    NameTypeDescription
    builder_promptSTRING
    fedor_regions_jsonSTRING
    bboxesBOUNDING_BOX
    studio_dataSTRING