CivArchive
    NSFW Krea2 (Low VRAM) - SNOFS v1 (Light)
    NSFW
    Preview 135461335
    Preview 135461346
    Preview 135461361
    Preview 135461378
    Preview 135461385

    Based on good NSFW Lora/LoKr, I've experimented with reduced size/weight: dropping the DIT/UNET layer part because the model already know how to do NSFW. keeping only the text encoder/fusion layers from the NSFW lora.

    This technique can reduce Krea2 lora weight (reduce ANY lora/lokr weight)

    exemple with this lora 218mo => 13.5mo

    exemple with LoKr 1.46go => 40mo or even 20mo in some case

    I simply use the safetensors python lib and keep only the txtfusion.layerwise_blocks and txtfusion.refiner layers from NSFW lora. Dropping the other layers as the model know how to draw nsfw stuff ;).

    I wanted to experiment with the Krea2 model and understand two things:

    1. If the model was trainned on NSFW (I think it was or it couldn't draw NSFW without UNET/DIT layer part)

    2. Where is the NSFW influence in the model: txtfusion.layerwise_blocks seems to have 80% of the NSFW decision making and txtfusion.refiner 20% ish. txtfusion.projector is a small vector and I think it should not be touched too much (it merge the 12 big vector from qwen3vl) but doesn't directly influence NSFW.

    Detail and code at the end.

    detail of the token handling before DIT as I think I understand it (maybe wrong):

    '''
                              Frozen Qwen3-VL-4B (Text Encoder)
                                       (hidden dim ~2560)
                                              |
                                              |  Select 12 specific layers
                                              |  [2,5,8,11,14,17,20,23,26,29,32,35]
                                              v
                                   12 x (Seq_len, 2560) hidden states
                                              |
                                              |  Stack / Concat along layer dim
                                              v
                                  [12, Seq_len, 2560]  ← multilayer input
                                              |
                   +---------------------------------------------------+
                   |               txtfusion.layerwise_blocks          |
                   |                    (2 blocks, cross-layer attn)   |
                   +---------------------------------------------------+
                                              |
                   Block 0:
                   - prenorm (RMSNorm scale [2560])
                   - attn: wq/wk/wv/wo/gate [2560,2560] + qknorm
                   - mlp: down[2560→6912] / gate[6912,2560] / up[6912,2560]
                   - postnorm (RMSNorm scale [2560])
                                              |
                   Block 1: (same structure as Block 0)
                                              |
                                              v
                         Fused layer-wise features [Seq_len, 2560]
                                              |
                   +---------------------------------------------------+
                   |              txtfusion.projector                  |
                   |          Linear(12 → 1) weight [1, 12]            |
                   +---------------------------------------------------+
                                              |
                                              v
                         Single fused representation per token
                         (or pooled/processed) [Seq_len, 2560]
                                              |
                   +---------------------------------------------------+
                   |            txtfusion.refiner_blocks               |
                   |               (2 bidirectional transformer blocks)|
                   +---------------------------------------------------+
                                              |
                   Refiner Block 0:
                   - prenorm (RMSNorm [2560])
                   - attn: wq/wk/wv/wo/gate [2560,2560] + qknorm
                   - mlp: down/gate/up (same as above)
                   - postnorm
                                              |
                   Refiner Block 1: (identical structure)
                                              |
                                              v
                     Refined bidirectional text features [Seq_len, 2560]
                                              |
                   +---------------------------------------------------+
                   |                    txtmlp                         |
                   |             (final text MLP / projection)         |
                   +---------------------------------------------------+
                                              |
                   txtmlp.0.scale [2560]          ← residual / scaling
                                              |
                   txtmlp.1: Linear [2560 → 6144] + bias
                                              |
                   txtmlp.3: Linear [6144 → 6144] + bias
                                              |
                                              v
                   Final conditioned text embeddings
                         (ready for cross-attention into DiT)
                                              |
                                              ↓
                           Injected into first DiT / unet_blocks
                     (via cross-attention in the main transformer)

    Code for the layer stripping:

    from safetensors import safe_open
    from safetensors.torch import save_file
    from pathlib import Path
    
    def strip_layers(input_file, output_file, remove_prefixes):
        tensors = {}
    
        with safe_open(input_file, framework="pt", device="cpu") as f:
            metadata = f.metadata()
            for key in f.keys():
                if any(key.startswith(prefix) for prefix in remove_prefixes):
                    print(f"Removing {key}")
                    continue
                tensors[key] = f.get_tensor(key)
        save_file(tensors, output_file, metadata=metadata)
    
    inputFile = "i:/ComfyUI_windows_portable/ComfyUI/models/loras/krea2/KNPV3_1.safetensors"
    stripLayer = [
        # linked to the DIT/UNET
        'blocks', 'first', 'last_linear', 'last.linear'
        # liked to unet/DIT time MLP and timestep projection
        'tmlp_', 'tproj_1',
        # keep commented for NSFW
        #'txtfusion.layerwise_blocks', 'txtfusion_layerwise_blocks', # <--- full censor
        #'txtfusion.projector', 'txtfusion_projector',              # <-- zero impact
        #'txtfusion.refiner', 'txtfusion_refiner',                  # <-- tiny impact ==> full censor
    ]
    prefix = 'diffusion_model.'
    stripLayer = [prefix+x for x in stripLayer]
    print('layer to strip: ', stripLayer)
    
    outPutFile = Path(inputFile).name
    
    strip_layers(
        inputFile,
        outPutFile,
        stripLayer
    )

    Description

    Light VRAM Lora with only the text encode part. based on "SNOFS" lora

    FAQ

    Comments (14)

    rogerstone382Jul 1, 2026
    CivitAI

    Did you merge the disable filter lora into the snofs light version or something? Really should not do that since stacking with others will cause prompts to not be followed. I can already see that becoming a problem if people merge it into their nsfw lora's, the patch should be separate because you never know what setting it should be at for any given prompt or lora's.

    Puppet_Master
    Author
    Jul 2, 2026· 2 reactions

    no it's the original SNOFS lora but I deleted the UNET layers part. keeping only the "prompt/text encode/text fusion" part of the original lora ;)

    i78500y802Jul 2, 2026· 2 reactions
    CivitAI

    Of the three releases so far SNOFS is probably the best. It seems to have retained the most knowledge after the character and style bleed are stripped out.

    pogoJul 2, 2026

    Common SNOFS w

    NexdoorJul 2, 2026· 1 reaction
    CivitAI

    Incredible work, thanks for sharing this with the community! I compared your 3 stripped LoRAs (MysticXXX, Realism Engine and SNOFS) with the original ones and indeed yours seem to retain the model's knowledge better (e.g.: known character features and styles) but I had to pair it with the filter bypass LoRA to decrease anatomy issues. Not a big deal though.

    i78500y802Jul 2, 2026

    May I ask what anatomy issues are you seeing and which filterbypass LoRA did it help?

    Puppet_Master
    Author
    Jul 2, 2026· 2 reactions

    you can also play with the lora strength more as it will just impact prompt following, should not burn/saturated the image ;)

    NexdoorJul 2, 2026

    @i78500y802 In my quick tests, I was getting messed up fingers (extra or missing) specially when there are 2 subjects in the scene, something that was less common with the original LoRAs. For some reason, adding this other LoRA at 1.5 strength sort of fix it most of the time: https://civitai.red/models/2728234/krea2filterbypass?modelVersionId=3067151

    iamddtlaJul 2, 2026· 1 reaction
    CivitAI

    Is it possible for your technology to become a plugin for ComfyUI?

    Is it possible to create a plugin similar to comfyUI-Realtime-Lora?

    Puppet_Master
    Author
    Jul 2, 2026· 4 reactions

    I think it's easy yes, you just need to tell compfyui lora loader to not use some layers. I never coded compfyui node but I'll check what I can do ;)

    tosermeplsJul 2, 2026· 2 reactions
    CivitAI

    All 3 Loras are great. In my testing by stacking the Loras with a character Lora they all work decently and each excels at something different.

    If I had to rank them I would say:

    Very good: Snofs/Mystic
    Good: Realism Engine

    Puppet_Master
    Author
    Jul 2, 2026· 2 reactions

    Yeah it's also my ranking for NSFW. with this light version you can change the lora weight more and it should not burn the image (light lora don't impact the drawing / unet layer of Krea2) :)

    Shithead_McAnalfaceJul 4, 2026· 1 reaction
    CivitAI

    These seem to work really well for removing the censorship without affecting the original style of the model or character likeness, so big props there! The only issue is they can struggle with making genitals. They can do boobs no problem, and will show a fully nude body when prompted without adding clothes like the base model does, but will often resort to Barbie genitalia unless you combine them with another lora to add genitals back. From my testing the MysticXXX one still generates female genitals to a small degree, SNOFs slightly less, and Realism Engine not at all. But like I said, blending with a lora like Krea2 Pussy adds it back nicely, and some of those loras also have minimal effect on style and likeness.

    That makes me wonder, could you make a model merge with a bunch of trimmed loras to give it lots of added freedom with only minimal aesthetic change?

    Puppet_Master
    Author
    Jul 5, 2026

    I could try but I don't know how to do merge for now! I'll check that :)

    LORA
    Krea 2

    Details

    Downloads
    1,309
    Platform
    CivitAI
    Platform Status
    Available
    Created
    7/1/2026
    Updated
    7/7/2026
    Deleted
    -

    Files

    snofs_krea_v1_nostrip.safetensors

    Mirrors