master 802d0bcd689e cached
28 files
26.2 KB
8.3k tokens
4 symbols
1 requests
Download .txt
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: ""
---

<!--  PLEASE FILL THIS OUT, IT WILL MAKE BOTH OF OUR LIVES EASIER -->

**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**

<!--  tried to run the app, my cat exploded -->

**Which UI**

auto or auto-cpu or invoke or comfy?

**Hardware / Software**

- OS: [e.g. Windows 10 / Ubuntu 22.04]
- OS version: <!--  on windows, use the command `winver` to find out, on ubuntu `lsb_release -d`  -->
- WSL version (if applicable): <!-- get using `wsl -l -v` -->
- Docker Version: <!--  get using `docker version` -->
- Docker compose version: <!--  get using `docker compose version` -->
- Repo version: <!-- tag, commit sha, or "from master" -->
- 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
================================================
<!--
Have you created an issue before opening a merge request???
https://github.com/AbdBarho/stable-diffusion-webui-docker#contributing
Please create one so we can discuss it, I don't want your effort to go to waste.
-->

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 <<EOF
By using this software, you agree to the following licenses:
https://github.com/AbdBarho/stable-diffusion-webui-docker/blob/master/LICENSE
https://github.com/CompVis/stable-diffusion/blob/main/LICENSE
https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/master/LICENSE.txt
https://github.com/invoke-ai/InvokeAI/blob/main/LICENSE
And licenses of all UIs, third party libraries, and extensions.
EOF


================================================
FILE: services/download/links.txt
================================================
https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt
  out=Stable-diffusion/v1-5-pruned-emaonly.ckpt
https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.ckpt
  out=VAE/vae-ft-mse-840000-ema-pruned.ckpt
https://huggingface.co/runwayml/stable-diffusion-inpainting/resolve/main/sd-v1-5-inpainting.ckpt
  out=Stable-diffusion/sd-v1-5-inpainting.ckpt
https://github.com/TencentARC/GFPGAN/releases/download/v1.3.4/GFPGANv1.4.pth
  out=GFPGAN/GFPGANv1.4.pth
https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth
  out=RealESRGAN/RealESRGAN_x4plus.pth
https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth
  out=RealESRGAN/RealESRGAN_x4plus_anime_6B.pth
https://heibox.uni-heidelberg.de/f/31a76b13ea27482981b4/?dl=1
  out=LDSR/project.yaml
https://heibox.uni-heidelberg.de/f/578df07c8fc04ffbadf3/?dl=1
  out=LDSR/model.ckpt
Download .txt
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
Download .txt
SYMBOL INDEX (4 symbols across 1 files)

FILE: services/AUTOMATIC1111/config.py
  function dict_to_json_file (line 29) | def dict_to_json_file(target_file: str, data: dict):
  function json_file_to_dict (line 35) | def json_file_to_dict(config_file: str) -> dict|None:
  function replace_if_invalid (line 44) | def replace_if_invalid(value: str, replacement: str, pattern: str|re.Pat...
  function check_and_replace_config (line 52) | def check_and_replace_config(config_file: str, target_file: str = None):
Condensed preview — 28 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (29K chars).
[
  {
    "path": ".devscripts/chmod.sh",
    "chars": 170,
    "preview": "#!/bin/bash\n\nset -Eeuo pipefail\n\nfind services -name \"*.sh\" -exec git update-index --chmod=+x {} \\;\nfind .devscripts -na"
  },
  {
    "path": ".devscripts/migratev1tov2.sh",
    "chars": 1140,
    "preview": "mkdir -p data/.cache data/StableDiffusion data/Codeformer data/GFPGAN data/ESRGAN data/BSRGAN data/RealESRGAN data/SwinI"
  },
  {
    "path": ".devscripts/migratev3tov4.sh",
    "chars": 151,
    "preview": "#!/bin/bash\n\nset -Eeuo pipefail\n\necho \"Moving everything in output to output/old...\"\nmv output old\nmkdir output\nmv old/."
  },
  {
    "path": ".devscripts/migratev7tov8.sh",
    "chars": 599,
    "preview": "#!/bin/bash\n\nset -Eeuo pipefail\n\necho \"Renaming...\"\n\n# compatible with default auto-names\nmv -v ./data/StableDiffusion ."
  },
  {
    "path": ".editorconfig",
    "chars": 147,
    "preview": "root = true\n\n[*]\nend_of_line = lf\nindent_style = space\nindent_size = 2\ncharset = utf-8\ninsert_final_newline = true\ntrim_"
  },
  {
    "path": ".gitattributes",
    "chars": 19,
    "preview": "* text=auto eol=lf\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.md",
    "chars": 1189,
    "preview": "---\nname: Bug\nabout: Report a bug\ntitle: \"\"\nlabels: bug\nassignees: \"\"\n---\n\n<!--  PLEASE FILL THIS OUT, IT WILL MAKE BOTH"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 227,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Feature request? Questions regarding some extension?\n    url: https"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 446,
    "preview": "<!--\nHave you created an issue before opening a merge request???\nhttps://github.com/AbdBarho/stable-diffusion-webui-dock"
  },
  {
    "path": ".github/workflows/docker.yml",
    "chars": 434,
    "preview": "name: Build Images\n\non:\n  push:\n    branches: master\n  pull_request:\n      paths:\n        - docker-compose.yml\n        -"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 899,
    "preview": "name: 'Close stale issues and PRs'\non:\n  schedule:\n    - cron: '0 0 * * *'\n\njobs:\n  stale:\n    runs-on: ubuntu-latest\n  "
  },
  {
    "path": ".gitignore",
    "chars": 89,
    "preview": "/.devcontainer\n/docker-compose.override.yml\n\n# VSCode specific\n*.code-workspace\n/.vscode\n"
  },
  {
    "path": "LICENSE",
    "chars": 4059,
    "preview": "License\n\nCopyright (c) 2022\n\nSection I\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
  },
  {
    "path": "README.md",
    "chars": 3211,
    "preview": "# Stable Diffusion WebUI Docker\n\nRun Stable Diffusion on your machine with a nice UI without any hassle!\n\n## Setup & Usa"
  },
  {
    "path": "data/.gitignore",
    "chars": 36,
    "preview": "/.cache\n/config\n/embeddings\n/models\n"
  },
  {
    "path": "docker-compose.yml",
    "chars": 1176,
    "preview": "x-base_service: &base_service\n    ports:\n      - \"${WEBUI_PORT:-7860}:7860\"\n    volumes:\n      - &v1 ./data:/data\n      "
  },
  {
    "path": "output/.gitignore",
    "chars": 15,
    "preview": "/*\n!/.gitignore"
  },
  {
    "path": "services/AUTOMATIC1111/Dockerfile",
    "chars": 2921,
    "preview": "FROM alpine/git:2.36.2 as download\n\nCOPY clone.sh /clone.sh\n\nRUN . /clone.sh stable-diffusion-webui-assets https://githu"
  },
  {
    "path": "services/AUTOMATIC1111/clone.sh",
    "chars": 186,
    "preview": "#!/bin/bash\n\nset -Eeuox pipefail\n\nmkdir -p /repositories/\"$1\"\ncd /repositories/\"$1\"\ngit init\ngit remote add origin \"$2\"\n"
  },
  {
    "path": "services/AUTOMATIC1111/config.py",
    "chars": 2274,
    "preview": "#!/usr/bin/env python3\n\n\"\"\"Checks and sets default values for config.json before starting the container.\"\"\"\n\nimport json"
  },
  {
    "path": "services/AUTOMATIC1111/entrypoint.sh",
    "chars": 2434,
    "preview": "#!/bin/bash\n\nset -Eeuo pipefail\n\n# TODO: move all mkdir -p ?\nmkdir -p /data/config/auto/scripts/\n# mount scripts individ"
  },
  {
    "path": "services/comfy/Dockerfile",
    "chars": 758,
    "preview": "FROM pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime\n\nENV DEBIAN_FRONTEND=noninteractive PIP_PREFER_BINARY=1\n\nRUN apt-get "
  },
  {
    "path": "services/comfy/entrypoint.sh",
    "chars": 647,
    "preview": "#!/bin/bash\n\nset -Eeuo pipefail\n\nmkdir -vp /data/config/comfy/custom_nodes\n\ndeclare -A MOUNTS\n\nMOUNTS[\"/root/.cache\"]=\"/"
  },
  {
    "path": "services/comfy/extra_model_paths.yaml",
    "chars": 644,
    "preview": "a111:\n  base_path: /data\n\n  checkpoints: models/Stable-diffusion\n  configs: models/Stable-diffusion\n  vae: models/VAE\n  "
  },
  {
    "path": "services/download/Dockerfile",
    "chars": 146,
    "preview": "FROM bash:alpine3.19\n\nRUN apk update && apk add parallel aria2\nCOPY . /docker\nRUN chmod +x /docker/download.sh\nENTRYPOIN"
  },
  {
    "path": "services/download/checksums.sha256",
    "chars": 884,
    "preview": "cc6cb27103417325ff94f52b7a5d2dde45a7515b25c255d8e396c90014281516  /data/models/Stable-diffusion/v1-5-pruned-emaonly.ckpt"
  },
  {
    "path": "services/download/download.sh",
    "chars": 973,
    "preview": "#!/usr/bin/env bash\n\nset -Eeuo pipefail\n\n# TODO: maybe just use the .gitignore file to create all of these\nmkdir -vp /da"
  },
  {
    "path": "services/download/links.txt",
    "chars": 978,
    "preview": "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt\n  out=Stable-diffusion/v1-5-"
  }
]

About this extraction

This page contains the full source code of the AbdBarho/stable-diffusion-webui-docker GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 28 files (26.2 KB), approximately 8.3k tokens, and a symbol index with 4 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!