From 18fb90ea22aed7dc4b37465527d5ce37871a7bee Mon Sep 17 00:00:00 2001 From: Paul Lamb Date: Sat, 30 Dec 2023 20:34:47 -0800 Subject: [PATCH] First pass at getting Fooocus working --- docker-compose.yml | 8 ++++++ services/fooocus/Dockerfile | 48 ++++++++++++++++++++++++++++++++++ services/fooocus/config.txt | 12 +++++++++ services/fooocus/entrypoint.sh | 38 +++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 services/fooocus/Dockerfile create mode 100644 services/fooocus/config.txt create mode 100644 services/fooocus/entrypoint.sh diff --git a/docker-compose.yml b/docker-compose.yml index 93fba1d..a9a4147 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -71,3 +71,11 @@ services: deploy: {} environment: - CLI_ARGS=--cpu + + fooocus: &fooocus + <<: *base_service + profiles: ["fooocus"] + build: ./services/fooocus/ + image: sd-fooocus:3 + environment: + - CLI_ARGS= \ No newline at end of file diff --git a/services/fooocus/Dockerfile b/services/fooocus/Dockerfile new file mode 100644 index 0000000..5f6e120 --- /dev/null +++ b/services/fooocus/Dockerfile @@ -0,0 +1,48 @@ +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/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 + +ENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1 + +RUN apt-get update && apt-get install -y git && apt-get clean + +# add some packages for some custom nodes in comfyui +RUN apt-get install 'libglib2.0-0' -y +RUN apt-get update +RUN apt-get install 'libgl1-mesa-glx' -y +RUN apt-get install 'python-dev' -y + +ARG BRANCH=main SHA=8e62a72a63b30a3067d1a1bc3f8d226824bd9283 + +ENV ROOT=/stable-diffusion +RUN --mount=type=cache,target=/root/.cache/pip \ + git clone https://github.com/lllyasviel/Fooocus.git ${ROOT} && \ + cd ${ROOT} && \ + git checkout ${BRANCH} && \ + git reset --hard ${SHA} && \ + 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.21-cp310-cp310-linux_x86_64.whl \ + pip install /xformers-0.0.21-cp310-cp310-linux_x86_64.whl + +WORKDIR ${ROOT} + +RUN --mount=type=cache,target=/root/.cache/pip \ + git fetch && \ + git checkout ${BRANCH} && \ + git reset --hard ${SHA} && \ + pip install -r requirements_versions.txt + +# add info +COPY . /docker/ +RUN chmod u+x /docker/entrypoint.sh + +#ENV NVIDIA_VISIBLE_DEVICES=all +#ENV PYTHONPATH="${PYTHONPATH}:${PWD}" CLI_ARGS="" +EXPOSE 7860 +ENTRYPOINT ["/docker/entrypoint.sh"] +CMD python -u entry_with_update.py --listen --port 7860 ${CLI_ARGS} diff --git a/services/fooocus/config.txt b/services/fooocus/config.txt new file mode 100644 index 0000000..ddced71 --- /dev/null +++ b/services/fooocus/config.txt @@ -0,0 +1,12 @@ +{ + "path_checkpoints": "/stable-diffusion/models/checkpoints", + "path_loras": "/stable-diffusion/models/loras", + "path_embeddings": "/stable-diffusion/models/embeddings", + "path_vae_approx": "/stable-diffusion/models/vae_approx", + "path_upscale_models": "/stable-diffusion/models/upscale_models", + "path_inpaint": "/stable-diffusion/models/inpaint", + "path_controlnet": "/stable-diffusion/models/controlnet", + "path_clip_vision": "/stable-diffusion/models/clip_vision", + "path_fooocus_expansion": "/stable-diffusion/models/prompt_expansion/fooocus_expansion", + "path_outputs": "/stable-diffusion/outputs" +} \ No newline at end of file diff --git a/services/fooocus/entrypoint.sh b/services/fooocus/entrypoint.sh new file mode 100644 index 0000000..3cdc921 --- /dev/null +++ b/services/fooocus/entrypoint.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +set -Eeuo pipefail + +declare -A MOUNTS + +#mkdir -p ${CONFIG_DIR} ${ROOT}/configs/stable-diffusion/ + +# cache +#MOUNTS["/root/.cache"]=/data/.cache/ + +# this is really just a hack to avoid migrations +#rm -rf ${HF_HOME}/diffusers + +# ui specific +#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/ + +# hacks + +for to_path in "${!MOUNTS[@]}"; do + set -Eeuo pipefail + from_path="${MOUNTS[${to_path}]}" + rm -rf "${to_path}" + mkdir -p "$(dirname "${to_path}")" + # ends with slash, make it! + if [[ "$from_path" == */ ]]; then + mkdir -vp "$from_path" + fi + + ln -sT "${from_path}" "${to_path}" + echo Mounted $(basename "${from_path}") +done + +exec "$@"