Rewrite the README as a lean landing page and move depth into a docs/ folder. Correct the supported-model story and several stale facts, and answer the recurring questions from issue #21. - Convert-only is the supported path: suite-converted .mlpackage is the only supported input; drop coreml-community download guidance. - Remove all .mlmodelc / Xcode references — compilation was dropped and the loader handles .mlpackage only. - Fix compute-unit name (CPU_AND_NE, not CPU_AND_ANE) and the loader input name (coreml_name). - Document CoreMLSamplerAdvanced (previously undocumented). - Add docs/: hardware, nodes, conversion, workflows, faq, troubleshooting, limitations (with a support matrix). - Note conversion now lives in the coreml-diffusion package. - Remove dev scaffolding specs; ignore *.log, .DS_Store, .claude/.
54 lines
2.7 KiB
Markdown
54 lines
2.7 KiB
Markdown
# Limitations & Support Matrix
|
||
|
||
## Support matrix
|
||
|
||
| Feature | Status | Notes |
|
||
|---|---|---|
|
||
| SD1.5 | ✅ Full | ANE via `SPLIT_EINSUM`; the primary, fastest path |
|
||
| SDXL / SDXL Turbo | ⚠️ Partial | GPU only (no ANE), no speedup; possible quality loss vs source. Don't run Turbo at 1024² |
|
||
| SD2.1 | ❌ Unsupported | |
|
||
| Inpainting checkpoints (9-channel) | ❌ Unsupported | |
|
||
| ControlNet | ✅ Supported | Convert the checkpoint with `controlnet_support = True` |
|
||
| LoRA | ⚠️ Experimental | Inconsistent per-LoRA; baked at conversion, immutable afterward |
|
||
| LCM | ⚠️ Experimental | Hardcoded to LCM Dreamshaper v7 |
|
||
| SVD | ❌ Not supported | |
|
||
| AnimateDiff | ❌ Not supported | Motion modules need pre-conversion injection; not feasible today |
|
||
| IPAdapter | ❌ Not supported | Needs a real `MODEL` the Core ML wrapper can't provide |
|
||
| Core ML Adapter | ⚠️ Experimental | Works for many nodes; fails for merges/IPAdapter/etc. |
|
||
|
||
## Fixed input/output shapes
|
||
|
||
A Core ML model is converted for one specific resolution and batch size. To work
|
||
at a different size, re-convert with the new width/height (conversion is cheap and
|
||
cached by name). This is also why detailers and latent-upscale workflows that
|
||
rescale mid-graph break — see [troubleshooting](troubleshooting.md).
|
||
|
||
There is experimental support for flexible shapes via
|
||
[EnumeratedShapes](https://apple.github.io/coremltools/docs-guides/source/flexible-inputs.html#select-from-predetermined-shapes),
|
||
but it is **much slower** — user benchmarks show roughly **5×** the per-iteration
|
||
time on every run, not just the first. Fixed-shape models per resolution are the
|
||
practical choice.
|
||
|
||
## SDXL on the Neural Engine
|
||
|
||
SDXL and SDXL Turbo cannot run on the ANE — the dual-text-encoder UNet exceeds the
|
||
supported Neural Engine path. They run on the GPU at roughly MPS-equivalent speed,
|
||
so Core ML offers no speed advantage for SDXL, and converted output may look
|
||
degraded versus the safetensors original (an upstream conversion artifact). Use
|
||
`ORIGINAL` + `CPU_AND_GPU`. See [hardware](hardware.md).
|
||
|
||
## Experimental Core ML Adapter
|
||
|
||
The Adapter wraps a Core ML model to look like a standard ComfyUI `MODEL`, which
|
||
covers many standard and custom nodes. But it can't fully emulate a real model:
|
||
operations that need genuine `MODEL` internals — model merges, IPAdapter, some
|
||
LoRA flows, detailers without the size hook — generally won't work, and the model's
|
||
fixed input shapes aren't validated, so mismatches error at runtime. Prefer the
|
||
native Core ML Sampler when you don't need the `MODEL` type.
|
||
|
||
## Prompt length
|
||
|
||
Core ML enforces a hard 77-token prompt limit with no auto-chunking. Split long
|
||
prompts across multiple CLIP Text Encode nodes and merge with Conditioning
|
||
(Combine).
|