[build-system] requires = ["setuptools~=65.5", "pip~=22.3", "wheel"] build-backend = "setuptools.build_meta" [project] name = "InvokeAI" description = "An implementation of Stable Diffusion which provides various new features and options to aid the image generation process" requires-python = ">=3.9, <3.11" readme = { content-type = "text/markdown", file = "README.md" } keywords = ["stable-diffusion", "AI"] dynamic = ["version"] license = { file = "LICENSE" } authors = [{ name = "The InvokeAI Project", email = "lincoln.stein@gmail.com" }] classifiers = [ 'Development Status :: 4 - Beta', 'Environment :: GPU', 'Environment :: GPU :: NVIDIA CUDA', 'Environment :: MacOS X', 'Intended Audience :: End Users/Desktop', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: POSIX :: Linux', 'Operating System :: MacOS', 'Operating System :: Microsoft :: Windows', 'Programming Language :: Python :: 3 :: Only', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', '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 = [ "accelerate~=0.16", "albumentations", "click", "clip_anytorch", # replacing "clip @ https://github.com/openai/CLIP/archive/eaa22acb90a5876642d0507623e859909230a52d.zip", "compel==2.0.0rc2", "controlnet-aux>=0.0.6", "timm==0.6.13", # needed to override timm latest in controlnet_aux, see https://github.com/isl-org/ZoeDepth/issues/26 "datasets", "diffusers[torch]~=0.18.1", "dnspython==2.2.1", "dynamicprompts", "easing-functions", "einops", "eventlet", "facexlib", "fastapi==0.88.0", "fastapi-events==0.8.0", "fastapi-socketio==0.0.10", "flask==2.1.3", "flask_cors==3.0.10", "flask_socketio==5.3.0", "flaskwebgui==1.0.3", "gfpgan==1.3.8", "huggingface-hub>=0.11.1", "matplotlib", # needed for plotting of Penner easing functions "mediapipe", # needed for "mediapipeface" controlnet model "npyscreen", "numpy<1.24", "omegaconf", "opencv-python", "picklescan", "pillow", "prompt-toolkit", "pympler==1.0.1", "pypatchmatch", 'pyperclip', "pyreadline3", "python-multipart==0.0.6", "pytorch-lightning==1.7.7", "realesrgan", "requests==2.28.2", "rich~=13.3", "safetensors~=0.3.0", "scikit-image>=0.19", "send2trash", "test-tube>=0.7.5", "torch~=2.0.0", "torchvision>=0.14.1", "torchmetrics==0.11.4", "torchsde==0.2.5", "transformers~=4.30", "uvicorn[standard]==0.21.1", "windows-curses; sys_platform=='win32'", ] [project.optional-dependencies] "dist" = ["pip-tools", "pipdeptree", "twine"] "docs" = [ "mkdocs-material<9.0", "mkdocs-git-revision-date-localized-plugin", "mkdocs-redirects==1.2.0", ] "dev" = [ "pudb", ] "test" = ["pytest>6.0.0", "pytest-cov"] "xformers" = [ "xformers~=0.0.19; sys_platform!='darwin'", "triton; sys_platform=='linux'", ] [project.scripts] # legacy entrypoints; provided for backwards compatibility "configure_invokeai.py" = "invokeai.frontend.install:invokeai_configure" "textual_inversion.py" = "invokeai.frontend.training:invokeai_textual_inversion" # shortcut commands to start cli and web # "invokeai --web" will launch the web interface # "invokeai" will launch the CLI "invokeai" = "invokeai.frontend.legacy_launch_invokeai:main" # new shortcut to launch web interface "invokeai-web" = "invokeai.app.api_app:invoke_api" # full commands "invokeai-configure" = "invokeai.frontend.install:invokeai_configure" "invokeai-merge" = "invokeai.frontend.merge:invokeai_merge_diffusers" "invokeai-ti" = "invokeai.frontend.training:invokeai_textual_inversion" "invokeai-model-install" = "invokeai.frontend.install:invokeai_model_install" "invokeai-migrate3" = "invokeai.backend.install.migrate_to_3:main" "invokeai-update" = "invokeai.frontend.install:invokeai_update" "invokeai-metadata" = "invokeai.frontend.CLI.sd_metadata:print_metadata" "invokeai-node-cli" = "invokeai.app.cli_app:invoke_cli" "invokeai-node-web" = "invokeai.app.api_app:invoke_api" [project.urls] "Homepage" = "https://invoke-ai.github.io/InvokeAI/" "Documentation" = "https://invoke-ai.github.io/InvokeAI/" "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.web*","invokeai.version*", "invokeai.generator*","invokeai.backend*", "invokeai.frontend*", "invokeai.frontend.web.dist*", "invokeai.frontend.web.static*", "invokeai.configs*", "invokeai.app*","ldm*", ] [tool.setuptools.package-data] "invokeai.assets.web" = ["**.png","**.js","**.woff2","**.css"] "invokeai.backend" = ["**.png"] "invokeai.configs" = ["*.example", "**/*.yaml", "*.txt"] "invokeai.frontend.web.dist" = ["**"] "invokeai.frontend.web.static" = ["**"] #=== Begin: PyTest and Coverage [tool.pytest.ini_options] addopts = "--cov-report term --cov-report html --cov-report xml" [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 [flake8] max-line-length = 120