Răsfoiți Sursa

Support for ComfyUI (#384)

As discussed in Discussion
[#367](https://github.com/AbdBarho/stable-diffusion-webui-docker/discussions/367),
this adds support for the newer ComfyUI. I forked the fork that would
already add this but the maintainer of that fork hasn't implemented the
changes needed to properly get the output function working, which I did.
I believe everything is functional though I have not tested every single
node.

I changed the table format for the README and a few other minor things
for aesthetic reasons but if you want me to revert those, I will.

---------

Co-authored-by: Jonathan Kovacs <jkovacs-dev@users.noreply.github.com>
Co-authored-by: AbdBarho <ka70911@gmail.com>
PassiveLemon 3 ani în urmă
părinte
comite
2a0de025e2

+ 1 - 0
.github/pull_request_template.md

@@ -11,3 +11,4 @@ Closes issue #
 - auto: https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/
 - sygil: https://github.com/Sygil-Dev/sygil-webui/commit/
 - invoke: https://github.com/invoke-ai/InvokeAI/commit/
+- comfy: https://github.com/comfyanonymous/ComfyUI/commit/

+ 1 - 0
.github/workflows/docker.yml

@@ -16,6 +16,7 @@ jobs:
           - auto
           - sygil
           - invoke
+          - comfy
           - download
     runs-on: ubuntu-latest
     name: ${{ matrix.profile }}

+ 9 - 0
README.md

@@ -34,6 +34,14 @@ This repository provides multiple UIs for you to play around with stable diffusi
 | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
 | ![](https://user-images.githubusercontent.com/24505302/189541298-f902b021-a1eb-4e4b-b2eb-b6a696a8ec80.jpg) | ![](https://user-images.githubusercontent.com/24505302/189541295-7d7f2162-2189-4e0a-abbd-703f4779e1cd.jpg) | ![](https://user-images.githubusercontent.com/24505302/189541294-aa7f7735-a973-4e17-ada0-1fe3acbb1772.jpg) |
 
+### [ComfyUI](https://github.com/comfyanonymous/ComfyUI)
+
+[Full feature list here](https://github.com/comfyanonymous/ComfyUI#features), Screenshot:
+
+| Workflow                                                                         |
+| -------------------------------------------------------------------------------- |
+| ![](https://github.com/comfyanonymous/ComfyUI/raw/master/comfyui_screenshot.png) |
+
 ## Contributing
 
 Contributions are welcome! **Create a discussion first of what the problem is and what you want to contribute (before you implement anything)**
@@ -51,5 +59,6 @@ Special thanks to everyone behind these awesome projects, without them, none of
 - [AUTOMATIC1111/stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui)
 - [InvokeAI](https://github.com/invoke-ai/InvokeAI)
 - [Sygil-webui](https://github.com/Sygil-Dev/sygil-webui)
+- [ComfyUI](https://github.com/comfyanonymous/ComfyUI)
 - [CompVis/stable-diffusion](https://github.com/CompVis/stable-diffusion)
 - and many many more.

+ 16 - 1
docker-compose.yml

@@ -48,7 +48,6 @@ services:
       - PRELOAD=true
       - CLI_ARGS=--no-nsfw_checker --no-safety_checker --xformers
 
-
   sygil: &sygil
     <<: *base_service
     profiles: ["sygil"]
@@ -63,3 +62,19 @@ services:
     profiles: ["sygil-sl"]
     environment:
       - USE_STREAMLIT=1
+
+  comfy: &comfy
+    <<: *base_service
+    profiles: ["comfy"]
+    build: ./services/comfy/
+    image: sd-comfy:1
+    environment:
+      - CLI_ARGS=
+
+
+  comfy-cpu:
+    <<: *comfy
+    profiles: ["comfy-cpu"]
+    deploy: {}
+    environment:
+      - CLI_ARGS=--cpu

+ 44 - 0
services/comfy/Dockerfile

@@ -0,0 +1,44 @@
+FROM alpine:3.17 as xformers
+RUN apk add --no-cache aria2
+RUN aria2c -x 5 --dir / --out wheel.whl 'https://github.com/AbdBarho/stable-diffusion-webui-docker/releases/download/5.0.0/xformers-0.0.17.dev449-cp310-cp310-manylinux2014_x86_64.whl'
+
+
+FROM python:3.10.9-slim
+
+ENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1
+
+RUN --mount=type=cache,target=/root/.cache/pip pip install torch==1.13.1 torchvision --extra-index-url https://download.pytorch.org/whl/cu117
+
+RUN apt-get update && apt-get install -y git && apt-get clean
+
+ENV ROOT=/stable-diffusion
+RUN --mount=type=cache,target=/root/.cache/pip \
+  git clone https://github.com/comfyanonymous/ComfyUI.git ${ROOT} && \
+  cd ${ROOT} && \
+  git checkout master && \
+  git reset --hard 884ea653c8d6fe19b3724f45a04a0d74cd881f2f && \
+  pip install -r requirements.txt
+
+
+RUN --mount=type=cache,target=/root/.cache/pip  \
+  --mount=type=bind,from=xformers,source=/wheel.whl,target=/xformers-0.0.17-cp310-cp310-linux_x86_64.whl \
+  pip install triton /xformers-0.0.17-cp310-cp310-linux_x86_64.whl
+
+
+WORKDIR ${ROOT}
+
+ARG BRANCH=master SHA=884ea653c8d6fe19b3724f45a04a0d74cd881f2f
+RUN --mount=type=cache,target=/root/.cache/pip \
+  git fetch && \
+  git checkout ${BRANCH} && \
+  git reset --hard ${SHA} && \
+  pip install -r requirements.txt
+
+# add info
+COPY . /docker/
+
+ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility NVIDIA_VISIBLE_DEVICES=all
+ENV PYTHONPATH="${PYTHONPATH}:${PWD}" CLI_ARGS=""
+EXPOSE 7860
+ENTRYPOINT ["/docker/entrypoint.sh"]
+CMD python -u main.py --listen --port 7860 ${CLI_ARGS}

+ 47 - 0
services/comfy/entrypoint.sh

@@ -0,0 +1,47 @@
+#!/bin/bash
+
+set -Eeuo pipefail
+
+declare -A MOUNTS
+
+
+mkdir -vp /data/config/comfy/
+
+# cache
+MOUNTS["/root/.cache"]=/data/.cache
+# ui specific
+MOUNTS["${ROOT}/models/checkpoints"]="/data/StableDiffusion"
+MOUNTS["${ROOT}/models/controlnet"]="/data/ControlNet"
+MOUNTS["${ROOT}/models/upscale_models/RealESRGAN"]="/data/RealESRGAN"
+MOUNTS["${ROOT}/models/upscale_models/GFPGAN"]="/data/GFPGAN"
+MOUNTS["${ROOT}/models/upscale_models/SwinIR"]="/data/SwinIR"
+MOUNTS["${ROOT}/models/vae"]="/data/VAE"
+
+# data
+MOUNTS["${ROOT}/models/loras"]="/data/Lora"
+MOUNTS["${ROOT}/models/embeddings"]="/data/embeddings"
+
+# config
+# TODO: I am not sure if this is final, maybe it should change in the future
+MOUNTS["${ROOT}/models/clip"]="/data/.cache/comfy/clip"
+MOUNTS["${ROOT}/models/clip_vision"]="/data/.cache/comfy/clip_vision"
+MOUNTS["${ROOT}/models/custom_nodes"]="/data/config/comfy/custom_nodes"
+MOUNTS["${ROOT}/models/style_models"]="/data/config/comfy/style_models"
+MOUNTS["${ROOT}/models/t2i_adapter"]="/data/config/comfy/t2i_adapter"
+
+# output
+MOUNTS["${ROOT}/output"]="/output/comfy"
+
+for to_path in "${!MOUNTS[@]}"; do
+  set -Eeuo pipefail
+  from_path="${MOUNTS[${to_path}]}"
+  rm -rf "${to_path}"
+  if [ ! -f "$from_path" ]; then
+    mkdir -vp "$from_path"
+  fi
+  mkdir -vp "$(dirname "${to_path}")"
+  ln -sT "${from_path}" "${to_path}"
+  echo Mounted $(basename "${from_path}")
+done
+
+exec "$@"