Nodes/ComfyUI-Krea2-strip-layers/Load LoRA (Krea2 Strip Layers)
ComfyUI Node

Load LoRA (Krea2 Strip Layers)

Stop your Krea2 LoRAs from fighting — strip the layers you don't want

By Brioch·Created 2 months ago·Updated 2 months ago· 9
Load LoRA (Krea2 Strip Layers)
  • model
  • MODEL
lora_name
strength_model1.00
strip_dit_layerstrue
strip_time_mlptrue
strip_txtfusion_layerwisefalse
strip_txtfusion_projectorfalse
strip_txtfusion_refinerfalse

If you've run Krea 2 for more than a weekend you've hit the wall: the open weights shipped with an alignment pass that trained refusal behavior straight into the model, and the community's fix is LoRAs that bypass it. The problem is stacking one of those on a character LoRA - the two fight, likeness goes to mush, and you're left tweaking strengths down until nothing works. Load LoRA (Krea2 Strip Layers) is the surgical option: it loads a Krea2 LoRA, deletes whole layer groups from it in memory, and applies what's left to your model. No new file on disk, no retraining, no 2 AM experiments.

It's a drop-in replacement for the stock Load LoRA node in a Krea2 graph - MODEL in, MODEL out, nothing else. You'll find it under loaders/krea2 in the node list.

How it works

A LoRA is just a safetensors file where every weight has a name, and Krea2 LoRAs ship in one of two key conventions: ComfyUI-native (diffusion_model.blocks.0.attn...) or diffusers (transformer.transformer_blocks.0.attn...). Each strip toggle maps to a set of key prefixes; the node drops every key whose name starts with a matched prefix, then hands the filtered dict to ComfyUI's own load_lora_for_models. The console logs how many keys were removed vs kept, so you always know what actually happened.

The trickiest part is that the toggles are backwards from what you'd guess. Krea 2's refusal mechanism lives in txtfusion layer groups, and an NSFW LoRA earns its keep partly by rewriting those. All three txtfusion toggles default to off - meaning the LoRA's own versions of those groups get applied, so its uncensoring survives. Flip one on to strip the group and go back to the base model's censoring. From the author's own testing: layerwise is a full censor, projector is zero impact, refiner is tiny impact.

The inputs that actually matter

  • model and lora_name - the dropdown scans your ComfyUI/models/loras folder. strength_model is the global strength, same as any LoRA loader.
  • strip_dit_layers (default on) - this is the "content" of the LoRA: all 28 transformer blocks plus the first/last I/O layers.
  • strip_time_mlp (default on) - the timestep projection.
  • The three strip_txtfusion_* toggles - the censor groups above. Default off, deliberately.

The intended use case from the README is exactly the one I opened with: an NSFW LoRA that won't blend with a character LoRA. With defaults on, the node strips the DiT content and keeps the txtfusion groups - you keep the censor-bypass without the block-level style stampeding over your character.

Installing it

Nothing exotic here - no pip dependencies, no model downloads. It's pure Python on top of ComfyUI's built-ins:

cd ComfyUI/custom_nodes
git clone https://github.com/Brioch/ComfyUI-Krea2-strip-layers

Restart ComfyUI and the nodes appear. Or use ComfyUI Manager and search "Krea2 strip layers". The repo ships an example workflow (workflow/workflow.webp) you can drag straight onto the canvas. It also has a standalone CLI (tools/strip_lora.py) if you'd rather bake a stripped LoRA to disk than strip at apply time - the safetensors package it wants is already in your ComfyUI environment.

Where people get burned

Watch the console output. If you see "0 keys removed" with a warning, the LoRA's keys don't match Krea2's conventions - either it isn't a Krea2 LoRA, or it uses a key layout the node doesn't recognize, and you're silently applying the unstripped file. Also, strip_time_mlp (and the first/last part of strip_dit_layers) only match the diffusion_model. naming; on a diffusers-format LoRA those two are no-ops while block stripping and the txtfusion toggles still work.

One honest caveat: this is the all-or-nothing node. If you want to keep only blocks 0–7 of an NSFW LoRA instead of the whole DiT, the simple node can't do it - that's exactly what the Advanced version (Load LoRA Advanced (Krea2 Strip Layers)) is for. For a first pass, though, the defaults here are well-tuned, and that's usually where you want to start.

Categoryloaders/krea2

Inputs (8)

NameTypeDefaultDescription
modelMODELThe diffusion model the stripped LoRA is applied to.
lora_nameCOMBOThe Krea2 LoRA to strip and apply.
strength_modelFLOAT1.00-100–100How strongly to apply the (stripped) LoRA to the model.
strip_dit_layersBOOLEANtrueStrip the DiT: all transformer blocks + first/last layers.
strip_time_mlpBOOLEANtrueStrip time MLP / timestep projection: tmlp_, tproj_1
strip_txtfusion_layerwiseBOOLEANfalseStrip txtfusion layerwise blocks (full censor).
strip_txtfusion_projectorBOOLEANfalseStrip txtfusion projector (zero impact).
strip_txtfusion_refinerBOOLEANfalseStrip txtfusion refiner (tiny impact / full censor).

Outputs (1)

NameTypeDescription
MODELMODELThe model with the stripped LoRA applied.