Spaces:
Runtime error
Runtime error
title: sdui | |
emoji: 🐢 | |
colorFrom: blue | |
colorTo: red | |
sdk: docker | |
pinned: false | |
duplicated_from: atikur-rabbi/sdui | |
# Stable Diffusion in Docker | |
Run the official [Stable Diffusion](https://huggingface.co/CompVis/stable-diffusion) | |
releases on [Huggingface](https://huggingface.co/) in a GPU accelerated Docker | |
container. | |
```sh | |
./build.sh run 'An impressionist painting of a parakeet eating spaghetti in the desert' | |
``` | |
![An impressionist painting of a parakeet eating spaghetti in the desert 1](https://raw.githubusercontent.com/fboulnois/repository-assets/main/assets/stable-diffusion-docker/An_impressionist_painting_of_a_parakeet_eating_spaghetti_in_the_desert_s1.png) | |
![An impressionist painting of a parakeet eating spaghetti in the desert 2](https://raw.githubusercontent.com/fboulnois/repository-assets/main/assets/stable-diffusion-docker/An_impressionist_painting_of_a_parakeet_eating_spaghetti_in_the_desert_s2.png) | |
```sh | |
./build.sh run --image parakeet_eating_spaghetti.png --strength 0.6 'Bouquet of roses' | |
``` | |
![Bouquet of roses 1](https://raw.githubusercontent.com/fboulnois/repository-assets/main/assets/stable-diffusion-docker/Bouquet_of_roses_s1.png) | |
![Bouquet of roses 2](https://raw.githubusercontent.com/fboulnois/repository-assets/main/assets/stable-diffusion-docker/Bouquet_of_roses_s2.png) | |
## Before you start | |
### Minimum requirements | |
By default, the pipeline uses the full model and weights which requires a CUDA | |
capable GPU with 8GB+ of VRAM. It should take a few seconds to create one image. | |
On less powerful GPUs you may need to modify some of the options; see the | |
[Examples](#examples) section for more details. If you lack a suitable GPU you | |
can set the options `--device cpu` and `--onnx` instead. | |
### Huggingface token | |
Since it uses the official model, you will need to create a [user access token](https://huggingface.co/docs/hub/security-tokens) | |
in your [Huggingface account](https://huggingface.co/settings/tokens). Save the | |
user access token in a file called `token.txt` and make sure it is available | |
when building the container. The token content should begin with `hf_...` | |
## Quickstart | |
The pipeline is managed using a single [`build.sh`](build.sh) script. | |
Pull the latest version of `stable-diffusion-docker` using `./build.sh pull`. | |
You will need to use the option `--token` to specify a valid [user access token](#huggingface-token) | |
when using [`./build run`](#run). | |
Alternately, build the image locally before running it. | |
## Build | |
Make sure your [user access token](#huggingface-token) is saved in a file called | |
`token.txt`. | |
To build: | |
```sh | |
./build.sh build # or just ./build.sh | |
``` | |
## Run | |
### Text-to-Image (`txt2img`) | |
Create an image from a text prompt. | |
To run: | |
```sh | |
./build.sh run 'Andromeda galaxy in a bottle' | |
``` | |
### Image-to-Image (`img2img`) | |
Create an image from an existing image and a text prompt. | |
First, copy an image to the `input` folder. Next, to run: | |
```sh | |
./build.sh run --image image.png 'Andromeda galaxy in a bottle' | |
``` | |
### Depth-Guided Diffusion (`depth2img`) | |
Modify an existing image with its depth map and a text prompt. | |
First, copy an image to the `input` folder. Next, to run: | |
```sh | |
./build.sh run --model 'stabilityai/stable-diffusion-2-depth' \ | |
--image image.png 'A detailed description of the objects to change' | |
``` | |
### Instruct Pix2Pix (`pix2pix`) | |
Modify an existing image with a text prompt. | |
First, copy an image to the `input` folder. Next, to run: | |
```sh | |
./build.sh run --model 'timbrooks/instruct-pix2pix' \ | |
--image image.png 'A detailed description of the objects to change' | |
``` | |
### Image Upscaling (`upscale4x`) | |
Create a high resolution image from an existing image with a text prompt. | |
First, copy an image to the `input` folder. Next, to run: | |
```sh | |
./build.sh run --model 'stabilityai/stable-diffusion-x4-upscaler' \ | |
--image image.png 'Andromeda galaxy in a bottle' | |
``` | |
### Diffusion Inpainting (`inpaint`) | |
Modify specific areas of an existing image with an image mask and a text prompt. | |
First, copy an image and an image mask to the `input` folder. White areas of the | |
mask will be diffused and black areas will be kept untouched. Next, to run: | |
```sh | |
./build.sh run --model 'runwayml/stable-diffusion-inpainting' \ | |
--image image.png --mask mask.png 'Andromeda galaxy in a bottle' | |
``` | |
## Options | |
The following are the most common options: | |
* `--prompt [PROMPT]`: the prompt to render into an image | |
* `--model [MODEL]`: the model used to render images (default is | |
`CompVis/stable-diffusion-v1-4`) | |
* `--height [HEIGHT]`: image height in pixels (default 512, must be divisible by 64) | |
* `--width [WIDTH]`: image width in pixels (default 512, must be divisible by 64) | |
* `--iters [ITERS]`: number of times to run pipeline (default 1) | |
* `--samples [SAMPLES]`: number of images to create per run (default 1) | |
* `--scale [SCALE]`: how closely the image should follow the prompt (default 7.5) | |
* `--scheduler [SCHEDULER]`: override the scheduler used to denoise the image | |
(default `None`) | |
* `--seed [SEED]`: RNG seed for repeatability (default is a random seed) | |
* `--steps [STEPS]`: number of sampling steps (default 50) | |
Other options: | |
* `--attention-slicing`: use less memory but decrease inference speed (default | |
is no attention slicing) | |
* `--device [DEVICE]`: the cpu or cuda device to use to render images (default | |
`cuda`) | |
* `--half`: use float16 tensors instead of float32 (default `float32`) | |
* `--image [IMAGE]`: the input image to use for image-to-image diffusion | |
(default `None`) | |
* `--image-scale [IMAGE_SCALE]`: how closely the image should follow the | |
original image (default `None`) | |
* `--mask [MASK]`: the input mask to use for diffusion inpainting (default | |
`None`) | |
* `--negative-prompt [NEGATIVE_PROMPT]`: the prompt to not render into an image | |
(default `None`) | |
* `--onnx`: use the onnx runtime for inference (default is off) | |
* `--skip`: skip safety checker (default is the safety checker is on) | |
* `--strength [STRENGTH]`: diffusion strength to apply to the input image | |
(default 0.75) | |
* `--token [TOKEN]`: specify a Huggingface user access token at the command line | |
instead of reading it from a file (default is a file) | |
* `--vae-tiling`: use less memory when generating ultra-high resolution images | |
but massively decrease inference speed (default is no tiling) | |
* `--xformers-memory-efficient-attention`: use less memory but require the | |
xformers library (default is that xformers is not required) | |
Some of the original `txt2img.py` options [have been renamed](https://github.com/fboulnois/stable-diffusion-docker/issues/49) | |
for easy-of-use and compatibility with other pipelines: | |
| txt2img | stable-diffusion-docker | | |
|---------|-------------------------| | |
| `--H` | `--height` | | |
| `--W` | `--width` | | |
| `--n_iter` | `--iters` | | |
| `--n_samples` | `--samples` | | |
| `--ddim_steps` | `--steps` | | |
## Examples | |
These commands are both identical: | |
```sh | |
./build.sh run 'abstract art' | |
./build.sh run --prompt 'abstract art' | |
``` | |
Set the seed to 42: | |
```sh | |
./build.sh run --seed 42 'abstract art' | |
``` | |
Options can be combined: | |
```sh | |
./build.sh run --scale 7.0 --seed 42 'abstract art' | |
``` | |
Many popular models are supported out-of-the-box: | |
| Model Name | Option using `--model` | | |
|------------|------------------------| | |
| [Stable Diffusion 1.4](https://huggingface.co/CompVis/stable-diffusion-v1-4) | `'CompVis/stable-diffusion-v1-4'` | | |
| [Stable Diffusion 1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) | `'runwayml/stable-diffusion-v1-5'` | | |
| [Stable Diffusion 2.0](https://huggingface.co/stabilityai/stable-diffusion-2) | `'stabilityai/stable-diffusion-2'` | | |
| [Stable Diffusion 2.1](https://huggingface.co/stabilityai/stable-diffusion-2-1) | `'stabilityai/stable-diffusion-2-1'` | | |
| [OpenJourney 1.0](https://huggingface.co/prompthero/openjourney) | `'prompthero/openjourney'` | | |
| [Dreamlike Diffusion 1.0](https://huggingface.co/dreamlike-art/dreamlike-diffusion-1.0) | `'dreamlike-art/dreamlike-diffusion-1.0'` | | |
| [and more!](https://huggingface.co/models?other=stable-diffusion&sort=likes) | ... | | |
```sh | |
./build.sh run --model 'prompthero/openjourney' --prompt 'abstract art' | |
``` | |
On systems without enough GPU VRAM, you can try mixing and matching options: | |
* Give Docker Desktop more resources by increasing the CPU, memory, and swap in | |
the Settings -> Resources section if the container is terminated | |
* Make images smaller than 512x512 using `--height` and `--width` to decrease | |
memory use and increase image creation speed | |
* Use `--half` to decrease memory use but slightly decrease image quality | |
* Use `--attention-slicing` to decrease memory use but also decrease image | |
creation speed | |
* Use `--xformers-memory-efficient-attention` to decrease memory use if the | |
pipeline and the hardware supports the option | |
* Decrease the number of samples and increase the number of iterations with | |
`--samples` and `--iters` to decrease overall memory use | |
* Skip the safety checker with `--skip` to run less code | |
```sh | |
./build.sh run --height 256 --width 256 --half \ | |
--attention-slicing --xformers-memory-efficient-attention \ | |
--samples 1 --iters 1 --skip --prompt 'abstract art' | |
``` | |
On Windows, if you aren't using WSL2 and instead use MSYS, MinGW, or Git Bash, | |
prefix your commands with `MSYS_NO_PATHCONV=1` (or export it beforehand): | |
```sh | |
MSYS_NO_PATHCONV=1 ./build.sh run --half --prompt 'abstract art' | |
``` | |
## Outputs | |
### Model | |
The model and other files are cached in a volume called `huggingface`. The | |
models are stored in `<volume>/diffusers/<model>/snapshots/<githash>/unet/<weights>`. | |
Checkpoint files (`ckpt`s) are unofficial versions of the official models, and | |
so these are not part of the official release. | |
### Images | |
The images are saved as PNGs in the `output` folder using the prompt text. The | |
`build.sh` script creates and mounts this folder as a volume in the container. | |