[project] name = "comfyui" version = "0.3.57" description = "An installable version of ComfyUI" readme = "README.md" authors = [ { name = "Contributors_of_ComfyUI" }, ] requires-python = ">=3.10" license = { text = "GPL-3.0-or-later" } classifiers = [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Operating System :: OS Independent", ] dependencies = [ "comfyui-frontend-package>=1.25.11", "comfyui-workflow-templates>=0.1.75", "comfyui-embedded-docs>=0.2.6", "torch", "torchvision", "torchdiffeq>=0.2.3", "torchsde>=0.2.6", "einops>=0.6.0", "open-clip-torch>=2.24.0", "transformers!=4.53.0,!=4.53.1,!=4.53.2", "tokenizers>=0.13.3", "sentencepiece", "peft>=0.10.0", "torchinfo", "safetensors>=0.4.2", "aiohttp>=3.11.8", "yarl>=1.9.4", "accelerate>=0.25.0", "pyyaml>=6.0", "scikit-image>=0.20.0", "jsonmerge>=1.9.0", "clean-fid>=0.1.35", "resize-right>=0.0.2", "opencv-python-headless>=4.9.0.80", "albumentations>=1.3.0", "aiofiles>=23.1.0", "frozendict>=2.3.6", "python-dateutil>=2.8.2", "importlib_resources", "Pillow", "scipy", "tqdm", "protobuf>=3.20.0,<5.0.0", "psutil", "ConfigArgParse", "aio-pika", "pyjwt[crypto]", "kornia>=0.7.0", "mpmath>=1.0,!=1.4.0a0", "huggingface_hub[hf_xet]>=0.32.0", "lazy-object-proxy", "lazy_loader>=0.3", "can_ada", "fsspec", "natsort", "OpenEXR", "opentelemetry-distro", "opentelemetry-sdk<1.34.0", "opentelemetry-exporter-otlp<=1.27.0", "opentelemetry-propagator-jaeger", "opentelemetry-instrumentation", "opentelemetry-util-http", "opentelemetry-instrumentation-aio-pika", "opentelemetry-instrumentation-requests", "opentelemetry-semantic-conventions", "wrapt>=1.16.0", "certifi", "spandrel>=0.3.4", # https://github.com/conda-forge/numba-feedstock/issues/158 until numba is released with support for a later version of numpy "numpy>=1.24.4,<2.3", "soundfile", "watchdog", "PySoundFile", "networkx>=2.6.3", "joblib", "jaxtyping", "spandrel_extra_arches", "ml_dtypes", "diffusers>=0.30.1", "vtracer", "skia-python", "pebble>=5.0.7", "openai", "anthropic", "humanize", "lightning", "flax", "jax", "colour", "av>=14.2.0", "pydantic~=2.0", "pydantic-settings~=2.0", "typer", "ijson", "scikit-learn>=1.4.1", # everything that is a torch extension will need setuptools, so just include it "setuptools", "alembic", "SQLAlchemy", "gguf", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.setuptools.packages.find] where = ["."] include = ["comfy*"] namespaces = false [project.optional-dependencies] dev = [ "pytest", "pytest-asyncio", "pytest-mock", "pytest-aiohttp", "pytest-xdist", "websocket-client>=1.6.1", "PyInstaller", "testcontainers", "testcontainers-rabbitmq", "mypy>=1.6.0", "freezegun", "coverage", "pylint", "astroid", ] cpu = [ "torch", "torchvision", "torchaudio", ] cu126 = [ "torch", "torchvision", "triton ; sys_platform == 'Linux'", "triton-windows ; sys_platform == 'win32'", ] cu128 = [ "torch", "torchvision", "triton ; sys_platform == 'Linux'", "triton-windows ; sys_platform == 'win32'", ] rocm = [ "torch", "torchvision", "pytorch-triton-rocm" ] mps = [ "torch", "torchvision", ] attention = [ "sageattention==2.2.0 ; sys_platform == 'Linux' or sys_platform == 'win32'", "flash_attn ; sys_platform == 'Linux'", ] comfyui-manager = [ "GitPython", "PyGithub", "matrix-client==0.4.0", "rich", "typing-extensions", "toml", "uv", "chardet", "pip", ] [project.scripts] comfyui = "comfy.cmd.main:entrypoint" comfyui-worker = "comfy.entrypoints.worker:entrypoint" comfyui-workflow = "comfy.entrypoints.workflow:entrypoint" [project.urls] Homepage = "https://github.com/comfyanonymous/ComfyUI" Repository = "https://github.com/comfyanonymous/ComfyUI" [tool.uv] conflicts = [ [{ extra = "cpu" }, { extra = "cu126" }, { extra = "cu128" }, { extra = "rocm" }, { extra = "mps" }], ] no-build-isolation-package = [ "sageattention", "sage-attention", "flash_attn", ] [[tool.uv.index]] name = "pytorch-cpu" url = "https://download.pytorch.org/whl/cpu" explicit = true [[tool.uv.index]] name = "pytorch-cu126" url = "https://download.pytorch.org/whl/cu126" explicit = true [[tool.uv.index]] name = "pytorch-cu128" url = "https://download.pytorch.org/whl/cu128" explicit = true [[tool.uv.index]] name = "pytorch-rocm" url = "https://download.pytorch.org/whl/rocm6.3" explicit = true [[tool.uv.index]] name = "pytorch-nightly-cpu" url = "https://download.pytorch.org/whl/nightly/cpu" explicit = true [tool.uv.sources] torch = [ { index = "pytorch-cpu", extra = "cpu" }, { index = "pytorch-cu126", extra = "cu126", marker = "sys_platform == 'Linux' or sys_platform == 'win32'" }, { index = "pytorch-cu128", extra = "cu128", marker = "sys_platform == 'Linux' or sys_platform == 'win32'" }, { index = "pytorch-rocm", extra = "rocm", marker = "sys_platform == 'Linux'" }, { index = "pytorch-nightly-cpu", extra = "mps", marker = "sys_platform == 'darwin'" }, ] torchvision = [ { index = "pytorch-cpu", extra = "cpu" }, { index = "pytorch-cu126", extra = "cu126", marker = "sys_platform == 'Linux' or sys_platform == 'win32'" }, { index = "pytorch-cu128", extra = "cu128", marker = "sys_platform == 'Linux' or sys_platform == 'win32'" }, { index = "pytorch-rocm", extra = "rocm", marker = "sys_platform == 'Linux'" }, { index = "pytorch-nightly-cpu", extra = "mps", marker = "sys_platform == 'darwin'" }, ] torchaudio = [ { index = "pytorch-cpu", extra = "cpu" }, ] sageattention = [ { git = "https://github.com/thu-ml/SageAttention.git", marker = "sys_platform == 'Linux'", extra = "attention" }, { url = "https://github.com/woct0rdho/SageAttention/releases/download/v2.2.0-windows.post1/sageattention-2.2.0+cu128torch2.7.1.post1-cp39-abi3-win_amd64.whl", marker = "sys_platform == 'win32'", extra = "attention" }, ] [[tool.uv.dependency-metadata]] name = "flash-attn" version = "2.6.3" requires-dist = ["torch", "einops"] [[tool.uv.dependency-metadata]] name = "sageattention" version = "2.2.0" requires-dist = ["torch"] [tool.ruff] lint.select = [ "N805", # invalid-first-argument-name-for-method "S307", # suspicious-eval-usage "S102", # exec "T", # print-usage "W", # pycodestyle Warnings "F", # Pyflakes ] exclude = ["*.ipynb", "**/generated/*.pyi"] [tool.hatch.metadata] allow-direct-references = true [tool.hatch.build.targets.wheel] packages = ["comfy/", "comfy_extras/", "comfy_api/", "comfy_api_nodes/", "comfy_config/", "comfy_execution/", "comfy_compatibility/"]