File size: 2,753 Bytes
7c5c8b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
---
license: creativeml-openrail-m
tags:
  - mlx
  - apple-silicon
  - diffusion
  - stable-diffusion-xl
  - sdxl
  - anime
  - text-to-image
base_model: OnomaAIResearch/Illustrious-XL-v2.0
library_name: mlx-gen
pipeline_tag: text-to-image
---

# Illustrious-XL v2.0 — MLX pre-quantized tiers

Pre-quantized, packed-load tiers of [OnomaAIResearch/Illustrious-XL-v2.0](https://huggingface.co/OnomaAIResearch/Illustrious-XL-v2.0)
for on-device Apple-Silicon inference with [SceneWorks / `mlx-gen`](https://github.com/SceneWorks/mlx-gen)
(the `sdxl` generator). Each tier is a **self-contained diffusers turnkey snapshot** (U-Net + both
CLIP text encoders + VAE + tokenizers + scheduler + `model_index.json`) that loads directly.

Illustrious-XL v2.0 is the `v2.0-STABLE` snapshot — the last-annealing-phase checkpoint of a
cosine-annealing run, behaviourally distinct from (and more stable than) v1.0. It is architecturally
vanilla SDXL: dual CLIP-L + OpenCLIP-bigG, real CFG + negative prompt, eps prediction, VAE scaling
factor 0.13025, full sdxl-family LoRA support. Danbooru-tag prompting, ~30 steps at guidance 7.0.

## Resolution note

Unlike v1.0, **v2.0 tends to duplicate the subject in wide frames** — a `1girl, solo` prompt can
render two characters once the frame gets wide (measured: it duplicates at 1344×768 and 1536×1536,
while tall and square frames stay clean). Prefer square or tall framing; the SceneWorks catalog
omits the widest aspect buckets for this model.

## Provenance

Upstream ships a **single-file LDM checkpoint** (`Illustrious-XL-v2.0.safetensors`) that the MLX
`sdxl` loader cannot read. These tiers were produced offline with
[`scripts/build_sdxl_turnkey.py`](https://github.com/SceneWorks/SceneWorks/blob/main/scripts/build_sdxl_turnkey.py).
The conversion also normalizes two v2.0 quirks: a stray `position_ids` buffer (dropped) and a BF16
VAE (kept dense at F32/F16 per tier). Component configs are the canonical SDXL descriptors.

## Tiers

| dir      | precision | what's quantized |
|----------|-----------|------------------|
| `q4/` (default) | group-wise affine Q4, group size 64 | U-Net Linears + both CLIP encoders |
| `q8/`    | group-wise affine Q8, group size 64 | U-Net Linears + both CLIP encoders |
| `bf16/`  | dense (f16 source mirror) | nothing |

The **VAE stays dense in every tier**. Convolutions, GroupNorms, and the CLIP token/position
embeddings also stay dense; only the true Linear projections are packed. Quantization is
byte-identical to `mlx-gen`'s load-time `nn.quantize` (bf16 cast, group 64).

## License

CreativeML OpenRAIL-M, per the upstream model card. Commercial use OK, ungated; behavioral-use
restrictions apply. NOTE this differs from v1.0's SDXL (OpenRAIL++) license.