ChilloutMix Inpainting — Qualcomm QNN / HTP build
A
9-channel SD1.5 inpainting UNet compiled for Qualcomm's Hexagon NPU, plus its
own CLIP and VAE. Built for
DreamUI;
runs fully on-device, no network at inference time.
⚠ Licence
The upstream checkpoint states no licence. 5w4n/chilloutmix-inpainting carries
an empty model card with no license field, and ChilloutMix is a community merge whose
provenance and terms are not clearly documented. These artefacts are redistributed on
that basis, with attribution to the upstream repo, and no licence claim is made over
the underlying weights. If you are the rights holder and want this removed, open an
issue and it will be taken down.
Most SD1.5 derivatives are CreativeML OpenRAIL-M; that is an assumption here, not a
statement of fact. Satisfy yourself before using these commercially.
The conversion pipeline derives from
Local Dream
(
CC BY-NC 4.0), so treat the tooling lineage as non-commercial.
Files
| Archive | Bytes | sha256 |
|---|
ChilloutMixInpaint_qnn2.49_8gen2.zip | 1234064978 | a68a692b07fd4796680ca65611b954ab27597cf173b2ada75f9f71b6fad92591 |
ChilloutMixInpaint_qnn2.49_min.zip | 1294677482 | 1ecc9f4b3768bef7157aef922ab96dd51a97bdcb2f75ff713fa2e28440eae188 |
Each contains 7 flat files: unet.bin, clip_v2.mnn, pos_emb.bin, token_emb.bin,
tokenizer.json, vae_encoder.bin, vae_decoder.bin.
⚠ Byte lengths are exact and verified by the downloader — do not re-compress or re-upload
under the same name.
Which archive do I need?
| Archive | dsp arch | VTCM | For |
|---|
_8gen2 | v73 | 8 MB | Snapdragon 8 Gen 2 and most later flagships |
_min | v68 | 2 MB | lower/older HTPs and the cut-down "s" tier |
_min runs about 2.4× slower (9569 ms vs 4055 ms at 512x512 / 20 steps, measured on
an S25 Ultra) but loads on far more hardware.
⚠ Both are QAIRT 2.49 builds, which stamp an fp16 execution requirement into the
context binary. A device lacking that feature rejects the model at load with
Request feature fp16 enable with value 1 unsupported, regardless of tier — _min
lowers the arch and VTCM requirements, not the fp16 one.
Build
QAIRT 2.49, 512x512, 400-row calibration captured by hooking unet.forward
(so the 9-channel concat order and scaling are correct by construction),
--act_bitwidth 16, per-channel weights, --bias_bitwidth 32.
| _8gen2 | _min |
|---|
unet.bin | 882,072,152 B | 890,063,408 B |
dsp arch / soc model / VTCM | 73 / 43 / 8 | 68 / 30 / 2 |
contextBlobVersion | 4.0.4 | 4.0.4 |
Verification
Quantisation of the timestep path was checked against onnxruntime ground truth before
release — 36/36 tensors within 0.997–1.34 of their true range, with
/time_proj/Mul at 951.000 against a measured 950.984. That path is the one that
silently destroys output when mis-ranged.
Both tiers then passed an on-device image gate (seed 12345, denoise 1.0, 20 steps):
| tier | extreme_frac (pass < 0.15) | time |
|---|
_8gen2 | 0.0956 | 4055 ms |
_min | 0.0789 | 9569 ms |
Credits
- Upstream weights:
5w4n/chilloutmix-inpainting
- Conversion tooling lineage: Local Dream by xororz (CC BY-NC 4.0)