Skip to content

1.2.5 - Krea 2 generation & LoRA training

Latest

Choose a tag to compare

@imprsnst imprsnst released this 25 Jul 06:37
687a4a8

v1.2.5

Krea 2 lands as the second local model family, for both generation and LoRA training.

Krea 2 is a 12.9B single-stream MMDiT shipped as two checkpoints that work together. RAW is the undistilled base you fine-tune, Turbo is the 8-step distilled checkpoint you generate with, and a LoRA trained on RAW applies to Turbo unchanged. Both nodes are built around that workflow.

Generation

  • Krea 2 Turbo and Krea 2 RAW canvas nodes, sitting alongside Z-Image as Core builtins.
  • The model popup sizes the download against your GPU and warns before a 26GB load rather than failing deep inside one.
  • Reads the ComfyUI-style files from Comfy-Org/Krea-2. Only the bf16 builds load: the fp8_scaled, int8_convrot, mxfp8 and nvfp4 variants carry ComfyUI-specific scale tensors, and the node says so up front. The VAE is the diffusers-format one from Qwen/Qwen-Image, which the popup fetches for you. No Hugging Face token needed anywhere.
  • img2img support, plus the usual take history and streamed progress.

LoRA training

  • The trainer is now arch-aware, with z-image and krea2 each declaring its own base resolution, target modules and text-encoder handling.
  • A 4-bit (nf4) frozen base puts Krea 2 LoRA training on a 16GB card. The LoRA itself stays full precision, so the only cost is base fidelity.
  • New settings in the Adjust panel: base quantisation (auto, none, nf4), LoRA scope (full or attention), caption dropout, and flip augmentation.
  • Settings now stage behind an Update button instead of applying as you type. A checkpoint encodes the rank, targets and base it was built with, so applying a change to a resumable run asks first, then discards that run's checkpoints. Finished LoRA files are never touched.

Training benchmarks

12 steps at rank 16, batch 1, gradient checkpointing on. The number is torch.cuda.max_memory_allocated, so leave headroom for the CUDA context and allocator slack.

Model Base mode Res Base precision L40S (46GB) T4 (15GB)
Z-Image De-Turbo 512 bf16 13.1GB 13.4GB
Z-Image De-Turbo 1024 bf16 14.9GB out of memory
Z-Image Turbo + adapter 512 bf16 13.1GB 13.4GB
Z-Image Turbo + adapter 1024 bf16 14.9GB out of memory
Krea 2 RAW 512 bf16 30.4GB out of memory
Krea 2 RAW 512 4-bit 11.7GB 11.9GB
Krea 2 RAW 1024 bf16 out of memory out of memory
Krea 2 RAW 1024 4-bit 27.8GB out of memory
Krea 2 Turbo + adapter 512 bf16 30.4GB out of memory
Krea 2 Turbo + adapter 512 4-bit 11.7GB 11.9GB
Krea 2 Turbo + adapter 1024 bf16 out of memory out of memory
Krea 2 Turbo + adapter 1024 4-bit 27.8GB out of memory

A training adapter is free: it is fused into the base before training starts, so Turbo-plus-adapter and the undistilled base peak identically.

Note that training Krea 2 is cheaper than generating with it. Generation peaks around 36GB at 1024 with guidance on, so a 40GB+ card is the practical floor there, while the 4-bit path trains at 512 inside 12GB. Z-Image remains the low-VRAM option for generation.

Under the hood

The shared pipeline machinery moved out of the Z-Image runner into models/pipeline_runtime.py and models/loaders.py, cutting zimage/runner.py from roughly 1000 lines to 250 and giving both model families one device, dtype and offload path.

Project

  • Added a code of conduct, a contributing guide, issue templates and a PR template.

Full changelog: v1.2.41...v1.2.5

What's Changed

Full Changelog: v1.2.41...v1.2.5