Convert diffusion-model checkpoints (SD1.5/SDXL) to Core ML for Apple Neural Engine — framework-free, ComfyUI-independent.
Project description
coreml-diffusion
Convert diffusion-model checkpoints into Core ML .mlpackage artifacts for the
Apple Neural Engine (ANE) — framework-free and standalone.
coreml-diffusion takes a single-file Stable Diffusion checkpoint and produces a
Core ML UNet you can run on-device (macOS/iOS) via Core ML, in a Python pipeline,
or load into any host that consumes the artifact.
What this is
A standalone toolkit and knowledge base for running diffusion models on the Apple Neural Engine via Core ML. The niche is diffusion on the ANE: low-power, GPU-free, embeddable in a Swift/iOS app. ANE is the differentiator — this is about feasibility and power efficiency for SD1.5/SDXL on ANE, not a raw-throughput claim against desktop GPUs.
The scope is diffusion architectures generally, not Stable Diffusion specifically. The project aims to gather, in one place: the conversion path, a reproducible benchmarking suite for objective comparison, a per-model catalogue documenting the quirks of each architecture on the ANE, and the sources behind it all.
Supported today: SD1.5 and SDXL (verified). SDXL refiner and LCM convert but are not yet golden-verified (experimental).
Install
uv pip install coreml-diffusion # from PyPI
uv pip install -e . # from a checkout
Requires Python 3.12 and (for conversion) coremltools 9 — conversion runs on
macOS; the package imports and its CLI parse on any platform.
CLI
coreml-diffusion convert \
--ckpt path/to/model.safetensors \
--model-version SD15 \
--out unet.mlpackage \
--height 512 --width 512 \
--attn-impl SPLIT_EINSUM \
--quantize none
Options: --batch-size, --controlnet, --lora PATH[:STRENGTH] (repeatable),
--config (original-config YAML). --quantize {none,8,6,4} applies k-means
weight palettization. Run coreml-diffusion convert --help for the full list.
The output .mlpackage is the deliverable: load it natively in Swift/Core ML, run
it through the Python inference pipeline below, or hand it to any consuming host.
Model sources
Register directories so --ckpt accepts a bare name instead of a full path:
coreml-diffusion sources add comfy /path/to/ComfyUI/models # --kind comfy|flat
coreml-diffusion sources list # sources + checkpoints
coreml-diffusion convert --ckpt v1-5-pruned-emaonly --model-version SD15 --out unet.mlpackage
Sources are recorded in ~/.config/coreml-diffusion/sources.toml. comfy knows the
models/{checkpoints,loras,vae,...} layout; flat is a plain checkpoint directory.
Library
import coreml_diffusion
from coreml_diffusion import ModelVersion
coreml_diffusion.convert(
"model.safetensors", ModelVersion.SD15, "unet.mlpackage",
height=512, width=512, attn_impl="SPLIT_EINSUM",
)
Inference (in progress)
A framework-free inference path lets a converted .mlpackage generate images with
no host framework: a diffusers pipeline runs the stock VAE / text encoder on
torch while the UNet is served from Core ML on the ANE. This doubles as the
package's own regression anchor — the Tier 2 (m2) golden image, asserted on an
Apple Silicon runner — and as the reference for the on-device write-up. See
tests/m2/.
Discovery API
list_model_versions, list_attention_impls, list_quant_modes, and
CONTRACT_VERSION report what this build can convert. The identifiers are an
additive-only contract: removing or renaming one is a major version bump, because
downstream consumers reference these strings verbatim.
ComfyUI
ComfyUI-CoreMLSuite consumes
this package for its conversion path and drives its node dropdowns from the
discovery API above — installing a newer coreml-diffusion surfaces new
conversion types in the node with no Suite change. The Suite is one consumer;
this package neither depends on nor requires ComfyUI.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file coreml_diffusion-0.1.1.tar.gz.
File metadata
- Download URL: coreml_diffusion-0.1.1.tar.gz
- Upload date:
- Size: 499.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e1d5aee727c35a38b7693d17cc9711f818c4996dfaa2ade8340faf448097b77
|
|
| MD5 |
e6dde2831e6d0ac5eba2080a436effc2
|
|
| BLAKE2b-256 |
b9d9fbdfd6b87668c33711483447d1bf4669522daa32fab472dfc3477c24b60d
|
File details
Details for the file coreml_diffusion-0.1.1-py3-none-any.whl.
File metadata
- Download URL: coreml_diffusion-0.1.1-py3-none-any.whl
- Upload date:
- Size: 23.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bfeac8004d71825c145d302154aa87e7cc3d6fec78c101b221a211178a08f1f
|
|
| MD5 |
0d71d24c9c93032bfbd427fa64c6371d
|
|
| BLAKE2b-256 |
e317094f310fc8f4ba144ca872f786a985a45abbe947adf43d881075edda5dab
|