Nodes//Nougan Regional Character LoRA πŸ‘₯
ComfyUI Node

Nougan Regional Character LoRA πŸ‘₯

Two Krea 2 characters in one image without the blend β€” this is how

By WinnouganΒ·Created 2 months agoΒ·Updated about a month agoΒ· 4
Nougan Regional Character LoRA πŸ‘₯
  • model
  • clip
  • MODEL
  • CONDITIONING
  • NEGATIVE
β—„lora_aβ–Ύβ–Ί
β—„strength_a1.00β–Ί
β—„lora_bβ–Ύβ–Ί
β—„strength_b1.00β–Ί
β—„feather0.06β–Ί
β—„regions{}β–Ί

You know the drill: you stack character A's LoRA on character B's LoRA, and the model hands you a person who is somehow neither of them. Blended identities are the classic multi-character failure - the KB calls the "two specific characters, same image" problem largely unsolved without spatial scaffolding. This node is the scaffolding. Krea2RegionalCharacterLoRA is the Krea 2/Flux 2-flavored name for Nougan's regional character trick: two character LoRAs, each locked to its own spatial region, in one diffusion pass, with no compositing and no inpainting.

It's part of Winnougan's Nougan_Nodes suite - the same pack that ships the Diffusers Loader and the Krea 2 uncensor loader, so it's built to sit right between them and the sampler. The author is a one-person r/StableDiffusion poster who grew a personal node collection into a public suite, and this is the most technically interesting node in it.

How it works

A normal LoRA load merges W' = W + Ξ”A + Ξ”B into every weight, so both identities reach every pixel. This node never merges. It loads each LoRA's low-rank deltas, matches them to the live model's Linear layers by normalised key names, and registers forward hooks that add the delta gated by a region mask at inference time:

tokens in A:  out += mask_A Γ— Ξ”A
tokens in B:  out += mask_B Γ— Ξ”B
text tokens:  mask = 0 β†’ prompt conditioning untouched

The base model weights are never modified, and the hooks are removed after each forward call. The masks are built on the token grid (each token covers a 16Γ—16 pixel patch at Krea 2's patchify factor), not on pixels - that's why placement stays crisp no matter what resolution you generate at.

The inputs that matter

  • model and clip - the loaded model and its text encoder, straight from your loader.
  • lora_a / lora_b - the two character LoRAs, picked from models/loras.
  • strength_a / strength_b - per-LoRA strength, defaults at 1.0 and range from βˆ’4 to 4. Negative strengths are legitimate here; they invert the delta.
  • feather - softness of the seam between regions (0–0.3, default 0.06). Too high and the characters bleed into each other again; 0 gives a hard visible line.
  • regions - a JSON string the on-node visual editor writes for you. You draw two boxes (one per character); you do not hand-edit this.

The outputs are MODEL (the patched model - this is what feeds your sampler), plus CONDITIONING and NEGATIVE for the Krea 2 pipeline.

Installing

It's a suite install, not a solo node:

cd ComfyUI/custom_nodes
git clone https://github.com/Winnougan/Nougan_Nodes
# restart ComfyUI

Or just search Nougan in ComfyUI Manager. Zero pip dependencies - the pack's pyproject.toml is empty on deps, and each family loads in its own try/except so one broken file can't take out the rest. You need a ComfyUI version that runs Krea 2/Flux 2 at all, which you already have if you can load the base.

Where people get burned

The console printout is your friend here. Watch for matched N layers - if you see !! 0 layers matched, the LoRA's keys don't normalise-match your model, which usually means the LoRA was trained for a different architecture. Krea 2 has a quirk worth knowing: some LoRAs target the txtfusion conditioning pathway rather than the image transformer blocks, and those get regional masking too but land on the conditioning rather than the image tokens - less spatially precise. And if characters look subtly wrong rather than blended, that's bf16 delta noise; there's no precision toggle in this alias, so lean on the feather and strength instead. Small files, two characters, no blend - that's the whole sell.

Categoryconditioning/regional

Inputs (8)

NameTypeDefaultDescription
modelMODELβ€”
clipCLIPβ€”
lora_aCOMBO0 options:
strength_aFLOAT1.00-4–4β€”
lora_bCOMBO0 options:
strength_bFLOAT1.00-4–4β€”
featherFLOAT0.060–0.3β€”
regionsSTRING{}β€”

Outputs (3)

NameTypeDescription
MODELMODELβ€”
CONDITIONINGCONDITIONINGβ€”
NEGATIVECONDITIONINGβ€”