From 44191cd9080953acb4a497e8b87239516e6a4db0 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Wed, 19 Oct 2022 09:52:58 +0530 Subject: [PATCH 01/18] Merge pull request #357 from rbertus2000/beta fixed img_id for parallel renders --- ui/sd_internal/runtime.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/sd_internal/runtime.py b/ui/sd_internal/runtime.py index efad434d..9deb31d2 100644 --- a/ui/sd_internal/runtime.py +++ b/ui/sd_internal/runtime.py @@ -206,6 +206,7 @@ def get_base_path(disk_path, session_id, prompt, img_id, ext, suffix=None): os.makedirs(session_out_path, exist_ok=True) prompt_flattened = filename_regex.sub('_', prompt)[:50] + if suffix is not None: return os.path.join(session_out_path, f"{prompt_flattened}_{img_id}_{suffix}.{ext}") @@ -316,8 +317,7 @@ def do_mk_img(req: Request): opt_f = 8 opt_ddim_eta = 0.0 opt_init_img = req.init_image - img_id = base64.b64encode(int(time.time()).to_bytes(8, 'big')).decode() # Generate unique ID based on time. - img_id = img_id.translate({43:None, 47:None, 61:None})[-8:] # Remove + / = and keep last 8 chars. + print(req.to_string(), '\n device', device) @@ -462,6 +462,8 @@ def do_mk_img(req: Request): print("saving images") for i in range(batch_size): + img_id = base64.b64encode(int(time.time()+i).to_bytes(8, 'big')).decode() # Generate unique ID based on time. + img_id = img_id.translate({43:None, 47:None, 61:None})[-8:] # Remove + / = and keep last 8 chars. x_samples_ddim = modelFS.decode_first_stage(x_samples[i].unsqueeze(0)) x_sample = torch.clamp((x_samples_ddim + 1.0) / 2.0, min=0.0, max=1.0) From 0922ba938c4cdc6ae2cbae7ce177ac424f9286a4 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Wed, 19 Oct 2022 09:59:18 +0530 Subject: [PATCH 02/18] Remove unnecessary tabs --- ui/sd_internal/runtime.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/sd_internal/runtime.py b/ui/sd_internal/runtime.py index 9deb31d2..e77a6f13 100644 --- a/ui/sd_internal/runtime.py +++ b/ui/sd_internal/runtime.py @@ -206,7 +206,6 @@ def get_base_path(disk_path, session_id, prompt, img_id, ext, suffix=None): os.makedirs(session_out_path, exist_ok=True) prompt_flattened = filename_regex.sub('_', prompt)[:50] - if suffix is not None: return os.path.join(session_out_path, f"{prompt_flattened}_{img_id}_{suffix}.{ext}") @@ -317,7 +316,6 @@ def do_mk_img(req: Request): opt_f = 8 opt_ddim_eta = 0.0 opt_init_img = req.init_image - print(req.to_string(), '\n device', device) From 01fb1bde8b55b089986f21ee92ac5326f4da787f Mon Sep 17 00:00:00 2001 From: rbertus2000 <91765399+rbertus2000@users.noreply.github.com> Date: Wed, 19 Oct 2022 23:16:51 +0200 Subject: [PATCH 03/18] fix seed for parallel renders with filters applied --- ui/sd_internal/runtime.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/sd_internal/runtime.py b/ui/sd_internal/runtime.py index 9deb31d2..f5702f7d 100644 --- a/ui/sd_internal/runtime.py +++ b/ui/sd_internal/runtime.py @@ -507,7 +507,7 @@ def do_mk_img(req: Request): if (len(filters_applied) > 0): filtered_image = Image.fromarray(x_sample) filtered_img_data = img_to_base64_str(filtered_image, req.output_format) - response_image = ResponseImage(data=filtered_img_data, seed=req.seed) + response_image = ResponseImage(data=filtered_img_data, seed=opt_seed) res.images.append(response_image) if req.save_to_disk_path is not None: filtered_img_out_path = get_base_path(req.save_to_disk_path, req.session_id, prompts[0], img_id, req.output_format, "_".join(filters_applied)) From 5d686b146d1bcc71af35c61273adf464487d6551 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Thu, 20 Oct 2022 12:14:09 +0530 Subject: [PATCH 04/18] Remove the new label from Upscale --- ui/media/js/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/media/js/main.js b/ui/media/js/main.js index e037c9c3..848b4a6f 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -371,7 +371,7 @@ function showImages(reqBody, res, outputContainer, livePreview) { { text: 'Download', on_click: onDownloadImageClick }, { text: 'Make Similar Images', on_click: onMakeSimilarClick }, { text: 'Draw another 25 steps', on_click: onContinueDrawingClick }, - { text: 'Upscale (new)', on_click: onUpscaleClick, filter: (req, img) => !req.use_upscale }, + { text: 'Upscale', on_click: onUpscaleClick, filter: (req, img) => !req.use_upscale }, { text: 'Fix Faces', on_click: onFixFacesClick, filter: (req, img) => !req.use_face_correction } ] From 63e8614ace168863d517db5b82d98a0e36c348ac Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Thu, 20 Oct 2022 15:10:34 +0530 Subject: [PATCH 05/18] Refactor the image button code --- ui/media/js/main.js | 67 ++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 848b4a6f..b9bfb524 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -426,12 +426,20 @@ function onDownloadImageClick(req, img) { imgDownload.click() } -function onMakeSimilarClick(req, img) { - let newTaskRequest = getCurrentUserRequest() +function modifyCurrentRequest(req, reqDiff) { + const newTaskRequest = getCurrentUserRequest() - newTaskRequest.reqBody = Object.assign({}, req, { + newTaskRequest.reqBody = Object.assign({}, req, reqDiff, { + use_cpu: useCPUField.checked + }) + newTaskRequest.seed = newTaskRequest.reqBody.seed + + return newTaskRequest +} + +function onMakeSimilarClick(req, img) { + const newTaskRequest = modifyCurrentRequest(req, { num_outputs: 1, - use_cpu: useCPUField.checked, num_inference_steps: 50, guidance_scale: 7.5, prompt_strength: 0.7, @@ -441,65 +449,42 @@ function onMakeSimilarClick(req, img) { newTaskRequest.numOutputsTotal = 5 newTaskRequest.batchCount = 5 - newTaskRequest.seed = newTaskRequest.reqBody.seed delete newTaskRequest.reqBody.mask createTask(newTaskRequest) } -function onUpscaleClick(req, img) { - let newTaskRequest = getCurrentUserRequest() +function enqueueImageVariationTask(req, img, reqDiff) { const imageSeed = img.getAttribute('data-seed') - newTaskRequest.reqBody = Object.assign({}, req, { - num_outputs: 1, - use_cpu: useCPUField.checked, - use_upscale: upscaleModelField.value, + const newTaskRequest = modifyCurrentRequest(req, reqDiff, { + num_outputs: 1, // this can be user-configurable in the future seed: imageSeed }) - newTaskRequest.numOutputsTotal = 1 + newTaskRequest.numOutputsTotal = 1 // this can be user-configurable in the future newTaskRequest.batchCount = 1 - newTaskRequest.seed = newTaskRequest.reqBody.seed createTask(newTaskRequest) } +function onUpscaleClick(req, img) { + enqueueImageVariationTask(req, img, { + use_upscale: upscaleModelField.value + }) +} + function onFixFacesClick(req, img) { - let newTaskRequest = getCurrentUserRequest() - const imageSeed = img.getAttribute('data-seed') - - newTaskRequest.reqBody = Object.assign({}, req, { - num_outputs: 1, - use_cpu: useCPUField.checked, - use_face_correction: 'GFPGANv1.3', - seed: imageSeed + enqueueImageVariationTask(req, img, { + use_face_correction: 'GFPGANv1.3' }) - - newTaskRequest.numOutputsTotal = 1 - newTaskRequest.batchCount = 1 - newTaskRequest.seed = newTaskRequest.reqBody.seed - - createTask(newTaskRequest) } function onContinueDrawingClick(req, img) { - let newTaskRequest = getCurrentUserRequest() - const imageSeed = img.getAttribute('data-seed') - - newTaskRequest.reqBody = Object.assign({}, req, { - num_outputs: 1, - use_cpu: useCPUField.checked, - num_inference_steps: parseInt(req.num_inference_steps) + 25, - seed: imageSeed + enqueueImageVariationTask(req, img, { + num_inference_steps: parseInt(req.num_inference_steps) + 25 }) - - newTaskRequest.numOutputsTotal = 1 - newTaskRequest.batchCount = 1 - newTaskRequest.seed = newTaskRequest.reqBody.seed - - createTask(newTaskRequest) } // makes a single image. don't call this directly, use makeImage() instead From f4bcc1f2e5000c2ee6c8bf214ab8551fb9c6032d Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Thu, 20 Oct 2022 15:26:18 +0530 Subject: [PATCH 06/18] Bug fix - autosave wasn't saving the changes in the textboxes next to guidance scale and prompt strength sliders --- ui/media/js/main.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/media/js/main.js b/ui/media/js/main.js index b9bfb524..bf0e7622 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -1172,6 +1172,7 @@ function updateGuidanceScaleSlider() { } guidanceScaleSlider.value = guidanceScaleField.value * 10 + guidanceScaleSlider.dispatchEvent(new Event("change")) } guidanceScaleSlider.addEventListener('input', updateGuidanceScale) @@ -1190,6 +1191,7 @@ function updatePromptStrengthSlider() { } promptStrengthSlider.value = promptStrengthField.value * 100 + promptStrengthSlider.dispatchEvent(new Event("change")) } promptStrengthSlider.addEventListener('input', updatePromptStrength) From 2e17ea99e2b08b47e7504248211b4fad55b80741 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Thu, 20 Oct 2022 16:05:18 +0530 Subject: [PATCH 07/18] Don't cache ui plugins in the browser --- ui/media/js/plugins.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/media/js/plugins.js b/ui/media/js/plugins.js index dce65e09..6471e8cb 100644 --- a/ui/media/js/plugins.js +++ b/ui/media/js/plugins.js @@ -34,7 +34,7 @@ async function loadUIPlugins() { res = await res.json() res.forEach(pluginPath => { let script = document.createElement('script') - script.src = pluginPath + script.src = pluginPath + '?t=' + Date.now() console.log('loading plugin', pluginPath) From 090dfff730505fceb49b6e90eed97690dc0c61f8 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Thu, 20 Oct 2022 17:22:01 +0530 Subject: [PATCH 08/18] Refactor the time delays into constants and mention the units --- ui/index.html | 4 ++-- ui/media/js/main.js | 24 ++++++++++++++---------- ui/media/js/utils.js | 8 +++++++- ui/sd_internal/task_manager.py | 2 +- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/ui/index.html b/ui/index.html index 02d58d0e..d57d0437 100644 --- a/ui/index.html +++ b/ui/index.html @@ -253,11 +253,11 @@ - + - + @@ -18,7 +18,7 @@
+

Image Modifiers (art styles, tags etc)

@@ -236,6 +237,15 @@
+ +
 
@@ -263,7 +265,7 @@ - + diff --git a/ui/media/js/image-modifiers.js b/ui/media/js/image-modifiers.js index f35ae2bd..592ee70b 100644 --- a/ui/media/js/image-modifiers.js +++ b/ui/media/js/image-modifiers.js @@ -10,6 +10,7 @@ let previewImageField = document.querySelector('#preview-image') let modifierSettingsBtn = document.querySelector('#modifier-settings-btn') let modifierSettingsOverlay = document.querySelector('#modifier-settings-config') let customModifiersTextBox = document.querySelector('#custom-modifiers-input') +let customModifierEntriesToolbar = document.querySelector('#editor-modifiers-entries-toolbar') const modifierThumbnailPath = 'media/modifier-thumbnails' const activeCardClass = 'modifier-card-active' @@ -120,7 +121,7 @@ function createModifierGroup(modifierGroup, initiallyExpanded) { e.appendChild(titleEl) e.appendChild(modifiersEl) - editorModifierEntries.insertBefore(e, editorModifierEntries.firstChild) + editorModifierEntries.insertBefore(e, customModifierEntriesToolbar.nextSibling) return e } From 329360aa5bd8eadbbf041cacec3d6f5fd7db6e5d Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Fri, 21 Oct 2022 15:18:05 +0530 Subject: [PATCH 17/18] Show the number of images it'll make in the Make Image button --- ui/index.html | 2 +- ui/media/js/main.js | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ui/index.html b/ui/index.html index b714ff1a..62eb32c6 100644 --- a/ui/index.html +++ b/ui/index.html @@ -267,7 +267,7 @@ - +