* 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.
63 lines
1.7 KiB
TOML
63 lines
1.7 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "comfyui-coremlsuite"
|
|
description = "This extension contains a set of custom nodes for ComfyUI that allow you to use Core ML models in your ComfyUI workflows."
|
|
version = "2.1.2"
|
|
license = "MIT"
|
|
requires-python = ">=3.12,<3.13"
|
|
dependencies = [
|
|
# torch is provided by the host (ComfyUI) and intentionally left unpinned
|
|
# here: a hard torch cap would downgrade the host's torch and break its
|
|
# torchvision/torchaudio ABI. coreml-diffusion pulls torch>=2.7 transitively.
|
|
# >=0.1.5: model-version auto-detection (convert(model_version=None)).
|
|
"coreml-diffusion>=0.1.5,<0.2",
|
|
"coremltools>=9,<10",
|
|
"numpy>=2,<3",
|
|
]
|
|
|
|
[project.urls]
|
|
Repository = "https://github.com/aszc-dev/ComfyUI-CoreMLSuite"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["coreml_suite"]
|
|
|
|
[tool.comfy]
|
|
PublisherId = "aszc-dev"
|
|
DisplayName = "ComfyUI-CoreMLSuite"
|
|
Icon = "https://raw.githubusercontent.com/aszc-dev/ComfyUI-CoreMLSuite/main/assets/snake.png"
|
|
requires-comfyui = ">=0.3.27"
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pillow>=12.2.0",
|
|
"psutil>=7.2.2",
|
|
"pytest>=9.0.3",
|
|
]
|
|
comfy = [
|
|
"comfyui-frontend-package==1.14.6",
|
|
"torchvision",
|
|
"torchaudio",
|
|
"torchsde",
|
|
"einops",
|
|
"tokenizers>=0.13.3",
|
|
"safetensors>=0.4.2",
|
|
"aiohttp>=3.11.8",
|
|
"yarl>=1.18.0",
|
|
"kornia>=0.7.1",
|
|
"spandrel",
|
|
"soundfile",
|
|
"sentencepiece",
|
|
]
|
|
|
|
[tool.pytest.ini_options]
|
|
markers = [
|
|
"unit: framework-free unit test (Tier 0)",
|
|
"smoke: macOS-ARM smoke test on a synthetic micro-model (Tier 1)",
|
|
"m2: requires Apple Silicon + Neural Engine (Tier 2)",
|
|
]
|
|
testpaths = ["tests"]
|
|
addopts = ["--import-mode=importlib", "--confcutdir=tests"]
|