Few-step LoRA adapters for Iris-3B, a 3B-parameter pixel-space text-to-image diffusion transformer. With an adapter merged in, Iris-3B generates a 1024×1024 image in 4 steps with one forward pass per step. Classifier-free guidance (scale 3) is baked in, so no second guidance pass is needed. The default base sampler uses 100 steps with guidance on every step, about 200 forward passes.
Try it: Iris-3B Turbo Space (ZeroGPU, both adapters selectable).

Left: r1-1500. Right: r2-1000. Same prompts, seed 7, 1024×1024, 4 steps.
| Adapter | File | Notes |
|---|---|---|
r2-1000 (recommended) | r2-1000/student.safetensors | Resumed from r1-1500 at half the learning rate with an EMA of the student; 2,500 iterations in total. |
r1-1500 | r1-1500/student.safetensors | First run, iteration 1,500. Occasionally merges subjects (for example two foxes sharing one body) at some seeds. |
Both are rank-64 LoRAs (alpha 64, ~115M parameters, 460 MB in fp32). Each file's safetensors
metadata records turbo_steps=4, shift=4.0, cfg_scale=3.0 and resolution=1024.
The adapters need the inference code from the fork that added few-step sampling: pentaCoxian/iris-3b-turbo.
git clone https://github.com/pentaCoxian/iris-3b-turbo && cd iris-3b-turbo
uv sync # or: pip install -e .
hf download speridlabs/iris-3b model.safetensors config.yaml --local-dir checkpoints/iris-3b # ~12 GB
python scripts/sample.py --checkpoint checkpoints/iris-3b \
--lora pentacoxian-dev/iris-3b-turbo-lora \
--prompt "a red fox sleeping in fresh snow, golden hour"
--lora pentacoxian-dev/iris-3b-turbo-lora loads the default adapter (r2-1000), and
--lora pentacoxian-dev/iris-3b-turbo-lora:r1-1500 loads a specific one. The code reads the
repo's config.json manifest, then downloads only that adapter. To download manually instead,
include the manifest so the download is counted, and pass the file path to --lora:
hf download pentacoxian-dev/iris-3b-turbo-lora config.json r2-1000/student.safetensors --local-dir checkpoints/turbo
sample.py reads the adapter's metadata and switches to the 4-step sampler. It merges the
adapter into the weights at load time, so a step costs the same as a plain forward pass. The
text encoder (Qwen3-VL-4B-Instruct) is
downloaded on first run.
Macs with 16 GB of memory: add --preset mac16. It encodes prompts in a short-lived
subprocess, streams the weights onto the GPU with the adapter merged, and applies weight-only
int8 to the text encoder and the image trunk. Peak memory is about 7 GB.
Measured at 1024×1024, end to end including prompt encoding, after warm-up:
| Hardware | 4-step turbo | Notes |
|---|---|---|
| NVIDIA RTX 5090 (bf16) | 0.68 s / image | 88 images/min at batch 1 |
| Hugging Face ZeroGPU | ~1.1 s GPU time | plus ~3 s of ZeroGPU attach overhead per request |
| Apple M3 Max, 40-core GPU (bf16) | ~10–11 s / image | |
Apple M3 Max, --preset mac16 (int8) | ~11 s / image | ~7 GB peak memory |
For comparison, the base model's default 100-step sampler takes ~9–11 minutes per image on the same M3 Max.
Distribution-matching distillation (DMD2) without the GAN term, data-free: the training data is prompts only.
shift(1 − i/4) with shift 4, i.e.
t = 1.0, 0.923, 0.8, 0.571, re-noising with fresh noise between steps. Training uses backward
simulation: a random number of no-grad student steps, then one step with gradient.r1-1500): student and critic learning rate 5e-5, from scratch. The student
collapsed to texture between iterations 1,500 and 1,750, so iteration 1,500 is released.r2-1000): resumed from r1-1500 with student learning rate 2.5e-5 and an EMA of
the student (decay 0.99 per student update), with an automatic stop if previews lose contrast.
Iteration 1,000 (2,500 in total) is released, using the EMA weights. Run 2 reached iteration
1,500 without collapsing; 1,000 was chosen by visual comparison.Training must run at about one megapixel. The base checkpoint shows 16 px block artifacts at 512×512, which a student trained there would learn.
r1-1500.Apache-2.0, the same as the Iris-3B base weights, which these adapters modify and which are required to use them. Iris-3B is by speridlabs; this distillation is an independent community release.
Few-step LoRA adapters for Iris-3B, a 3B-parameter pixel-space text-to-image diffusion transformer. With an adapter merged in, Iris-3B generates a 1024×1024 image in 4 steps with one forward pass per step. Classifier-free guidance (scale 3) is baked in, so no second guidance pass is needed. The default base sampler uses 100 steps with guidance on every step, about 200 forward passes.
Try it: Iris-3B Turbo Space (ZeroGPU, both adapters selectable).

Left: r1-1500. Right: r2-1000. Same prompts, seed 7, 1024×1024, 4 steps.
| Adapter | File | Notes |
|---|---|---|
r2-1000 (recommended) | r2-1000/student.safetensors | Resumed from r1-1500 at half the learning rate with an EMA of the student; 2,500 iterations in total. |
r1-1500 | r1-1500/student.safetensors | First run, iteration 1,500. Occasionally merges subjects (for example two foxes sharing one body) at some seeds. |
Both are rank-64 LoRAs (alpha 64, ~115M parameters, 460 MB in fp32). Each file's safetensors
metadata records turbo_steps=4, shift=4.0, cfg_scale=3.0 and resolution=1024.
The adapters need the inference code from the fork that added few-step sampling: pentaCoxian/iris-3b-turbo.
git clone https://github.com/pentaCoxian/iris-3b-turbo && cd iris-3b-turbo
uv sync # or: pip install -e .
hf download speridlabs/iris-3b model.safetensors config.yaml --local-dir checkpoints/iris-3b # ~12 GB
python scripts/sample.py --checkpoint checkpoints/iris-3b \
--lora pentacoxian-dev/iris-3b-turbo-lora \
--prompt "a red fox sleeping in fresh snow, golden hour"
--lora pentacoxian-dev/iris-3b-turbo-lora loads the default adapter (r2-1000), and
--lora pentacoxian-dev/iris-3b-turbo-lora:r1-1500 loads a specific one. The code reads the
repo's config.json manifest, then downloads only that adapter. To download manually instead,
include the manifest so the download is counted, and pass the file path to --lora:
hf download pentacoxian-dev/iris-3b-turbo-lora config.json r2-1000/student.safetensors --local-dir checkpoints/turbo
sample.py reads the adapter's metadata and switches to the 4-step sampler. It merges the
adapter into the weights at load time, so a step costs the same as a plain forward pass. The
text encoder (Qwen3-VL-4B-Instruct) is
downloaded on first run.
Macs with 16 GB of memory: add --preset mac16. It encodes prompts in a short-lived
subprocess, streams the weights onto the GPU with the adapter merged, and applies weight-only
int8 to the text encoder and the image trunk. Peak memory is about 7 GB.
Measured at 1024×1024, end to end including prompt encoding, after warm-up:
| Hardware | 4-step turbo | Notes |
|---|---|---|
| NVIDIA RTX 5090 (bf16) | 0.68 s / image | 88 images/min at batch 1 |
| Hugging Face ZeroGPU | ~1.1 s GPU time | plus ~3 s of ZeroGPU attach overhead per request |
| Apple M3 Max, 40-core GPU (bf16) | ~10–11 s / image | |
Apple M3 Max, --preset mac16 (int8) | ~11 s / image | ~7 GB peak memory |
For comparison, the base model's default 100-step sampler takes ~9–11 minutes per image on the same M3 Max.
Distribution-matching distillation (DMD2) without the GAN term, data-free: the training data is prompts only.
shift(1 − i/4) with shift 4, i.e.
t = 1.0, 0.923, 0.8, 0.571, re-noising with fresh noise between steps. Training uses backward
simulation: a random number of no-grad student steps, then one step with gradient.r1-1500): student and critic learning rate 5e-5, from scratch. The student
collapsed to texture between iterations 1,500 and 1,750, so iteration 1,500 is released.r2-1000): resumed from r1-1500 with student learning rate 2.5e-5 and an EMA of
the student (decay 0.99 per student update), with an automatic stop if previews lose contrast.
Iteration 1,000 (2,500 in total) is released, using the EMA weights. Run 2 reached iteration
1,500 without collapsing; 1,000 was chosen by visual comparison.Training must run at about one megapixel. The base checkpoint shows 16 px block artifacts at 512×512, which a student trained there would learn.
r1-1500.Apache-2.0, the same as the Iris-3B base weights, which these adapters modify and which are required to use them. Iris-3B is by speridlabs; this distillation is an independent community release.