Compare commits

12 Commits

Author SHA1 Message Date
lainedfles
815f607645 Merge aa03ba02ac into 802d0bcd68 2024-11-18 07:23:56 +00:00
Self Denial
aa03ba02ac refactor: Simplify Docker configuration by using .env file and streamline user/group settings
This commit refactors the `docker-compose.yml` and `Dockerfile` to simplify the management of environment variables and user/group configurations. The following changes were made:

1. **Environment Variables via `.env` File:**
   - Added `env_file: .env` in the base service configuration within `docker-compose.yml`. This allows for centralized management of environment variables, making it easier to configure different environments without modifying Docker files directly.

2. **User/Group Configuration Simplification:**
   - Removed hardcoded user and group settings (`USE_UID`, `USE_GID`, `USE_USER`, `USE_GROUP`) from the `docker-compose.yml` file.
   - Updated the `Dockerfile` to use default values of `0` for `USE_UID` and `USE_GID`, and `root` for `USE_USER` and `USE_GROUP`. This aligns with common practices where root is often used in containerized environments unless specified otherwise.

3. **Conditional Dependency Handling:**
   - Introduced conditional logic to enable dependencies like Krita based on the value of `USE_KRITA`.
   - Simplified the environment variable assignments within the Dockerfile, ensuring that only necessary variables are set.

4. **Entrypoint Script Enhancements:**
   - Added a feature in the `entrypoint.sh` script to update custom nodes by pulling the latest changes from their respective repositories if `UPDATE_CUSTOM_NODES` is set to `true`.

These changes improve the maintainability and flexibility of the Docker setup, making it easier to adapt to different deployment scenarios.
2024-11-18 00:23:30 -07:00
Self Denial
947ef17710 feat: support local .env file with docker-compose 2024-11-17 21:24:16 -07:00
Self Denial
6834512594 refactor: Support running Docker container as root or non-root user
This commit introduces flexibility in the Docker setup by allowing the container to run either as the `root` user or a specified non-root user. It updates both the `docker-compose.yml` and `Dockerfile` to include environment variables for setting the user ID, group ID, username, and group name. Additionally, it modifies the entrypoint script to handle these configurations appropriately, ensuring compatibility with different user setups.
2024-11-17 20:12:20 -07:00
Self Denial
c6b7d2f79a fix: return to sh 2024-11-16 21:35:12 -07:00
Self Denial
dfe8078b1b fix: use bash with bash syntax! 2024-11-16 21:29:32 -07:00
Self Denial
3fe1785653 fix: execute krita model download with proper path 2024-11-16 20:44:29 -07:00
Self Denial
685ae21d57 fix: install libgl dependency for KRITA & CNAUX 2024-11-16 00:16:21 -07:00
Self Denial
ee10e058cc Fix *upscale_models* path for USE_KRITA=true 2024-10-29 15:38:49 -06:00
Self Denial
0f3187505b feat: Add support for Krita AI Diffusion support
This commit adds support for integrating Krita AI Diffusion models and nodes into the Comfy image editing application. It includes the following changes:

- Downloads recommended models for Krita AI Diffusion if enabled
- Symlinks the downloaded upscale models into the models directory
- Adds environment variables to enable/disable dependancy node packs
- Clones and sets up the required Git repositories for those node packs if enabled
- Installs additional dependencies like aiohttp and tqdm if Krita AI Diffusion is used

These changes allow Comfy to leverage the powerful image generation and editing capabilities provided by the Krita AI Diffusion project. Users can now access advanced features like outpainting, inpainting, upscaling, etc. within the Comfy UI.

The commit also improves the build process by using a cache for pip installs and specifying types for mounted volumes in Docker for better performance and reproducibility.
2024-10-29 01:36:21 -06:00
Self Denial
25d8d0c008 Update, more ComfyUI Dockerfile features & bugfix
- Update base image to pytorch 2.3.1
    - Fix missing comment line escape
    - Support [krita-ai-diffusion](https://github.com/Acly/krita-ai-diffusion/wiki/ComfyUI-Setup) (`USE_KRITA=true`)
      This enables the following custom nodes (including comfyui_controlnet_aux):
      * **ComfyUI_IPAdapter_plus** (`USE_IPAPLUS=true`)
      * **comfyui-inpaint-nodes** (`USE_INPAINT=true`)
      * **comfyui-tooling-nodes** (`USE_TOOLING=true`)
2024-10-28 22:40:37 -06:00
Self Denial
6a0366cf45 New ComfyUI Dockerfile features
- Non-root default
- Use `git describe` to automatically use latest ComfyUI tag (or `USE_EDGE=true` variable for latest commit)
- Support custom_nodes:
  * **ComfyUI-GGUF support** (`USE_GGUF=true`)
  * **x-flux-comfyui support** (`USE_XFLUX=true`)
  * **comfyui_controlnet_aux support** (`USE_CNAUX=false`)
2024-09-29 03:45:53 -06:00
4 changed files with 43 additions and 35 deletions

0
.env
View File

1
.gitignore vendored
View File

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

View File

@@ -25,14 +25,23 @@ ARG USE_INPAINT=false
# comfyui-tooling-nodes
ARG USE_TOOLING=false
ENV USE_CNAUX=$USE_CNAUX USE_IPAPLUS=$USE_IPAPLUS
ENV USE_INPAINT=$USE_INPAINT USE_TOOLING=$USE_TOOLING
# Support both root and non-root
ARG SET_USER=$USE_USER SET_GROUP=$USE_GROUP
RUN if [ ${USE_UID} -eq 0 ]; then SET_USER=root; fi; \
if [ ${USE_GID} -eq 0 ]; then SET_GROUP=root; fi
# Enable required dependencies for Krita
ARG SET_CNAUX=$USE_CNAUX SET_IPAPLUS=$USE_IPAPLUS
ARG SET_INPAINT=$USE_INPAINT SET_TOOLING=$USE_TOOLING
RUN if [ ${USE_KRITA} = "true" ]; then SET_CNAUX="true"; SET_IPAPLUS="true"; \
SET_INPAINT="true"; SET_TOOLING="true"; fi
ENV USE_USER=$SET_USER USE_GROUP=$SET_GROUP USE_CNAUX=$SET_CNAUX
ENV USE_IPAPLUS=$SET_IPAPLUS USE_INPAINT=$SET_INPAINT USE_TOOLING=$SET_TOOLING
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/$USE_USER/.cache USE_KRITA=$USE_KRITA
RUN mkdir -p ${ROOT} ${CACHE}/pip /home/${USE_USER}
# User/Group
RUN if [ ${USE_GID} -ne 0 ]; then \
groupadd -r ${USE_GROUP} -g ${USE_GID}; \
@@ -40,9 +49,10 @@ RUN if [ ${USE_GID} -ne 0 ]; then \
if [ ${USE_GID} -ne 0 ]; then \
useradd --no-log-init -m -r -g ${USE_GROUP} ${USE_USER} -u ${USE_UID}; \
fi; \
chown -R ${USE_UID}:${USE_GID} ${ROOT} ${CACHE} /home/${USE_USER}
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 python3-pip
RUN apt-get update && apt-get install -y git
RUN if [ "${USE_XFLUX}" = "true" ] || [ "${USE_KRITA}" = "true" ] || [ "${USE_CNAUX}" = "true" ]; then \
apt-get install -y libgl1-mesa-glx python3-opencv; \
fi
@@ -62,10 +72,10 @@ RUN --mount=type=cache,uid=${USE_UID},gid=${USE_GID},target=${CACHE} \
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 && \
pip --cache-dir=${CACHE}/pip install aiohttp tqdm && cd ..; \
git submodule update --init && cd ..; \
fi; \
if [ "${USE_GGUF}" = "true" ]; then \
git clone https://github.com/city96/ComfyUI-GGUF.git && \
@@ -77,23 +87,23 @@ RUN --mount=type=cache,uid=${USE_UID},gid=${USE_GID},target=${CACHE} \
cd x-flux-comfyui && git checkout main && \
pip --cache-dir=${CACHE}/pip install -r requirements.txt && cd ..; \
fi; \
if [ "${USE_CNAUX}" = "true" ] || [ "${USE_KRITA}" = "true" ]; then \
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" ] || [ "${USE_KRITA}" = "true" ]; then \
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" ] || [ "${USE_KRITA}" = "true" ]; then \
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" ] || [ "${USE_KRITA}" = "true" ]; then \
if [ "${USE_TOOLING}" = "true" ]; then \
git clone https://github.com/Acly/comfyui-tooling-nodes.git && \
cd comfyui-tooling-nodes && git checkout main && cd ..; \
fi
@@ -105,4 +115,4 @@ RUN chmod u+x /docker/entrypoint.sh && cp /docker/extra_model_paths.yaml ${ROOT}
ENV NVIDIA_VISIBLE_DEVICES=all PYTHONPATH="${PYTHONPATH}:${PWD}" CLI_ARGS=""
EXPOSE 7860
ENTRYPOINT ["/docker/entrypoint.sh"]
CMD python3 -u main.py --listen --port 7860 ${CLI_ARGS}
CMD python -u main.py --listen --port 7860 ${CLI_ARGS}

View File

@@ -26,53 +26,52 @@ done
if [ "${UPDATE_CUSTOM_NODES:-false}" = "true" ]; then
find /data/config/comfy/custom_nodes/ -mindepth 1 -maxdepth 1 -type d | while read NODE
do echo "---- ${NODE##*/} ----"
set +e
cd "$NODE" && git pull; cd ..;
set -e
cd $NODE && git pull; cd ..
done
fi
if [ "${USE_KRITA}" = "true" ]; then
[ -d "${ROOT}/models/upscale_models" ] && rm -rf "${ROOT}/models/upscale_models"
if [ "${KRITA_DOWNLOAD_MODELS:-false}" = "true" ]; then
cd "${ROOT}/krita-ai-diffusion/scripts" && python download_models.py --verbose --retry-attempts 10 --continue-on-error --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 && cd ..
fi
if [ "${KRITA_DOWNLOAD_MODELS:-false}" = "true" ]; then
cd "${ROOT}/krita-ai-diffusion/scripts" && python3 download_models.py --verbose --retry-attempts 10 --continue-on-error --recommended /data && cd -
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" ] && cp -a "${ROOT}/ComfyUI-GGUF" "${CUSTOM_NODES}"/
[ ! -e "${CUSTOM_NODES}/ComfyUI-GGUF" ] && mv "${ROOT}/ComfyUI-GGUF" "${CUSTOM_NODES}"/
fi
if [ "${USE_XFLUX}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/x-flux-comfyui" ] && cp -a "${ROOT}/x-flux-comfyui" "${CUSTOM_NODES}"/
[ ! -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 && \
python3 -c 'import sys; from urllib.request import urlopen; from pathlib import Path; Path(sys.argv[2]).write_bytes(urlopen(sys.argv[1]).read())' \
python -c 'import sys; from urllib.request import urlopen; from pathlib import Path; Path(sys.argv[2]).write_bytes(urlopen(sys.argv[1]).read())' \
"https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/model.safetensors" "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 && \
python3 -c 'import sys; from urllib.request import urlopen; from pathlib import Path; Path(sys.argv[2]).write_bytes(urlopen(sys.argv[1]).read())' \
python -c 'import sys; from urllib.request import urlopen; from pathlib import Path; Path(sys.argv[2]).write_bytes(urlopen(sys.argv[1]).read())' \
"https://huggingface.co/XLabs-AI/flux-ip-adapter/resolve/main/ip_adapter.safetensors" "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" ] || [ "${USE_KRITA}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/comfyui_controlnet_aux" ] && cp -a "${ROOT}/comfyui_controlnet_aux" "${CUSTOM_NODES}"/
if [ "${USE_CNAUX}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/comfyui_controlnet_aux" ] && mv "${ROOT}/comfyui_controlnet_aux" "${CUSTOM_NODES}"/
fi
if [ "${USE_IPAPLUS}" = "true" ] || [ "${USE_KRITA}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/ComfyUI_IPAdapter_plus" ] && cp -a "${ROOT}/ComfyUI_IPAdapter_plus" "${CUSTOM_NODES}"/
if [ "${USE_IPAPLUS}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/ComfyUI_IPAdapter_plus" ] && mv "${ROOT}/ComfyUI_IPAdapter_plus" "${CUSTOM_NODES}"/
fi
if [ "${USE_INPAINT}" = "true" ] || [ "${USE_KRITA}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/comfyui-inpaint-nodes" ] && cp -a "${ROOT}/comfyui-inpaint-nodes" "${CUSTOM_NODES}"/
if [ "${USE_INPAINT}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/comfyui-inpaint-nodes" ] && mv "${ROOT}/comfyui-inpaint-nodes" "${CUSTOM_NODES}"/
fi
if [ "${USE_TOOLING}" = "true" ] || [ "${USE_KRITA}" = "true" ]; then
[ ! -e "${CUSTOM_NODES}/comfyui-tooling-nodes" ] && cp -a "${ROOT}/comfyui-tooling-nodes" "${CUSTOM_NODES}"/
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}"
pushd ${ROOT}
. /data/config/comfy/startup.sh
popd
fi