From 9ef9ce76f8b9cae91c4b4ac9fd20c16c8bacbdca Mon Sep 17 00:00:00 2001 From: Haka <76921756+Hakorr@users.noreply.github.com> Date: Sun, 4 Sep 2022 20:55:29 +0300 Subject: [PATCH 001/118] Fixed artist names and added more entries - new artists - new emotions - removed the "good" emotion - one new color - one new visual style --- ui/modifiers.json | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/ui/modifiers.json b/ui/modifiers.json index c9b43ed5..8489aa81 100644 --- a/ui/modifiers.json +++ b/ui/modifiers.json @@ -20,6 +20,7 @@ "16-bit", "Anaglyph", "Anime", + "Manga", "Cartoon", "CGI", "Comic Book", @@ -88,6 +89,7 @@ "Color", [ "Beautiful Lighting", + "Dynamic Lighting", "Colorful", "Electric Colors", "Infrared", @@ -100,11 +102,14 @@ [ "Angry", "Evil", - "Excited", - "Good", + "Fear", "Happy", "Lonely", - "Sad" + "Sad", + "Disgusted", + "Embarrassed", + "Surprised", + "Excited" ] ], [ @@ -121,20 +126,22 @@ "by David Mann", "by Frida Kahlo", "by H.R. Giger", - "by Hayao Mizaki", + "by Hayao Miyazaki", "by Ivan Shishkin", "by Johannes Vermeer", "by Katsushika Hokusai", "by Ko Young Hoon", - "by Leonardo Da Vinci", + "by Leonardo da Vinci", "by Lisa Frank", - "by Mahmoud Sai", + "by Mahmoud Saïd", "by Mark Brooks", "by Pablo Picasso", "by Richard Dadd", - "by Salvador Dali", + "by Salvador Dalí", "by Tivadar Csontváry Kosztka", - "by Yoshitaka Amano" + "by Yoshitaka Amano", + "by John William Waterhouse", + "by Banksy" ] ] ] From 96a6b11ab4d9af11dd90c90903efd091896efb11 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 13:10:19 +0530 Subject: [PATCH 002/118] Show a warning if the initial image is larger than 768x768, can cause out of memory errors --- ui/index.html | 53 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/ui/index.html b/ui/index.html index 4578ec04..3cff9ebd 100644 --- a/ui/index.html +++ b/ui/index.html @@ -384,6 +384,8 @@ const USE_FULL_PRECISION_KEY = "useFullPrecision" const USE_TURBO_MODE_KEY = "useTurboMode" const HEALTH_PING_INTERVAL = 5 // seconds +const IMAGE_REGEX = new RegExp('data:image/[A-Za-z]+;base64') + let promptField = document.querySelector('#prompt') let numOutputsTotalField = document.querySelector('#num_outputs_total') let numOutputsParallelField = document.querySelector('#num_outputs_parallel') @@ -495,8 +497,21 @@ function setStatus(statusType, msg, msgType) { } } +function logMsg(msg, level) { + if (level === 'error') { + outputMsg.innerHTML = 'Error: ' + msg + '' + } else if (level === 'warn') { + outputMsg.innerHTML = 'Warning: ' + msg + '' + } else { + outputMsg.innerHTML = msg + } + + console.log(level, msg) +} + function logError(msg, res) { - outputMsg.innerHTML = 'Error: ' + msg + '' + logMsg(msg, 'error') + console.log('request error', res) setStatus('request', 'error', 'error') } @@ -643,20 +658,46 @@ async function doMakeImage(reqBody) { return true } +function validateInput() { + const MAX_INIT_IMAGE_DIMENSION = 768 + + let width = parseInt(widthField.value) + let height = parseInt(heightField.value) + + if (IMAGE_REGEX.test(initImagePreview.src)) { + if (initImagePreview.naturalWidth > MAX_INIT_IMAGE_DIMENSION || initImagePreview.naturalHeight > MAX_INIT_IMAGE_DIMENSION) { + return {'isValid': false, 'warning': `The dimensions of your initial image are very large, and can cause 'Out of Memory' errors! Please ensure that its dimensions are equal (or smaller) than the desired output image. +

+ Your initial image size is ${initImagePreview.naturalWidth}x${initImagePreview.naturalHeight} pixels. Please try to keep it smaller than ${MAX_INIT_IMAGE_DIMENSION}x${MAX_INIT_IMAGE_DIMENSION}.`} + } + } + + return {'isValid': true} +} + async function makeImage() { if (serverStatus !== 'online') { logError('The server is still starting up..') return } + let validation = validateInput() + if (validation['isValid']) { + outputMsg.innerHTML = 'Fetching..' + } else { + if (validation['error']) { + logError(validation['error']) + return + } else if (validation['warning']) { + logMsg(validation['warning'], 'warn') + } + } + setStatus('request', 'fetching..') makeImageBtn.innerHTML = 'Processing..' makeImageBtn.disabled = true - outputMsg.innerHTML = 'Fetching..' - - const imageRegex = new RegExp('data:image/[A-Za-z]+;base64') let seed = (randomSeedField.checked ? Math.floor(Math.random() * 10000) : parseInt(seedField.value)) let numOutputsTotal = parseInt(numOutputsTotalField.value) let numOutputsParallel = parseInt(numOutputsParallelField.value) @@ -685,11 +726,11 @@ async function makeImage() { use_full_precision: useFullPrecisionField.checked } - if (imageRegex.test(initImagePreview.src)) { + if (IMAGE_REGEX.test(initImagePreview.src)) { reqBody['init_image'] = initImagePreview.src reqBody['prompt_strength'] = parseInt(promptStrengthField.value) / 10 - // if (imageRegex.test(maskImagePreview.src)) { + // if (IMAGE_REGEX.test(maskImagePreview.src)) { // reqBody['mask'] = maskImagePreview.src // } } From 44a3f63f99af82917197b53e92e97b7e3faf1d47 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 13:22:34 +0530 Subject: [PATCH 003/118] Show suggestions if an out of memory error is encountered by the user --- ui/index.html | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ui/index.html b/ui/index.html index 3cff9ebd..efbb82c4 100644 --- a/ui/index.html +++ b/ui/index.html @@ -383,6 +383,7 @@ const USE_CPU_KEY = "useCPU" const USE_FULL_PRECISION_KEY = "useFullPrecision" const USE_TURBO_MODE_KEY = "useTurboMode" const HEALTH_PING_INTERVAL = 5 // seconds +const MAX_INIT_IMAGE_DIMENSION = 768 const IMAGE_REGEX = new RegExp('data:image/[A-Za-z]+;base64') @@ -565,6 +566,15 @@ async function doMakeImage(reqBody) { let msg = '' if (res.detail !== undefined) { msg = res.detail + + if (msg.toLowerCase().includes('out of memory')) { + msg += `

+ Suggestions: +
+ 1. If you have set an initial image, please try reducing its dimension to ${MAX_INIT_IMAGE_DIMENSION}x${MAX_INIT_IMAGE_DIMENSION} or smaller.
+ 2. Try disabling the 'Turbo mode' under 'Advanced Settings'.
+ 3. Try generating a smaller image.
` + } } else { msg = res } @@ -659,8 +669,6 @@ async function doMakeImage(reqBody) { } function validateInput() { - const MAX_INIT_IMAGE_DIMENSION = 768 - let width = parseInt(widthField.value) let height = parseInt(heightField.value) From 458b0150ef9e5e33fee37cbb996f3e66fe176239 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 13:23:54 +0530 Subject: [PATCH 004/118] Bump version --- ui/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/index.html b/ui/index.html index efbb82c4..922e9070 100644 --- a/ui/index.html +++ b/ui/index.html @@ -265,7 +265,7 @@
 
Stable Diffusion is starting.. -

Stable Diffusion UI v2.05 (beta)

+

Stable Diffusion UI v2.06 (beta)

From 90c43613638d2b3809ad93f1bc7d004b1a2137d6 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 13:39:43 +0530 Subject: [PATCH 005/118] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 108e10a7..c6fc8db5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Stable Diffusion UI - v2 (beta) -### A simple way to install and use [Stable Diffusion](https://github.com/CompVis/stable-diffusion) on your own computer (Win 10/11, Linux). No dependencies or technical knowledge required. +### A simple 1-click way to install and use [Stable Diffusion](https://github.com/CompVis/stable-diffusion) on your own computer (Win 10/11, Linux). No dependencies or technical knowledge required. [![Discord Server](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.com/invite/u9yhsFmEkB) (for support, and development discussion) From 7d69f4d3edbba97658a3ced760733b0d17e50f44 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 15:30:04 +0530 Subject: [PATCH 006/118] Fix #58 - While a .. in the path shouldn't cause any problems, just avoiding it entirely --- scripts/on_sd_start.bat | 4 +++- scripts/on_sd_start.sh | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat index a88ba88c..520a62fa 100644 --- a/scripts/on_sd_start.bat +++ b/scripts/on_sd_start.bat @@ -97,7 +97,9 @@ @echo. & echo "Stable Diffusion is ready!" & echo. -@set SD_UI_PATH=%cd%\..\ui +@cd .. +@set SD_UI_PATH=%cd%\ui +@cd stable-diffusion @uvicorn server:app --app-dir "%SD_UI_PATH%" --port 9000 --host 0.0.0.0 diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh index e263488b..ebccbf7e 100755 --- a/scripts/on_sd_start.sh +++ b/scripts/on_sd_start.sh @@ -73,7 +73,11 @@ fi printf "\n\nStable Diffusion is ready!\n\n" -export SD_UI_PATH=`pwd`/../ui +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 From f2954eeb3c65a554bd35bbd704a787c1e733de59 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:01:50 +0530 Subject: [PATCH 007/118] Download buttons for Windows and Linux --- media/download buttons.xcf | Bin 0 -> 50742 bytes media/download-linux.png | Bin 0 -> 14151 bytes media/download-win.png | Bin 0 -> 13383 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/download buttons.xcf create mode 100644 media/download-linux.png create mode 100644 media/download-win.png diff --git a/media/download buttons.xcf b/media/download buttons.xcf new file mode 100644 index 0000000000000000000000000000000000000000..7427a46d2fe6ca9faea56d21d7f48b5565a4410a GIT binary patch literal 50742 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 literal 0 HcmV?d00001 diff --git a/media/download-win.png b/media/download-win.png new file mode 100644 index 0000000000000000000000000000000000000000..da1ff7888ad6ef6029fcc90946e05bee35ed34cb GIT binary patch literal 13383 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 literal 0 HcmV?d00001 From 613603968235ff27c9f159baf6abdf95f3781203 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:02:59 +0530 Subject: [PATCH 008/118] Github links for v2 installer download --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c6fc8db5..1ac9be58 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ You do not need anything else. You do not need WSL, Docker or Conda. The installer will take care of it. # Installation -1. Download [for Windows](https://drive.google.com/file/d/1MY5gzsQHV_KREbYs3gw33QL4gGIlQRqj/view?usp=sharing) or [for Linux](https://drive.google.com/file/d/1Gwz1LVQUCart8HhCjrmXkS6TWKbTsLsR/view?usp=sharing) (this will be hosted on GitHub in the future). +1. Download [for Windows](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-win64.zip) or [for Linux](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-linux.tar.xz) (this will be hosted on GitHub in the future). 2. Extract: - For Windows: After unzipping the file, please move the `stable-diffusion-ui` folder to your `C:` (or any drive like D: at the top root level). For e.g. `C:\stable-diffusion-ui`. This will avoid a common problem with Windows (of file path length limits). From 8c060b468bb1a05c13161f047a0133b9c465b10b Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:03:12 +0530 Subject: [PATCH 009/118] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ac9be58..3e8b37d3 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ You do not need anything else. You do not need WSL, Docker or Conda. The installer will take care of it. # Installation -1. Download [for Windows](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-win64.zip) or [for Linux](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-linux.tar.xz) (this will be hosted on GitHub in the future). +1. Download [for Windows](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-win64.zip) or [for Linux](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-linux.tar.xz). 2. Extract: - For Windows: After unzipping the file, please move the `stable-diffusion-ui` folder to your `C:` (or any drive like D: at the top root level). For e.g. `C:\stable-diffusion-ui`. This will avoid a common problem with Windows (of file path length limits). From 3fe76a6bd3cdb501d90b4115a6e41dfa79738ab4 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:08:17 +0530 Subject: [PATCH 010/118] Download buttons --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 3e8b37d3..52ffc718 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ # Stable Diffusion UI - v2 (beta) ### A simple 1-click way to install and use [Stable Diffusion](https://github.com/CompVis/stable-diffusion) on your own computer (Win 10/11, Linux). No dependencies or technical knowledge required. +

+ + +

+ [![Discord Server](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.com/invite/u9yhsFmEkB) (for support, and development discussion) # Features in the new v2 Version: From a4f44f02ed74e84d76b1008a957a9402f2db5ea6 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:09:03 +0530 Subject: [PATCH 011/118] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 52ffc718..411b553c 100644 --- a/README.md +++ b/README.md @@ -26,13 +26,13 @@ You do not need anything else. You do not need WSL, Docker or Conda. The installer will take care of it. # Installation -1. Download [for Windows](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-win64.zip) or [for Linux](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-linux.tar.xz). +1. **Download** [for Windows](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-win64.zip) or [for Linux](https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-linux.tar.xz). -2. Extract: +2. **Extract**: - For Windows: After unzipping the file, please move the `stable-diffusion-ui` folder to your `C:` (or any drive like D: at the top root level). For e.g. `C:\stable-diffusion-ui`. This will avoid a common problem with Windows (of file path length limits). - For Linux: After extracting the .tar.xz file, please open a terminal, and go to the `stable-diffusion-ui` directory. -3. Run: +3. **Run**: - For Windows: `Start Stable Diffusion UI.cmd` by double-clicking it. - For Linux: In the terminal, run `./start.sh` (or `bash start.sh`) From f8980aecf031df2a0a2898fb387149e4336f50f7 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:09:28 +0530 Subject: [PATCH 012/118] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 411b553c..bb019526 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Stable Diffusion UI - v2 (beta) -### A simple 1-click way to install and use [Stable Diffusion](https://github.com/CompVis/stable-diffusion) on your own computer (Win 10/11, Linux). No dependencies or technical knowledge required. +### A simple 1-click way to install and use [Stable Diffusion](https://github.com/CompVis/stable-diffusion) on your own computer. No dependencies or technical knowledge required.

From 7b2a85a1189cc5854d27eb1ac4e14233aa7edbbc Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:09:55 +0530 Subject: [PATCH 013/118] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb019526..6b8b2c9e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Stable Diffusion UI - v2 (beta) +# Stable Diffusion UI v2 ### A simple 1-click way to install and use [Stable Diffusion](https://github.com/CompVis/stable-diffusion) on your own computer. No dependencies or technical knowledge required.

From a29259a8b6bd4b0c59756a7c27b61fcc442ba56e Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 16:51:43 +0530 Subject: [PATCH 014/118] Shorter filenames for saved images; Don't crash other images if one fails to save --- ui/sd_internal/runtime.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/ui/sd_internal/runtime.py b/ui/sd_internal/runtime.py index b30910bb..b5082cf4 100644 --- a/ui/sd_internal/runtime.py +++ b/ui/sd_internal/runtime.py @@ -1,4 +1,5 @@ import os, re +import traceback import torch import numpy as np from omegaconf import OmegaConf @@ -28,7 +29,7 @@ import base64 from io import BytesIO # local -session_id = str(uuid.uuid4()) +session_id = str(uuid.uuid4())[-8:] ckpt = None model = None @@ -188,7 +189,7 @@ def mk_img(req: Request): print(f"target t_enc is {t_enc} steps") if opt_save_to_disk_path is not None: - session_out_path = os.path.join(opt_save_to_disk_path, 'session-' + session_id) + session_out_path = os.path.join(opt_save_to_disk_path, session_id) os.makedirs(session_out_path, exist_ok=True) else: session_out_path = None @@ -198,9 +199,6 @@ def mk_img(req: Request): for n in trange(opt_n_iter, desc="Sampling"): for prompts in tqdm(data, desc="data"): - if opt_save_to_disk_path is not None: - base_count = len(os.listdir(session_out_path)) - with precision_scope("cuda"): modelCS.to(device) uc = None @@ -242,19 +240,23 @@ def mk_img(req: Request): res.images.append(ResponseImage(data=img_data, seed=opt_seed)) if opt_save_to_disk_path is not None: - prompt_flattened = "_".join(re.split(":| ", prompts[0])) - prompt_flattened = prompt_flattened[:150] + try: + prompt_flattened = "_".join(re.split(":| ", prompts[0])) + prompt_flattened = prompt_flattened.replace(',', '') + prompt_flattened = prompt_flattened[:50] - file_path = f"sd_{prompt_flattened}_Seed-{opt_seed}_Steps-{opt_ddim_steps}_Guidance-{opt_scale}_{base_count:05}" - img_out_path = os.path.join(session_out_path, f"{file_path}.{opt_format}") - meta_out_path = os.path.join(session_out_path, f"{file_path}.txt") + img_id = str(uuid.uuid4())[-8:] - metadata = f"{prompts[0]}\nSeed: {opt_seed}\nSteps: {opt_ddim_steps}\nGuidance Scale: {opt_scale}" - img.save(img_out_path) - with open(meta_out_path, 'w') as f: - f.write(metadata) + file_path = f"{prompt_flattened}_{img_id}" + img_out_path = os.path.join(session_out_path, f"{file_path}.{opt_format}") + meta_out_path = os.path.join(session_out_path, f"{file_path}.txt") - base_count += 1 + metadata = f"{prompts[0]}\nWidth: {opt_W}\nHeight: {opt_H}\nSeed: {opt_seed}\nSteps: {opt_ddim_steps}\nGuidance Scale: {opt_scale}" + img.save(img_out_path) + with open(meta_out_path, 'w') as f: + f.write(metadata) + except: + print('could not save the file', traceback.format_exc()) seeds += str(opt_seed) + "," opt_seed += 1 From 835dd4da9d00988e25a3285a6249191478de4698 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 17:25:25 +0530 Subject: [PATCH 015/118] Configurable path to save to disk --- ui/index.html | 34 +++++++++++++++++++++++++++++++--- ui/server.py | 6 ++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/ui/index.html b/ui/index.html index 922e9070..25f70a91 100644 --- a/ui/index.html +++ b/ui/index.html @@ -339,7 +339,7 @@


  •  
  • -
  • +
  • @@ -382,6 +382,7 @@ const SOUND_ENABLED_KEY = "soundEnabled" const USE_CPU_KEY = "useCPU" const USE_FULL_PRECISION_KEY = "useFullPrecision" const USE_TURBO_MODE_KEY = "useTurboMode" +const DISK_PATH_KEY = "diskPath" const HEALTH_PING_INTERVAL = 5 // seconds const MAX_INIT_IMAGE_DIMENSION = 768 @@ -405,6 +406,7 @@ let turboField = document.querySelector('#turbo') let useCPUField = document.querySelector('#use_cpu') let useFullPrecisionField = document.querySelector('#use_full_precision') let saveToDiskField = document.querySelector('#save_to_disk') +let diskPathField = document.querySelector('#diskPath') // let allowNSFWField = document.querySelector("#allow_nsfw") let promptStrengthField = document.querySelector('#prompt_strength') let promptStrengthValueLabel = document.querySelector('#prompt_strength_value') @@ -463,6 +465,12 @@ function handleBoolSettingChange(key) { } } +function handleStringSettingChange(key) { + return function(e) { + localStorage.setItem(key, e.target.value.toString()) + } +} + function isSoundEnabled() { return getLocalStorageBoolItem(SOUND_ENABLED_KEY, true) } @@ -479,6 +487,10 @@ function isUseTurboModeEnabled() { return getLocalStorageBoolItem(USE_TURBO_MODE_KEY, true) } +function getSavedDiskPath() { + return getLocalStorageItem(DISK_PATH_KEY, '') +} + function setStatus(statusType, msg, msgType) { if (statusType !== 'server') { return; @@ -728,7 +740,6 @@ async function makeImage() { width: widthField.value, height: heightField.value, // allow_nsfw: allowNSFWField.checked, - save_to_disk: saveToDiskField.checked, turbo: turboField.checked, use_cpu: useCPUField.checked, use_full_precision: useFullPrecisionField.checked @@ -743,6 +754,10 @@ async function makeImage() { // } } + if (saveToDiskField.checked && diskPathField.value.trim() !== '') { + reqBody['save_to_disk_path'] = diskPathField.value.trim() + } + let time = new Date().getTime() imagesContainer.innerHTML = '' @@ -828,6 +843,12 @@ useFullPrecisionField.checked = isUseFullPrecisionEnabled() turboField.addEventListener('click', handleBoolSettingChange(USE_TURBO_MODE_KEY)) turboField.checked = isUseTurboModeEnabled() +diskPathField.addEventListener('change', handleStringSettingChange(DISK_PATH_KEY)) + +saveToDiskField.addEventListener('click', function() { + diskPathField.disabled = !this.checked +}) + makeImageBtn.addEventListener('click', makeImage) @@ -986,12 +1007,19 @@ function refreshTagsList() { async function getDiskPath() { try { + let diskPath = getSavedDiskPath() + + if (diskPath !== '') { + diskPathField.value = diskPath + return + } + let res = await fetch('/output_dir') if (res.status === 200) { res = await res.json() res = res[0] - document.querySelector('#diskPath').innerHTML = '(to ' + res + ')' + document.querySelector('#diskPath').value = res } } catch (e) { console.log('error fetching output dir path', e) diff --git a/ui/server.py b/ui/server.py index 0750fcd0..af7d1ea2 100644 --- a/ui/server.py +++ b/ui/server.py @@ -38,7 +38,7 @@ class ImageRequest(BaseModel): seed: int = 42 prompt_strength: float = 0.8 # allow_nsfw: bool = False - save_to_disk: bool = False + save_to_disk_path: str = None turbo: bool = True use_cpu: bool = False use_full_precision: bool = False @@ -90,9 +90,7 @@ async def image(req : ImageRequest): r.turbo = req.turbo r.use_cpu = req.use_cpu r.use_full_precision = req.use_full_precision - - if req.save_to_disk: - r.save_to_disk_path = outpath + r.save_to_disk_path = req.save_to_disk_path try: res: Response = runtime.mk_img(r) From 7a99241c76c9141105a320d5c02b67e5ddf25d19 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 17:28:40 +0530 Subject: [PATCH 016/118] Version --- ui/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/index.html b/ui/index.html index 25f70a91..2a8c475f 100644 --- a/ui/index.html +++ b/ui/index.html @@ -265,7 +265,7 @@
     
    Stable Diffusion is starting..
    -

    Stable Diffusion UI v2.06 (beta)

    +

    Stable Diffusion UI v2.07 (beta)

    From ec49c962197e63b4e6c094bec56177e92ff039e6 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Mon, 5 Sep 2022 18:03:19 +0530 Subject: [PATCH 017/118] Ko-fi button --- ui/index.html | 7 ++++++- ui/media/kofi.png | Bin 0 -> 11150 bytes ui/server.py | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 ui/media/kofi.png diff --git a/ui/index.html b/ui/index.html index 2a8c475f..e67d5b33 100644 --- a/ui/index.html +++ b/ui/index.html @@ -254,6 +254,10 @@ font-size: 16pt; margin-bottom: 10pt; } + #coffeeButton { + height: 23px; + transform: translateY(25%); + } @@ -367,7 +371,8 @@
     
    @@ -347,7 +347,7 @@
  • -
  • +
  • diff --git a/ui/sd_internal/runtime.py b/ui/sd_internal/runtime.py index b5082cf4..0999b86d 100644 --- a/ui/sd_internal/runtime.py +++ b/ui/sd_internal/runtime.py @@ -43,13 +43,22 @@ precision = 'autocast' sampler_plms = None sampler_ddim = None +force_full_precision = False +try: + gpu_name = torch.cuda.get_device_name(torch.cuda.current_device()) + force_full_precision = ('nvidia' in gpu_name.lower()) and (' 1660' in gpu_name or ' 1650' in gpu_name) # otherwise these NVIDIA cards create green images + if force_full_precision: + print('forcing full precision on NVIDIA 16xx cards, to avoid green images') +except: + pass + # api def load_model(ckpt_to_use, device_to_use='cuda', turbo=False, unet_bs_to_use=1, precision_to_use='autocast', half_model_fs=False): global ckpt, model, modelCS, modelFS, model_is_half, device, unet_bs, precision, model_fs_is_half ckpt = ckpt_to_use device = device_to_use - precision = precision_to_use + precision = precision_to_use if not force_full_precision else 'full' unet_bs = unet_bs_to_use sd = load_model_from_config(f"{ckpt}") @@ -119,9 +128,9 @@ def mk_img(req: Request): device = 'cuda' if (precision == 'autocast' and (req.use_full_precision or not model_is_half)) or \ - (precision == 'full' and not req.use_full_precision) or \ + (precision == 'full' and not req.use_full_precision and not force_full_precision) or \ (req.init_image is None and model_fs_is_half) or \ - (req.init_image is not None and not model_fs_is_half): + (req.init_image is not None and not model_fs_is_half and not force_full_precision): print('reloading model for cuda') load_model(ckpt, device, model.turbo, unet_bs, ('full' if req.use_full_precision else 'autocast'), half_model_fs=(req.init_image is not None and not req.use_full_precision)) @@ -147,6 +156,8 @@ def mk_img(req: Request): print(req.to_string(), '\n device', device) + print('\n\n Using precision:', precision) + seed_everything(opt_seed) batch_size = opt_n_samples From c30678af984aef611abe4222472cbc5a8c6305a8 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Wed, 7 Sep 2022 15:35:19 +0530 Subject: [PATCH 048/118] Fix the link for the troubleshooting page in all the scripts --- scripts/on_env_start.bat | 2 +- scripts/on_env_start.sh | 2 +- scripts/on_sd_start.bat | 14 +++++++------- scripts/on_sd_start.sh | 14 +++++++------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/scripts/on_env_start.bat b/scripts/on_env_start.bat index 85dd8ff3..76fdb712 100644 --- a/scripts/on_env_start.bat +++ b/scripts/on_env_start.bat @@ -34,7 +34,7 @@ @call git clone https://github.com/cmdr2/stable-diffusion-ui.git sd-ui-files && ( @echo sd_ui_git_cloned >> scripts\install_status.txt ) || ( - @echo "Error downloading 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/edit/main/Troubleshooting.md" & 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 "Error downloading 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/blob/main/Troubleshooting.md" & 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 @exit /b ) diff --git a/scripts/on_env_start.sh b/scripts/on_env_start.sh index e3b53623..13cada92 100755 --- a/scripts/on_env_start.sh +++ b/scripts/on_env_start.sh @@ -15,7 +15,7 @@ else if git clone https://github.com/cmdr2/stable-diffusion-ui.git sd-ui-files ; then echo sd_ui_git_cloned >> 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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 fi diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat index 76497a17..a275a2ef 100644 --- a/scripts/on_sd_start.bat +++ b/scripts/on_sd_start.bat @@ -16,7 +16,7 @@ @call git clone https://github.com/basujindal/stable-diffusion.git && ( @echo sd_git_cloned >> scripts\install_status.txt ) || ( - @echo "Error downloading 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/edit/main/Troubleshooting.md" & 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 "Error downloading 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/blob/main/Troubleshooting.md" & 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 @exit /b ) @@ -35,7 +35,7 @@ @rmdir /s /q .\env @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/edit/main/Troubleshooting.md" & 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. + @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/blob/main/Troubleshooting.md" & 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 exit /b ) @@ -43,7 +43,7 @@ @call conda activate .\env for /f "tokens=*" %%a in ('python -c "import torch; import ldm; import transformers; import numpy; print(42)"') do if "%%a" NEQ "42" ( - @echo. & echo "Dependency test failed! 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/edit/main/Troubleshooting.md" & 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. + @echo. & echo "Dependency test failed! 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/blob/main/Troubleshooting.md" & 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 exit /b ) @@ -58,7 +58,7 @@ @echo. & echo "Downloading packages necessary for Stable Diffusion UI.." & echo. @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/edit/main/Troubleshooting.md" & 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 "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/blob/main/Troubleshooting.md" & 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 exit /b ) @@ -67,7 +67,7 @@ call WHERE uvicorn > .tmp @>nul grep -c "uvicorn" .tmp @if "%ERRORLEVEL%" NEQ "0" ( - @echo. & echo "UI packages not found! 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/edit/main/Troubleshooting.md" & 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. + @echo. & echo "UI packages not found! 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/blob/main/Troubleshooting.md" & 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 exit /b ) @@ -94,12 +94,12 @@ call WHERE uvicorn > .tmp @if exist "sd-v1-4.ckpt" ( for %%I in ("sd-v1-4.ckpt") do if "%%~zI" NEQ "4265380512" ( echo. & echo "Error: The downloaded model file was invalid! Bytes downloaded: %%~zI" & echo. - echo. & echo "Error downloading the data files (weights) 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/edit/main/Troubleshooting.md" & 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. + echo. & echo "Error downloading the data files (weights) 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/blob/main/Troubleshooting.md" & 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 exit /b ) ) else ( - @echo. & echo "Error downloading the data files (weights) 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/edit/main/Troubleshooting.md" & 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. + @echo. & echo "Error downloading the data files (weights) 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/blob/main/Troubleshooting.md" & 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 exit /b ) diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh index 585f924c..22f4e059 100755 --- a/scripts/on_sd_start.sh +++ b/scripts/on_sd_start.sh @@ -15,7 +15,7 @@ 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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 fi @@ -34,7 +34,7 @@ else 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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 fi @@ -43,7 +43,7 @@ else out_test=`python -c "import torch; import ldm; import transformers; import numpy; 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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 fi @@ -59,13 +59,13 @@ else 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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 fi @@ -93,12 +93,12 @@ if [ ! -f "sd-v1-4.ckpt" ]; then model_size=`ls -l sd-v1-4.ckpt | awk '{print $5}'` if [ ! "$model_size" -eq "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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 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/edit/main/Troubleshooting.md\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" + 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/blob/main/Troubleshooting.md\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 fi From e1116938ec880fd59102d9de25cd357a7288fc23 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Wed, 7 Sep 2022 15:37:11 +0530 Subject: [PATCH 049/118] Update troubleshooting for green images. This is now caught and fixed in the code, requiring no user intervention --- Troubleshooting.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Troubleshooting.md b/Troubleshooting.md index ceaeda7f..6f911de9 100644 --- a/Troubleshooting.md +++ b/Troubleshooting.md @@ -1,9 +1,7 @@ Common issues and their solutions. If these solutions don't work, please feel free to ask at the [discord server](https://discord.com/invite/u9yhsFmEkB) or [file an issue](https://github.com/cmdr2/stable-diffusion-ui/issues). ## Green image generated -This usually happens if you're running NVIDIA 1650 or 1660 Super. To solve this, please upgrade to v2 by following the installation steps here: https://github.com/cmdr2/stable-diffusion-ui/tree/v2#installation - -And then enable `Full precision` in the `Advanced settings`. This will prevent green images from being generated. +This usually happens if you're running NVIDIA 1650 or 1660 Super. To solve this, please close and run the Stable Diffusion command on your computer. If you're using the older Docker-based solution (v1), please upgrade to v2: https://github.com/cmdr2/stable-diffusion-ui/tree/v2#installation ## No module found This can happen if you're hitting the Windows file path length limitation. To solve this, please upgrade to v2 by following the installation steps here: https://github.com/cmdr2/stable-diffusion-ui/tree/v2#installation , and ensure that you've placed the `stable-diffusion-ui` folder in `C:` or `D:` (or any top-level location). From a1908de302cf8068394eec5d152dfb7d8b6af2af Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Wed, 7 Sep 2022 15:49:14 +0530 Subject: [PATCH 050/118] Also check for antlr4 during the post-install tests --- scripts/on_sd_start.bat | 2 +- scripts/on_sd_start.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat index a275a2ef..25c0763b 100644 --- a/scripts/on_sd_start.bat +++ b/scripts/on_sd_start.bat @@ -42,7 +42,7 @@ @call conda activate .\env - for /f "tokens=*" %%a in ('python -c "import torch; import ldm; import transformers; import numpy; print(42)"') do if "%%a" NEQ "42" ( + for /f "tokens=*" %%a in ('python -c "import torch; import ldm; import transformers; import numpy; import antlr4; print(42)"') do if "%%a" NEQ "42" ( @echo. & echo "Dependency test failed! 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/blob/main/Troubleshooting.md" & 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 exit /b diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh index 22f4e059..5e9924ca 100755 --- a/scripts/on_sd_start.sh +++ b/scripts/on_sd_start.sh @@ -41,7 +41,7 @@ else conda activate ./env - out_test=`python -c "import torch; import ldm; import transformers; import numpy; print(42)"` + 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/blob/main/Troubleshooting.md\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" From 0e027141149684f23b950da3d871a91abade7c54 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Wed, 7 Sep 2022 16:05:39 +0530 Subject: [PATCH 051/118] Store the 'save to disk' setting --- ui/index.html | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ui/index.html b/ui/index.html index e8eef60b..d5d0e2e0 100644 --- a/ui/index.html +++ b/ui/index.html @@ -384,6 +384,7 @@