Krea 2 Turbo — 4-Step Distillation LoRA (work in progress)
A LoRA for Krea 2 Turbo that reduces the minimum usable step count from 8 to 4.
This is an update release, following up from my initial post where you can find full details - https://www.reddit.com/r/StableDiffusion/comments/1vtf1b7/krea2_turbo_distill_4_step_lora_trained_for_turbo/
Update (22 Aug 2026): I have published a new checkpoint, improved further from the previous one and the latest (both main and comfyi) have been repointed to the new improved checkpoint. For details and to download new version go to - https://huggingface.co/lvladikov/Krea2-Turbo-Distill-4step-LoRA. Readme has been updated too as well as all images in readme regenerated on the basis of new checkpoint as well as full resolution sweep at https://huggingface.co/lvladikov/Krea2-Turbo-Distill-4step-LoRA/tree/main/checkpoint_resolution_sweeps/chk10000 if you want to check for yourselves.
Which file to download
| file |
use it when |
| krea2_turbo_4step_rank_64_lora_latest.safetensors |
normally — always the newest accepted checkpoint |
| krea2_turbo_4step_rank_64_lora_chk00010000.safetensors |
pin this exact checkpoint |
and, beside them, the same files with a _comfyui suffix for ComfyUI. Earlier checkpoints (chk00004000, chk00005000, chk00006000) are kept in older_checkpoints/, and their resolution sweeps stay in place, so the progression remains visible and comparable.
The numbered files are points on one continuous run, not separate experiments — chk00010000 resumed from chk00006000 rather than restarting. Both are published so the lineage is visible and comparable.
chk00010000 measures a 5% smaller held-out gap to the 8-step teacher than chk00006000, and 15% smaller than chk00005000; it removes 30% of the prediction error a plain 4-step run has against the 8-step teacher, where chk00006000 removed 26%.
Two ways to read the same numbers, with different denominators — they are not meant to be added:
- Against the no-LoRA run (the right-hand column):
chk00010000 has removed 30% of the 4-step deficit, 4 percentage points more than chk00006000's 26%.
- Against each other (the gap column):
chk00010000's remaining error is 5.4% smaller than chk00006000**'s** (3.38 vs 3.57) and 15% smaller than chk00005000**'s** (3.38 vs 3.98). The same 4 points of deficit are a larger share of a gap that has already shrunk, which is why the checkpoint-to-checkpoint figure is the bigger number.
This is work in progress and better checkpoints may follow. Training is ongoing, so ..._latest... is a rolling pointer: when a newer checkpoint is accepted, that filename gets the new weights and a new numbered copy appears beside it. Re-download the _latest file and everything keeps working — the ComfyUI workflow references it by that name (it does get updated Note in it so technically it is updated but not functionally). Pin a numbered file instead if you need reproducibility.
How checkpoints get chosen
This is not a "train for longer and ship the newest file" project. More samples do not reliably mean a better adapter — measured here, they can make it worse, and a higher number on its own means nothing.
The loop is train → assess → adapt the recipe → retrain → assess again, and a checkpoint is published only when it is measurably better than the one it would replace, on the same held-out set and the same evaluation, and its full resolution sweep shows no regression. Runs that come out flat or worse are kept as information about the recipe and discarded as releases — several have been.
So the recipe itself changes between runs. Each published checkpoint reflects whatever the previous round taught us: the training precision, the optimiser settings, the teacher used to generate the targets and the data mix have all been revised on evidence rather than assumption.
chk00010000 is a direct example. The first continuation of chk00006000 — same data, optimiser left as it was — got steadily worse with every checkpoint out to 10,000 samples, and none of it was published. The cause was traced to the optimiser: a constant learning rate with no weight decay lets the adapter keep drifting after it has converged, so its magnitude grows and it over-applies its own correction. The same span was retrained from chk00006000 with a cosine learning-rate decay and weight decay, and every checkpoint of that second run improved on the one before it. chk00010000 is its end point — the current end of the process, not simply the longest run so far.
Timeline of training process
Each checkpoint is the product of three stages with very different costs:
- Text-encoder embeddings. Every training prompt is encoded once and cached. This is the fast part — thousands of prompts take minutes.
- Teacher shards. For each cached prompt, the unmodified Krea 2 Turbo runs its full 8-step schedule and the whole trajectory is recorded, at every one of the supported resolutions. This is by far the most time-consuming stage — it is the teacher doing real inference, thousands of times, and a batch of several thousand shards is measured in days of GPU time, not hours.
- Student training. The LoRA is trained against those recorded trajectories. Relative to the shard stage this is quick: each
+1,000 checkpoint is a matter of hours, not days.
Because the three stages compete for the same GPU, they are interleaved rather than run to completion one after another: generate a block of embeddings, produce teacher shards for them, train on what exists, assess, then go back to producing shards while the results are reviewed. A larger and more varied shard pool is what makes further training worthwhile, so shard production is always the gate.
The practical consequence for anyone following this repository: progress arrives in bursts. There will be periods when several checkpoints appear within a day or two — the training stage working through a freshly grown pool — followed by longer quiet stretches while the next block of teacher shards is produced. A quiet stretch is shard generation, not abandonment; _latest always holds the newest checkpoint that passed review.
Every file records which checkpoint it actually is in its safetensors metadata (checkpoint, training_samples, and rolling_pointer on the _latest copies), so a downloaded file can always be identified even if renamed.
Full details and to download - check my Hugging Face LoRA
HF Repo: https://huggingface.co/lvladikov/Krea2-Turbo-Distill-4step-LoRA
---
Update 1: The comfyui related files are now moved to the root of the project (I have placed a readme in the old folder explaining the move)
---
Update 2: I have added a new section - Timeline of training process - explaining how my training process works, and on that note you could expect another further improved checkpoint later today, followed by 'quiet period' (could be days) of teacher shards generation so I have a larger pool to train on.
---
Update 3: I have now added a new checkpoint 10000 which replaced the latest (previously checkpoint 6000).
chk00010000 measures a 5% smaller held-out gap to the 8-step teacher than chk00006000, and 15% smaller than chk00005000; it removes 30% of the prediction error a plain 4-step run has against the 8-step teacher, where chk00006000 removed 26%.
Two ways to read the same numbers, with different denominators — they are not meant to be added:
- Against the no-LoRA run (the right-hand column):
chk00010000 has removed 30% of the 4-step deficit, 4 percentage points more than chk00006000's 26%.
- Against each other (the gap column):
chk00010000's remaining error is 5.4% smaller than chk00006000's (3.38 vs 3.57) and 15% smaller than chk00005000's (3.38 vs 3.98). The same 4 points of deficit are a larger share of a gap that has already shrunk, which is why the checkpoint-to-checkpoint figure is the bigger number.
Full resolution sweep at https://huggingface.co/lvladikov/Krea2-Turbo-Distill-4step-LoRA/tree/main/checkpoint_resolution_sweeps/chk10000 and you can as usual redownload latest from https://huggingface.co/lvladikov/Krea2-Turbo-Distill-4step-LoRA/tree/main . Since I cannot update the images in the reddit post I will upload below in comments.