15 Commits
5.0.3 ... 8.0.0

Author SHA1 Message Date
AbdBarho
cdde93b8bb v8 (#516)
8607c2d42d
2023-06-24 10:06:30 +02:00
AbdBarho
660c098da0 Change capabilities in docker-compose (#497)
#479
2023-06-02 21:29:00 +02:00
AbdBarho
6695c23150 InvokeAI 2.3.5.post2 (#491)
f3b2e02921
#489
2023-05-29 19:07:01 +02:00
AbdBarho
a3ecd4a79c Update auto to 1.3.0 (#490)
20ae71faa8

Pytorch 2.0.1 #489
2023-05-29 15:17:06 +02:00
AbdBarho
1df18b803c Add extension dependencies (#485)
It seems that users are struggling to follow the instructions on the
wiki


https://github.com/AbdBarho/stable-diffusion-webui-docker/pull/483#issuecomment-1561241372
2023-05-24 16:53:59 +02:00
AbdBarho
110627415d Deprecate Sygil (#450)
It has been a long and wonderful journey
2023-05-16 18:58:52 +02:00
AbdBarho
87b1509dc2 Update Auto to 1.2.1 (#466)
89f9faa633

Fix #448
2023-05-16 18:56:36 +02:00
AbdBarho
71f4abb2db Create custom_nodes dir (#461)
Closes #460
2023-05-10 07:32:58 +02:00
AbdBarho
c836f41921 Add ClipEncoder (#458)
https://github.com/AbdBarho/stable-diffusion-webui-docker/pull/432#issuecomment-1537380951
2023-05-08 19:29:38 +02:00
LEv145
d47e77f19c Update/fix mounts for comfyUI (#432)
I updated the paths to make all paths work

Now paths in ComfyUI are working
Added: 
- `input`
- `models/configs`
- `models/gligen`
- `models/diffusers`
- `models/hypernetworks`

Was broken:
- `custom_nodes`
- `models/clip_vision` 
- `models/clip`

---------

Co-authored-by: LEv145 <you@example.com>
Co-authored-by: AbdBarho <ka70911@gmail.com>
2023-05-07 11:11:30 +02:00
AbdBarho
7fb8b97b90 Invoke 2.3.5 (#449)
d73f1c363c
2023-05-06 09:48:38 +02:00
Mat
9ac33db795 Fix overwriting existing values in config.json in auto (#418)
`jq` merge direction in this case is right to left so if the user had
set up custom paths it would replace them with the default ones.

This PR switches the direction to use the defaults as fallback instead
of overwriting user settings.

----
Didn't want to create an issue for the tiny change.

Thanks for your work on the repo, it saved me a lot of time, 👍

---------

Co-authored-by: AbdBarho <ka70911@gmail.com>
2023-05-06 07:38:36 +02:00
AbdBarho
a68734c9f9 Revert "Only run if changed (#444)"
This reverts commit 36f39043de.
2023-05-04 23:00:46 +02:00
AbdBarho
36f39043de Only run if changed (#444) 2023-05-04 22:54:37 +02:00
AbdBarho
0e5801e9d6 Update auto to pytorch 2 (#442)
Closes #410
2023-05-04 22:41:51 +02:00
23 changed files with 240 additions and 285 deletions

View File

@@ -0,0 +1,28 @@
#!/bin/bash
set -Eeuo pipefail
echo "Renaming..."
# compatible with default auto-names
mv -v ./data/StableDiffusion ./data/Stable-diffusion
mv -v ./data/Deepdanbooru ./data/torch_deepdanbooru
# casing problem on windows
mv -v ./data/Hypernetworks ./data/hypernetworks1
mv -v ./data/hypernetworks1 ./data/hypernetworks
mv -v ./data/MiDaS ./data/midas1
mv -v ./data/midas1 ./data/midas
echo "Moving folders..."
mkdir -pv ./final
mv -v ./data/config ./final/config
mv -v ./data/.cache ./final/.cache
mv -v ./data/embeddings ./final/embeddings
mv -v ./data ./final/models
mv -v ./final ./data

View File

@@ -14,7 +14,6 @@ jobs:
matrix:
profile:
- auto
- sygil
- invoke
- comfy
- download

4
.gitignore vendored
View File

@@ -1,2 +1,6 @@
/.devcontainer
/docker-compose.override.yml
# VSCode specific
*.code-workspace
/.vscode

View File

@@ -18,7 +18,7 @@ This repository provides multiple UIs for you to play around with stable diffusi
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| ![](https://user-images.githubusercontent.com/24505302/189541954-46afd772-d0c8-4005-874c-e2eca40c02f2.jpg) | ![](https://user-images.githubusercontent.com/24505302/189541956-5b528de7-1b5d-479f-a1db-d3f5a53afc59.jpg) | ![](https://user-images.githubusercontent.com/24505302/189541957-cf78b352-a071-486d-8889-f26952779a61.jpg) |
### [InvokeAI (lstein)](https://github.com/invoke-ai/InvokeAI)
### [InvokeAI](https://github.com/invoke-ai/InvokeAI)
[Full feature list here](https://github.com/invoke-ai/InvokeAI#features), Screenshots:
@@ -26,14 +26,6 @@ This repository provides multiple UIs for you to play around with stable diffusi
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| ![](https://user-images.githubusercontent.com/24505302/195158552-39f58cb6-cfcc-4141-9995-a626e3760752.jpg) | ![](https://user-images.githubusercontent.com/24505302/195158553-152a0ab8-c0fd-4087-b121-4823bcd8d6b5.jpg) | ![](https://user-images.githubusercontent.com/24505302/195158548-e118206e-c519-4915-85d6-4c248eb10fc0.jpg) |
### [Sygil (sd-webui / hlky)](https://github.com/Sygil-Dev/sygil-webui)
[Full feature list here](https://github.com/Sygil-Dev/sygil-webui/blob/master/README.md), Screenshots:
| Text to image | Image to image | Image Lab |
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| ![](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:
@@ -58,7 +50,7 @@ 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)
- [Sygil-webui](https://github.com/Sygil-Dev/sygil-webui)
- and many many more.

24
data/.gitignore vendored
View File

@@ -1,26 +1,4 @@
# for all of the stuff downloaded by transformers, pytorch, and others
/.cache
# for UIs
/config
# for all stable diffusion models (main, waifu diffusion, etc..)
/StableDiffusion
# others
/Codeformer
/GFPGAN
/ESRGAN
/BSRGAN
/RealESRGAN
/SwinIR
/MiDaS
/BLIP
/ScuNET
/LDSR
/Deepdanbooru
/Hypernetworks
/VAE
/embeddings
/Lora
/ControlNet
/openpose
/ModelScope
/LyCORIS
/models

View File

@@ -6,14 +6,15 @@ x-base_service: &base_service
volumes:
- &v1 ./data:/data
- &v2 ./output:/output
stop_signal: SIGINT
stop_signal: SIGKILL
tty: true
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
capabilities: [compute, utility]
name: webui-docker
@@ -28,7 +29,7 @@ services:
<<: *base_service
profiles: ["auto"]
build: ./services/AUTOMATIC1111
image: sd-auto:54
image: sd-auto:59
environment:
- CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
@@ -39,36 +40,27 @@ services:
environment:
- CLI_ARGS=--no-half --precision full --allow-code --enable-insecure-extension-access --api
invoke:
invoke: &invoke
<<: *base_service
profiles: ["invoke"]
build: ./services/invoke/
image: sd-invoke:27
image: sd-invoke:30
environment:
- PRELOAD=true
- CLI_ARGS=--no-nsfw_checker --no-safety_checker --xformers
- CLI_ARGS=--xformers
sygil: &sygil
<<: *base_service
profiles: ["sygil"]
build: ./services/sygil/
image: sd-sygil:16
environment:
- CLI_ARGS=--optimized-turbo
- USE_STREAMLIT=0
sygil-sl:
<<: *sygil
profiles: ["sygil-sl"]
environment:
- USE_STREAMLIT=1
# invoke-cpu:
# <<: *invoke
# profiles: ["invoke-cpu"]
# environment:
# - PRELOAD=true
# - CLI_ARGS=--always_use_cpu
comfy: &comfy
<<: *base_service
profiles: ["comfy"]
build: ./services/comfy/
image: sd-comfy:1
tty: true
image: sd-comfy:3
environment:
- CLI_ARGS=

View File

@@ -18,28 +18,37 @@ RUN . /clone.sh clip-interrogator https://github.com/pharmapsychotic/clip-interr
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'
RUN aria2c -x 5 --dir / --out wheel.whl 'https://github.com/AbdBarho/stable-diffusion-webui-docker/releases/download/6.0.0/xformers-0.0.21.dev544-cp310-cp310-manylinux2014_x86_64-pytorch201.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+cu117 torchvision --extra-index-url https://download.pytorch.org/whl/cu117
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && \
# we need those
apt-get install -y fonts-dejavu-core rsync git jq moreutils aria2 \
# extensions needs those
ffmpeg libglfw3-dev libgles2-mesa-dev pkg-config libcairo2 libcairo2-dev
# RUN --mount=type=cache,target=/root/.cache/pip pip install torch==2.0.0+cu118 torchvision --extra-index-url https://download.pytorch.org/whl/cu117
RUN apt-get update && apt install fonts-dejavu-core rsync git jq moreutils -y && apt-get clean
RUN --mount=type=cache,target=/cache --mount=type=cache,target=/root/.cache/pip \
aria2c -x 5 --dir /cache --out torch-2.0.1-cp310-cp310-linux_x86_64.whl -c \
https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp310-cp310-linux_x86_64.whl && \
pip install /cache/torch-2.0.1-cp310-cp310-linux_x86_64.whl torchvision --index-url https://download.pytorch.org/whl/cu118
RUN --mount=type=cache,target=/root/.cache/pip \
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git && \
cd stable-diffusion-webui && \
git reset --hard d7aec59c4eb02f723b3d55c6f927a42e97acd679 && \
git reset --hard 20ae71faa8ef035c31aa3a410b707d792c8203a3 && \
pip install -r requirements_versions.txt
RUN --mount=type=cache,target=/root/.cache/pip \
--mount=type=bind,from=xformers,source=/wheel.whl,target=/xformers-0.0.15-cp310-cp310-linux_x86_64.whl \
pip install triton /xformers-0.0.15-cp310-cp310-linux_x86_64.whl
--mount=type=bind,from=xformers,source=/wheel.whl,target=/xformers-0.0.21.dev544-cp310-cp310-manylinux2014_x86_64.whl \
pip install /xformers-0.0.21.dev544-cp310-cp310-manylinux2014_x86_64.whl
ENV ROOT=/stable-diffusion-webui
@@ -62,15 +71,13 @@ RUN --mount=type=cache,target=/root/.cache/pip \
RUN apt-get -y install libgoogle-perftools-dev && apt-get clean
ENV LD_PRELOAD=libtcmalloc.so
ARG SHA=5ab7f213bec2f816f9c5644becb32eb72c8ffb89
ARG SHA=20ae71faa8ef035c31aa3a410b707d792c8203a3
RUN --mount=type=cache,target=/root/.cache/pip \
cd stable-diffusion-webui && \
git fetch && \
git reset --hard ${SHA} && \
pip install -r requirements_versions.txt
RUN --mount=type=cache,target=/root/.cache/pip pip install -U opencv-python-headless
COPY . /docker
RUN \
@@ -81,7 +88,6 @@ RUN \
git config --global --add safe.directory '*'
WORKDIR ${ROOT}
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
ENV NVIDIA_VISIBLE_DEVICES=all
ENV CLI_ARGS=""
EXPOSE 7860

View File

@@ -1,10 +0,0 @@
{
"outdir_samples": "",
"outdir_txt2img_samples": "/output/txt2img",
"outdir_img2img_samples": "/output/img2img",
"outdir_extras_samples": "/output/extras",
"outdir_txt2img_grids": "/output/txt2img-grids",
"outdir_img2img_grids": "/output/img2img-grids",
"outdir_save": "/output/saved",
"font": "DejaVuSans.ttf"
}

View File

@@ -0,0 +1,78 @@
#!/usr/bin/env python3
"""Checks and sets default values for config.json before starting the container."""
import json
import re
import os.path
import sys
DEFAULT_FILEPATH = '/data/config/auto/config.json'
DEFAULT_OUTDIRS = {
"outdir_samples": "",
"outdir_txt2img_samples": "/output/txt2img",
"outdir_img2img_samples": "/output/img2img",
"outdir_extras_samples": "/output/extras",
"outdir_grids": "",
"outdir_txt2img_grids": "/output/txt2img-grids",
"outdir_img2img_grids": "/output/img2img-grids",
"outdir_save": "/output/saved",
"outdir_init_images": "/output/init-images",
}
RE_VALID_OUTDIR = re.compile(r"(^/output(/\.?[\w\-\_]+)+/?$)|(^\s?$)")
DEFAULT_OTHER = {
"font": "DejaVuSans.ttf",
}
def dict_to_json_file(target_file: str, data: dict):
"""Write dictionary to specified json file"""
with open(target_file, 'w') as f:
json.dump(data, f)
def json_file_to_dict(config_file: str) -> dict|None:
"""Load json file into a dictionary. Return None if file does not exist."""
if os.path.isfile(config_file):
with open(config_file, 'r') as f:
return json.load(f)
else:
return None
def replace_if_invalid(value: str, replacement: str, pattern: str|re.Pattern[str]) -> str:
"""Returns original value if valid, fallback value if invalid"""
if re.match(pattern, value):
return value
else:
return replacement
def check_and_replace_config(config_file: str, target_file: str = None):
"""Checks given file for invalid values. Replaces those with fallback values (default: overwrites file)."""
# Get current user config, or empty if file does not exists
data = json_file_to_dict(config_file) or {}
# Check and fix output directories
for k, def_val in DEFAULT_OUTDIRS.items():
if k not in data:
data[k] = def_val
else:
data[k] = replace_if_invalid(value=data[k], replacement=def_val, pattern=RE_VALID_OUTDIR)
# Check and fix other default settings
for k, def_val in DEFAULT_OTHER.items():
if k not in data:
data[k] = def_val
# Write results to file
dict_to_json_file(target_file or config_file, data)
if __name__ == '__main__':
if len(sys.argv) > 1:
check_and_replace_config(*sys.argv[1:])
else:
check_and_replace_config(DEFAULT_FILEPATH)

View File

@@ -8,8 +8,8 @@ mkdir -p /data/config/auto/scripts/
find "${ROOT}/scripts/" -maxdepth 1 -type l -delete
cp -vrfTs /data/config/auto/scripts/ "${ROOT}/scripts/"
cp -n /docker/config.json /data/config/auto/config.json
jq '. * input' /data/config/auto/config.json /docker/config.json | sponge /data/config/auto/config.json
# Set up config file
python /docker/config.py /data/config/auto/config.json
if [ ! -f /data/config/auto/ui-config.json ]; then
echo '{}' >/data/config/auto/ui-config.json
@@ -19,36 +19,21 @@ if [ ! -f /data/config/auto/styles.csv ]; then
touch /data/config/auto/styles.csv
fi
# copy models from original models folder
rsync -a --info=NAME ${ROOT}/models/VAE-approx/ /data/models/VAE-approx/
rsync -a --info=NAME ${ROOT}/models/karlo/ /data/models/karlo/
declare -A MOUNTS
MOUNTS["/root/.cache"]="/data/.cache"
# main
MOUNTS["${ROOT}/models/Stable-diffusion"]="/data/StableDiffusion"
MOUNTS["${ROOT}/models/VAE"]="/data/VAE"
MOUNTS["${ROOT}/models/Codeformer"]="/data/Codeformer"
MOUNTS["${ROOT}/models/GFPGAN"]="/data/GFPGAN"
MOUNTS["${ROOT}/models/ESRGAN"]="/data/ESRGAN"
MOUNTS["${ROOT}/models/BSRGAN"]="/data/BSRGAN"
MOUNTS["${ROOT}/models/RealESRGAN"]="/data/RealESRGAN"
MOUNTS["${ROOT}/models/SwinIR"]="/data/SwinIR"
MOUNTS["${ROOT}/models/ScuNET"]="/data/ScuNET"
MOUNTS["${ROOT}/models/LDSR"]="/data/LDSR"
MOUNTS["${ROOT}/models/hypernetworks"]="/data/Hypernetworks"
MOUNTS["${ROOT}/models/torch_deepdanbooru"]="/data/Deepdanbooru"
MOUNTS["${ROOT}/models/BLIP"]="/data/BLIP"
MOUNTS["${ROOT}/models/midas"]="/data/MiDaS"
MOUNTS["${ROOT}/models/Lora"]="/data/Lora"
MOUNTS["${ROOT}/models/LyCORIS"]="/data/LyCORIS"
MOUNTS["${ROOT}/models/ControlNet"]="/data/ControlNet"
MOUNTS["${ROOT}/models/openpose"]="/data/openpose"
MOUNTS["${ROOT}/models/ModelScope"]="/data/ModelScope"
MOUNTS["${ROOT}/models"]="/data/models"
MOUNTS["${ROOT}/embeddings"]="/data/embeddings"
MOUNTS["${ROOT}/config.json"]="/data/config/auto/config.json"
MOUNTS["${ROOT}/ui-config.json"]="/data/config/auto/ui-config.json"
MOUNTS["${ROOT}/styles.csv"]="/data/config/auto/styles.csv"
MOUNTS["${ROOT}/extensions"]="/data/config/auto/extensions"
MOUNTS["${ROOT}/config_states"]="/data/config/auto/config_states"
# extra hacks
MOUNTS["${ROOT}/repositories/CodeFormer/weights/facelib"]="/data/.cache"
@@ -65,8 +50,21 @@ for to_path in "${!MOUNTS[@]}"; do
echo Mounted $(basename "${from_path}")
done
echo "Installing extension dependencies (if any)"
# because we build our container as root:
chown -R root ~/.cache/
chmod 766 ~/.cache/
shopt -s nullglob
list=(./extensions/*/requirements.txt)
for req in "${list[@]}"; do
pip install -r "$req"
done
if [ -f "/data/config/auto/startup.sh" ]; then
pushd ${ROOT}
echo "Running startup script"
. /data/config/auto/startup.sh
popd
fi

View File

@@ -1,14 +1,11 @@
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'
RUN aria2c -x 5 --dir / --out wheel.whl 'https://github.com/AbdBarho/stable-diffusion-webui-docker/releases/download/6.0.0/xformers-0.0.21.dev544-cp310-cp310-manylinux2014_x86_64-pytorch201.whl'
FROM python:3.10.9-slim
FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
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
@@ -21,13 +18,13 @@ RUN --mount=type=cache,target=/root/.cache/pip \
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
--mount=type=bind,from=xformers,source=/wheel.whl,target=/xformers-0.0.21-cp310-cp310-linux_x86_64.whl \
pip install /xformers-0.0.21-cp310-cp310-linux_x86_64.whl
WORKDIR ${ROOT}
ARG BRANCH=master SHA=884ea653c8d6fe19b3724f45a04a0d74cd881f2f
ARG BRANCH=master SHA=8607c2d42d10b0108de02528e813cc703e58813f
RUN --mount=type=cache,target=/root/.cache/pip \
git fetch && \
git checkout ${BRANCH} && \
@@ -36,8 +33,9 @@ RUN --mount=type=cache,target=/root/.cache/pip \
# add info
COPY . /docker/
RUN cp /docker/extra_model_paths.yaml ${ROOT}
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility NVIDIA_VISIBLE_DEVICES=all
ENV NVIDIA_VISIBLE_DEVICES=all
ENV PYTHONPATH="${PYTHONPATH}:${PWD}" CLI_ARGS=""
EXPOSE 7860
ENTRYPOINT ["/docker/entrypoint.sh"]

View File

@@ -2,34 +2,12 @@
set -Eeuo pipefail
mkdir -vp /data/config/comfy/custom_nodes
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/.cache"]="/data/.cache"
MOUNTS["${ROOT}/input"]="/data/config/comfy/input"
MOUNTS["${ROOT}/output"]="/output/comfy"
for to_path in "${!MOUNTS[@]}"; do

View File

@@ -0,0 +1,25 @@
a111:
base_path: /data
checkpoints: models/Stable-diffusion
configs: models/Stable-diffusion
vae: models/VAE
loras: models/Lora
upscale_models: |
models/RealESRGAN
models/ESRGAN
models/SwinIR
models/GFPGAN
hypernetworks: models/hypernetworks
controlnet: models/ControlNet
gligen: models/GLIGEN
clip: models/CLIPEncoder
embeddings: embeddings
custom_nodes: config/comfy/custom_nodes
# TODO: I am unsure about these, need more testing
# style_models: config/comfy/style_models
# t2i_adapter: config/comfy/t2i_adapter
# clip_vision: config/comfy/clip_vision
# diffusers: config/comfy/diffusers

View File

@@ -1,8 +1,8 @@
cc6cb27103417325ff94f52b7a5d2dde45a7515b25c255d8e396c90014281516 /data/StableDiffusion/v1-5-pruned-emaonly.ckpt
c6bbc15e3224e6973459ba78de4998b80b50112b0ae5b5c67113d56b4e366b19 /data/StableDiffusion/sd-v1-5-inpainting.ckpt
c6a580b13a5bc05a5e16e4dbb80608ff2ec251a162311590c1f34c013d7f3dab /data/VAE/vae-ft-mse-840000-ema-pruned.ckpt
e2cd4703ab14f4d01fd1383a8a8b266f9a5833dacee8e6a79d3bf21a1b6be5ad /data/GFPGAN/GFPGANv1.4.pth
4fa0d38905f75ac06eb49a7951b426670021be3018265fd191d2125df9d682f1 /data/RealESRGAN/RealESRGAN_x4plus.pth
f872d837d3c90ed2e05227bed711af5671a6fd1c9f7d7e91c911a61f155e99da /data/RealESRGAN/RealESRGAN_x4plus_anime_6B.pth
c209caecac2f97b4bb8f4d726b70ac2ac9b35904b7fc99801e1f5e61f9210c13 /data/LDSR/model.ckpt
9d6ad53c5dafeb07200fb712db14b813b527edd262bc80ea136777bdb41be2ba /data/LDSR/project.yaml
cc6cb27103417325ff94f52b7a5d2dde45a7515b25c255d8e396c90014281516 /data/models/Stable-diffusion/v1-5-pruned-emaonly.ckpt
c6bbc15e3224e6973459ba78de4998b80b50112b0ae5b5c67113d56b4e366b19 /data/models/Stable-diffusion/sd-v1-5-inpainting.ckpt
c6a580b13a5bc05a5e16e4dbb80608ff2ec251a162311590c1f34c013d7f3dab /data/models/VAE/vae-ft-mse-840000-ema-pruned.ckpt
e2cd4703ab14f4d01fd1383a8a8b266f9a5833dacee8e6a79d3bf21a1b6be5ad /data/models/GFPGAN/GFPGANv1.4.pth
4fa0d38905f75ac06eb49a7951b426670021be3018265fd191d2125df9d682f1 /data/models/RealESRGAN/RealESRGAN_x4plus.pth
f872d837d3c90ed2e05227bed711af5671a6fd1c9f7d7e91c911a61f155e99da /data/models/RealESRGAN/RealESRGAN_x4plus_anime_6B.pth
c209caecac2f97b4bb8f4d726b70ac2ac9b35904b7fc99801e1f5e61f9210c13 /data/models/LDSR/model.ckpt
9d6ad53c5dafeb07200fb712db14b813b527edd262bc80ea136777bdb41be2ba /data/models/LDSR/project.yaml

View File

@@ -3,11 +3,19 @@
set -Eeuo pipefail
# TODO: maybe just use the .gitignore file to create all of these
mkdir -vp /data/.cache /data/StableDiffusion /data/LyCORIS /data/Codeformer /data/ModelScope /data/GFPGAN /data/ESRGAN /data/BSRGAN /data/RealESRGAN /data/SwinIR /data/LDSR /data/ScuNET /data/embeddings /data/VAE /data/Deepdanbooru /data/MiDaS /data/Lora /data/ControlNet /data/openpose
mkdir -vp /data/.cache \
/data/embeddings \
/data/config/ \
/data/models/ \
/data/models/Stable-diffusion \
/data/models/GFPGAN \
/data/models/RealESRGAN \
/data/models/LDSR \
/data/models/VAE
echo "Downloading, this might take a while..."
aria2c -x 10 --disable-ipv6 --input-file /docker/links.txt --dir /data --continue
aria2c -x 10 --disable-ipv6 --input-file /docker/links.txt --dir /data/models --continue
echo "Checking SHAs..."
@@ -19,11 +27,5 @@ https://github.com/AbdBarho/stable-diffusion-webui-docker/blob/master/LICENSE
https://github.com/CompVis/stable-diffusion/blob/main/LICENSE
https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/master/LICENSE.txt
https://github.com/invoke-ai/InvokeAI/blob/main/LICENSE
https://github.com/sd-webui/stable-diffusion-webui/blob/master/LICENSE
https://github.com/cszn/BSRGAN/blob/main/LICENSE
https://github.com/sczhou/CodeFormer/blob/master/LICENSE
https://github.com/TencentARC/GFPGAN/blob/master/LICENSE
https://github.com/xinntao/Real-ESRGAN/blob/master/LICENSE
https://github.com/xinntao/ESRGAN/blob/master/LICENSE
https://github.com/cszn/SCUNet/blob/main/LICENSE
And licenses of all UIs, third party libraries, and extensions.
EOF

View File

@@ -1,9 +1,9 @@
https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt
out=StableDiffusion/v1-5-pruned-emaonly.ckpt
out=Stable-diffusion/v1-5-pruned-emaonly.ckpt
https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.ckpt
out=VAE/vae-ft-mse-840000-ema-pruned.ckpt
https://huggingface.co/runwayml/stable-diffusion-inpainting/resolve/main/sd-v1-5-inpainting.ckpt
out=StableDiffusion/sd-v1-5-inpainting.ckpt
out=Stable-diffusion/sd-v1-5-inpainting.ckpt
https://github.com/TencentARC/GFPGAN/releases/download/v1.3.4/GFPGANv1.4.pth
out=GFPGAN/GFPGANv1.4.pth
https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth

View File

@@ -1,16 +1,11 @@
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'
RUN aria2c -x 5 --dir / --out wheel.whl 'https://github.com/AbdBarho/stable-diffusion-webui-docker/releases/download/6.0.0/xformers-0.0.21.dev544-cp310-cp310-manylinux2014_x86_64-pytorch201.whl'
FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
FROM python:3.10-slim
ENV DEBIAN_FRONTEND=noninteractive PIP_EXISTS_ACTION=w PIP_PREFER_BINARY=1
RUN --mount=type=cache,target=/root/.cache/pip pip install torch==1.13.1+cu117 torchvision --extra-index-url https://download.pytorch.org/whl/cu117
ENV DEBIAN_FRONTEND=noninteractive PIP_EXISTS_ACTION=w PIP_PREFER_BINARY=1
# patch match:
# https://github.com/invoke-ai/InvokeAI/blob/main/docs/installation/INSTALL_PATCHMATCH.md
@@ -22,37 +17,37 @@ RUN --mount=type=cache,target=/var/cache/apt \
ln -sf opencv4.pc opencv.pc
ENV ROOT=/InvokeAI
RUN git clone https://github.com/invoke-ai/InvokeAI.git ${ROOT}
WORKDIR ${ROOT}
RUN --mount=type=cache,target=/root/.cache/pip \
git reset --hard 4463124bddd221c333d4c70e73aa2949ad35453d && \
pip install .
git reset --hard f3b2e02921927d9317255b1c3811f47bd40a2bf9 && \
pip install -e .
ARG BRANCH=main SHA=50eb02f68be912276a9c106d5e8038a5671a0386
ARG BRANCH=main SHA=f3b2e02921927d9317255b1c3811f47bd40a2bf9
RUN --mount=type=cache,target=/root/.cache/pip \
git fetch && \
git reset --hard && \
git checkout ${BRANCH} && \
git reset --hard ${SHA} && \
pip install -U .
pip install -U -e .
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 -U opencv-python-headless triton /xformers-0.0.17-cp310-cp310-linux_x86_64.whl && \
--mount=type=bind,from=xformers,source=/wheel.whl,target=/xformers-0.0.21-cp310-cp310-linux_x86_64.whl \
pip install -U opencv-python-headless triton /xformers-0.0.21-cp310-cp310-linux_x86_64.whl && \
python3 -c "from patchmatch import patch_match"
COPY . /docker/
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
ENV NVIDIA_VISIBLE_DEVICES=all
ENV PYTHONUNBUFFERED=1 PRELOAD=false HF_HOME=/root/.cache/huggingface CONFIG_DIR=/data/config/invoke CLI_ARGS=""
EXPOSE 7860
ENTRYPOINT ["/docker/entrypoint.sh"]
CMD invokeai --web --host 0.0.0.0 --port 7860 --root_dir ${ROOT} --config ${CONFIG_DIR}/models.yaml --outdir /output/invoke ${CLI_ARGS}
# TODO: make sure the config is persisted between sessions
CMD invokeai --web --host 0.0.0.0 --port 7860 --root_dir ${ROOT} --config ${CONFIG_DIR}/models.yaml \
--outdir /output/invoke --embedding_directory /data/embeddings/ --lora_directory /data/models/Lora \
--no-nsfw_checker --no-safety_checker ${CLI_ARGS}

View File

@@ -4,7 +4,7 @@ set -Eeuo pipefail
declare -A MOUNTS
mkdir -p ${CONFIG_DIR}
mkdir -p ${CONFIG_DIR} ${ROOT}/configs/stable-diffusion/
# cache
MOUNTS["/root/.cache"]=/data/.cache/
@@ -13,15 +13,13 @@ MOUNTS["/root/.cache"]=/data/.cache/
rm -rf ${HF_HOME}/diffusers
# ui specific
MOUNTS["${ROOT}/models/codeformer"]=/data/Codeformer/
MOUNTS["${ROOT}/models/gfpgan/GFPGANv1.4.pth"]=/data/GFPGAN/GFPGANv1.4.pth
MOUNTS["${ROOT}/models/gfpgan/weights"]=/data/GFPGAN/
MOUNTS["${ROOT}/models/realesrgan"]=/data/RealESRGAN/
MOUNTS["${ROOT}/models/codeformer"]=/data/models/Codeformer/
MOUNTS["${ROOT}/models/gfpgan/GFPGANv1.4.pth"]=/data/models/GFPGAN/GFPGANv1.4.pth
MOUNTS["${ROOT}/models/gfpgan/weights"]=/data/models/GFPGAN/
MOUNTS["${ROOT}/models/realesrgan"]=/data/models/RealESRGAN/
MOUNTS["${ROOT}/models/ldm"]=/data/.cache/invoke/ldm/
MOUNTS["${ROOT}/embeddings"]=/data/embeddings/
# hacks
for to_path in "${!MOUNTS[@]}"; do

View File

@@ -1,40 +0,0 @@
FROM python:3.8-slim
ENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1
RUN --mount=type=cache,target=/root/.cache/pip pip install torch==1.13.0 torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
RUN apt-get update && apt install gcc libsndfile1 ffmpeg build-essential zip unzip git -y && apt-get clean
RUN --mount=type=cache,target=/root/.cache/pip \
git config --global http.postBuffer 1048576000 && \
git clone https://github.com/Sygil-Dev/sygil-webui.git stable-diffusion && \
cd stable-diffusion && \
git reset --hard 5291437085bddd16d752f811b6552419a2044d12 && \
pip install -r requirements.txt
ARG BRANCH=master SHA=571fb897edd58b714bb385dfaa1ad59aecef8bc7
RUN --mount=type=cache,target=/root/.cache/pip \
cd stable-diffusion && \
git fetch && \
git checkout ${BRANCH} && \
git reset --hard ${SHA} && \
pip install -r requirements.txt
RUN --mount=type=cache,target=/root/.cache/pip pip install -U 'transformers>=4.24'
# add info
COPY . /docker/
RUN python /docker/info.py /stable-diffusion/frontend/frontend.py && \
chmod +x /docker/mount.sh /docker/run.sh && \
# streamlit \
sed -i -- 's/8501/7860/g' /stable-diffusion/.streamlit/config.toml
WORKDIR /stable-diffusion
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
ENV NVIDIA_VISIBLE_DEVICES=all
ENV PYTHONPATH="${PYTHONPATH}:${PWD}" STREAMLIT_SERVER_HEADLESS=true USE_STREAMLIT=0 CLI_ARGS=""
EXPOSE 7860
CMD /docker/mount.sh && /docker/run.sh

View File

@@ -1,13 +0,0 @@
import sys
from pathlib import Path
file = Path(sys.argv[1])
file.write_text(
file.read_text()\
.replace('<p>For help and advanced usage guides,', """
<p>
Created using <a href="https://github.com/AbdBarho/stable-diffusion-webui-docker">stable-diffusion-webui-docker</a>.
</p>
<p>For help and advanced usage guides,
""", 1)
)

View File

@@ -1,32 +0,0 @@
#!/bin/bash
set -Eeuo pipefail
declare -A MOUNTS
ROOT=/stable-diffusion/src
# cache
MOUNTS["/root/.cache"]=/data/.cache
# ui specific
MOUNTS["${PWD}/models/realesrgan"]=/data/RealESRGAN
MOUNTS["${PWD}/models/ldsr"]=/data/LDSR
MOUNTS["${PWD}/models/custom"]=/data/StableDiffusion
# hack
MOUNTS["${PWD}/models/gfpgan/GFPGANv1.3.pth"]=/data/GFPGAN/GFPGANv1.4.pth
MOUNTS["${PWD}/models/gfpgan/GFPGANv1.4.pth"]=/data/GFPGAN/GFPGANv1.4.pth
MOUNTS["${PWD}/gfpgan/weights"]=/data/.cache
for to_path in "${!MOUNTS[@]}"; do
set -Eeuo pipefail
from_path="${MOUNTS[${to_path}]}"
rm -rf "${to_path}"
mkdir -p "$(dirname "${to_path}")"
ln -sT "${from_path}" "${to_path}"
echo Mounted $(basename "${from_path}")
done
# streamlit config
ln -sf /docker/userconfig_streamlit.yaml /stable-diffusion/configs/webui/userconfig_streamlit.yaml

View File

@@ -1,10 +0,0 @@
#!/bin/bash
set -Eeuo pipefail
echo "USE_STREAMLIT = ${USE_STREAMLIT}"
if [ "${USE_STREAMLIT}" == "1" ]; then
python -u -m streamlit run scripts/webui_streamlit.py
else
python3 -u scripts/webui.py --outdir /output --ckpt /data/StableDiffusion/v1-5-pruned-emaonly.ckpt ${CLI_ARGS}
fi

View File

@@ -1,11 +0,0 @@
# https://github.com/Sygil-Dev/sygil-webui/blob/master/configs/webui/webui_streamlit.yaml
general:
version: 1.24.6
outdir: /output
default_model: "Stable Diffusion v1.5"
default_model_path: /data/StableDiffusion/v1-5-pruned-emaonly.ckpt
outdir_txt2img: /output/txt2img
outdir_img2img: /output/img2img
outdir_img2txt: /output/img2txt
optimized: True
optimized_turbo: True