mirror of
				https://github.com/AbdBarho/stable-diffusion-webui-docker.git
				synced 2025-11-03 18:53:14 -05:00 
			
		
		
		
	Compare commits
	
		
			8 Commits
		
	
	
		
			master
			...
			c6b7d2f79a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c6b7d2f79a | ||
| 
						 | 
					dfe8078b1b | ||
| 
						 | 
					3fe1785653 | ||
| 
						 | 
					685ae21d57 | ||
| 
						 | 
					ee10e058cc | ||
| 
						 | 
					0f3187505b | ||
| 
						 | 
					25d8d0c008 | ||
| 
						 | 
					6a0366cf45 | 
@@ -1,19 +1,92 @@
 | 
			
		||||
FROM pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime
 | 
			
		||||
FROM pytorch/pytorch:2.3.1-cuda12.1-cudnn8-runtime
 | 
			
		||||
 | 
			
		||||
ENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1
 | 
			
		||||
# Limited system user UID
 | 
			
		||||
ARG USE_UID=991
 | 
			
		||||
# Limited system user GID
 | 
			
		||||
ARG USE_GID=991
 | 
			
		||||
# Latest tag or bleeding edge commit
 | 
			
		||||
ARG USE_EDGE=false
 | 
			
		||||
# ComfyUI-GGUF
 | 
			
		||||
ARG USE_GGUF=false
 | 
			
		||||
# x-flux-comfyui
 | 
			
		||||
ARG USE_XFLUX=false
 | 
			
		||||
# comfyui_controlnet_aux
 | 
			
		||||
ARG USE_CNAUX=false
 | 
			
		||||
# krita-ai-diffusion
 | 
			
		||||
ARG USE_KRITA=false
 | 
			
		||||
# ComfyUI_IPAdapter_plus
 | 
			
		||||
ARG USE_IPAPLUS=false
 | 
			
		||||
# comfyui-inpaint-nodes
 | 
			
		||||
ARG USE_INPAINT=false
 | 
			
		||||
# comfyui-tooling-nodes
 | 
			
		||||
ARG USE_TOOLING=false
 | 
			
		||||
 | 
			
		||||
RUN apt-get update && apt-get install -y git && apt-get clean
 | 
			
		||||
ENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1 USE_EDGE=$USE_EDGE
 | 
			
		||||
ENV USE_GGUF=$USE_GGUF USE_XFLUX=$USE_XFLUX ROOT=/stable-diffusion
 | 
			
		||||
ENV CACHE=/home/app/.cache USE_CNAUX=$USE_CNAUX USE_KRITA=$USE_KRITA
 | 
			
		||||
ENV USE_IPAPLUS=$USE_IPAPLUS USE_INPAINT=$USE_INPAINT USE_TOOLING=$USE_TOOLING
 | 
			
		||||
 | 
			
		||||
ENV ROOT=/stable-diffusion
 | 
			
		||||
RUN --mount=type=cache,target=/root/.cache/pip \
 | 
			
		||||
# User/Group
 | 
			
		||||
RUN groupadd -r app -g ${USE_GID} && useradd --no-log-init -m -r -g app app -u ${USE_UID} && \
 | 
			
		||||
  mkdir -p ${ROOT} && chown ${USE_UID}:${USE_GID} ${ROOT} && mkdir -p ${CACHE}/pip && chown -R ${USE_UID}:${USE_GID} ${CACHE}
 | 
			
		||||
RUN --mount=type=cache,uid=${USE_UID},gid=${USE_GID},target=${CACHE} chown -R ${USE_UID}:${USE_UID} ${CACHE}
 | 
			
		||||
 | 
			
		||||
RUN apt-get update && apt-get install -y git && (if [ "${USE_XFLUX}" = "true" ] || [ "${USE_KRITA}" = "true" ] || [ "${USE_CNAUX}" = "true" ]; then apt-get install -y libgl1-mesa-glx python3-opencv; fi) && apt-get clean
 | 
			
		||||
 | 
			
		||||
USER app:app
 | 
			
		||||
ENV PATH="${PATH}:/home/app/.local/bin"
 | 
			
		||||
 | 
			
		||||
RUN --mount=type=cache,uid=${USE_UID},gid=${USE_GID},target=${CACHE} pip --cache-dir=${CACHE}/pip install -U pip
 | 
			
		||||
 | 
			
		||||
RUN --mount=type=cache,uid=${USE_UID},gid=${USE_GID},target=${CACHE} \
 | 
			
		||||
  git clone https://github.com/comfyanonymous/ComfyUI.git ${ROOT} && \
 | 
			
		||||
  cd ${ROOT} && \
 | 
			
		||||
  git checkout master && \
 | 
			
		||||
  git reset --hard 276f8fce9f5a80b500947fb5745a4dde9e84622d && \
 | 
			
		||||
  pip install -r requirements.txt
 | 
			
		||||
  bash -c 'VERSION=$(git describe --tags --abbrev=0) && \
 | 
			
		||||
  if [ "${USE_EDGE}" = "true" ]; then VERSION=$(git describe --abbrev=7); fi && \
 | 
			
		||||
  git reset --hard ${VERSION}' && \
 | 
			
		||||
  pip --cache-dir=${CACHE}/pip install -r requirements.txt && \
 | 
			
		||||
  if [ "${USE_KRITA}" = "true" ]; then \
 | 
			
		||||
    pip --cache-dir=${CACHE}/pip install aiohttp tqdm && \
 | 
			
		||||
    git clone https://github.com/Acly/krita-ai-diffusion.git && \
 | 
			
		||||
    cd krita-ai-diffusion && git checkout main && \
 | 
			
		||||
    git submodule update --init && cd ..; \
 | 
			
		||||
    export USE_CNAUX="true" USE_IPAPLUS="true" \
 | 
			
		||||
    USE_INPAINT="true" USE_TOOLING="true"; \
 | 
			
		||||
  fi; \
 | 
			
		||||
  if [ "${USE_GGUF}" = "true" ]; then \
 | 
			
		||||
    git clone https://github.com/city96/ComfyUI-GGUF.git && \
 | 
			
		||||
    cd ComfyUI-GGUF && git checkout main && \
 | 
			
		||||
    pip --cache-dir=${CACHE}/pip install -r requirements.txt && cd ..; \
 | 
			
		||||
  fi; \
 | 
			
		||||
  if [ "${USE_XFLUX}" = "true" ]; then \
 | 
			
		||||
    git clone https://github.com/XLabs-AI/x-flux-comfyui.git && \
 | 
			
		||||
    cd x-flux-comfyui && git checkout main && \
 | 
			
		||||
    pip --cache-dir=${CACHE}/pip install -r requirements.txt && cd ..; \
 | 
			
		||||
  fi; \
 | 
			
		||||
  if [ "${USE_CNAUX}" = "true" ]; then \
 | 
			
		||||
    git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git && \
 | 
			
		||||
    cd comfyui_controlnet_aux && git checkout main && \
 | 
			
		||||
    pip --cache-dir=${CACHE}/pip install -r requirements.txt && \
 | 
			
		||||
    # This extra step to separate onnxruntime installation is required to restore onnx cuda support \
 | 
			
		||||
    pip --cache-dir=${CACHE}/pip install onnxruntime && pip --cache-dir=${CACHE}/pip install onnxruntime-gpu && cd ..; \
 | 
			
		||||
  fi; \
 | 
			
		||||
  if [ "${USE_IPAPLUS}" = "true" ]; then \
 | 
			
		||||
    git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus.git && \
 | 
			
		||||
    cd ComfyUI_IPAdapter_plus && git checkout main && cd ..; \
 | 
			
		||||
  fi; \
 | 
			
		||||
  if [ "${USE_INPAINT}" = "true" ]; then \
 | 
			
		||||
    git clone https://github.com/Acly/comfyui-inpaint-nodes.git && \
 | 
			
		||||
    cd comfyui-inpaint-nodes && git checkout main && \
 | 
			
		||||
    pip --cache-dir=${CACHE}/pip install opencv-python && cd ..; \
 | 
			
		||||
  fi; \
 | 
			
		||||
  if [ "${USE_TOOLING}" = "true" ]; then \
 | 
			
		||||
    git clone https://github.com/Acly/comfyui-tooling-nodes.git && \
 | 
			
		||||
    cd comfyui-tooling-nodes && git checkout main && cd ..; \
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
WORKDIR ${ROOT}
 | 
			
		||||
COPY . /docker/
 | 
			
		||||
COPY --chown=${USE_UID}:${USE_GID} . /docker/
 | 
			
		||||
RUN chmod u+x /docker/entrypoint.sh && cp /docker/extra_model_paths.yaml ${ROOT}
 | 
			
		||||
 | 
			
		||||
ENV NVIDIA_VISIBLE_DEVICES=all PYTHONPATH="${PYTHONPATH}:${PWD}" CLI_ARGS=""
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,12 @@
 | 
			
		||||
 | 
			
		||||
set -Eeuo pipefail
 | 
			
		||||
 | 
			
		||||
mkdir -vp /data/config/comfy/custom_nodes
 | 
			
		||||
CUSTOM_NODES="/data/config/comfy/custom_nodes"
 | 
			
		||||
mkdir -vp "${CUSTOM_NODES}"
 | 
			
		||||
 | 
			
		||||
declare -A MOUNTS
 | 
			
		||||
 | 
			
		||||
MOUNTS["/root/.cache"]="/data/.cache"
 | 
			
		||||
MOUNTS["${CACHE}"]="/data/.cache"
 | 
			
		||||
MOUNTS["${ROOT}/input"]="/data/config/comfy/input"
 | 
			
		||||
MOUNTS["${ROOT}/output"]="/output/comfy"
 | 
			
		||||
 | 
			
		||||
@@ -22,6 +23,47 @@ for to_path in "${!MOUNTS[@]}"; do
 | 
			
		||||
  echo Mounted $(basename "${from_path}")
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [ "${USE_KRITA}" = "true" ]; then
 | 
			
		||||
  if [ "${KRITA_DOWNLOAD_MODELS:-false}" = "true" ]; then
 | 
			
		||||
    cd "${ROOT}/krita-ai-diffusion/scripts" && python download_models.py --recommended /data && cd ..
 | 
			
		||||
  fi
 | 
			
		||||
  [ -d "${ROOT}/models/upscale_models" ] && mv -v "${ROOT}/models/upscale_models" "${ROOT}/models/upscale_models.stock"
 | 
			
		||||
  if [ ! -L "${ROOT}/models/upscale_models" ]; then
 | 
			
		||||
    cd "${ROOT}/models"
 | 
			
		||||
    ln -sfT /data/models/upscale_models upscale_models
 | 
			
		||||
  fi
 | 
			
		||||
  export USE_CNAUX="true" USE_IPAPLUS="true" USE_INPAINT="true"; USE_TOOLING="true"
 | 
			
		||||
fi
 | 
			
		||||
if [ "${USE_GGUF}" = "true" ]; then
 | 
			
		||||
  [ ! -e "${CUSTOM_NODES}/ComfyUI-GGUF" ] && mv "${ROOT}/ComfyUI-GGUF" "${CUSTOM_NODES}"/
 | 
			
		||||
fi
 | 
			
		||||
if [ "${USE_XFLUX}" = "true" ]; then
 | 
			
		||||
  [ ! -e "${CUSTOM_NODES}/x-flux-comfyui" ] && mv "${ROOT}/x-flux-comfyui" "${CUSTOM_NODES}"/
 | 
			
		||||
  [ ! -e "/data/models/clip_vision" ] && mkdir -p /data/models/clip_vision
 | 
			
		||||
  [ ! -e "/data/models/clip_vision/model.safetensors" ] && cd /data/models/clip_vision && \
 | 
			
		||||
    python -c 'import sys; from urllib.request import urlopen; from pathlib import Path; Path(sys.argv[2]).write_bytes(urlopen("".join([sys.argv[1],sys.argv[2]])).read())' \
 | 
			
		||||
    "https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/" "model.safetensors"
 | 
			
		||||
  [ ! -e "/data/models/xlabs" ] && mkdir -p /data/models/xlabs/{ipadapters,loras,controlnets}
 | 
			
		||||
  [ ! -e "/data/models/xlabs/ipadapters/flux-ip-adapter.safetensors" ] && cd /data/models/xlabs/ipadapters && \
 | 
			
		||||
    python -c 'import sys; from urllib.request import urlopen; from pathlib import Path; Path(sys.argv[2]).write_bytes(urlopen("".join([sys.argv[1],sys.argv[2]])).read())' \
 | 
			
		||||
    "https://huggingface.co/XLabs-AI/flux-ip-adapter/resolve/main/" "flux-ip-adapter.safetensors"
 | 
			
		||||
  [ -d "${ROOT}/models/xlabs" ] && rm -rf "${ROOT}/models/xlabs"
 | 
			
		||||
  [ ! -e "${ROOT}/models/xlabs" ] && cd "${ROOT}/models" && ln -sT /data/models/xlabs xlabs && cd ..
 | 
			
		||||
fi
 | 
			
		||||
if [ "${USE_CNAUX}" = "true" ]; then
 | 
			
		||||
  [ ! -e "${CUSTOM_NODES}/comfyui_controlnet_aux" ] && mv "${ROOT}/comfyui_controlnet_aux" "${CUSTOM_NODES}"/
 | 
			
		||||
fi
 | 
			
		||||
if [ "${USE_IPAPLUS}" = "true" ]; then
 | 
			
		||||
  [ ! -e "${CUSTOM_NODES}/ComfyUI_IPAdapter_plus" ] && mv "${ROOT}/ComfyUI_IPAdapter_plus" "${CUSTOM_NODES}"/
 | 
			
		||||
fi
 | 
			
		||||
if [ "${USE_INPAINT}" = "true" ]; then
 | 
			
		||||
  [ ! -e "${CUSTOM_NODES}/comfyui-inpaint-nodes" ] && mv "${ROOT}/comfyui-inpaint-nodes" "${CUSTOM_NODES}"/
 | 
			
		||||
fi
 | 
			
		||||
if [ "${USE_TOOLING}" = "true" ]; then
 | 
			
		||||
  [ ! -e "${CUSTOM_NODES}/comfyui-tooling-nodes" ] && mv "${ROOT}/comfyui-tooling-nodes" "${CUSTOM_NODES}"/
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -f "/data/config/comfy/startup.sh" ]; then
 | 
			
		||||
  pushd ${ROOT}
 | 
			
		||||
  . /data/config/comfy/startup.sh
 | 
			
		||||
 
 | 
			
		||||
@@ -15,11 +15,15 @@ a111:
 | 
			
		||||
  gligen: models/GLIGEN
 | 
			
		||||
  clip: models/CLIPEncoder
 | 
			
		||||
  embeddings: embeddings
 | 
			
		||||
  unet: models/unet
 | 
			
		||||
  clip_vision: models/clip_vision
 | 
			
		||||
  xlabs: models/xlabs
 | 
			
		||||
  inpaint: models/inpaint
 | 
			
		||||
  ipadapter: models/ipadapter
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user