diff --git a/01.sh b/01.sh index 244d4a8..32f83a6 100755 --- a/01.sh +++ b/01.sh @@ -24,12 +24,12 @@ sl_folder ${SD01_DIR}/models gfpgan ${BASE_DIR}/models gfpgan sl_folder ${HOME} "Stable Diffusion UI" ${BASE_DIR}/outputs 01-Easy-Diffusion -if [ ! -f "$SD01_DIR/scripts/config.json" ]; then - cp -v "${SD_INSTALL_DIR}/parameters/01.txt" "$SD01_DIR/scripts/config.json" +if [ ! -f "$SD01_DIR/config.yaml" ]; then + cp -v "${SD_INSTALL_DIR}/parameters/01.txt" "$SD01_DIR/config.yaml" fi if [ ! -f "$SD01_DIR/start.sh" ]; then - curl -L https://github.com/easydiffusion/easydiffusion/releases/download/v2.5.41a/Easy-Diffusion-Linux.zip --output edui.zip + curl -L https://github.com/easydiffusion/easydiffusion/releases/download/v3.0.2/Easy-Diffusion-Linux.zip --output edui.zip unzip edui.zip cp -rf easy-diffusion/* . rm -rf easy-diffusion diff --git a/04.sh b/04.sh index 5ef7d4f..537a995 100755 --- a/04.sh +++ b/04.sh @@ -45,11 +45,14 @@ if [ ! -f "$SD04_DIR/parameters.txt" ]; then fi # Load updated malloc to fix memory leak # https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/6850#issuecomment-1432435503 -if [ ! -f "$SD04_DIR/webui/webui-user.sh" ]; then -cat >"$SD04_DIR/webui/webui-user.sh" < `WEBUI_VERSION=04` + +``` +docker run ... -e WEBUI_VERSION=04 ... holaflenain/stable-diffusion +``` + +or modify `WEBUI_VERSION` in [docker-compose.yml](/docker-compose.yml) + +## Docker Notes ### Using PUID and PGID @@ -45,36 +61,11 @@ Then add to your docker command like so: docker run -d ... -e "PUID=1000" -e "PGID=1000" ... holaflenain/stable-diffusion ``` -or substitute them in the docker-compose examples below. - -#### Docker Compose Example +or substitute them in [docker-compose.yml](/docker-compose.yml) +### Docker Compose -Using Easy-Diffusion as an example: - -```yaml -version: '3.1' -services: - stable-diffusion-test: - image: holaflenain/stable-diffusion:latest - container_name: stable-diffusion - environment: - - WEBUI_VERSION=01 - - NVIDIA_VISIBLE_DEVICES=all - - TZ=Europe/Paris - - PUID=1000 - - PGID=1000 - ports: - - '9000:9000/tcp' - volumes: - - '/my/own/datadir:/config:rw' - # or specify individual dirs - #- '/my/own/datadir:/config:rw' # config/program dir - #- '/my/own/datadir/outputs:/config/outputs:rw' - #- '/my/own/datadir/cache:/config/cache:rw' - runtime: nvidia - -``` +Reference [docker-compose.yml](/docker-compose.yml) which uses Easy-Diffusion as an example. ## Directory Structure @@ -105,46 +96,36 @@ By default, each user interface will save data in its own directory, which is au ├── 50-lama-cleaner └── 51-facefusion +## Project Notes + +Some projects have modified install/startup changes to address performance or suggested fixes. + +General changes are listed below and **specified in notes if they apply.** Specific project modifications are listed below these. + +###### Clean Environment + +When the container starts if the installed project is outdated compared to the _upstream project_ then the latest code is pulled and dependencies for installation are wiped and re-installed. Subsequent container starts will be much faster since the project will not be re-installed. This behavior can be **forced** by setting the docker environmental variable `CLEAN_ENV=true`. -## History -- **Version 2.0.2** : -move .cache folder to stable-diffusion/temp to avoid filling unraid's docker.img file. -(hopefully) fix all the things I broke in the last update :) - -- **Version 2.0.0** : -Utilize Conda to manage dependencies efficiently. -Prepared for Reactor in Auto1111, SD-Next, and ComfyUI. -More common folders merged in the models folder. -Split install scripts for easier maintenance. -Implemented various fixes. - -- **Version 1.5.1** : -Added a fix for Automatic1111/dreambooth - -- **Version 1.5.0** : -Added StableSwarm and VoltaML - -- **Version 1.4.0** : -Added FaceFusion - -- **Version 1.3.0** : -Added Kubin (Kubin is only for testing, not production ready) -Corrected update of ComfyUI at startup not working - -- **Version 1.2.0** : -Added Lama-cleaner and Kohya - -- **Version 1.1.0** : -Added Focus as interface 06 -Small Fixes - -- **Version 1.0.0** : -Lots of modifications on directory structure. -Before using this version it's best to do a backup, do a clean install and restore models,loras, ect from the backup. -## Troubleshoot : -First thing to try when a UI refuse to launch, remove the cache and the numbered folder (ex :02-sd-webui ) then relaunch the container +#### Stable Diffusion WebUI (02) Notes + +* Uses [Clean Environment](#clean-environment) performance improvement + +#### SD.Next (04) Notes + +* Uses [Clean Environment](#clean-environment) performance improvement +* Uses an updated `malloc` library to fix a [memory leak](https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/6722) + * This can be turned off by adding the docker environmental variable `NO_TCMALLOC=true` + +# History + +See [**Changelog**](/CHANGELOG.md) -## Support : +# Support + Support for the container available here : https://forums.unraid.net/topic/143645-support-stable-diffusion-advanced/ -Support for the WebUIs available on their respective pages. \ No newline at end of file +Support for the WebUIs available on their respective pages. + +## Troubleshooting + +First thing to try when a UI refuse to launch, remove the cache and the numbered folder (ex :02-sd-webui ) then relaunch the container \ No newline at end of file diff --git a/custom-sample.sh b/custom-sample.sh new file mode 100644 index 0000000..589f425 --- /dev/null +++ b/custom-sample.sh @@ -0,0 +1,57 @@ +#!/bin/bash +source /sl_folder.sh + +export PATH="/home/abc/miniconda3/bin:$PATH" + +# Set Variables and parameters + +# Name of the custom WebUI (will be used for the program itself and the output directory) +export CustomNAME="FooocusMRE" + +# Name of the base folder for custom WebUIs +export CustomBASE="00-custom" + +# Complete Path for the program files +export CustomPATH="/config/$CustomBASE/$CustomNAME" + +# Parameters to pass at launch +export CustomPARAMETERS="--listen 0.0.0.0 --port 9000" + +# Folders creation (Program files and output) +mkdir -p ${CustomPATH} +mkdir -p $BASE_DIR/outputs/$CustomBASE/$CustomNAME + +# Creation and Activation on the Conda Virtual Env +if [ ! -d ${CustomPATH}/env ]; then + conda create -p ${CustomPATH}/env -y +fi +source activate ${CustomPATH}/env +conda install -n base conda-libmamba-solver -y +conda install -c conda-forge git python=3.10 pip --solver=libmamba -y +conda install -c nvidia cuda-cudart --solver=libmamba -y + +# Clone/update program files +if [ ! -d ${CustomPATH}/Fooocus-MRE ]; then + cd "${CustomPATH}" && git clone https://github.com/MoonRide303/Fooocus-MRE.git +fi +cd ${CustomPATH}/Fooocus-MRE +git pull -X ours + +# Using the sl_folder to create symlinks needed to use the common models folder +sl_folder ${CustomPATH}/Fooocus-MRE/models checkpoints ${BASE_DIR}/models stable-diffusion +sl_folder ${CustomPATH}/Fooocus-MRE/models loras ${BASE_DIR}/models lora +sl_folder ${CustomPATH}/Fooocus-MRE/models vae ${BASE_DIR}/models vae +sl_folder ${CustomPATH}/Fooocus-MRE/models embeddings ${BASE_DIR}/models embeddings +sl_folder ${CustomPATH}/Fooocus-MRE/models hypernetworks ${BASE_DIR}/models hypernetwork +sl_folder ${CustomPATH}/Fooocus-MRE/models upscale_models ${BASE_DIR}/models upscale +sl_folder ${CustomPATH}/Fooocus-MRE/models clip_vision ${BASE_DIR}/models clip_vision +sl_folder ${CustomPATH}/Fooocus-MRE/models controlnet ${BASE_DIR}/models controlnet + +sl_folder ${CustomPATH}/Fooocus-MRE outputs ${BASE_DIR}/outputs/$CustomBASE $CustomNAME + +# installation of requirements +cd ${CustomPATH}/Fooocus-MRE +pip install -r requirements_versions.txt + +# Launch Fooocus-MRE +python launch.py ${CustomPARAMETERS} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..339531b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3.1' +services: + stable-diffusion-test: + image: holaflenain/stable-diffusion:latest + container_name: stable-diffusion + environment: + - WEBUI_VERSION=01 + - NVIDIA_VISIBLE_DEVICES=all + - TZ=Europe/Paris + - PUID=1000 + - PGID=1000 + ports: + - '9000:9000/tcp' + volumes: + - '/my/own/datadir:/config:rw' + # or specify individual dirs + #- '/my/own/datadir:/config:rw' # config/program dir + #- '/my/own/datadir/outputs:/config/outputs:rw' + #- '/my/own/datadir/cache:/config/cache:rw' + runtime: nvidia \ No newline at end of file diff --git a/entry.sh b/entry.sh index 89f1b34..7ca8c00 100644 --- a/entry.sh +++ b/entry.sh @@ -1,5 +1,12 @@ #!/bin/bash +# Copy sample custom script in user folder if it doesn't exists + +if [ ! -f "$BASE_DIR/scripts/custom-sample.sh" ]; then + mkdir -p $BASE_DIR/scripts + cp -v "/custom-sample.sh" "$BASE_DIR/scripts/custom-sample.sh" +fi + case $WEBUI_VERSION in 01) . /01.sh @@ -38,6 +45,7 @@ case $WEBUI_VERSION in . /70.sh ;; *) + . $BASE_DIR/scripts/$WEBUI_VERSION echo error in webui selection variable ;; esac diff --git a/parameters/01.txt b/parameters/01.txt index c9e0d55..2839d6f 100644 --- a/parameters/01.txt +++ b/parameters/01.txt @@ -1 +1,22 @@ -{"render_devices": "auto", "update_branch": "main", "net": {"listen_port": 9000, "listen_to_network": true}} +# Change listen_port if port 9000 is already in use on your system +# Set listen_to_network to true to make Easy Diffusion accessibble on your local network +net: + listen_port: 9000 + listen_to_network: true +render_devices: auto + +# Set open_browser_on_start to false to disable opening a new browser tab on each restart +ui: + open_browser_on_start: false + +# set update_branch to main to use the stable version, or to beta to use the experimental +# beta version. +update_branch: main + +# Set force_save_path to enforce an auto save path. Clients will not be able to change or +# disable auto save when this option is set. Please adapt the path in the examples to your +# needs. +# Windows: +# force_save_path: C:\\Easy Diffusion Images\\ +# Linux: +force_save_path: /config/outputs/01-Easy-Diffusion diff --git a/parameters/04.txt b/parameters/04.txt index c4969fd..7670d9d 100644 --- a/parameters/04.txt +++ b/parameters/04.txt @@ -6,4 +6,3 @@ --insecure --medvram --allow-code ---no-download diff --git a/sl_folder.sh b/sl_folder.sh index aea952c..ea97f74 100644 --- a/sl_folder.sh +++ b/sl_folder.sh @@ -12,10 +12,14 @@ sl_folder() { rm -rf "${1}/${2}" fi + # always remove previous symlink + # b/c if user changed target locations current symlink will be incorrect if [ -L "${1}/${2}" ]; then - rm -rf "${1}/${2}" + rm "${1}/${2}" + fi + # create symlink + ln -s "${3}/${4}/" "${1}" + if [ ! -L "${1}/${2}" ]; then + mv "${1}/${4}" "${1}/${2}" fi - - ln -s "${3}/${4}/" "/tmp" - mv "/tmp/${4}" "${1}/${2}" }