FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 ENV DEBIAN_FRONTEND=noninteractive \ TZ=America/Los_Angeles ARG USE_PERSISTENT_DATA USER root RUN apt-get update && apt-get install -y \ git \ make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev git-lfs \ ffmpeg libsm6 libxext6 cmake libgl1-mesa-glx \ nginx netcat-traditional \ && rm -rf /var/lib/apt/lists/* \ && git lfs install RUN mkdir -p /var/cache/nginx \ /var/log/nginx \ /var/lib/nginx RUN touch /var/run/nginx.pid RUN useradd -m -u 1000 user RUN chown -R user:user /var/cache/nginx \ /var/log/nginx \ /var/lib/nginx \ /var/run/nginx.pid WORKDIR /code COPY ./requirements.txt /code/requirements.txt # User USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH COPY --chown=user nginx.conf /etc/nginx/sites-available/default # Pyenv RUN curl https://pyenv.run | bash ENV PATH=$HOME/.pyenv/shims:$HOME/.pyenv/bin:$PATH ARG PYTHON_VERSION=3.10.12 # Python RUN pyenv install $PYTHON_VERSION && \ pyenv global $PYTHON_VERSION && \ pyenv rehash && \ pip install --no-cache-dir --upgrade pip setuptools wheel && \ pip install --no-cache-dir \ datasets \ huggingface-hub "protobuf<4" "click<8.1" RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt # Set the working directory to /data if USE_PERSISTENT_DATA is set, otherwise set to $HOME/app WORKDIR $HOME/app # Copy the current directory contents into the container at $HOME/app setting the owner to the user RUN git clone https://github.com/comfyanonymous/ComfyUI . && \ pip install xformers!=0.0.18 --no-cache-dir -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu117 # Checkpoints RUN echo "Downloading checkpoints..." # SDXL ADD --chown=user https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors ./models/checkpoints/ ADD --chown=user https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors ./models/checkpoints/ # ADD --chown=user https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0_0.9vae.safetensors ./models/checkpoints/ # SD1.5 # ADD --chown=user https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt ./models/checkpoints/ ADD --chown=user https://huggingface.co/stabilityai/stable-diffusion-2-1-base/resolve/main/v2-1_512-ema-pruned.safetensors ./models/checkpoints/ # ADD --chown=user https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors ./models/checkpoints/ # Some SD1.5 anime style # ADD --chown=user https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix2/AbyssOrangeMix2_hard.safetensors ./models/checkpoints/ # ADD --chown=user https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A1_orangemixs.safetensors ./models/checkpoints/ # ADD --chown=user https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A3_orangemixs.safetensors ./models/checkpoints/ # ADD --chown=user https://huggingface.co/Linaqruf/anything-v3.0/resolve/main/anything-v3-fp16-pruned.safetensors ./models/checkpoints/ # Waifu Diffusion 1.5 (anime style SD2.x 768-v) # ADD --chown=user https://huggingface.co/waifu-diffusion/wd-1-5-beta2/resolve/main/checkpoints/wd-1-5-beta2-fp16.safetensors ./models/checkpoints/ # unCLIP models # ADD --chown=user https://huggingface.co/comfyanonymous/illuminatiDiffusionV1_v11_unCLIP/resolve/main/illuminatiDiffusionV1_v11-unclip-h-fp16.safetensors ./models/checkpoints/ # ADD --chown=user https://huggingface.co/comfyanonymous/wd-1.5-beta2_unCLIP/resolve/main/wd-1-5-beta2-aesthetic-unclip-h-fp16.safetensors ./models/checkpoints/ # --- # VAE ADD --chown=user https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors ./models/vae/ # ADD --chown=user https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/VAEs/orangemix.vae.pt ./models/vae/ # ADD --chown=user https://huggingface.co/hakurei/waifu-diffusion-v1-4/resolve/main/vae/kl-f8-anime2.ckpt ./models/vae/ # Loras # ADD --chown=user https://civitai.com/api/download/models/10350 -O ./models/loras/theovercomer8sContrastFix_sd21768.safetensors #theovercomer8sContrastFix SD2.x 768-v # ADD --chown=user https://civitai.com/api/download/models/10638 -O ./models/loras/theovercomer8sContrastFix_sd15.safetensors #theovercomer8sContrastFix SD1.x # T2I-Adapter # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_depth_sd14v1.pth ./models/controlnet/ # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_seg_sd14v1.pth ./models/controlnet/ # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_sketch_sd14v1.pth ./models/controlnet/ # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_keypose_sd14v1.pth ./models/controlnet/ # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_openpose_sd14v1.pth ./models/controlnet/ # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_color_sd14/v1.pth ./models/controlnet/ # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_canny_sd14v1.pth ./models/controlnet/ # T2I Styles Model # ADD --chown=user https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_style_sd14v1.pth ./models/style_models/ # CLIPVision model (needed for styles model) # ADD --chown=user https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/pytorch_model.bin -O ./models/clip_vision/clip_vit14.bin # ControlNet # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_ip2p_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_shuffle_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_canny_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11f1p_sd15_depth_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_inpaint_fp16.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/thibaud/controlnet-sd21/resolve/main/control_v11p_sd21_lineart.safetensors ./models/controlnet/ #ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_lineart_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_mlsd_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_normalbae_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_openpose_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_scribble_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_seg_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_softedge_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15s2_lineart_anime_fp16.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11u_sd15_tile_fp16.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/thibaud/controlnet-openpose-sdxl-1.0/resolve/main/OpenPoseXL2.safetensors ./models/controlnet/ # https://huggingface.co/stabilityai/control-lora ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-canny-rank256.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-depth-rank256.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-recolor-rank256.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-sketch-rank256.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank128/control-lora-canny-rank128.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank128/control-lora-depth-rank128.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank128/control-lora-recolor-rank128.safetensors ./models/controlnet/ ADD --chown=user https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank128/control-lora-sketch-rank128-metadata.safetensors ./models/controlnet/ # ADD --chown=user https://huggingface.co/thibaud/controlnet-openpose-sdxl-1.0/resolve/main/diffusion_pytorch_model.bin -O ./models/controlnet/OpenPoseXL2.bin # GLIGEN ADD --chown=user https://huggingface.co/comfyanonymous/GLIGEN_pruned_safetensors/resolve/main/gligen_sd14_textbox_pruned_fp16.safetensors ./models/gligen/ # ESRGAN upscale model ADD --chown=user https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth ./models/upscale_models/ ADD --chown=user https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x2.pth ./models/upscale_models/ ADD --chown=user https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x4.pth ./models/upscale_models/ RUN echo "Done" # instal custom nodes RUN echo "Installing custom nodes..." # Controlnet Preprocessor nodes by Fannovel16 RUN cd custom_nodes && git clone https://github.com/Fannovel16/comfy_controlnet_preprocessors && cd comfy_controlnet_preprocessors && python install.py --no_download_ckpts RUN cd custom_nodes && git clone https://github.com/Fannovel16/comfyui_controlnet_aux && cd comfyui_controlnet_aux && pip install -r requirements.txt RUN cd custom_nodes && git clone https://github.com/Stability-AI/stability-ComfyUI-nodes && cd stability-ComfyUI-nodes && pip install -r requirements.txt RUN cd custom_nodes && git clone https://github.com/EllangoK/ComfyUI-post-processing-nodes # ComfyUI Manager RUN cd custom_nodes && git clone https://github.com/ltdrdata/ComfyUI-Manager.git RUN echo "Done" COPY --chown=user run.sh . CMD ["bash", "run.sh"]