LZ Krea2 Loader
The one node that stops you tripping over Krea 2's three files
- MODEL
- CLIP
- VAE
- positive
- negative
- positive_text
- negative_text
- lz_pipe
- model_name
- model_hash
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_modeon 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_modetoencodeand 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.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| diffusion_model | COMBO | 0 options: | |
| weight_dtype | COMBO | default | Model weight precision. Use fp8 variants to reduce VRAM (matches UNETLoader options). |
| text_encoder | COMBO | Use the Qwen3-VL 4B text encoder (e.g. qwen3vl_4b_fp8_scaled.safetensors). | |
| vae | COMBO | Use the Qwen-Image VAE (qwen_image_vae.safetensors). | |
| positive | STRING | — | |
| negative | STRING | — | |
| negative_mode | COMBO | auto | auto: 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)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| VAE | VAE | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| positive_text | STRING | — |
| negative_text | STRING | — |
| lz_pipe | LZ_PIPE | — |
| model_name | STRING | — |
| model_hash | STRING | — |