* feat(lcm): convert any full-distill LCM checkpoint
- COREML_CONVERT_LCM gains a ckpt_name input: any checkpoint from the
checkpoints folder, with the canonical SimianLuo single file as the
default auto-download entry, so workflows saved before this input
existed keep the old behavior
- conversion routes through the unified
coreml_diffusion.convert(model_version=LCM) path; the bespoke
trace/convert pipeline in lcm/converter.py and the dead
UNet2DConditionModelLCM wrapper are removed
- output naming via compose_out_name; existing cached LCM .mlpackages
reconvert once due to the new _se attention suffix in the name
- LCM-LoRA merged checkpoints (plain SD1.5 architecture, no guidance
embedding) are rejected by the package with a pointer to the standard
converter node + LCM scheduler
- requires coreml-diffusion>=0.1.4 (generic LCM conversion fix)
Verified against a local ComfyUI checkout: the default entry resolves
the Hugging Face single file and cache-hits a previously converted
.mlpackage exposing timestep_cond; an LCM-LoRA merge raises the
explanatory ValueError.
* feat(convert): consolidate conversion into one auto-detecting node
The standard CoreMLConverter now auto-detects the model version from the
checkpoint (coreml-diffusion>=0.1.5, convert(model_version=None)), so:
- the model_version dropdown is gone — one node converts SD15 / SDXL / SDXL
refiner / full-distill LCM, the version inferred from the UNet architecture
- the dedicated "Core ML LCM Converter" node, its single-model autodownload,
and coreml_suite/lcm/nodes.py are removed; the converter UX was previously
inconsistent (LCM only reachable through a separate autodownload-only node,
while the standard converter did not list LCM at all)
lcm/utils.py (sampler-side timestep_cond patching) is unchanged — runtime LCM
support still keys off the converted UNet exposing timestep_cond.
diffusers is dropped from the dependencies (no longer imported directly after
the LCM converter removal). The e2e workflow fixture drops its now-invalid
model_version input.
* fix(deps): require coreml-diffusion>=0.1.5, keep requires-python <3.13
The auto-detect consolidation needs convert(model_version=None) from
coreml-diffusion 0.1.5. requires-python stays pinned to <3.13 to match the
library (coremltools-driven); relaxing it past the library's own cap makes the
dependency unresolvable for the 3.13+ range.