Krea2T Character LoRA — Image Only
Your Krea 2 character LoRA is quietly rewriting your prompt
- model
- model
- report
Krea 2 runs prompt and image through the same stack of DiT blocks - one shared stream, joint attention, no separate cross-attention for text the way SDXL and Flux have. That design is why the model follows long descriptive prompts so well. It's also why a character LoRA does more than add a face.
Load your character LoRA with a normal LoraLoaderModelOnly and its updates land on the shared attention and MLP projections, which both text and image tokens pass through. The LoRA therefore edits how the model reads the prompt, not just what the subject looks like. Ask for a specific jacket, a pose, or a second character and the details you had dialled in go flaky; stack a style LoRA next to it and the two interact in ways nobody designed. Krea2T Character LoRA - Image Only attacks one specific source of that: it applies the character LoRA to image-token rows and leaves text-token rows without the direct update.
What it actually does
It doesn't rewrite any checkpoint weights. It reads the LoRA, keeps only canonical A/B pairs for Krea2's shared DiT blocks, and builds those factors into a small module registered on the model patcher - so dtype, device and offloading are handled by ComfyUI's normal machinery. Then it hooks the shared blocks' linear layers and adds the LoRA delta in place, on the image-token slice only. The text/image boundary comes from Krea2 itself rather than from a guess; if that boundary is missing, or doesn't line up with the block input, the node raises instead of applying a half-right patch. No extra sampling pass, no extra attention eval, no core-file edits.
The filter is strict, and it's worth knowing exactly how strict: only diffusion_model.blocks.<0–27>.<attn.wq|wk|wv|wo|gate|mlp.gate|mlp.up|mlp.down>.lora_A.weight plus its matching lora_B. Everything else is skipped without complaint. Other LoRAs already applied upstream are preserved, because this patches by hook rather than replacing weights.
The inputs and outputs that matter
Four inputs, two of which you'll actually touch. model is the Krea2 diffusion model - from your loader, or from another LoRA loader you want to keep. lora_name is your character LoRA file, picked from your normal loras folder. strength_model defaults to 1.0 and controls the adapter's strength on image-token rows (0 turns it off entirely, and negative values are allowed). enabled is a bypass switch.
Outputs are model and report. Send model to the sampler or into whatever LoRA loader comes next. The report is a JSON string - tensors in the file, tensors retained, tensors skipped, final status - so wire it into a text display node the first time you use this. It's the only way to tell "loaded 224 matrices" from "loaded nothing at all". The author writes text-encoder teardowns for fun, and it shows in that output.
Placement is boring on purpose:
Load Diffusion Model -> other LoRA loaders (optional) -> Krea2T Character LoRA - Image Only -> sampler
README advice worth obeying: load each character LoRA only once, and if you're using this pack's attention-weighted phrase encoder, put it after this loader.
Installing it
ComfyUI Manager, search for the pack title ComfyUI-Krea2T-Enhancer. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/capitan01R/ComfyUI-Krea2T-Enhancer.git
Restart ComfyUI. There are no extra Python packages to fight. It does need an up-to-date ComfyUI with native Krea2 support, and the Krea2 stack itself is three files, not one: the model, the Qwen3-VL text encoder (~8GB), and the Qwen-Image VAE (~250MB). People miss the second two constantly and then blame the node.
Where people get burned
A LoKr or oddly-named LoRA loads nothing, silently. The allowlist only accepts that canonical diffusers-style naming. Alternate formats are not converted, and LoKr - which is now the usual format for character work on post-Flux bases - has different keys entirely. The model passes through unchanged and report says "no matching complete A/B pairs". If your character just doesn't appear, read the report before you touch anything else.
Separate alpha metadata is ignored. If the LoRA was trained with an alpha that differs from its rank, the effective scale you get won't match a standard loader's. Compensate with strength_model rather than assuming the file is broken.
It is not isolation. Text and image still interact through normal attention, so this removes one route by which a character LoRA muddies prompt adherence, not every route. Likeness still depends on the LoRA itself, and a weak one on a model this prompt-sensitive costs you detail regardless. The training-side counterpart on Krea 2 is Differential Output Preservation.
Stale copies break on ComfyUI updates. A core Krea2 change added a ref_latents argument to the diffusion-model forward, which shifted the wrapper's positional signature and produced TypeError: ... takes from 4 to 6 positional arguments but 7 were given for people running an older clone. The fix is to git pull the pack, not to patch ComfyUI.
Wrong model type gets a clear error, at least. Point it at a non-Krea2 diffusion model and it raises rather than corrupting your graph - it wants the native Krea2 model class, so test exotic wrappers before building a workflow around them.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| lora_name | COMBO | Character LoRA or LoKr. Loads supported Krea2 shared DiT projections with their saved scaling; other weights are skipped. | |
| strength_model | FLOAT | 1.00-100–100 | Strength of this character adapter on image-token rows. Text-token rows receive no direct contribution from this adapter. |
| enabled | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| report | STRING | — |