Files
aszc-dev-ComfyUI-CoreMLSuite/docs/faq.md
T
aszc-dev 1008f144ad docs: sync with converter consolidation
Docs described the pre-#67 suite: a removed standalone LCM converter
node, a removed model_version input, a nonexistent
CoreMLDetailerHookProvider node, and a deleted lcm/converter.py file.

- drop LCM converter node docs; LCM checkpoints are auto-detected by
  the consolidated CoreMLConverter
- remove model_version input and invented 512-768 resolution range
- replace phantom detailer-hook fix with real workarounds
- fix Python support claim (3.12+ per requires-python)
- update LCM support-matrix row, drop stale line reference

Refs #67, #68
2026-07-09 18:33:17 +02:00

3.5 KiB
Raw Blame History

FAQ

What's the difference between ANE, GPU, and MPS, and which do I pick?

ANE is the Neural Engine (Core ML only), GPU is the Metal GPU (Core ML or PyTorch), MPS is PyTorch's GPU backend. This suite uses Core ML compute units only and never touches MPS. Short answer: SD1.5 at 512×512 → convert SPLIT_EINSUM, load CPU_AND_NE; larger sizes or SDXL → convert ORIGINAL, load CPU_AND_GPU. Full reasoning: hardware.

Do I still need PYTORCH_ENABLE_MPS_FALLBACK=1?

Not for these nodes — Core ML inference doesn't use PyTorch MPS. It may still matter for other parts of your ComfyUI graph, but it has no effect on Core ML sampling.

Why is my Core ML SDXL workflow no faster than the default nodes?

Because SDXL can't run on the ANE — the speedup comes from the Neural Engine, and SDXL falls back to the GPU, running at roughly MPS-equivalent speed. This is a known limitation, not a misconfiguration. The ANE benefit is real for SD1.5. See limitations.

Where do I get Core ML models?

You convert them yourself — that's the only supported path. See conversion. Downloaded Core ML models (e.g. coreml-community) use different dimensions/metadata and are not supported.

Is conversion run every time I queue, or once?

Once. Parameters are encoded in the output filename, so an already-converted model is reused and conversion is skipped. Convert once, then load the .mlpackage. See conversion → caching.

Does a converted model produce the same output as the original?

With the default quantize_nbits = none, the converted UNet output matches the source within numerical rounding (the golden test in tests/m2/test_golden_image.py gates on PSNR ≥ 20 dB on the decoded image). Quantization (8/6/4) introduces measured, bounded drift — see the PSNR table. For bit-identical output, keep none.

Are .mlpackage models safe to use?

.mlpackage is a declarative Core ML model format — it carries weights and a compute graph, not arbitrary executable code or Python pickle, so its safety profile is comparable to safetensors. In practice this matters little here, since the only supported models are ones you convert locally from your own checkpoints.

Are LoRAs reliable?

Partially. Some LoRAs convert cleanly; others produce poor or broken output — there's no firm rule, so test per-LoRA. LoRA weights and strength_model are baked in at conversion and can't be changed afterward; for some LCM-LoRA cases the Core ML Adapter path is more reliable. Treat LoRA support as experimental. See troubleshooting.

Does the experimental Adapter cost performance vs the Core ML Sampler?

Yes, a little. The Adapter wraps the model in a ComfyUI ModelPatcher so standard samplers work, which adds per-step interface overhead the native Core ML Sampler avoids. Use the native sampler unless you specifically need a MODEL (e.g. ModelSamplingDiscrete for LCM LoRAs).

Which Python versions work?

Python 3.12 or newer (requires-python >=3.12). Older 3.12 install failures came from the now-removed ml-stable-diffusion build, not from this suite.

Long prompts crash my workflow

Core ML has a hard 77-token prompt limit and doesn't auto-chunk long prompts. Split the prompt across multiple CLIP Text Encode nodes and merge with Conditioning (Combine). See troubleshooting.