Nodes/ComfyUI-Krea2Moodboard/Krea 2 Identity Edit
ComfyUI Node

Krea 2 Identity Edit

Keep the face, change everything else

By RedNodeAI·Created 2 months ago·Updated 2 months ago· 10
Krea 2 Identity Edit
  • clip
  • vae
  • image
  • image2
  • fuse_with
  • sources
  • target_latent
  • CONDITIONING
prompt
grounding_px768
ref_boost1.00
ref_boost_a1.00
fit_modefit

The headline feature of this pack. Krea2IdentityEdit is how you do the thing Krea 2 can't do with stock ComfyUI nodes: "create a photo of this person at a night market" - same face, same outfit, relit and re-placed. It's an instruction-driven, identity-preserving edit node, and it's the whole reason most people install this pack.

What it needs first

Two things you must have or nothing works. First, a krea2_edit LoRA loaded at strength 1.0 via LoraLoaderModelOnly - the community one is conradlocke/krea2-identity-edit (weights on HuggingFace, also on Civitai as krea2_identity_edit). Second, the qwen3vl_4b text encoder via CLIPLoader type krea2 and the qwen_image_vae. Without the right encoder the node will error out with a message telling you exactly that. ComfyUI 0.25.0+ has native Krea 2 support, so the model side is stock.

How it works

The identity magic is dual conditioning, the same recipe the original ComfyUI-Krea2Edit pack (lbouaraba, Apache-2.0) introduced. Your source image gets encoded twice, through two different paths:

  • Clean source latents ride in-context at RoPE frames 1..N - the LoRA's "preserve this" signal, delivered the way QwenImage and Flux edit models deliver references, not as semantic description.
  • The instruction is grounded on the source through Qwen3-VL, so the model understands what it's editing while looking at it.

That second path is why grounding_px exists: it caps the longest side fed to Qwen3-VL. Lower = the model follows your instruction more loosely but obeys it more; higher = it preserves likeness. 768 is the balanced default, and 1024+ if the subject is a person's face. The LoRA trained at 384–768px, so 0 disables resizing entirely.

The inputs that matter

  • clip and prompt - the edit instruction. prompt empty means "keep the image."
  • vae - required the moment an image is connected. Without it you get a text-grounded encoding and no identity preservation, plus a console error telling you so.
  • image / image2 - for two-ref workflows, scene first, subject second. Single-ref: just image.
  • ref_boost - the reference-fidelity dial. It multiplies target→reference attention, applied to the last ref (the subject). 1.0 = off; the v1.2 LoRA author suggests 2–6; below 1 loosens. Set it on the positive node, leave the negative at 1.0. ref_boost_a is the same dial for the earlier ref (the scene).
  • target_latent + fit_mode - connect your empty sampling latent here and the v1.2 fit geometry kicks in: refs are fitted in pixel space to the output resolution before VAE-encoding. This is the blur fix. The v1.1 LoRA had a known blurring/ghosting problem and a strict "match the source aspect ratio" requirement; v1.2 trained on this fit geometry and it removes both. crop (legacy) restores the old geometry for v1/v1.1 weights.
  • fuse_with - feed a Moodboard Encode conditioning to fuse style-from-references with identity-from-source.

The negative node trick

For CFG > 1 you need two of these: one on the positive with your instruction, one on the negative with an empty prompt but the same image. That's the training unconditional, and it's required for the math to work. If CFG > 1, connect the same target_latent to both so both passes share one geometry. This is the classic wiring mistake people hit - the negative node isn't optional, it just doesn't need a prompt.

Common issues

  • It completely ignores the reference. Check the VAE is connected, the LoRA is at 1.0, and you loaded the krea2 CLIP. In the release threads this is almost always one of those three.
  • Blurry or ghosted output. That's the v1.1-era AR-mismatch problem. Connect target_latent and use the default fit mode; also matching the output resolution to the source still gives the best results.
  • It just recreates the reference instead of editing. Your instruction isn't getting through - check grounding_px isn't tiny, and on Turbo run 8–12 steps (8 favors composition, 12 favors face detail).

Output is a single CONDITIONING, straight into the KSampler positive. Pair it with the fusion node or a Moodboard Encode on fuse_with and you get style-plus-identity in one pass.

Categoryconditioning/krea2

Inputs (12)

NameTypeDefaultDescription
clipCLIP
promptSTRINGEdit instruction. Leave empty on the negative node.
vaeoptVAE
imageoptIMAGE
image2optIMAGE
grounding_pxoptINT7680–4096Cap on the longest side fed to Qwen3-VL (the identity LoRA trained with 384-768px). 0 = never resize.
fuse_withoptCONDITIONINGOptional conditioning to fuse in front of this one (e.g. Krea 2 Moodboard for scene/style vibe). Its token rows are prepended; this node's identity reference latents are kept. Matches the Neo moodboard+edit fusion layout.
sourcesoptKREA2_SOURCESchained sources (Krea2 Edit Source Chain) — appended after image/image2 as frames 3..N. 3+ refs is beyond the LoRA's training; identities may blend.
ref_boostoptFLOAT1.000–10reference-fidelity dial: multiplies target->reference attention. Applies to the LAST ref (the subject in two-ref workflows, the only ref in single-ref). 1.0 = off; >1 pulls harder toward the reference's appearance (the v1.2 edit-LoRA author suggests 2-6); <1 loosens. Set on the POSITIVE node; leave the negative at 1.0.
ref_boost_aoptFLOAT1.000–10same dial for the earlier refs (the scene in two-ref workflows). No effect in single-ref workflows. 1.0 = off
target_latentoptLATENTconnect your (empty) sampling latent to enable the v1.2 'fit' geometry: refs are fitted in PIXEL space to the output resolution before VAE-encoding — fixes blur from resolution mismatch and removes the match-the-aspect-ratio requirement. With CFG > 1, connect it to the negative edit node too so both passes share one geometry.
fit_modeoptCOMBOfithow refs fit a mismatched output AR (needs target_latent + vae): fit = resample to the target grid at a centered offset, matching how the v1.2 edit LoRA was trained; crop (legacy) = center-crop to the target AR then resize (v1/v1.1 geometry, for older weights).

Outputs (1)

NameTypeDescription
CONDITIONINGCONDITIONING