Downloads · 30 days
4.1K
43% of all-time downloads
lvladikov/Krea2-Turbo-Distill-2step-LoRA
Krea2-Turbo-Distill-2step-LoRA is a text-to-image model from lvladikov. Use it when you need an image from a text prompt. It is set up for diffusers. The card lists the license as other.
🆕 New: a 3-step LoRA takes Krea 2 Turbo from 8 steps down to 3, one step more than this LoRA, with more fine detail than both this and the 4-step LoRA (fine texture 1.23× the 8-step teacher's on its 22 test prompts).…
Downloads · 30 days
4.1K
43% of all-time downloads
All-time downloads
9.4K
Public
Repo size
6.5 GB
Likes
48
Trending 3
Click a slice to open those files.
.safetensors5.3 GB · 84%
From the Hugging Face model README
🆕 New: a 3-step LoRA takes Krea 2 Turbo from 8 steps down to 3, one step more than this LoRA, with more fine detail than both this and the 4-step LoRA (fine texture 1.23× the 8-step teacher's on its 22 test prompts). This 2-step LoRA stays the fastest of the three.
A quarter of the steps · 4× faster denoising (text encoding and VAE decode excluded) · fine detail at 0.92–1.02× the teacher's across all 12 trained resolutions, the grid bands at its level · colour close to the teacher's · 1 point missing of 352 on a blind prompt-adherence rubric · teacher preferred on 12 of 66 judged renders · 51,195 training samples on recorded teacher trajectories · 32 days on one RTX 3090 · released from settled weights; the project's final checkpoint.
A LoRA for Krea 2 Turbo that takes the model from 8 steps down to 2 — Turbo's own weights and sigmas, guidance 0.0, a quarter of the denoising passes — aiming at the best quality two steps can give. It is for fast previews and drafts; the 4-step LoRA remains the recommendation for quality renders.
[1.0, 0.7595]🧪 Fast-preview adapter; the project's final checkpoint. Subjects that are close and fill a good part of the frame — a portrait, a single figure, an object up close — hold up well at two steps. Small subjects are where it still falls short: faces in a crowd or figures in a wide scene can come out ghosted or smeared. For those, and whenever quality matters more than speed, use the 4-step LoRA. This checkpoint closes the project; its successor is the 3-step LoRA. See Known Issues.
📐 The saved steps can also go into resolution. A larger render makes a small subject bigger, and at a quarter of the teacher's steps, renders up to 2048×2048 — Krea's published maximum recommended resolution, beyond this adapter's largest trained size — come within easy reach. Past 2048×2048, stock Krea 2 itself begins to duplicate subjects, with or without this adapter.
| file | what it is |
|---|---|
krea2_turbo_2step_rank_64_lora.safetensors | LoRA in diffusers key format — see diffusers |
krea2_turbo_2step_rank_64_lora_comfyui.safetensors | Same weights under ComfyUI key names — see ComfyUI |
krea2_turbo_2step_lora_t2i.json | Ready ComfyUI workflow, stock nodes only |
krea2_turbo_2step_rank_64_lora_checkpoint_info.md | Which checkpoint the two weight files are — the project's final checkpoint, chk00051195 |
LICENSE.pdf | Krea 2 Community License Agreement |
NOTICE.txt | Required attribution notice |
Both weight files are one adapter — only key names differ. Both carry training details in safetensors metadata. The file names carry no checkpoint number: both hold the project's final checkpoint, chk00051195, and every checkpoint published over the project's life, this one included, sits in _archive/checkpoints/ under its number.
pip install git+https://github.com/huggingface/diffusers.git
import torch
from diffusers import Krea2Pipeline
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
pipe = Krea2Pipeline.from_pretrained("krea/Krea-2-Turbo", torch_dtype=torch.bfloat16).to("cuda")
lora = hf_hub_download("lvladikov/Krea2-Turbo-Distill-2step-LoRA", "krea2_turbo_2step_rank_64_lora.safetensors")
state = load_file(lora)
state = {f"transformer.{k}": v for k, v in state.items() if not k.endswith(".alpha")}
pipe.load_lora_weights(state, adapter_name="2step")
image = pipe("a fox in the snow", num_inference_steps=2, guidance_scale=0.0).images[0]
image.save("krea2_2step.png")
num_inference_steps=2 is the whole config. Pipeline applies Turbo's fixed timestep shift (μ = 1.15) and evaluates at σ = 1.0, 0.7595 — exactly the two points the LoRA was trained on. Keep guidance_scale=0.0.pipe.set_adapters(["2step"], adapter_weights=[0.75]). Stock Turbo for comparison: pipe.unload_lora_weights() + num_inference_steps=8._comfyui — diffusers reads Krea's own key naming, not ComfyUI's lora_down/lora_up.| file | put it in |
|---|---|
krea2_turbo_2step_rank_64_lora_comfyui.safetensors | ComfyUI/models/loras/ |
krea2_turbo_bf16.safetensors (from Comfy-Org/Krea-2) | ComfyUI/models/diffusion_models/ |
qwen3vl_4b_bf16.safetensors (same repo) | ComfyUI/models/text_encoders/ |
qwen_image_vae.safetensors (same repo) | ComfyUI/models/vae/ |
Load krea2_turbo_2step_lora_t2i.json. Full bf16, no quantisation, runs on CUDA / Apple Silicon / CPU unchanged. Smaller Turbo builds work too — ComfyUI's loader applies the LoRA to any build — except fp8_scaled on Apple Silicon (MPS has no Float8_e4m3fn).
Settings: steps 2, cfg 1.0, sampler euler / simple, LoRA strength 1.0.
⚙️ cfg 1.0, not 0.0. ComfyUI expresses "no CFG" as 1.0 (one forward pass); diffusers uses 0.0. Setting 0.0 in ComfyUI is not the same thing.
Trained on Turbo, for Turbo — it loads on Krea 2 Raw because the architecture is shared, a side effect rather than a supported mode: it is neither trained nor tuned for Raw's weights, steps or guidance.
| denoise | per model call | GPU peak | |
|---|---|---|---|
| Turbo 8 steps (quality bar) | 56.9 s | 7.1 s | 25.2 GiB |
| Turbo 2 steps, no LoRA | 14.2 s | 7.1 s | 25.2 GiB |
| Turbo 2 steps + this LoRA | 14.3 s | 7.2 s | 25.2 GiB |
Denoising is 4.0× faster than the 8-step bar — two model calls instead of eight. The adapter adds no measurable cost per call and no measurable memory. Measured with the runtime's float16 compute inside attention and the feed-forward (its default since 8 Oct 2026); the previous card's 76.4 s / 19.3 s were bfloat16 compute on the same machine, the same 4.0×.
Text encoding and VAE decode are not in these timings: they take the same time at any step count, so a whole render, end to end, gains less than 4× and rises toward it as the render grows. Denoise times at every trained resolution (6.8 s at 512×512 to 37.3 s at 1440×1440, bfloat16 compute as the sweeps are rendered) are in the Detailed Model Card.
| strength | what happens |
|---|---|
| below 1.0 | Correction only partly applied — softer skin and hair, less fine structure, closer to 2 steps without the adapter |
| 1.0 | Trained point, recommended |
| 1.0–1.5 | Extrapolation — texture denser than the subject warrants, fine structure reads wiry rather than sharp. Usable per prompt |
| above 1.5 | Not recommended, not measured |
At two steps the dial scales the adapter's whole job — turning two coarse calls into a finished image — so there is less reason to go below 1.0 than with a 4-step adapter. Reach for steps before strength: when quality matters more than speed, the 4-step adapter is the better tool.
chk00051195 (9 Oct 2026) replaces chk00041320 (2 Oct 2026). It is 9,875 training samples later, and the first checkpoint released from the training weights themselves rather than from their running average: its last 600 samples ran with the learning rate taken to zero over already-trained data, so the weights are at rest, and the running average kept beside them (restarted at the anneal's start) agrees with them — the doubled subject the average used to draw when the weights changed pose can no longer form. The samples before the anneal went to data this adapter had never seen (every remaining recorded trajectory, each trained once), to the distribution push projected in its layout band, and to small faces weighted up in the anchor.
| axis | chk00041320 | chk00051195 |
|---|---|---|
| structure renders with a fault the teacher's does not have (of 21, checked at 1:1) | 0 | 0 |
| ghosting, blur-invariant index, sweep mean | 1.21× | 1.15× |
| 16-px / 8-px grid bands vs the teacher, sweep mean | 1.02× / 1.06× | 1.00× / 1.00× |
| small faces in crowds drawn whole (15 scenes at 1280², detector) | 0.59 | 0.63 (teacher 0.64) |
| small faces, equivalent blur | 1.30 px | 1.02 px (teacher 0.55) |
| market faces at 1280², layout closeness to the teacher | 0.79 | 0.79 |
| fine texture vs the teacher, sweep mean | 1.02× | 0.97× |
| fine texture vs the teacher, 1440² | 1.03 | 0.97 |
| grain in flat areas, sweep mean | 1.03× | 0.97× |
| judge prefers the teacher (of 66) | 11 (same run) | 12 |
| blind adherence rubric, points missing of 352 | 2 | 1 |
| saturation vs the teacher, sweep mean | 0.99× | 0.98× |
| distance to the teacher, sweep mean | 0.41 | 0.41 |
| training samples in the 2-step stages | 41,320 | 51,195 |
Steadier at every size: the excess energy two steps put into the grid bands is gone (both bands at the teacher's level), ghosting is closer to the teacher at 11 of 12 sizes, the structure is clean, and the small faces in crowd scenes come out whole more often with less equivalent blur. The costs are stated plainly: the fine texture now sits a few percent under the teacher's where the previous checkpoint sat at it — most at the 1280-class sizes — and the judge's preference for the teacher is level with the previous checkpoint's, 12 of 66 against 11 in the same run. krea2_turbo_2step_rank_64_lora_checkpoint_info.md always names the checkpoint in the weight files; the full comparison is in the Detailed Model Card.
The usual costs of two steps, in order of how often they show:
These are the final checkpoint's limits, stated as they are; none is hidden in the sweeps or the examples.
Distribution matching (DMD2 family) with a trajectory anchor, Krea 2 Turbo as its own teacher, on the recorded 8-step trajectories.
The student makes two calls, at σ = 1.0 and 0.7595 — the first and fifth points of the teacher's 8-step grid at μ = 1.15 — with stock Euler between them. Euler's first step lands exactly on the flow-matching interpolant at σ = 0.7595, so the first call's output is a legitimate image prediction and is judged as one.
On top, each capped relative to the distribution term:
Shipped weights are the training weights at the end of a 600-sample anneal — the learning rate taken to zero over already-trained data, the running average restarted at the anneal's start and agreeing with the live by its end — not a running average of training. A running average smooths single steps but, while the weights move between two layouts of the same prompt, draws both; an anneal settles the weights on one.
Rank 64, alpha = rank (scale 1.0), bf16 — the same 228 modules as the 4-step adapter:
to_q, to_k, to_v, to_gate, to_out.0, ff.gate, ff.up, ff.downtime_embed.linear_1, time_embed.linear_2, time_mod_proj, final_layer.linear — the ones a step-count change needs mostNothing about the base model changes.
Only the photo critic's head sees the photos; the student and the fake adapter receive only its filtered, capped push. No new prompts or text embeddings; the trajectories minted for this project use the same teacher, settings and prompt bank.
| 512×512 | 512×768 | 768×512 |
| 768×768 | 768×1024 | 1024×768 |
| 1024×1024 | 960×1280 | 1280×960 |
| 1280×1280 | 1440×1280 | 1440×1440 |
Same 12 buckets as the 4-step adapter, with the larger sizes and stylised prompts drawn more often: 1440×1440 about 6% of the samples, 1024×1024 and 768×1024 12% each, stylised prompts 12%.
Trained on a single RTX 3090 (24 GB). Frozen base weight-only int8. Every term fits up to 1440×1440 via:
A full step with every term live reserves ~22.4 GB at 1440×1440. Throughput is ~58 samples/hour against the 4-step recipe's 470 — roughly a dozen model runs per sample instead of two. That is the objective's cost, not teacher generation: the trajectories were recorded once and are read from disk.
Released LoRA is bf16.
Every sheet below: base model (8 steps), base at 2 steps without LoRA, base at 2 steps with LoRA — same seed throughout. Compare panels 2 vs 3 to isolate LoRA effect; panel 1 is the quality bar, not a pixel target. NFE = steps (Turbo is CFG-free).
assets/resolution_sweeps/ — this LoRA at every trained resolution for all 22 test prompts (same prompts, seed, 2 steps, strength 1.0). Nothing cherry-picked.
_teacher-8step/ — official Krea 2 Turbo 8-step reference renders for the same prompts/seeds/resolutions. _turbo-base-NO-LoRA-2step/ — stock Turbo at 2 steps, the floor.
Layout:
assets/resolution_sweeps/
├── _teacher-8step/ 8-step stock Turbo reference
│ ├── 512x512/
│ ├── 1024x1024/
│ └── ... (all 12 buckets)
├── _turbo-base-NO-LoRA-2step/ Same tree, stock Turbo at 2 steps (the floor)
└── 2step-LoRA/ Same tree, this LoRA at 2 steps (the published checkpoint)
Every published checkpoint and its resolution sweep under _archive/ — checkpoints/ and resolution_sweeps/, each under its number; the final checkpoint's sweep is chk51195-final, kept beside the teacher's and the stock 2-step trees it was measured against. The earlier checkpoints are superseded, not maintained.
This checkpoint closes the 2-step project. Its successor is the 3-step LoRA, built on what these two adapters taught. What two steps get wrong is stated under Known Issues — small subjects in wide scenes, the fine texture at the middle sizes, the finest edges and skin texture at the largest sizes, the tactile surface of stylised materials such as clay — and is left as it is. The 4-step adapter remains the recommendation for quality renders; this one is the fast preview.
For more details, if interested, have a look at the Detailed Model Card.
This adapter is a Derivative of Krea 2 Turbo under the Krea 2 Community License Agreement. Everything the agreement says about Krea 2 Turbo applies to this LoRA: Acceptable Use Policy, revenue threshold for commercial use, content-filtering duty for deployments.
Copy of agreement: LICENSE.pdf, required notice: NOTICE.txt. See krea.ai/krea-2-licensing.
Not an official Krea product, not endorsed by Krea. Base model is Krea's; adapter weights and everything else in this repo are mine.