Repository: AbdBarho/stable-diffusion-webui-docker Branch: master Commit: 802d0bcd689e Files: 28 Total size: 26.2 KB Directory structure: gitextract_7m9lygkf/ ├── .devscripts/ │ ├── chmod.sh │ ├── migratev1tov2.sh │ ├── migratev3tov4.sh │ └── migratev7tov8.sh ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.md │ │ └── config.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── docker.yml │ └── stale.yml ├── .gitignore ├── LICENSE ├── README.md ├── data/ │ └── .gitignore ├── docker-compose.yml ├── output/ │ └── .gitignore └── services/ ├── AUTOMATIC1111/ │ ├── Dockerfile │ ├── clone.sh │ ├── config.py │ └── entrypoint.sh ├── comfy/ │ ├── Dockerfile │ ├── entrypoint.sh │ └── extra_model_paths.yaml └── download/ ├── Dockerfile ├── checksums.sha256 ├── download.sh └── links.txt ================================================ FILE CONTENTS ================================================ ================================================ FILE: .devscripts/chmod.sh ================================================ #!/bin/bash set -Eeuo pipefail find services -name "*.sh" -exec git update-index --chmod=+x {} \; find .devscripts -name "*.sh" -exec git update-index --chmod=+x {} \; ================================================ FILE: .devscripts/migratev1tov2.sh ================================================ mkdir -p data/.cache data/StableDiffusion data/Codeformer data/GFPGAN data/ESRGAN data/BSRGAN data/RealESRGAN data/SwinIR data/LDSR data/embeddings cp -vf cache/models/model.ckpt data/StableDiffusion/model.ckpt cp -vf cache/models/LDSR.ckpt data/LDSR/model.ckpt cp -vf cache/models/LDSR.yaml data/LDSR/project.yaml cp -vf cache/models/RealESRGAN_x4plus.pth data/RealESRGAN/ cp -vf cache/models/RealESRGAN_x4plus_anime_6B.pth data/RealESRGAN/ cp -vrf cache/torch data/.cache/ mkdir -p data/.cache/huggingface/transformers/ cp -vrf cache/transformers/* data/.cache/huggingface/transformers/ cp -v cache/custom-models/* data/StableDiffusion/ mkdir -p data/.cache/clip/ cp -vf cache/weights/ViT-L-14.pt data/.cache/clip/ cp -vf cache/weights/codeformer.pth data/Codeformer/codeformer-v0.1.0.pth cp -vf cache/weights/detection_Resnet50_Final.pth data/.cache/ cp -vf cache/weights/parsing_parsenet.pth data/.cache/ cp -v embeddings/* data/embeddings/ echo this script was created 10/2022 echo Dont forget to run: docker compose --profile download up --build echo the cache and embeddings folders can be deleted, but its not necessary. ================================================ FILE: .devscripts/migratev3tov4.sh ================================================ #!/bin/bash set -Eeuo pipefail echo "Moving everything in output to output/old..." mv output old mkdir output mv old/.gitignore output mv old output ================================================ FILE: .devscripts/migratev7tov8.sh ================================================ #!/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 ================================================ FILE: .editorconfig ================================================ root = true [*] end_of_line = lf indent_style = space indent_size = 2 charset = utf-8 insert_final_newline = true trim_trailing_whitespace = true ================================================ FILE: .gitattributes ================================================ * text=auto eol=lf ================================================ FILE: .github/ISSUE_TEMPLATE/bug.md ================================================ --- name: Bug about: Report a bug title: "" labels: bug assignees: "" --- **Has this issue been opened before?** - [ ] It is not in the [FAQ](https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/FAQ), I checked. - [ ] It is not in the [issues](https://github.com/AbdBarho/stable-diffusion-webui-docker/issues?q=), I searched. **Describe the bug** **Which UI** auto or auto-cpu or invoke or comfy? **Hardware / Software** - OS: [e.g. Windows 10 / Ubuntu 22.04] - OS version: - WSL version (if applicable): - Docker Version: - Docker compose version: - Repo version: - RAM: - GPU/VRAM: **Steps to Reproduce** 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Additional context** Any other context about the problem here. If applicable, add screenshots to help explain your problem. ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Feature request? Questions regarding some extension? url: https://github.com/AbdBarho/stable-diffusion-webui-docker/discussions about: Please use the discussions tab ================================================ FILE: .github/pull_request_template.md ================================================ Closes issue # ### Update versions - auto: https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/ - invoke: https://github.com/invoke-ai/InvokeAI/commit/ - comfy: https://github.com/comfyanonymous/ComfyUI/commit/ ================================================ FILE: .github/workflows/docker.yml ================================================ name: Build Images on: push: branches: master pull_request: paths: - docker-compose.yml - services jobs: build: strategy: matrix: profile: - auto - comfy - download runs-on: ubuntu-latest name: ${{ matrix.profile }} steps: - uses: actions/checkout@v3 - run: docker compose --profile ${{ matrix.profile }} build --progress plain ================================================ FILE: .github/workflows/stale.yml ================================================ name: 'Close stale issues and PRs' on: schedule: - cron: '0 0 * * *' jobs: stale: runs-on: ubuntu-latest steps: - uses: actions/stale@v6 with: only-labels: awaiting-response stale-issue-message: This issue is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 7 days. stale-pr-message: This PR is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 7 days. close-issue-message: This issue was closed because it has been stalled for 7 days with no activity. close-pr-message: This PR was closed because it has been stalled for 7 days with no activity. days-before-issue-stale: 14 days-before-pr-stale: 14 days-before-issue-close: 7 days-before-pr-close: 7 ================================================ FILE: .gitignore ================================================ /.devcontainer /docker-compose.override.yml # VSCode specific *.code-workspace /.vscode ================================================ FILE: LICENSE ================================================ License Copyright (c) 2022 Section I Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. The person obtaining a copy of the Software meets the Use-based restrictions as referenced in Section II paragraph 1. The person obtaining a copy of the Software accepts that the Model or Derivatives of the Model (as defined in the "CreativeML Open RAIL-M" license accompanying this License) are subject to Section II paragraph 1. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Section II 1. Use-based restrictions. The restrictions set forth in Attachment A are considered Use-based restrictions. Therefore the person obtaining a copy of the Software cannot use the Software for the specified restricted uses. The person obtaining a copy of the Software may use the Software only for lawful purposes. 2. Except as set forth herein, the authors or copyright holders claim no rights in the results of operating the Software. The person obtaining a copy of the Software is accountable for the results of operating the Software and its subsequent uses. 3. If any provision of this License is held to be invalid, illegal or unenforceable, the remaining provisions shall be unaffected thereby and remain valid as if such provision had not been set forth herein. END OF TERMS AND CONDITIONS Attachment A Use Restrictions The person obtaining a copy of the Software agrees not to use the Software: - In any way that violates any applicable national, federal, state, local or international law or regulation; - For the purpose of exploiting, harming or attempting to exploit or harm minors in any way; - To generate or disseminate verifiably false information and/or content with the purpose of harming others; - To generate or disseminate personal identifiable information that can be used to harm an individual; - To defame, disparage or otherwise harass others; - For fully automated decision making that adversely impacts an individual’s legal rights or otherwise creates or modifies a binding, enforceable obligation; - For any use intended to or which has the effect of discriminating against or harming individuals or groups based on online or offline social behavior or known or predicted personal or personality characteristics; - To exploit any of the vulnerabilities of a specific group of persons based on their age, social, physical or mental characteristics, in order to materially distort the behavior of a person pertaining to that group in a manner that causes or is likely to cause that person or another person physical or psychological harm; - For any use intended to or which has the effect of discriminating against individuals or groups based on legally protected characteristics or categories; - To provide medical advice and medical results interpretation; - To generate or disseminate information for the purpose to be used for administration of justice, law enforcement, immigration or asylum processes, such as predicting an individual will commit fraud/crime commitment (e.g. by text profiling, drawing causal relationships between assertions made in documents, indiscriminate and arbitrarily-targeted use). ================================================ FILE: README.md ================================================ # Stable Diffusion WebUI Docker Run Stable Diffusion on your machine with a nice UI without any hassle! ## Setup & Usage Visit the wiki for [Setup](https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/Setup) and [Usage](https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/Usage) instructions, checkout the [FAQ](https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/FAQ) page if you face any problems, or create a new issue! ## Features This repository provides multiple UIs for you to play around with stable diffusion: ### [AUTOMATIC1111](https://github.com/AUTOMATIC1111/stable-diffusion-webui) [Full feature list here](https://github.com/AUTOMATIC1111/stable-diffusion-webui-feature-showcase), Screenshots: | Text to image | Image to image | Extras | | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | ![](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) | ### [ComfyUI](https://github.com/comfyanonymous/ComfyUI) [Full feature list here](https://github.com/comfyanonymous/ComfyUI#features), Screenshot: | Workflow | | -------------------------------------------------------------------------------- | | ![](https://github.com/comfyanonymous/ComfyUI/raw/master/comfyui_screenshot.png) | ## Contributing Contributions are welcome! **Create a discussion first of what the problem is and what you want to contribute (before you implement anything)** ## Disclaimer The authors of this project are not responsible for any content generated using this interface. This license of this software forbids you from sharing any content that violates any laws, produce any harm to a person, disseminate any personal information that would be meant for harm, spread misinformation and target vulnerable groups. For the full list of restrictions please read [the license](./LICENSE). ## Thanks Special thanks to everyone behind these awesome projects, without them, none of this would have been possible: - [AUTOMATIC1111/stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) - [InvokeAI](https://github.com/invoke-ai/InvokeAI) - [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. ================================================ FILE: data/.gitignore ================================================ /.cache /config /embeddings /models ================================================ FILE: docker-compose.yml ================================================ x-base_service: &base_service ports: - "${WEBUI_PORT:-7860}:7860" volumes: - &v1 ./data:/data - &v2 ./output:/output stop_signal: SIGKILL tty: true deploy: resources: reservations: devices: - driver: nvidia device_ids: ['0'] capabilities: [compute, utility] name: webui-docker services: download: build: ./services/download/ profiles: ["download"] volumes: - *v1 auto: &automatic <<: *base_service profiles: ["auto"] build: ./services/AUTOMATIC1111 image: sd-auto:78 environment: - CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api auto-cpu: <<: *automatic profiles: ["auto-cpu"] deploy: {} environment: - CLI_ARGS=--no-half --precision full --allow-code --enable-insecure-extension-access --api comfy: &comfy <<: *base_service profiles: ["comfy"] build: ./services/comfy/ image: sd-comfy:7 environment: - CLI_ARGS= comfy-cpu: <<: *comfy profiles: ["comfy-cpu"] deploy: {} environment: - CLI_ARGS=--cpu ================================================ FILE: output/.gitignore ================================================ /* !/.gitignore ================================================ FILE: services/AUTOMATIC1111/Dockerfile ================================================ FROM alpine/git:2.36.2 as download COPY clone.sh /clone.sh RUN . /clone.sh stable-diffusion-webui-assets https://github.com/AUTOMATIC1111/stable-diffusion-webui-assets.git 6f7db241d2f8ba7457bac5ca9753331f0c266917 RUN . /clone.sh stable-diffusion-stability-ai https://github.com/Stability-AI/stablediffusion.git cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf \ && rm -rf assets data/**/*.png data/**/*.jpg data/**/*.gif RUN . /clone.sh BLIP https://github.com/salesforce/BLIP.git 48211a1594f1321b00f14c9f7a5b4813144b2fb9 RUN . /clone.sh k-diffusion https://github.com/crowsonkb/k-diffusion.git ab527a9a6d347f364e3d185ba6d714e22d80cb3c RUN . /clone.sh clip-interrogator https://github.com/pharmapsychotic/clip-interrogator 2cf03aaf6e704197fd0dae7c7f96aa59cf1b11c9 RUN . /clone.sh generative-models https://github.com/Stability-AI/generative-models 45c443b316737a4ab6e40413d7794a7f5657c19f RUN . /clone.sh stable-diffusion-webui-assets https://github.com/AUTOMATIC1111/stable-diffusion-webui-assets 6f7db241d2f8ba7457bac5ca9753331f0c266917 FROM pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime ENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1 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 build-essential WORKDIR / 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 v1.9.4 && \ pip install -r requirements_versions.txt ENV ROOT=/stable-diffusion-webui COPY --from=download /repositories/ ${ROOT}/repositories/ RUN mkdir ${ROOT}/interrogate && cp ${ROOT}/repositories/clip-interrogator/clip_interrogator/data/* ${ROOT}/interrogate RUN --mount=type=cache,target=/root/.cache/pip \ pip install pyngrok xformers==0.0.26.post1 \ git+https://github.com/TencentARC/GFPGAN.git@8d2447a2d918f8eba5a4a01463fd48e45126a379 \ git+https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1 \ git+https://github.com/mlfoundations/open_clip.git@v2.20.0 # there seems to be a memory leak (or maybe just memory not being freed fast enough) that is fixed by this version of malloc # maybe move this up to the dependencies list. RUN apt-get -y install libgoogle-perftools-dev && apt-get clean ENV LD_PRELOAD=libtcmalloc.so COPY . /docker RUN \ # mv ${ROOT}/style.css ${ROOT}/user.css && \ # one of the ugliest hacks I ever wrote \ sed -i 's/in_app_dir = .*/in_app_dir = True/g' /opt/conda/lib/python3.10/site-packages/gradio/routes.py && \ git config --global --add safe.directory '*' WORKDIR ${ROOT} ENV NVIDIA_VISIBLE_DEVICES=all ENV CLI_ARGS="" EXPOSE 7860 ENTRYPOINT ["/docker/entrypoint.sh"] CMD python -u webui.py --listen --port 7860 ${CLI_ARGS} ================================================ FILE: services/AUTOMATIC1111/clone.sh ================================================ #!/bin/bash set -Eeuox pipefail mkdir -p /repositories/"$1" cd /repositories/"$1" git init git remote add origin "$2" git fetch origin "$3" --depth=1 git reset --hard "$3" rm -rf .git ================================================ FILE: services/AUTOMATIC1111/config.py ================================================ #!/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) ================================================ FILE: services/AUTOMATIC1111/entrypoint.sh ================================================ #!/bin/bash set -Eeuo pipefail # TODO: move all mkdir -p ? mkdir -p /data/config/auto/scripts/ # mount scripts individually echo $ROOT ls -lha $ROOT find "${ROOT}/scripts/" -maxdepth 1 -type l -delete cp -vrfTs /data/config/auto/scripts/ "${ROOT}/scripts/" # 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 fi if [ ! -f /data/config/auto/styles.csv ]; then touch /data/config/auto/styles.csv fi # copy models from original models folder mkdir -p /data/models/VAE-approx/ /data/models/karlo/ 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" 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" for to_path in "${!MOUNTS[@]}"; do set -Eeuo pipefail from_path="${MOUNTS[${to_path}]}" rm -rf "${to_path}" if [ ! -f "$from_path" ]; then mkdir -vp "$from_path" fi mkdir -vp "$(dirname "${to_path}")" ln -sT "${from_path}" "${to_path}" 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 # For install.py, please refer to https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Developing-extensions#installpy list=(./extensions/*/install.py) for installscript in "${list[@]}"; do EXTNAME=$(echo $installscript | cut -d '/' -f 3) # Skip installing dependencies if extension is disabled in config if $(jq -e ".disabled_extensions|any(. == \"$EXTNAME\")" config.json); then echo "Skipping disabled extension ($EXTNAME)" continue fi PYTHONPATH=${ROOT} python "$installscript" done if [ -f "/data/config/auto/startup.sh" ]; then pushd ${ROOT} echo "Running startup script" . /data/config/auto/startup.sh popd fi exec "$@" ================================================ FILE: services/comfy/Dockerfile ================================================ FROM pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime ENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1 RUN apt-get update && apt-get install -y git && apt-get clean ENV ROOT=/stable-diffusion RUN --mount=type=cache,target=/root/.cache/pip \ git clone https://github.com/comfyanonymous/ComfyUI.git ${ROOT} && \ cd ${ROOT} && \ git checkout master && \ git reset --hard 276f8fce9f5a80b500947fb5745a4dde9e84622d && \ pip install -r requirements.txt WORKDIR ${ROOT} COPY . /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="" EXPOSE 7860 ENTRYPOINT ["/docker/entrypoint.sh"] CMD python -u main.py --listen --port 7860 ${CLI_ARGS} ================================================ FILE: services/comfy/entrypoint.sh ================================================ #!/bin/bash set -Eeuo pipefail mkdir -vp /data/config/comfy/custom_nodes declare -A MOUNTS MOUNTS["/root/.cache"]="/data/.cache" MOUNTS["${ROOT}/input"]="/data/config/comfy/input" MOUNTS["${ROOT}/output"]="/output/comfy" for to_path in "${!MOUNTS[@]}"; do set -Eeuo pipefail from_path="${MOUNTS[${to_path}]}" rm -rf "${to_path}" if [ ! -f "$from_path" ]; then mkdir -vp "$from_path" fi mkdir -vp "$(dirname "${to_path}")" ln -sT "${from_path}" "${to_path}" echo Mounted $(basename "${from_path}") done if [ -f "/data/config/comfy/startup.sh" ]; then pushd ${ROOT} . /data/config/comfy/startup.sh popd fi exec "$@" ================================================ FILE: services/comfy/extra_model_paths.yaml ================================================ 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 ================================================ FILE: services/download/Dockerfile ================================================ FROM bash:alpine3.19 RUN apk update && apk add parallel aria2 COPY . /docker RUN chmod +x /docker/download.sh ENTRYPOINT ["/docker/download.sh"] ================================================ FILE: services/download/checksums.sha256 ================================================ 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 ================================================ FILE: services/download/download.sh ================================================ #!/usr/bin/env bash set -Eeuo pipefail # TODO: maybe just use the .gitignore file to create all of these 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/models --continue echo "Checking SHAs..." parallel --will-cite -a /docker/checksums.sha256 "echo -n {} | sha256sum -c" cat <