Nodes/ComfyUI-LZNodes/LZ Krea2 Loader
ComfyUI Node

LZ Krea2 Loader

The one node that stops you tripping over Krea 2's three files

By liz-ils·Created 6 months ago·Updated about 21 hours ago· 1
LZ Krea2 Loader
    • MODEL
    • CLIP
    • VAE
    • positive
    • negative
    • positive_text
    • negative_text
    • lz_pipe
    • model_name
    • model_hash
    diffusion_model
    weight_dtypedefault
    text_encoder
    vae
    positive
    negative
    negative_modeauto

    Krea 2 isn't one file, and that's the trap. It's a 12B diffusion transformer, a Qwen3-VL text encoder, and a Qwen-Image VAE - three separate files that all have to load and agree with each other. On stock ComfyUI that means a UNETLoader, a CLIPLoader set to the krea2 type, a VAELoader, and then a couple of text-encode nodes just to get to first image. The LZKrea2Loader collapses that whole stack into one node, prompts included.

    It comes from ComfyUI-LZNodes (the "LZ" is liz-ils, its author), a small quality-of-life pack that loves bundling spaghetti into single nodes. The rest of the pack is pipe plumbing and logging helpers; this loader is the one you'd actually reach for if you run Krea 2 at all.

    How it works

    Under the hood it's not doing anything clever - which is the point. It calls the same stock UNETLoader, CLIPLoader (with the krea2 CLIP type), and VAELoader you'd wire up by hand, then tokenizes and encodes your positive prompt itself. The one thing it adds on top is negative_mode, because Krea 2 Turbo is guidance-distilled and runs at CFG 1.0, where a real negative prompt literally does nothing. The official template zero-outs the conditioning instead, so:

    • auto (default) - if the negative box is empty, it zero-outs the positive conditioning instead of encoding a useless negative. This is the official Turbo behavior, and it saves you a wasted text-encoder pass.
    • zero_out - always zero-out. Use this when you're on Turbo and never intend to type a negative.
    • encode - actually encode the negative text. This is the one for Krea 2 Raw (52 steps, CFG 3.5), where negatives genuinely work.

    That zero-out is the same operation as the stock ConditioningZeroOut node, so nothing surprising happens to your graph.

    The inputs and outputs that matter

    Three file pickers, and they're the whole game: diffusion_model (the .safetensors in models/diffusion_models), text_encoder (qwen3vl_4b_fp8_scaled.safetensors), and vae (qwen_image_vae.safetensors). Then weight_dtype, which mirrors UNETLoader's options - default or one of the fp8_e4m3fn / fp8_e4m3fn_fast / fp8_e5m2 variants to cut VRAM. The fp8-scaled files are around 12GB, comfortable on 16–24GB cards and workable on 8GB, so use the fp8 pick if you're tight.

    Outputs are everything you need downstream: MODEL, CLIP, VAE for a sampler and VAE decode; positive and negative CONDITIONING; positive_text / negative_text as strings (handy for logging); and model_name + model_hash that plug straight into the pack's LZSaveImageAndLog. And there's lz_pipe, the pack's own pipe bundle - if you're using the LZ pipe system (LZPipePack / LZKSamplerDecode), this output is the reason to pick this loader over hand-wiring stock nodes.

    Installing it

    Through ComfyUI Manager, search ComfyUI-LZNodes, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/liz-ils/ComfyUI-LZNodes
    

    Then restart ComfyUI. No extra Python dependencies - no requirements.txt, nothing to pip install. It does hard-require ComfyUI v0.26.0+, because that's when the native krea2 CLIP type landed in the core nodes. The node checks for it at runtime and refuses to run otherwise.

    Grab the three model files from the ComfyUI-repackaged Comfy-Org/Krea-2 repo: krea2_turbo_fp8_scaled.safetensors (or the Raw variant) into models/diffusion_models, qwen3vl_4b_fp8_scaled.safetensors into models/text_encoders, and qwen_image_vae.safetensors into models/vae. Style LoRAs like krea2_darkbrush.safetensors go in models/loras.

    Where people get burned

    • "The model is broken / renders garbage." You're missing the text encoder or the VAE. Everyone misses them once - Krea 2 needs all three files, not one. If the pickers look empty, that's your file, not the node's.
    • "The error says CLIP type 'krea2' isn't supported." Your ComfyUI is too old. Update to v0.26.0+ and restart.
    • "My negative prompt does nothing." On Turbo that's correct behavior, not a bug. Leave negative_mode on auto and don't type negatives; if you really want negative-style control at CFG 1.0, community nodes like ComfyUI-NAG or ComfyUI-krea2-negpip are the usual route.
    • The Raw + Turbo LoRA hybrid path (the community favorite: Raw with the Turbo LoRA at 0.6 weight, ~12 steps) is where zero-out can bite - people report grainy output with zeroed conditioning there. Set negative_mode to encode and feed an empty or real negative.

    Set Turbo at 8 steps / euler / simple, and remember Krea 2 wants a 16-channel latent - use the pack's PresetEmptyLatentImage in 16ch mode or a ResolutionSelector at 1K–2K. It's a loader that's actually harder to get wrong than the alternatives, which is the whole pitch.

    CategoryMyCustomNodes/Loaders

    Inputs (7)

    NameTypeDefaultDescription
    diffusion_modelCOMBO0 options:
    weight_dtypeCOMBOdefaultModel weight precision. Use fp8 variants to reduce VRAM (matches UNETLoader options).
    text_encoderCOMBOUse the Qwen3-VL 4B text encoder (e.g. qwen3vl_4b_fp8_scaled.safetensors).
    vaeCOMBOUse the Qwen-Image VAE (qwen_image_vae.safetensors).
    positiveSTRING
    negativeSTRING
    negative_modeCOMBOautoauto: if negative is empty, zero-out the positive conditioning instead of a real negative (official template behaviour; Krea 2 Turbo runs at CFG 1.0 where negatives have no effect). zero_out: always zero-out (Turbo). encode: always encode the negative text (Krea 2 Raw, CFG 3.5).

    Outputs (10)

    NameTypeDescription
    MODELMODEL
    CLIPCLIP
    VAEVAE
    positiveCONDITIONING
    negativeCONDITIONING
    positive_textSTRING
    negative_textSTRING
    lz_pipeLZ_PIPE
    model_nameSTRING
    model_hashSTRING