#!/bin/sh set -eu CWD=$(basename "$PWD") set_gpu_arg() { while [ "$#" -gt 0 ]; do if [ "$1" = "--device" ] && [ "$2" = "cpu" ]; then GPU_ARG="" return fi shift done GPU_ARG="--gpus=all" } build() { docker build . --tag "$CWD" } clean() { docker system prune -f } dev() { docker run --rm --gpus=all --entrypoint=sh \ -v huggingface:/home/huggingface/.cache/huggingface \ -v "$PWD"/input:/home/huggingface/input \ -v "$PWD"/output:/home/huggingface/output \ -it "$CWD" } pull() { GHCR="ghcr.io/fboulnois/stable-diffusion-docker" docker pull "$GHCR" docker tag "$GHCR" "$CWD" } run() { set_gpu_arg "$@" docker run --rm ${GPU_ARG} \ -v huggingface:/home/huggingface/.cache/huggingface \ -v "$PWD"/input:/home/huggingface/input \ -v "$PWD"/output:/home/huggingface/output \ "$CWD" "$@" } tests() { BASE_URL="https://raw.githubusercontent.com/fboulnois/repository-assets/main/assets/stable-diffusion-docker" TEST_IMAGE="An_impressionist_painting_of_a_parakeet_eating_spaghetti_in_the_desert_full.png" curl -sL "${BASE_URL}/${TEST_IMAGE}" > "$PWD/input/${TEST_IMAGE}" run --skip --height 512 --width 640 "abstract art" run --device cpu --onnx --image "${TEST_IMAGE}" --strength 0.6 "abstract art" run --model "stabilityai/stable-diffusion-2" \ --skip --height 768 --width 768 "abstract art" run --model "stabilityai/stable-diffusion-2-1" \ --skip --height 768 --width 768 "abstract art" run --model "stabilityai/stable-diffusion-x4-upscaler" \ --image "${TEST_IMAGE}" --half --attention-slicing \ --xformers-memory-efficient-attention \ --prompt "An impressionist painting of a parakeet eating spaghetti in the desert" run --model "stabilityai/stable-diffusion-2-depth" \ --height 768 --width 768 \ --image "${TEST_IMAGE}" --attention-slicing \ --xformers-memory-efficient-attention \ --negative-prompt "bad, ugly, deformed, malformed, mutated, bad anatomy" \ --prompt "a toucan" run --model "timbrooks/instruct-pix2pix" \ --scale 7.0 --image-scale 2.0 \ --image "${TEST_IMAGE}" --attention-slicing \ --xformers-memory-efficient-attention \ --negative-prompt "bad, ugly, deformed, malformed, mutated, bad anatomy" \ --prompt "replace the sky with bricks" run --model "dreamlike-art/dreamlike-diffusion-1.0" \ --skip --vae-tiling --xformers-memory-efficient-attention \ --height 1024 --width 1024 "abstract art" run --model "runwayml/stable-diffusion-v1-5" \ --samples 2 --iters 2 --seed 42 \ --scheduler HeunDiscreteScheduler \ --scale 7.5 --steps 80 --attention-slicing \ --half --skip --negative-prompt "red roses" \ --prompt "bouquet of roses" } mkdir -p input output case ${1:-build} in build) build ;; clean) clean ;; dev) dev "$@" ;; pull) pull ;; run) shift; run "$@" ;; test) tests ;; *) echo "$0: No command named '$1'" ;; esac