diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 64959f07..3872fb27 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,12 +13,11 @@ If you would like to contribute to this project, there is a discord for dicussio This is in-flux, but one way to get a development environment running for editing the UI of this project is: (swap `.sh` or `.bat` in instructions depending on your environment, and be sure to adjust any paths to match where you're working) -1) `git clone` the repository, e.g. to `/projects/stable-diffusion-ui-repo` -2) Download the pre-built end user archive from the link on github, and extract it, e.g. to `/projects/stable-diffusion-ui-archive` -3) `cd /projects/stable-diffusion-ui-archive` and run the script to set up and start the project, e.g. `start.sh` -4) Check you can view and generate images on `localhost:9000` -5) Close the server, and edit `/projects/stable-diffusion-ui-archive/scripts/on_env_start.sh` -6) Comment out the lines near the bottom that copies the `files/ui` folder, e.g: +1) Install the project to a new location using the [usual installation process](https://github.com/cmdr2/stable-diffusion-ui#installation), e.g. to `/projects/stable-diffusion-ui-archive` +2) Start the newly installed project, and check that you can view and generate images on `localhost:9000` +3) Next, please clone the project repository using `git clone` (e.g. to `/projects/stable-diffusion-ui-repo`) +4) Close the server (started in step 2), and edit `/projects/stable-diffusion-ui-archive/scripts/on_env_start.sh` (or `on_env_start.bat`) +5) Comment out the lines near the bottom that copies the `files/ui` folder, e.g: for `.sh` ``` @@ -33,13 +32,13 @@ REM @xcopy sd-ui-files\ui ui /s /i /Y REM @copy sd-ui-files\scripts\on_sd_start.bat scripts\ /Y REM @copy "sd-ui-files\scripts\Start Stable Diffusion UI.cmd" . /Y ``` -7) Comment out the line at the top of `/projects/stable-diffusion-ui-archive/scripts/on_sd_start.sh` that copies `on_env_start`. For e.g. `@copy sd-ui-files\scripts\on_env_start.bat scripts\ /Y` +6) Next, comment out the line at the top of `/projects/stable-diffusion-ui-archive/scripts/on_sd_start.sh` (or `on_sd_start.bat`) that copies `on_env_start`. For e.g. `@rem @copy sd-ui-files\scripts\on_env_start.bat scripts\ /Y` 8) Delete the current `ui` folder at `/projects/stable-diffusion-ui-archive/ui` 9) Now make a symlink between the repository clone (where you will be making changes) and this archive (where you will be running stable diffusion): `ln -s /projects/stable-diffusion-ui-repo/ui /projects/stable-diffusion-ui-archive/ui` or for Windows -`mklink /D \projects\stable-diffusion-ui-archive\ui \projects\stable-diffusion-ui-repo\ui` (link name first, source repo dir second) -9) Run the archive again `start.sh` and ensure you can still use the UI. +`mklink /J \projects\stable-diffusion-ui-archive\ui \projects\stable-diffusion-ui-repo\ui` (link name first, source repo dir second) +9) Run the project again (like in step 2) and ensure you can still use the UI. 10) Congrats, now any changes you make in your repo `ui` folder are linked to this running archive of the app and can be previewed in the browser. Check the `ui/frontend/build/README.md` for instructions on running and building the React code. @@ -47,9 +46,5 @@ Check the `ui/frontend/build/README.md` for instructions on running and building ## Development environment for Installer changes Build the Windows installer using Windows, and the Linux installer using Linux. Don't mix the two, and don't use WSL. An Ubuntu VM is fine for building the Linux installer on a Windows host. -1. Install Miniconda 3 or Anaconda. -2. Install `conda install -c conda-forge -y conda-pack` -3. Open the Anaconda Prompt. Do not use WSL if you're building for Windows. -4. Run `build.bat` or `./build.sh` depending on whether you're in Windows or Linux. -5. Compress the `stable-diffusion-ui` folder created inside the `dist` folder. Make a `zip` for Windows, and `tar.xz` for Linux (smaller files, and Linux users already have tar). -6. Make a new GitHub release and upload the Windows and Linux installer builds. +1. Run `build.bat` or `./build.sh` depending on whether you're in Windows or Linux. +2. Make a new GitHub release and upload the Windows and Linux installer builds created inside the `dist` folder. diff --git a/README.md b/README.md index 9ffc7dd4..47edb505 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Useful for judging (and stopping) an image quickly, without waiting for it to fi # System Requirements 1. Windows 10/11, or Linux. Experimental support for Mac is coming soon. 2. An NVIDIA graphics card, preferably with 4GB or more of VRAM. If you don't have a compatible graphics card, it'll automatically run in the slower "CPU Mode". -3. Minimum 8 GB of RAM. +3. Minimum 8 GB of RAM and 25GB of disk space. You don't need to install or struggle with Python, Anaconda, Docker etc. The installer will take care of whatever is needed. diff --git a/build.sh b/build.sh index dc4a5047..f4538e5c 100755 --- a/build.sh +++ b/build.sh @@ -28,6 +28,7 @@ mkdir -p dist/linux-mac/stable-diffusion-ui/scripts cp scripts/on_env_start.sh dist/linux-mac/stable-diffusion-ui/scripts/ cp scripts/bootstrap.sh dist/linux-mac/stable-diffusion-ui/scripts/ +cp scripts/functions.sh dist/linux-mac/stable-diffusion-ui/scripts/ cp scripts/start.sh dist/linux-mac/stable-diffusion-ui/ cp LICENSE dist/linux-mac/stable-diffusion-ui/ cp "CreativeML Open RAIL-M License" dist/linux-mac/stable-diffusion-ui/ diff --git a/scripts/Developer Console.cmd b/scripts/Developer Console.cmd index 544ec09b..70e809a3 100644 --- a/scripts/Developer Console.cmd +++ b/scripts/Developer Console.cmd @@ -8,6 +8,8 @@ set PATH=C:\Windows\System32;%PATH% if exist "installer" set PATH=%cd%\installer;%cd%\installer\Library\bin;%cd%\installer\Scripts;%cd%\installer\Library\usr\bin;%PATH% if exist "installer_files\env" set PATH=%cd%\installer_files\env;%cd%\installer_files\env\Library\bin;%cd%\installer_files\env\Scripts;%cd%\installer_files\Library\usr\bin;%PATH% +set PYTHONPATH=%cd%\installer;%cd%\installer_files\env + @rem activate the installer env call conda activate diff --git a/scripts/Start Stable Diffusion UI.cmd b/scripts/Start Stable Diffusion UI.cmd index 7f7d0539..76af7a35 100644 --- a/scripts/Start Stable Diffusion UI.cmd +++ b/scripts/Start Stable Diffusion UI.cmd @@ -1,5 +1,6 @@ @echo off +cd /d %~dp0 set PATH=C:\Windows\System32;%PATH% @rem set legacy installer's PATH, if it exists @@ -11,6 +12,8 @@ call scripts\bootstrap.bat @rem set new installer's PATH, if it downloaded any packages if exist "installer_files\env" set PATH=%cd%\installer_files\env;%cd%\installer_files\env\Library\bin;%cd%\installer_files\env\Scripts;%cd%\installer_files\Library\usr\bin;%PATH% +set PYTHONPATH=%cd%\installer;%cd%\installer_files\env + @rem Test the bootstrap call where git call git --version diff --git a/scripts/bootstrap.bat b/scripts/bootstrap.bat index 27004ca2..7d067cc3 100644 --- a/scripts/bootstrap.bat +++ b/scripts/bootstrap.bat @@ -13,6 +13,11 @@ set LEGACY_INSTALL_ENV_DIR=%cd%\installer set MICROMAMBA_DOWNLOAD_URL=https://github.com/cmdr2/stable-diffusion-ui/releases/download/v1.1/micromamba.exe set umamba_exists=F +set OLD_APPDATA=%APPDATA% +set OLD_USERPROFILE=%USERPROFILE% +set APPDATA=%cd%\installer_files\appdata +set USERPROFILE=%cd%\profile + @rem figure out whether git and conda needs to be installed if exist "%INSTALL_ENV_DIR%" set PATH=%INSTALL_ENV_DIR%;%INSTALL_ENV_DIR%\Library\bin;%INSTALL_ENV_DIR%\Scripts;%INSTALL_ENV_DIR%\Library\usr\bin;%PATH% @@ -35,7 +40,16 @@ if "%PACKAGES_TO_INSTALL%" NEQ "" ( echo "Downloading micromamba from %MICROMAMBA_DOWNLOAD_URL% to %MAMBA_ROOT_PREFIX%\micromamba.exe" mkdir "%MAMBA_ROOT_PREFIX%" - call curl -L "%MICROMAMBA_DOWNLOAD_URL%" > "%MAMBA_ROOT_PREFIX%\micromamba.exe" + call curl -Lk "%MICROMAMBA_DOWNLOAD_URL%" > "%MAMBA_ROOT_PREFIX%\micromamba.exe" + + @REM if "%ERRORLEVEL%" NEQ "0" ( + @REM echo "There was a problem downloading micromamba. Cannot continue." + @REM pause + @REM exit /b + @REM ) + + mkdir "%APPDATA%" + mkdir "%USERPROFILE%" @rem test the mamba binary echo Micromamba version: @@ -57,3 +71,7 @@ if "%PACKAGES_TO_INSTALL%" NEQ "" ( exit /b ) ) + +@rem revert to the old APPDATA. only needed it for bypassing a bug in micromamba (with special characters) +set APPDATA=%OLD_APPDATA% +set USERPROFILE=%OLD_USERPROFILE% diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index c110b11f..6a929133 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -6,6 +6,9 @@ # This enables a user to install this project without manually installing conda and git. +source ./scripts/functions.sh + +set -o pipefail OS_NAME=$(uname -s) case "${OS_NAME}" in @@ -29,6 +32,7 @@ export MAMBA_ROOT_PREFIX="$(pwd)/installer_files/mamba" INSTALL_ENV_DIR="$(pwd)/installer_files/env" LEGACY_INSTALL_ENV_DIR="$(pwd)/installer" MICROMAMBA_DOWNLOAD_URL="https://micro.mamba.pm/api/micromamba/${OS_NAME}-${OS_ARCH}/latest" +umamba_exists="F" # figure out whether git and conda needs to be installed if [ -e "$INSTALL_ENV_DIR" ]; then export PATH="$INSTALL_ENV_DIR/bin:$PATH"; fi @@ -38,15 +42,25 @@ PACKAGES_TO_INSTALL="" if [ ! -e "$LEGACY_INSTALL_ENV_DIR/etc/profile.d/conda.sh" ] && [ ! -e "$INSTALL_ENV_DIR/etc/profile.d/conda.sh" ]; then PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL conda"; fi if ! hash "git" &>/dev/null; then PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL git"; fi +if "$MAMBA_ROOT_PREFIX/micromamba" --version &>/dev/null; then umamba_exists="T"; fi + # (if necessary) install git and conda into a contained environment if [ "$PACKAGES_TO_INSTALL" != "" ]; then # download micromamba - if [ ! -e "$MAMBA_ROOT_PREFIX/micromamba" ]; then + if [ "$umamba_exists" == "F" ]; then echo "Downloading micromamba from $MICROMAMBA_DOWNLOAD_URL to $MAMBA_ROOT_PREFIX/micromamba" mkdir -p "$MAMBA_ROOT_PREFIX" curl -L "$MICROMAMBA_DOWNLOAD_URL" | tar -xvj bin/micromamba -O > "$MAMBA_ROOT_PREFIX/micromamba" + if [ "$?" != "0" ]; then + echo + echo "EE micromamba download failed" + echo "EE If the lines above contain 'bzip2: Cannot exec', your system doesn't have bzip2 installed" + echo "EE If there are network errors, please check your internet setup" + fail "micromamba download failed" + fi + chmod u+x "$MAMBA_ROOT_PREFIX/micromamba" # test the mamba binary @@ -56,15 +70,17 @@ if [ "$PACKAGES_TO_INSTALL" != "" ]; then # create the installer env if [ ! -e "$INSTALL_ENV_DIR" ]; then - "$MAMBA_ROOT_PREFIX/micromamba" create -y --prefix "$INSTALL_ENV_DIR" + "$MAMBA_ROOT_PREFIX/micromamba" create -y --prefix "$INSTALL_ENV_DIR" || fail "unable to create the install environment" + fi + + if [ ! -e "$INSTALL_ENV_DIR" ]; then + fail "There was a problem while installing$PACKAGES_TO_INSTALL using micromamba. Cannot continue." fi echo "Packages to install:$PACKAGES_TO_INSTALL" "$MAMBA_ROOT_PREFIX/micromamba" install -y --prefix "$INSTALL_ENV_DIR" -c conda-forge $PACKAGES_TO_INSTALL - - if [ ! -e "$INSTALL_ENV_DIR" ]; then - echo "There was a problem while installing$PACKAGES_TO_INSTALL using micromamba. Cannot continue." - exit + if [ "$?" != "0" ]; then + fail "Installation of the packages '$PACKAGES_TO_INSTALL' failed." fi fi diff --git a/scripts/developer_console.sh b/scripts/developer_console.sh index 3b2208ff..58344678 100755 --- a/scripts/developer_console.sh +++ b/scripts/developer_console.sh @@ -1,5 +1,7 @@ #!/bin/bash +cd "$(dirname "${BASH_SOURCE[0]}")" + if [ "$0" == "bash" ]; then echo "Opening Stable Diffusion UI - Developer Console.." echo "" @@ -35,5 +37,6 @@ if [ "$0" == "bash" ]; then echo "" else - bash --init-file developer_console.sh + file_name=$(basename "${BASH_SOURCE[0]}") + bash --init-file "$file_name" fi diff --git a/scripts/functions.sh b/scripts/functions.sh new file mode 100644 index 00000000..c1732da0 --- /dev/null +++ b/scripts/functions.sh @@ -0,0 +1,32 @@ +# +# utility functions for all scripts +# + +fail() { + echo + echo "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" + echo + if [ "$1" != "" ]; then + echo ERROR: $1 + else + echo An error occurred. + fi + cat <> scripts/install_status.txt else - printf "\n\nError downloading Stable Diffusion UI. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "git clone failed" fi fi diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat index 4c188183..51a51549 100644 --- a/scripts/on_sd_start.bat +++ b/scripts/on_sd_start.bat @@ -71,6 +71,8 @@ if exist "Open Developer Console.cmd" del "Open Developer Console.cmd" set TMP=%cd%\tmp set TEMP=%cd%\tmp + set PYTHONPATH=%cd%;%cd%\env\lib\site-packages + @call conda env create --prefix env -f environment.yaml || ( @echo. & echo "Error installing the packages necessary for Stable Diffusion. Sorry about that, please try to:" & echo " 1. Run this installer again." & echo " 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting" & echo " 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB" & echo " 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues" & echo "Thanks!" & echo. pause @@ -108,6 +110,8 @@ set PATH=C:\Windows\System32;%PATH% set TMP=%cd%\tmp set TEMP=%cd%\tmp + set PYTHONPATH=%cd%;%cd%\env\lib\site-packages + @call pip install -e git+https://github.com/TencentARC/GFPGAN#egg=GFPGAN || ( @echo. & echo "Error installing the packages necessary for GFPGAN (Face Correction). Sorry about that, please try to:" & echo " 1. Run this installer again." & echo " 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting" & echo " 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB" & echo " 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues" & echo "Thanks!" & echo. pause @@ -141,6 +145,8 @@ set PATH=C:\Windows\System32;%PATH% set TMP=%cd%\tmp set TEMP=%cd%\tmp + set PYTHONPATH=%cd%;%cd%\env\lib\site-packages + @call pip install -e git+https://github.com/xinntao/Real-ESRGAN#egg=realesrgan || ( @echo. & echo "Error installing the packages necessary for ESRGAN (Resolution Upscaling). Sorry about that, please try to:" & echo " 1. Run this installer again." & echo " 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting" & echo " 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB" & echo " 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues" & echo "Thanks!" & echo. pause @@ -168,6 +174,8 @@ set PATH=C:\Windows\System32;%PATH% set TMP=%cd%\tmp set TEMP=%cd%\tmp + set PYTHONPATH=%cd%;%cd%\env\lib\site-packages + @call conda install -c conda-forge -y --prefix env uvicorn fastapi || ( echo "Error installing the packages necessary for Stable Diffusion UI. Sorry about that, please try to:" & echo " 1. Run this installer again." & echo " 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting" & echo " 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB" & echo " 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues" & echo "Thanks!" pause @@ -375,6 +383,9 @@ call python --version @set SD_UI_PATH=%cd%\ui @cd stable-diffusion -@uvicorn server:app --app-dir "%SD_UI_PATH%" --port 9000 --host 0.0.0.0 +@if NOT DEFINED SD_UI_BIND_PORT set SD_UI_BIND_PORT=9000 +@if NOT DEFINED SD_UI_BIND_IP set SD_UI_BIND_IP=0.0.0.0 +@uvicorn server:app --app-dir "%SD_UI_PATH%" --port %SD_UI_BIND_PORT% --host %SD_UI_BIND_IP% + @pause diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh index 6facac16..d4bb1ad1 100755 --- a/scripts/on_sd_start.sh +++ b/scripts/on_sd_start.sh @@ -1,5 +1,7 @@ #!/bin/bash +source ./scripts/functions.sh + cp sd-ui-files/scripts/on_env_start.sh scripts/ cp sd-ui-files/scripts/bootstrap.sh scripts/ @@ -7,14 +9,14 @@ cp sd-ui-files/scripts/bootstrap.sh scripts/ CONDA_BASEPATH=$(conda info --base) source "$CONDA_BASEPATH/etc/profile.d/conda.sh" # avoids the 'shell not initialized' error -conda activate +conda activate || fail "Failed to activate conda" # remove the old version of the dev console script, if it's still present if [ -e "open_dev_console.sh" ]; then rm "open_dev_console.sh" fi -python -c "import os; import shutil; frm = 'sd-ui-files/ui/hotfix/9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'; dst = os.path.join(os.path.expanduser('~'), '.cache', 'huggingface', 'transformers', '9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'); shutil.copyfile(frm, dst) if os.path.exists(dst) else print(''); print('Hotfixed broken JSON file from OpenAI');" +python -c "import os; import shutil; frm = 'sd-ui-files/ui/hotfix/9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'; dst = os.path.join(os.path.expanduser('~'), '.cache', 'huggingface', 'transformers', '9c24e6cd9f499d02c4f21a033736dabd365962dc80fe3aeb57a8f85ea45a20a3.26fead7ea4f0f843f6eb4055dfd25693f1a71f3c6871b184042d4b126244e142'); shutil.copyfile(frm, dst) if os.path.exists(dst) else print(''); print('Hotfixed broken JSON file from OpenAI');" # Caution, this file will make your eyes and brain bleed. It's such an unholy mess. # Note to self: Please rewrite this in Python. For the sake of your own sanity. @@ -28,8 +30,8 @@ if [ -e "scripts/install_status.txt" ] && [ `grep -c sd_git_cloned scripts/insta git pull git -c advice.detachedHead=false checkout f6cfebffa752ee11a7b07497b8529d5971de916c - git apply ../ui/sd_internal/ddim_callback.patch - git apply ../ui/sd_internal/env_yaml.patch + git apply ../ui/sd_internal/ddim_callback.patch || fail "ddim patch failed" + git apply ../ui/sd_internal/env_yaml.patch || fail "yaml patch failed" cd .. else @@ -38,16 +40,14 @@ else if git clone https://github.com/basujindal/stable-diffusion.git ; then echo sd_git_cloned >> scripts/install_status.txt else - printf "\n\nError downloading Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "git clone of basujindal/stable-diffusion.git failed" fi cd stable-diffusion git -c advice.detachedHead=false checkout f6cfebffa752ee11a7b07497b8529d5971de916c - git apply ../ui/sd_internal/ddim_callback.patch - git apply ../ui/sd_internal/env_yaml.patch + git apply ../ui/sd_internal/ddim_callback.patch || fail "ddim patch failed" + git apply ../ui/sd_internal/env_yaml.patch || fail "yaml patch failed" cd .. fi @@ -57,37 +57,32 @@ cd stable-diffusion if [ `grep -c conda_sd_env_created ../scripts/install_status.txt` -gt "0" ]; then echo "Packages necessary for Stable Diffusion were already installed" - conda activate ./env + conda activate ./env || fail "conda activate failed" else printf "\n\nDownloading packages necessary for Stable Diffusion..\n" printf "\n\n***** This will take some time (depending on the speed of the Internet connection) and may appear to be stuck, but please be patient ***** ..\n\n" # prevent conda from using packages from the user's home directory, to avoid conflicts export PYTHONNOUSERSITE=1 + export PYTHONPATH="$(pwd):$(pwd)/env/lib/site-packages" if conda env create --prefix env --force -f environment.yaml ; then echo "Installed. Testing.." else - printf "\n\nError installing the packages necessary for Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "'conda env create' failed" fi - conda activate ./env + conda activate ./env || fail "conda activate failed" if conda install -c conda-forge --prefix ./env -y antlr4-python3-runtime=4.8 ; then echo "Installed. Testing.." else - printf "\n\nError installing antlr4-python3-runtime for Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Error installing antlr4-python3-runtime" fi out_test=`python -c "import torch; import ldm; import transformers; import numpy; import antlr4; print(42)"` if [ "$out_test" != "42" ]; then - printf "\n\nDependency test failed! Error installing the packages necessary for Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Dependency test failed" fi echo conda_sd_env_created >> ../scripts/install_status.txt @@ -99,20 +94,20 @@ else printf "\n\nDownloading packages necessary for GFPGAN (Face Correction)..\n" export PYTHONNOUSERSITE=1 + export PYTHONPATH="$(pwd):$(pwd)/env/lib/site-packages" if pip install -e git+https://github.com/TencentARC/GFPGAN#egg=GFPGAN ; then echo "Installed. Testing.." else - printf "\n\nError installing the packages necessary for GFPGAN (Face Correction). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Error installing the packages necessary for GFPGAN (Face Correction)." fi out_test=`python -c "from gfpgan import GFPGANer; print(42)"` if [ "$out_test" != "42" ]; then - printf "\n\nDependency test failed! Error installing the packages necessary for GFPGAN (Face Correction). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + echo "EE The dependency check has failed. This usually means that some system libraries are missing." + echo "EE On Debian/Ubuntu systems, this are often these packages: libsm6 libxext6 libxrender-dev" + echo "EE Other Linux distributions might have different package names for these libraries." + fail "GFPGAN dependency test failed" fi echo conda_sd_gfpgan_deps_installed >> ../scripts/install_status.txt @@ -124,20 +119,17 @@ else printf "\n\nDownloading packages necessary for ESRGAN (Resolution Upscaling)..\n" export PYTHONNOUSERSITE=1 + export PYTHONPATH="$(pwd):$(pwd)/env/lib/site-packages" if pip install -e git+https://github.com/xinntao/Real-ESRGAN#egg=realesrgan ; then echo "Installed. Testing.." else - printf "\n\nError installing the packages necessary for ESRGAN (Resolution Upscaling). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Error installing the packages necessary for ESRGAN" fi out_test=`python -c "from basicsr.archs.rrdbnet_arch import RRDBNet; from realesrgan import RealESRGANer; print(42)"` if [ "$out_test" != "42" ]; then - printf "\n\nDependency test failed! Error installing the packages necessary for ESRGAN (Resolution Upscaling). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "ESRGAN dependency test failed" fi echo conda_sd_esrgan_deps_installed >> ../scripts/install_status.txt @@ -149,19 +141,16 @@ else printf "\n\nDownloading packages necessary for Stable Diffusion UI..\n\n" export PYTHONNOUSERSITE=1 + export PYTHONPATH="$(pwd):$(pwd)/env/lib/site-packages" if conda install -c conda-forge --prefix ./env -y uvicorn fastapi ; then echo "Installed. Testing.." else - printf "\n\nError installing the packages necessary for Stable Diffusion UI. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "'conda install uvicorn' failed" fi if ! command -v uvicorn &> /dev/null; then - printf "\n\nUI packages not found! Error installing the packages necessary for Stable Diffusion UI. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "UI packages not found!" fi echo conda_sd_ui_deps_installed >> ../scripts/install_status.txt @@ -193,15 +182,10 @@ if [ ! -f "sd-v1-4.ckpt" ]; then if [ -f "sd-v1-4.ckpt" ]; then model_size=`find "sd-v1-4.ckpt" -printf "%s"` if [ ! "$model_size" == "4265380512" ]; then - printf "\n\nError: The downloaded model file was invalid! Bytes downloaded: $model_size\n\n" - printf "\n\nError downloading the data files (weights) for Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "The downloaded model file was invalid! Bytes downloaded: $model_size" fi else - printf "\n\nError downloading the data files (weights) for Stable Diffusion. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Error downloading the data files (weights) for Stable Diffusion" fi fi @@ -225,15 +209,10 @@ if [ ! -f "GFPGANv1.3.pth" ]; then if [ -f "GFPGANv1.3.pth" ]; then model_size=`find "GFPGANv1.3.pth" -printf "%s"` if [ ! "$model_size" -eq "348632874" ]; then - printf "\n\nError: The downloaded GFPGAN model file was invalid! Bytes downloaded: $model_size\n\n" - printf "\n\nError downloading the data files (weights) for GFPGAN (Face Correction). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "The downloaded GFPGAN model file was invalid! Bytes downloaded: $model_size" fi else - printf "\n\nError downloading the data files (weights) for GFPGAN (Face Correction). Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Error downloading the data files (weights) for GFPGAN (Face Correction)." fi fi @@ -257,15 +236,10 @@ if [ ! -f "RealESRGAN_x4plus.pth" ]; then if [ -f "RealESRGAN_x4plus.pth" ]; then model_size=`find "RealESRGAN_x4plus.pth" -printf "%s"` if [ ! "$model_size" -eq "67040989" ]; then - printf "\n\nError: The downloaded ESRGAN x4plus model file was invalid! Bytes downloaded: $model_size\n\n" - printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "The downloaded ESRGAN x4plus model file was invalid! Bytes downloaded: $model_size" fi else - printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Error downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus" fi fi @@ -289,15 +263,10 @@ if [ ! -f "RealESRGAN_x4plus_anime_6B.pth" ]; then if [ -f "RealESRGAN_x4plus_anime_6B.pth" ]; then model_size=`find "RealESRGAN_x4plus_anime_6B.pth" -printf "%s"` if [ ! "$model_size" -eq "17938799" ]; then - printf "\n\nError: The downloaded ESRGAN x4plus_anime model file was invalid! Bytes downloaded: $model_size\n\n" - printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus_anime. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "The downloaded ESRGAN x4plus_anime model file was invalid! Bytes downloaded: $model_size" fi else - printf "\n\nError downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus_anime. Sorry about that, please try to:\n 1. Run this installer again.\n 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting\n 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB\n 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues\nThanks!\n\n" - read -p "Press any key to continue" - exit + fail "Error downloading the data files (weights) for ESRGAN (Resolution Upscaling) x4plus_anime." fi fi @@ -352,6 +321,6 @@ cd .. export SD_UI_PATH=`pwd`/ui cd stable-diffusion -uvicorn server:app --app-dir "$SD_UI_PATH" --port 9000 --host 0.0.0.0 +uvicorn server:app --app-dir "$SD_UI_PATH" --port ${SD_UI_BIND_PORT:-9000} --host ${SD_UI_BIND_IP:-0.0.0.0} read -p "Press any key to continue" diff --git a/scripts/start.sh b/scripts/start.sh index 14093681..4bb6cb66 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -6,17 +6,17 @@ cd "$(dirname "${BASH_SOURCE[0]}")" if [ -e "installer" ]; then export PATH="$(pwd)/installer/bin:$PATH"; fi # Setup the packages required for the installer -scripts/bootstrap.sh +scripts/bootstrap.sh || exit 1 # set new installer's PATH, if it downloaded any packages if [ -e "installer_files/env" ]; then export PATH="$(pwd)/installer_files/env/bin:$PATH"; fi # Test the bootstrap which git -git --version +git --version || exit 1 which conda -conda --version +conda --version || exit 1 # Download the rest of the installer and UI scripts/on_env_start.sh diff --git a/ui/index.html b/ui/index.html index 2a320c7e..2d6f0833 100644 --- a/ui/index.html +++ b/ui/index.html @@ -227,7 +227,10 @@
- Type a prompt and press the "Make Image" button.

You can set an "Initial Image" if you want to guide the AI.

You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section and selecting the desired modifiers.

Click "Advanced Settings" for additional settings like seed, image size, number of images to generate etc.

Enjoy! :) + Type a prompt and press the "Make Image" button.

You can set an "Initial Image" if you want to guide the AI.

+ You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section + and selecting the desired modifiers.

+ Click "Image Settings" for additional settings like seed, image size, number of images to generate etc.

Enjoy! :)
diff --git a/ui/media/js/auto-save.js b/ui/media/js/auto-save.js index ddf9b374..8b97f461 100644 --- a/ui/media/js/auto-save.js +++ b/ui/media/js/auto-save.js @@ -282,9 +282,11 @@ function tryLoadOldSettings() { Object.keys(individual_settings_map).forEach(localStorageKey => { var localStorageValue = localStorage.getItem(localStorageKey); if (localStorageValue !== null) { - var setting = SETTINGS[individual_settings_map[localStorageKey]] - if (setting == null || setting == undefined) { - return + let key = individual_settings_map[localStorageKey] + var setting = SETTINGS[key] + if (!setting) { + console.warn(`Attempted to map old setting ${key}, but no setting found`); + return null; } if (setting.element.type == "checkbox" && (typeof localStorageValue === "string" || localStorageValue instanceof String)) { localStorageValue = localStorageValue == "true" diff --git a/ui/media/js/main.js b/ui/media/js/main.js index bd0934ef..ed988b8b 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -914,15 +914,15 @@ function getPrompts() { prompts = prompts.map(prompt => prompt.trim()) prompts = prompts.filter(prompt => prompt !== '') + if (activeTags.length > 0) { + const promptTags = activeTags.map(x => x.name).join(", ") + prompts = prompts.map((prompt) => `${prompt}, ${promptTags}`) + } + let promptsToMake = applySetOperator(prompts) promptsToMake = applyPermuteOperator(promptsToMake) - if (activeTags.length <= 0) { - return promptsToMake - } - - const promptTags = activeTags.map(x => x.name).join(", ") - return promptsToMake.map((prompt) => `${prompt}, ${promptTags}`) + return promptsToMake } function applySetOperator(prompts) { diff --git a/ui/sd_internal/runtime.py b/ui/sd_internal/runtime.py index 93fc7caa..1d77ad51 100644 --- a/ui/sd_internal/runtime.py +++ b/ui/sd_internal/runtime.py @@ -761,11 +761,13 @@ def img_to_base64_str(img, output_format="PNG"): img.save(buffered, format=output_format) buffered.seek(0) img_byte = buffered.getvalue() - img_str = "data:image/png;base64," + base64.b64encode(img_byte).decode() + mime_type = "image/png" if output_format.lower() == "png" else "image/jpeg" + img_str = f"data:{mime_type};base64," + base64.b64encode(img_byte).decode() return img_str def base64_str_to_buffer(img_str): - img_str = img_str[len("data:image/png;base64,"):] + mime_type = "image/png" if img_str.startswith("data:image/png;") else "image/jpeg" + img_str = img_str[len(f"data:{mime_type};base64,"):] data = base64.b64decode(img_str) buffered = BytesIO(data) return buffered