mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-10-12 02:16:43 +00:00
Resolve uv.lock by re-locking main's lock against the PR's pyproject, and regenerate openapi.json and schema.ts.
749 lines
43 KiB
TOML
749 lines
43 KiB
TOML
[build-system]
|
|
requires = ["setuptools", "pip", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "InvokeAI"
|
|
description = "A full-featured AI-assisted image generation environment designed for creatives and enthusiasts."
|
|
requires-python = ">=3.12, <3.13"
|
|
readme = { content-type = "text/markdown", file = "README.md" }
|
|
keywords = ["stable-diffusion", "AI"]
|
|
dynamic = ["version"]
|
|
license = { file = "LICENSE" }
|
|
authors = [{ name = "Invoke", email = "[email protected]" }]
|
|
classifiers = [
|
|
'Development Status :: 5 - Production/Stable',
|
|
'Environment :: GPU',
|
|
'Environment :: GPU :: NVIDIA CUDA',
|
|
'Environment :: MacOS X',
|
|
'Intended Audience :: End Users/Desktop',
|
|
'Intended Audience :: Developers',
|
|
'License :: OSI Approved :: Apache Software License',
|
|
'Operating System :: POSIX :: Linux',
|
|
'Operating System :: MacOS',
|
|
'Operating System :: Microsoft :: Windows',
|
|
'Programming Language :: Python :: 3 :: Only',
|
|
'Programming Language :: Python :: 3.12',
|
|
'Topic :: Artistic Software',
|
|
'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
|
|
'Topic :: Internet :: WWW/HTTP :: WSGI :: Server',
|
|
'Topic :: Multimedia :: Graphics',
|
|
'Topic :: Scientific/Engineering :: Artificial Intelligence',
|
|
'Topic :: Scientific/Engineering :: Image Processing',
|
|
]
|
|
dependencies = [
|
|
# Core generation dependencies, pinned for reproducible builds.
|
|
"accelerate",
|
|
"bitsandbytes; sys_platform!='darwin'",
|
|
"compel>=2.4.0,<3",
|
|
"diffusers[torch]==0.41.0",
|
|
"gguf",
|
|
"mediapipe==0.10.14", # needed for "mediapipeface" controlnet model
|
|
"mistral-common>=1.5.4,<2", # canonical Tekken tokenizer for FLUX.2 [dev] Mistral encoder; the
|
|
# loader depends on private surface (Tekkenizer internals) that
|
|
# moves across majors, so cap below 2.x (validated against 1.11.6)
|
|
"numpy<2.0.0",
|
|
"onnx==1.21.0",
|
|
"onnxruntime==1.19.2",
|
|
"opencv-contrib-python",
|
|
"imageio[ffmpeg]>=2.37", # video encode (for Wan 2.2 T2V/I2V output); encode behavior (macro_block_size) is version-sensitive
|
|
"psutil>=6", # video decode worker process-tree termination
|
|
"safetensors",
|
|
"sentencepiece==0.2.2", # 0.2.0 has a heap overflow; 0.2.1 coredumped on windows loading the t5 tokenizer
|
|
"spandrel",
|
|
# Loosely pinned, will respect requirement of `diffusers[torch]`. Split by platform: linux/win allow
|
|
# the 2.13 line every backend extra pins (the lock itself is held there by `constraint-dependencies` in
|
|
# [tool.uv]), while macOS stays on 2.7.x — newer macOS torch wheels exercise MPS on CI runners (no
|
|
# usable Metal GPU) and fail with MPS OOM.
|
|
# Deliberately NOT capped below 2.12 here. torch 2.12.x+rocm7.1 was reported to break generation (#9410),
|
|
# but this range is what every backend-agnostic install resolves against — manual installs use
|
|
# `--torch-backend=<x>` with no extra (see docs/start-here/manual), so a blanket cap would also
|
|
# reject torch>=2.12 on Windows/Linux CUDA, CPU and ARM64, where 2.12 has no known problem.
|
|
# The ROCm path is constrained where it can actually be targeted: the `rocm` extra below pins an
|
|
# exact version, AMD's 2.13.0+rocm10.0.0.
|
|
"torch>=2.7.0,<3.0; sys_platform != 'darwin'",
|
|
"torch>=2.7.0,<2.8.0; sys_platform == 'darwin'",
|
|
"torchsde", # diffusers needs this for SDE solvers, but it is not an explicit dep of diffusers
|
|
"torchvision",
|
|
"transformers>=5.10.4,<5.11",
|
|
|
|
# Core application dependencies, pinned for reproducible builds.
|
|
"fastapi-events",
|
|
# The old pin sat at 0.118.3 because 0.119.0 crashed generating our OpenAPI schema. That was a FastAPI bug, not
|
|
# ours (`KeyError: '$ref'` in fastapi/_compat/v2.py, which assumed every field mapping carries a `$ref`), and it
|
|
# is fixed as of 0.124.0 — no change to AnyInvocation was needed.
|
|
#
|
|
# Two later changes did need adapting to, both handled: 0.130 emits `contentMediaType` instead of
|
|
# `format: binary` for file uploads (see the Blob mapping in frontend/api/scripts/typegen.js), and 0.141 keeps
|
|
# included routers as a single node in `app.routes` rather than copying their routes into it (see
|
|
# `_iter_route_contexts` in tests/app/routers/test_model_manager_authorization.py). Keep the minor-version bound:
|
|
# both of those were silent breakages that only surfaced because something happened to assert on them.
|
|
"fastapi>=0.141.1,<0.142",
|
|
"huggingface-hub",
|
|
"networkx",
|
|
"pydantic-settings",
|
|
"pydantic",
|
|
"python-socketio",
|
|
# Schema migrations that run on every database backend are written with Alembic's operations (no Alembic
|
|
# environment or revision scripts).
|
|
"alembic>=1.20,<2",
|
|
# The database layer compiles every query through SQLAlchemy Core. Keep the minor-version bound: dialect
|
|
# compilation and the pysqlite transaction handling it relies on are exactly what changes between minors.
|
|
"sqlalchemy>=2.1,<2.2",
|
|
"uvicorn[standard]",
|
|
|
|
# Auxiliary dependencies, pinned only if necessary.
|
|
"blake3",
|
|
"bcrypt<4.0.0",
|
|
"Deprecated",
|
|
"dnspython",
|
|
"dynamicprompts",
|
|
"einops",
|
|
"email-validator>=2.0.0",
|
|
"fonttools[woff]",
|
|
"passlib[bcrypt]>=1.7.4",
|
|
"picklescan",
|
|
"pillow>=12.3.0",
|
|
"prompt-toolkit",
|
|
"pypatchmatch",
|
|
"PyJWT>=2.15.0",
|
|
"python-multipart",
|
|
"requests",
|
|
"semver~=3.0.1",
|
|
"PyWavelets",
|
|
|
|
# Semantic image index (image map / semantic search).
|
|
# numba is a umap-learn transitive, pinned to the range this stack has been
|
|
# exercised against rather than for numpy compatibility: every release from
|
|
# 0.59 to at least 0.63 accepts the numpy 1.26.x resolved under numpy<2.0
|
|
# above (0.62 widened its floor back to >=1.22). Raise the ceiling once a
|
|
# newer numba has been run against the image map, not just resolved.
|
|
"umap-learn~=0.5.7",
|
|
"scikit-learn~=1.5",
|
|
"numba>=0.59,<0.62",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
"xformers" = [
|
|
# Core generation dependencies, pinned for reproducible builds.
|
|
"xformers>=0.0.28.post1; sys_platform!='darwin'",
|
|
# torch 2.4+cu carries its own triton dependency
|
|
]
|
|
|
|
# The +cpu/+cu130/+xpu pins live on PyTorch's WHL indexes, the +rocm10.0.0 pins on AMD's, and
|
|
# all are gated to the platforms the project resolves and tests them on: Windows and Linux
|
|
# x86_64. macOS is capped below torch 2.8 (see the base requirement), and linux_aarch64 stays
|
|
# on the CPU-only PyPI 2.7.1 it was set up with (an aarch64 install requesting `cuda` gets
|
|
# CPU torch), so both fall back to the base `torch` / `torchvision` from PyPI. The index has
|
|
# carried aarch64 torchvision since 0.28, so moving aarch64 onto the pinned pairs -- and real
|
|
# CUDA-on-aarch64 (e.g. Grace/GH200) -- is open, just untested.
|
|
#
|
|
# cu130 builds cover compute capability 7.5 and newer (Turing through Blackwell) and need
|
|
# an NVIDIA driver from the R580 series or newer. CUDA 13 cannot build for Maxwell, Pascal
|
|
# or Volta; the cu126 builds that still can have no Blackwell kernels, and cu128 stops at
|
|
# torch 2.11.
|
|
"cpu" = [
|
|
"torch==2.13.0+cpu; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'",
|
|
"torchvision==0.28.0+cpu; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'",
|
|
# macOS / linux_aarch64 fallback, resolved from PyPI. Without these explicit entries
|
|
# the extra's conflict-universe would contain no torch at all there (uv partitions
|
|
# the base declarations into the no-extra universe).
|
|
"torch==2.7.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
"torchvision==0.22.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
]
|
|
"cuda" = [
|
|
"torch==2.13.0+cu130; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'",
|
|
"torchvision==0.28.0+cu130; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'",
|
|
# macOS / linux_aarch64 fallback, see note under "cpu"
|
|
"torch==2.7.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
"torchvision==0.22.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
]
|
|
# ROCm 10 for Linux x86_64 and Windows, from AMD's index (PyTorch publishes no ROCm wheels for Windows, and none
|
|
# built against ROCm 10). AMD splits the build: torch/torchvision and the ROCm runtime (`rocm-sdk-core`,
|
|
# `rocm-sdk-libraries`) are shared, the GPU kernels come in one package per target and library. uv applies an
|
|
# index source to direct requirements only, so every package that exists only on AMD's index is listed here.
|
|
# The extra installs the kernels of every target AMD builds; the launcher leaves out the targets the machine
|
|
# does not have (`uv sync --no-install-package`). ROCm 10 dropped gfx900/gfx906 (Vega 10/20, MI25/MI50), which
|
|
# the previous 2.13.0+rocm7.2 pin from PyTorch's index still covered.
|
|
"rocm" = [
|
|
"torch==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"torchvision==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
# The Linux torch wheel requires AMD's triton build; the Windows wheel requires none.
|
|
"triton==3.8.0+git4cff872c.rocm10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"rocm==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-core==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-libraries==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
# 0.50.2 is the first release with a Windows ROCm binary, and the first that finds its Linux one for these wheels:
|
|
# they report HIP 7.15, which 0.49 turns into `libbitsandbytes_rocm85.so` (7 * 10 + 15) where 0.50 ships `rocm715`.
|
|
"bitsandbytes>=0.50.2; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
# GPU kernels: per target, torch's, torchvision's and the ROCm runtime's; gfx110x, gfx115x and gfx12-0
|
|
# are torch's kernels shared by a whole family.
|
|
"amd-torch-device-gfx1010==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1010==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1010==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1011==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1011==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1011==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1012==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1012==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1012==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1030==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1030==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1030==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1031==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1031==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1031==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1032==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1032==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1032==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1033==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1033==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1033==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1034==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1034==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1034==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1035==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1035==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1035==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1036==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1036==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1036==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx110x==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1100==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1100==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1100==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1101==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1101==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1101==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1102==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1102==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1102==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1103==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1103==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1103==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx115x==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1150==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1150==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1150==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1151==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1151==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1151==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1152==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1152==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1152==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1153==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1153==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1153==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx12-0==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1200==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1200==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1200==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx1201==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx1201==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx1201==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx908==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx908==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx908==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torch-device-gfx90a==2.13.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"amd-torchvision-device-gfx90a==0.28.0+rocm10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"rocm-sdk-device-gfx90a==10.0.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
# Targets AMD builds for Linux only.
|
|
"amd-torch-device-gfx1250==2.13.0+rocm10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"amd-torchvision-device-gfx1250==0.28.0+rocm10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"rocm-sdk-device-gfx1250==10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"amd-torch-device-gfx942==2.13.0+rocm10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"amd-torchvision-device-gfx942==0.28.0+rocm10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"rocm-sdk-device-gfx942==10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"amd-torch-device-gfx950==2.13.0+rocm10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"amd-torchvision-device-gfx950==0.28.0+rocm10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"rocm-sdk-device-gfx950==10.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
# macOS / linux_aarch64 fallback, see note under "cpu"
|
|
"torch==2.7.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
"torchvision==0.22.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
]
|
|
# Intel XPU (Arc / Battlemage) wheels are published only for linux-x86_64 and
|
|
# windows-amd64 on PyTorch's WHL index. Gate the +xpu pins to those platforms; the
|
|
# Intel oneAPI runtime libs (intel-sycl-rt, etc.) come in automatically as deps of
|
|
# torch+xpu.
|
|
# Intel's XPU backend matured considerably after 2.7.1: torch.xpu.mem_get_info() works on
|
|
# driver/kernel combinations where it previously raised, and the bundled oneAPI runtime ships
|
|
# with the wheel (intel-sycl-rt), so upgrading torch upgrades the user-space runtime too.
|
|
"xpu" = [
|
|
"torch==2.13.0+xpu; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'",
|
|
"torchvision==0.28.0+xpu; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'",
|
|
# XPU triton (for torch.compile); the WHL index ships linux-x86_64 and win_amd64 wheels.
|
|
# Renamed from pytorch-triton-xpu to triton-xpu upstream.
|
|
"triton-xpu==3.7.2; (sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'",
|
|
# macOS / linux_aarch64 have no +xpu wheels: fall back to base torch so the extra's
|
|
# conflict-universe always contains a torch. See note under "cpu".
|
|
"torch==2.7.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
"torchvision==0.22.1; sys_platform == 'darwin' or (sys_platform == 'linux' and platform_machine == 'aarch64')",
|
|
]
|
|
|
|
# Driver for running the application database on MySQL or MariaDB instead of SQLite.
|
|
"mysql" = ["pymysql>=1.2.3,<2"]
|
|
"onnx" = ["onnxruntime"]
|
|
"onnx-cuda" = ["onnxruntime-gpu"]
|
|
"onnx-directml" = ["onnxruntime-directml"]
|
|
"dist" = ["pip-tools", "pipdeptree", "twine"]
|
|
"dev" = ["jurigged", "pudb", "snakeviz", "gprof2dot"]
|
|
"test" = [
|
|
"ruff~=0.11.2",
|
|
"ruff-lsp~=0.0.62",
|
|
"mypy",
|
|
"pre-commit",
|
|
"pytest>6.0.0",
|
|
"pytest-cov",
|
|
"pytest-timeout",
|
|
"pytest-xdist",
|
|
"pytest-datadir",
|
|
"requests_testadapter",
|
|
"httpx",
|
|
"polyfactory==2.19.0",
|
|
"humanize==4.12.1",
|
|
]
|
|
|
|
[tool.uv]
|
|
# Prevent opencv-python from ever being chosen during dependency resolution.
|
|
# This prevents conflicts with opencv-contrib-python, which Invoke requires.
|
|
override-dependencies = ["opencv-python; sys_platform=='never'"]
|
|
conflicts = [[{ extra = "cpu" }, { extra = "cuda" }, { extra = "rocm" }, { extra = "xpu" }]]
|
|
index-strategy = "unsafe-best-match"
|
|
# Restrict resolution to the platforms we support: x86_64/aarch64 Linux, Windows,
|
|
# and macOS. (ROCm and the PyTorch WHL-index pins are x86_64-only; on aarch64
|
|
# Linux torch/torchvision fall back to PyPI via the markers below.)
|
|
environments = ["sys_platform == 'win32' or sys_platform == 'darwin' or (sys_platform == 'linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64'))"]
|
|
# Hold every resolution on Windows and Linux x86_64 to the torch the backend extras pin -- including the
|
|
# no-extra one, which is what CI installs and tests. Without this the lock is free to keep an older torch
|
|
# there, or move it to the newest PyPI release, independently of the extras. `tool.uv` never reaches the
|
|
# published metadata, so installing the released package with `--torch-backend` keeps the open range of the base
|
|
# requirement; only `uv pip install` inside a checkout is held to it.
|
|
# `==2.13.0` also matches the local builds (+cpu, +cu130, +rocm10.0.0, +xpu).
|
|
constraint-dependencies = [
|
|
"torch==2.13.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
"torchvision==0.28.0; sys_platform == 'win32' or (sys_platform == 'linux' and platform_machine == 'x86_64')",
|
|
]
|
|
|
|
# compel, could you please not pull in all of Jupyter. (compel declares `notebook>=6.5.7` but does not
|
|
# reference IPython/Jupyter anywhere in its code.) Dropping it takes ~65 packages out of the environment.
|
|
#
|
|
# Deliberately the *global* form rather than `{ package = ..., dependencies = ... }`: the per-package form
|
|
# needs uv >= 0.11.25 and is a hard parse error on 0.10.0 - 0.11.24, while this form has been understood
|
|
# since uv 0.9.8 and resolves to exactly the same set. Older uv only warns and ignores it, so no install
|
|
# path breaks -- and the launcher syncs `--frozen` from the lockfile below, so users get the trimmed
|
|
# environment whichever uv they have. Keep it that way: a `required-version` here would hard-fail the uv
|
|
# 0.6.12 bundled in launcher <= 1.8.1 for no gain, since CI's `uv lock --locked` already catches a
|
|
# lockfile regenerated by a uv too old to honor this.
|
|
exclude-dependencies = ["notebook"]
|
|
|
|
# The Linux and Windows wheels of this build share a version but not their requirements: only the Linux wheel
|
|
# requires (AMD's) triton, without a marker. uv reads one wheel's metadata for both, so restate the union here.
|
|
[[tool.uv.dependency-metadata]]
|
|
name = "torch"
|
|
version = "2.13.0+rocm10.0.0"
|
|
requires-dist = [
|
|
"filelock",
|
|
"typing-extensions>=4.10.0",
|
|
"setuptools>=77.0.3",
|
|
"sympy>=1.13.3",
|
|
"networkx>=2.5.1",
|
|
"jinja2",
|
|
"fsspec>=0.8.5",
|
|
"rocm[libraries]==10.0.0",
|
|
"rocm-bootstrap",
|
|
"triton==3.8.0+git4cff872c.rocm10.0.0; sys_platform == 'linux'",
|
|
]
|
|
|
|
# `rocm` is published only as an sdist whose build asks the machine's GPU which kernel package to require, so the
|
|
# lock would depend on the machine that wrote it. Its target-independent requirements, from rocm_sdk._dist_info;
|
|
# the kernel packages are listed in the rocm extra instead.
|
|
[[tool.uv.dependency-metadata]]
|
|
name = "rocm"
|
|
version = "10.0.0"
|
|
requires-dist = [
|
|
"rocm-sdk-core==10.0.0",
|
|
"rocm-sdk-libraries==10.0.0; extra == 'libraries'",
|
|
]
|
|
provides-extras = ["libraries"]
|
|
|
|
[tool.uv.sources]
|
|
# Keep linux_aarch64 and macOS off the PyTorch and AMD indexes so that uv resolves their
|
|
# 2.7.1 fallback pins from PyPI; see the note above the extras.
|
|
torch = [
|
|
{ index = "torch-cpu", extra = "cpu", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "torch-cuda", extra = "cuda", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "torch-rocm", extra = "rocm", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "torch-xpu", extra = "xpu", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "pypi", marker = "sys_platform == 'linux' and platform_machine == 'aarch64'" },
|
|
]
|
|
torchvision = [
|
|
{ index = "torch-cpu", extra = "cpu", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "torch-cuda", extra = "cuda", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "torch-rocm", extra = "rocm", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "torch-xpu", extra = "xpu", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
{ index = "pypi", marker = "sys_platform == 'linux' and platform_machine == 'aarch64'" },
|
|
]
|
|
# Only the rocm extra takes AMD's triton; cuda and the no-extra resolution keep PyPI's.
|
|
triton = [
|
|
{ index = "torch-rocm", extra = "rocm", marker = "sys_platform == 'linux' and platform_machine == 'x86_64'" },
|
|
]
|
|
# Packages that exist only on AMD's index.
|
|
rocm = { index = "torch-rocm" }
|
|
rocm-sdk-core = { index = "torch-rocm" }
|
|
rocm-sdk-libraries = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1010 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1010 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1010 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1011 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1011 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1011 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1012 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1012 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1012 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1030 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1030 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1030 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1031 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1031 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1031 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1032 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1032 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1032 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1033 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1033 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1033 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1034 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1034 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1034 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1035 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1035 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1035 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1036 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1036 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1036 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx110x = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1100 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1100 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1100 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1101 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1101 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1101 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1102 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1102 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1102 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1103 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1103 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1103 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx115x = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1150 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1150 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1150 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1151 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1151 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1151 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1152 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1152 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1152 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1153 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1153 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1153 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx12-0 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1200 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1200 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1200 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1201 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1201 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1201 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx908 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx908 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx908 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx90a = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx90a = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx90a = { index = "torch-rocm" }
|
|
amd-torch-device-gfx1250 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx1250 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx1250 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx942 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx942 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx942 = { index = "torch-rocm" }
|
|
amd-torch-device-gfx950 = { index = "torch-rocm" }
|
|
amd-torchvision-device-gfx950 = { index = "torch-rocm" }
|
|
rocm-sdk-device-gfx950 = { index = "torch-rocm" }
|
|
# PyPI's xformers wheels are built against CUDA 12.8 and cannot load their extension next to a CUDA 13 torch (every
|
|
# memory-efficient attention call then fails); PyTorch's cu130 index carries the CUDA 13 build of the same release.
|
|
# Not scoped to the `cuda` extra: uv only allows that for packages the extra itself lists, and the CUDA 13 torch that
|
|
# PyPI serves on Linux needs the same build. The cpu/rocm/xpu builds cannot use xformers' CUDA kernels either way.
|
|
xformers = [
|
|
{ index = "torch-cuda", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
]
|
|
triton-xpu = [
|
|
{ index = "torch-xpu", marker = "(sys_platform == 'linux' and platform_machine == 'x86_64') or sys_platform == 'win32'" },
|
|
]
|
|
|
|
[[tool.uv.index]]
|
|
name = "pypi"
|
|
url = "https://pypi.org/simple"
|
|
|
|
[[tool.uv.index]]
|
|
name = "torch-cpu"
|
|
url = "https://download.pytorch.org/whl/cpu"
|
|
explicit = true
|
|
|
|
[[tool.uv.index]]
|
|
name = "torch-cuda"
|
|
url = "https://download.pytorch.org/whl/cu130"
|
|
explicit = true
|
|
|
|
# AMD's index also mirrors PyPI packages (numpy, pillow, sympy, ...) without hashes, so it must stay explicit.
|
|
[[tool.uv.index]]
|
|
name = "torch-rocm"
|
|
url = "https://stable.repo.amd.com/rocm/whl-next/"
|
|
explicit = true
|
|
|
|
[[tool.uv.index]]
|
|
name = "torch-xpu"
|
|
url = "https://download.pytorch.org/whl/xpu"
|
|
explicit = true
|
|
|
|
[project.scripts]
|
|
"invokeai-web" = "invokeai.app.run_app:run_app"
|
|
"invoke-useradd" = "invokeai.app.util.user_management:useradd"
|
|
"invoke-userdel" = "invokeai.app.util.user_management:userdel"
|
|
"invoke-userlist" = "invokeai.app.util.user_management:userlist"
|
|
"invoke-usermod" = "invokeai.app.util.user_management:usermod"
|
|
"invoke-db-copy" = "invokeai.app.util.database_copy:main"
|
|
|
|
[project.urls]
|
|
"Homepage" = "https://invoke.ai/"
|
|
"Documentation" = "https://invoke.ai/"
|
|
"Source" = "https://github.com/invoke-ai/InvokeAI/"
|
|
"Bug Reports" = "https://github.com/invoke-ai/InvokeAI/issues"
|
|
"Discord" = "https://discord.gg/ZmtBAhwWhy"
|
|
|
|
[tool.setuptools.dynamic]
|
|
version = { attr = "invokeai.version.__version__" }
|
|
|
|
[tool.setuptools.packages.find]
|
|
"where" = ["."]
|
|
"include" = [
|
|
"invokeai.assets.fonts*",
|
|
"invokeai.version*",
|
|
"invokeai.generator*",
|
|
"invokeai.backend*",
|
|
"invokeai.frontend*",
|
|
"invokeai.frontend.webv1.dist*",
|
|
"invokeai.frontend.webv1.static*",
|
|
"invokeai.configs*",
|
|
"invokeai.app*",
|
|
"invokeai.invocation_api*",
|
|
]
|
|
|
|
[tool.setuptools.package-data]
|
|
"invokeai.app.assets" = ["**/*.png"]
|
|
"invokeai.backend.qwen3" = ["tokenizer/*.json", "tokenizer/*.json.gz"]
|
|
"invokeai.backend.qwen3_vl" = ["tokenizer/*.json", "tokenizer/*.json.gz", "config/*.json"]
|
|
"invokeai.backend.qwen3_5" = ["*.json", "tokenizer/*.json", "tokenizer/*.json.gz"]
|
|
"invokeai.backend.qwen2_5_vl" = ["*.json", "tokenizer/*.json", "tokenizer/*.json.gz"]
|
|
# Read at load time by the MiniMax H3 single-file encoder loader. Without this the file is
|
|
# absent from a wheel install and that loader raises FileNotFoundError.
|
|
"invokeai.backend.minimax_h3" = ["*.json"]
|
|
"invokeai.backend.t5" = ["tokenizer/*.json"]
|
|
"invokeai.app.services.image_index" = ["*.txt"]
|
|
"invokeai.app.services.workflow_records.default_workflows" = ["*.json"]
|
|
"invokeai.backend.hidiffusion" = ["sd_module_key/*.txt"]
|
|
"invokeai.app.services.style_preset_records" = ["*.json"]
|
|
"invokeai.app.services.style_preset_images.default_style_preset_images" = [
|
|
"*.png",
|
|
]
|
|
"invokeai.assets.fonts" = ["**/*.ttf"]
|
|
"invokeai.backend" = ["**.png", "**/*.icc"]
|
|
"invokeai.configs" = ["*.example", "**/*.yaml", "*.txt"]
|
|
"invokeai.frontend.webv1.dist" = ["**"]
|
|
"invokeai.frontend.webv2.dist" = ["**"]
|
|
"invokeai.frontend.webv1.static" = ["**"]
|
|
"invokeai.app.invocations" = ["**"]
|
|
|
|
#=== Begin: PyTest and Coverage
|
|
[tool.pytest.ini_options]
|
|
# `--dist loadfile` keeps a file's tests together on one xdist worker, so module-scoped
|
|
# fixtures are set up once per file instead of in every worker that received part of it.
|
|
# It is not isolation: a worker process runs many files, in an order that depends on the
|
|
# worker count and on which file finished first, so a file must still set up its own
|
|
# process-global state. It costs nothing -- per-test distribution measured the same wall
|
|
# clock on the full suite -- and it lives here rather than in the CI command so that it
|
|
# also holds when `-n` is passed by hand. Coverage is opt-in via `--cov`.
|
|
addopts = "--strict-markers --dist loadfile -m \"not slow\""
|
|
markers = [
|
|
"slow: Marks tests as slow. Disabled by default. To run all tests, use -m \"\". To run only slow tests, use -m \"slow\".",
|
|
"timeout: Marks the timeout override.",
|
|
"uses_database: Runs on the `empty_database` fixture, which targets INVOKEAI_TEST_DB_URL when it is set and SQLite otherwise. Applied by the collection hook in tests/conftest.py.",
|
|
"sqlite_only: Depends on SQLite internals (query plans, PRAGMAs, the single connection); skipped when INVOKEAI_TEST_DB_URL targets another backend.",
|
|
]
|
|
# A cache-key or other SQLAlchemy warning is a bug in the query layer, not noise.
|
|
filterwarnings = ["error::sqlalchemy.exc.SAWarning"]
|
|
[tool.coverage.run]
|
|
branch = true
|
|
source = ["invokeai"]
|
|
omit = ["*tests*", "*migrations*", ".venv/*", "*.env"]
|
|
[tool.coverage.report]
|
|
show_missing = true
|
|
fail_under = 85 # let's set something sensible on Day 1 ...
|
|
[tool.coverage.json]
|
|
output = "coverage/coverage.json"
|
|
pretty_print = true
|
|
[tool.coverage.html]
|
|
directory = "coverage/html"
|
|
[tool.coverage.xml]
|
|
output = "coverage/index.xml"
|
|
#=== End: PyTest and Coverage
|
|
|
|
#=== Begin: Ruff
|
|
[tool.ruff]
|
|
line-length = 120
|
|
exclude = [
|
|
".git",
|
|
"__pycache__",
|
|
"build",
|
|
"dist",
|
|
"invokeai/frontend/api/node_modules/",
|
|
"invokeai/frontend/webv1/node_modules/",
|
|
"invokeai/frontend/webv2/node_modules/",
|
|
".venv*",
|
|
"*.ipynb",
|
|
"invokeai/backend/image_util/mediapipe_face/", # External code
|
|
"invokeai/backend/image_util/mlsd/", # External code
|
|
"invokeai/backend/image_util/normal_bae/", # External code
|
|
"invokeai/backend/image_util/pidi/", # External code
|
|
"invokeai/backend/image_util/imwatermark/", # External code
|
|
]
|
|
|
|
[tool.ruff.lint]
|
|
ignore = [
|
|
"E501", # https://docs.astral.sh/ruff/rules/line-too-long/
|
|
"C901", # https://docs.astral.sh/ruff/rules/complex-structure/
|
|
"B008", # https://docs.astral.sh/ruff/rules/function-call-in-default-argument/
|
|
"B904", # https://docs.astral.sh/ruff/rules/raise-without-from-inside-except/
|
|
]
|
|
select = ["B", "C", "E", "F", "W", "I", "TID"]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
# Vendored from the diffusers MiniMax-H3 branch (see invokeai/backend/minimax_h3/__init__.py);
|
|
# kept as close to upstream as possible, so upstream's zip() style is tolerated.
|
|
"invokeai/backend/minimax_h3/transformer_minimax_h3.py" = ["B905"]
|
|
"invokeai/backend/minimax_h3/autoencoder_kl_minimax_h3.py" = ["B905"]
|
|
"invokeai/backend/minimax_h3/autoencoder_kl_minimax_h3_audio.py" = ["B905"]
|
|
"invokeai/backend/minimax_h3/scheduling_minimax_h3.py" = ["B905"]
|
|
|
|
[tool.ruff.format]
|
|
# The vendored MiniMax-H3 files are kept byte-identical to upstream diffusers (modulo the
|
|
# absolute-import rewrite) so that re-syncing when a tagged diffusers ships them is a clean copy
|
|
# rather than a manual re-application of formatting. Upstream wraps at a narrower line length, so
|
|
# `ruff format` would rewrap lines for no semantic gain. `ruff check` still runs on them, so the
|
|
# import sorting this project does enforce stays enforced.
|
|
#
|
|
# Listed file by file rather than as a directory glob: the package also holds first-party modules
|
|
# (presets.py, sampling.py, denoise.py, int8_convrot.py, ...) which must stay formatted.
|
|
exclude = [
|
|
"invokeai/backend/minimax_h3/packing.py",
|
|
"invokeai/backend/minimax_h3/transformer_minimax_h3.py",
|
|
"invokeai/backend/minimax_h3/autoencoder_kl_minimax_h3.py",
|
|
"invokeai/backend/minimax_h3/autoencoder_kl_minimax_h3_audio.py",
|
|
"invokeai/backend/minimax_h3/scheduling_minimax_h3.py",
|
|
]
|
|
|
|
[tool.ruff.lint.flake8-tidy-imports]
|
|
# Disallow all relative imports.
|
|
ban-relative-imports = "all"
|
|
|
|
#=== End: Ruff
|
|
|
|
#=== Begin: MyPy
|
|
|
|
# global mypy config
|
|
[tool.mypy]
|
|
ignore_missing_imports = true # ignores missing types in third-party libraries
|
|
strict = true
|
|
plugins = "pydantic.mypy"
|
|
exclude = ["tests/*"]
|
|
|
|
# overrides for specific modules
|
|
[[tool.mypy.overrides]]
|
|
follow_imports = "skip" # skips type checking of the modules listed below
|
|
module = [
|
|
"invokeai.app.api.routers.models",
|
|
"invokeai.app.invocations.text_encoder.compel",
|
|
"invokeai.app.invocations.sd.denoise_latents",
|
|
"invokeai.app.services.invocation_stats.invocation_stats_default",
|
|
"invokeai.app.services.model_manager.model_manager_base",
|
|
"invokeai.app.services.model_manager.model_manager_default",
|
|
"invokeai.app.services.model_manager.store.model_records_sql",
|
|
"invokeai.app.util.controlnet_utils",
|
|
"invokeai.backend.image_util.txt2mask",
|
|
"invokeai.backend.image_util.safety_checker",
|
|
"invokeai.backend.image_util.patchmatch",
|
|
"invokeai.backend.image_util.invisible_watermark",
|
|
"invokeai.backend.install.model_install_backend",
|
|
"invokeai.backend.ip_adapter.ip_adapter",
|
|
"invokeai.backend.ip_adapter.resampler",
|
|
"invokeai.backend.ip_adapter.unet_patcher",
|
|
"invokeai.backend.model_management.convert_ckpt_to_diffusers",
|
|
"invokeai.backend.model_management.lora",
|
|
"invokeai.backend.model_management.model_cache",
|
|
"invokeai.backend.model_management.model_manager",
|
|
"invokeai.backend.model_management.model_merge",
|
|
"invokeai.backend.model_management.model_probe",
|
|
"invokeai.backend.model_management.model_search",
|
|
"invokeai.backend.model_management.models.*", # this is needed to ignore the module's `__init__.py`
|
|
"invokeai.backend.model_management.models.base",
|
|
"invokeai.backend.model_management.models.controlnet",
|
|
"invokeai.backend.model_management.models.ip_adapter",
|
|
"invokeai.backend.model_management.models.lora",
|
|
"invokeai.backend.model_management.models.sdxl",
|
|
"invokeai.backend.model_management.models.stable_diffusion",
|
|
"invokeai.backend.model_management.models.vae",
|
|
"invokeai.backend.model_management.seamless",
|
|
"invokeai.backend.model_management.util",
|
|
"invokeai.backend.stable_diffusion.diffusers_pipeline",
|
|
"invokeai.backend.stable_diffusion.diffusion.shared_invokeai_diffusion",
|
|
"invokeai.backend.util.hotfixes",
|
|
"invokeai.backend.util.mps_fixes",
|
|
"invokeai.backend.util.util",
|
|
"invokeai.frontend.install.model_install",
|
|
]
|
|
#=== End: MyPy
|
|
|
|
[tool.pyright]
|
|
# Start from strict mode
|
|
typeCheckingMode = "strict"
|
|
# This errors whenever an import is missing a type stub file - way too noisy
|
|
reportMissingTypeStubs = "none"
|
|
# These are the rest of the rules enabled by strict mode - enable them @ warning
|
|
reportConstantRedefinition = "warning"
|
|
reportDeprecated = "warning"
|
|
reportDuplicateImport = "warning"
|
|
reportIncompleteStub = "warning"
|
|
reportInconsistentConstructor = "warning"
|
|
reportInvalidStubStatement = "warning"
|
|
reportMatchNotExhaustive = "warning"
|
|
reportMissingParameterType = "warning"
|
|
reportMissingTypeArgument = "warning"
|
|
reportPrivateUsage = "warning"
|
|
reportTypeCommentUsage = "warning"
|
|
reportUnknownArgumentType = "warning"
|
|
reportUnknownLambdaType = "warning"
|
|
reportUnknownMemberType = "warning"
|
|
reportUnknownParameterType = "warning"
|
|
reportUnknownVariableType = "warning"
|
|
reportUnnecessaryCast = "warning"
|
|
reportUnnecessaryComparison = "warning"
|
|
reportUnnecessaryContains = "warning"
|
|
reportUnnecessaryIsInstance = "warning"
|
|
reportUnusedClass = "warning"
|
|
reportUnusedImport = "warning"
|
|
reportUnusedFunction = "warning"
|
|
reportUnusedVariable = "warning"
|
|
reportUntypedBaseClass = "warning"
|
|
reportUntypedClassDecorator = "warning"
|
|
reportUntypedFunctionDecorator = "warning"
|
|
reportUntypedNamedTuple = "warning"
|