From b5da4e2fa08ca69bd3c1ee1bff22f122a660d8f3 Mon Sep 17 00:00:00 2001 From: JeLuF Date: Sun, 19 Mar 2023 17:29:13 +0100 Subject: [PATCH 01/26] Make download file names shorter --- ui/media/js/main.js | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 55c42af6..19801407 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -1182,31 +1182,10 @@ function createFileName(prompt, seed, steps, guidance, outputFormat) { // Most important information is the prompt let underscoreName = prompt.replace(/[^a-zA-Z0-9]/g, '_') - underscoreName = underscoreName.substring(0, 100) - //const steps = numInferenceStepsField.value - //const guidance = guidanceScaleField.value + underscoreName = underscoreName.substring(0, 70) // name and the top level metadata - let fileName = `${underscoreName}_Seed-${seed}_Steps-${steps}_Guidance-${guidance}` - - // add the tags - // let tags = [] - // let tagString = '' - // document.querySelectorAll(modifyTagsSelector).forEach(function(tag) { - // tags.push(tag.innerHTML) - // }) - - // join the tags with a pipe - // if (activeTags.length > 0) { - // tagString = '_Tags-' - // tagString += tags.join('|') - // } - - // // append empty or populated tags - // fileName += `${tagString}` - - // add the file extension - fileName += '.' + outputFormat + let fileName = `${underscoreName}_S${seed}_St${steps}_G${guidance}.${outputFormat}` return fileName } @@ -1286,7 +1265,7 @@ function downloadAllImages() { document.querySelectorAll(".imageTaskContainer").forEach(container => { if (optTree) { - let name = ++i + '-' + container.querySelector('.preview-prompt').textContent.replace(/[^a-zA-Z0-9]/g, '_') + let name = ++i + '-' + container.querySelector('.preview-prompt').textContent.replace(/[^a-zA-Z0-9]/g, '_').substring(0,25) folder = zip.folder(name) } container.querySelectorAll(".imgContainer img").forEach(img => { @@ -1315,9 +1294,9 @@ function downloadAllImages() { }) }) if (optZIP) { - let now = new Date() + let now = Date.now().toString(36).toUpperCase() zip.generateAsync({type:"blob"}).then(function (blob) { - saveAs(blob, `EasyDiffusion-Images-${now.toISOString()}.zip`); + saveAs(blob, `EasyDiffusion-Images-${now}.zip`); }) } From 0f3a3da5ed74c5dec8f9afd9941a7a94676befcd Mon Sep 17 00:00:00 2001 From: JeLuF Date: Mon, 20 Mar 2023 22:53:13 +0100 Subject: [PATCH 02/26] Add undo support --- ui/index.html | 18 +++++--- ui/media/css/main.css | 1 - ui/media/js/main.js | 102 ++++++++++++++++++++++++++++++------------ 3 files changed, 85 insertions(+), 36 deletions(-) diff --git a/ui/index.html b/ui/index.html index 7112c022..d4b6ea2c 100644 --- a/ui/index.html +++ b/ui/index.html @@ -282,18 +282,16 @@
-
- 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! :) -
-
+
+
+
+ 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/css/main.css b/ui/media/css/main.css index 95b8d5c5..b71e6841 100644 --- a/ui/media/css/main.css +++ b/ui/media/css/main.css @@ -559,7 +559,6 @@ div.img-preview img { float: right; } #preview-tools { - display: none; padding: 4pt; } #preview-tools .display-settings .dropdown-content { diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 55c42af6..9ccb7907 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -83,6 +83,10 @@ const processOrder = document.querySelector('#process_order_toggle') let imagePreview = document.querySelector("#preview") let imagePreviewContent = document.querySelector("#preview-content") + +let undoButton = document.querySelector("#undo") +let undoBuffer = [] + imagePreview.addEventListener('drop', function(ev) { const data = ev.dataTransfer?.getData("text/plain"); if (!data) { @@ -251,6 +255,39 @@ function playSound() { } } +function undoableRemove(element, doubleUndo=false) { + let data = { 'element': element, 'parent': element.parentNode, 'prev': element.previousSibling, 'next': element.nextSibling, 'doubleUndo': doubleUndo } + undoBuffer.push(data) + if (undoBuffer.length > 10) { + // Remove item from memory and also remove it from the data structures + let item = undoBuffer.shift() + htmlTaskMap.delete(item.element) + item.element.querySelectorAll('[data-imagecounter]').forEach( (img) => { delete imageRequest[img.dataset['imagecounter']] }) + } + element.remove() + if (undoBuffer.length != 0) { + undoButton.classList.remove('displayNone') + } +} + +function undoRemove() { + let data = undoBuffer.pop() + if (data.next == null) { + data.parent.appendChild(data.element) + } else { + data.parent.insertBefore(data.element, data.next) + } + if (data.doubleUndo) { + undoRemove() + } + if (undoBuffer.length == 0) { + undoButton.classList.add('displayNone') + } + updateInitialText() +} + +undoButton.addEventListener('click', () => { undoRemove() }) + function showImages(reqBody, res, outputContainer, livePreview) { let imageItemElements = outputContainer.querySelectorAll('.imgItem') if(typeof res != 'object') return @@ -290,21 +327,19 @@ function showImages(reqBody, res, outputContainer, livePreview) { const imageRemoveBtn = imageItemElem.querySelector('.imgPreviewItemClearBtn') let parentTaskContainer = imageRemoveBtn.closest('.imageTaskContainer') imageRemoveBtn.addEventListener('click', (e) => { - shiftOrConfirm(e, "Remove the image from the results?", () => { - imageItemElem.style.display = 'none' - let allHidden = true; - let children = parentTaskContainer.querySelectorAll('.imgItem'); - for(let x = 0; x < children.length; x++) { - let child = children[x]; - if(child.style.display != "none") { - allHidden = false; - } + undoableRemove(imageItemElem) + let allHidden = true; + let children = parentTaskContainer.querySelectorAll('.imgItem'); + for(let x = 0; x < children.length; x++) { + let child = children[x]; + if(child.style.display != "none") { + allHidden = false; } - if(allHidden === true) { - const req = htmlTaskMap.get(parentTaskContainer) - if(!req.isProcessing || req.batchesDone == req.batchCount) {parentTaskContainer.parentNode.removeChild(parentTaskContainer)} - } - }) + } + if(allHidden === true) { + const req = htmlTaskMap.get(parentTaskContainer) + if(!req.isProcessing || req.batchesDone == req.batchCount) { undoableRemove(parentTaskContainer, true) } + } }) } const imageElem = imageItemElem.querySelector('img') @@ -566,7 +601,7 @@ function makeImage() { })) newTaskRequests.forEach(createTask) - initialText.style.display = 'none' + updateInitialText() } async function onIdle() { @@ -864,7 +899,7 @@ async function onTaskStart(task) { setStatus('request', 'fetching..') renderButtons.style.display = 'flex' renameMakeImageButton() - previewTools.style.display = 'block' + updateInitialText() } /* Hover effect for the init image in the task list */ @@ -993,13 +1028,16 @@ function createTask(task) { task['stopTask'].addEventListener('click', (e) => { e.stopPropagation() - let question = (task['isProcessing'] ? "Stop this task?" : "Remove this task?") - shiftOrConfirm(e, question, async function(e) { - if (task.batchesDone <= 0 || !task.isProcessing) { - removeTask(taskEntry) - } - abortTask(task) - }) + if (task['isProcessing']) { + shiftOrConfirm(e, "Stop this task?", async function(e) { + if (task.batchesDone <= 0 || !task.isProcessing) { + removeTask(taskEntry) + } + abortTask(task) + }) + } else { + removeTask(taskEntry) + } }) task['useSettings'] = taskEntry.querySelector('.useSettings') @@ -1225,15 +1263,23 @@ async function stopAllTasks() { }) } -function removeTask(taskToRemove) { - taskToRemove.remove() - +function updateInitialText() { if (document.querySelector('.imageTaskContainer') === null) { - previewTools.style.display = 'none' - initialText.style.display = 'block' + if (undoBuffer.length == 0) { + previewTools.classList.add('displayNone') + } + initialText.classList.remove('displayNone') + } else { + initialText.classList.add('displayNone') + previewTools.classList.remove('displayNone') } } +function removeTask(taskToRemove) { + undoableRemove(taskToRemove) + updateInitialText() +} + clearAllPreviewsBtn.addEventListener('click', (e) => { shiftOrConfirm(e, "Clear all the results and tasks in this window?", async function() { await stopAllTasks() From 4871f7fed7686aa4444cadedf6be3ea17a62a230 Mon Sep 17 00:00:00 2001 From: JeLuF Date: Tue, 21 Mar 2023 01:31:12 +0100 Subject: [PATCH 03/26] UNDO_LIMIT --- ui/media/js/main.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 9ccb7907..ec6b8932 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -86,6 +86,7 @@ let imagePreviewContent = document.querySelector("#preview-content") let undoButton = document.querySelector("#undo") let undoBuffer = [] +const UNDO_LIMIT = 20 imagePreview.addEventListener('drop', function(ev) { const data = ev.dataTransfer?.getData("text/plain"); @@ -258,7 +259,7 @@ function playSound() { function undoableRemove(element, doubleUndo=false) { let data = { 'element': element, 'parent': element.parentNode, 'prev': element.previousSibling, 'next': element.nextSibling, 'doubleUndo': doubleUndo } undoBuffer.push(data) - if (undoBuffer.length > 10) { + if (undoBuffer.length > UNDO_LIMIT) { // Remove item from memory and also remove it from the data structures let item = undoBuffer.shift() htmlTaskMap.delete(item.element) From 7a4002a17a8556ac54fc7491bd414b402fe2bc4b Mon Sep 17 00:00:00 2001 From: Olivia Godone-Maresca Date: Tue, 21 Mar 2023 21:39:41 -0400 Subject: [PATCH 04/26] Remove the empty space at the bottom of the page --- ui/media/css/image-modal.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/media/css/image-modal.css b/ui/media/css/image-modal.css index e3d70f72..1001807c 100644 --- a/ui/media/css/image-modal.css +++ b/ui/media/css/image-modal.css @@ -13,6 +13,10 @@ z-index: 1001; } +#viewFullSizeImgModal:not(.active) { + display: none; +} + #viewFullSizeImgModal > * { pointer-events: auto; margin: 0; From d1f341678c1ced465bd303c4b80f0a139ec5d84f Mon Sep 17 00:00:00 2001 From: patriceac <48073125+patriceac@users.noreply.github.com> Date: Fri, 24 Mar 2023 00:08:51 -0700 Subject: [PATCH 05/26] Fix for Clear button in image editor --- ui/media/js/image-editor.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/media/js/image-editor.js b/ui/media/js/image-editor.js index 4597e983..8c246eab 100644 --- a/ui/media/js/image-editor.js +++ b/ui/media/js/image-editor.js @@ -171,6 +171,7 @@ const IMAGE_EDITOR_ACTIONS = [ icon: "fa-solid fa-xmark", handler: (editor) => { editor.ctx_current.clearRect(0, 0, editor.width, editor.height) + imageEditor.setImage(null, editor.width, editor.height) // properly reset the drawing canvas }, trackHistory: true }, From e42ddbd6524a6057a250c66a5a279bf4d94eafc3 Mon Sep 17 00:00:00 2001 From: Olivia Godone-Maresca Date: Fri, 24 Mar 2023 22:46:03 -0400 Subject: [PATCH 06/26] Allow saving lossless WEBPs --- ui/easydiffusion/renderer.py | 2 +- ui/easydiffusion/types.py | 1 + ui/easydiffusion/utils/save_utils.py | 3 +++ ui/index.html | 3 +++ ui/media/js/auto-save.js | 1 + ui/media/js/engine.js | 2 ++ ui/media/js/main.js | 22 +++++++++++++++++++--- 7 files changed, 30 insertions(+), 4 deletions(-) diff --git a/ui/easydiffusion/renderer.py b/ui/easydiffusion/renderer.py index fd8b7f7a..8270d232 100644 --- a/ui/easydiffusion/renderer.py +++ b/ui/easydiffusion/renderer.py @@ -147,7 +147,7 @@ def filter_images(task_data: TaskData, images: list, user_stopped): def construct_response(images: list, seeds: list, task_data: TaskData, base_seed: int): return [ ResponseImage( - data=img_to_base64_str(img, task_data.output_format, task_data.output_quality), + data=img_to_base64_str(img, task_data.output_format, task_data.output_quality, task_data.output_lossless), seed=seed, ) for img, seed in zip(images, seeds) diff --git a/ui/easydiffusion/types.py b/ui/easydiffusion/types.py index ebacc864..bbec0afa 100644 --- a/ui/easydiffusion/types.py +++ b/ui/easydiffusion/types.py @@ -43,6 +43,7 @@ class TaskData(BaseModel): block_nsfw: bool = False output_format: str = "jpeg" # or "png" or "webp" output_quality: int = 75 + output_lossless: bool = False metadata_output_format: str = "txt" # or "json" stream_image_progress: bool = False stream_image_progress_interval: int = 5 diff --git a/ui/easydiffusion/utils/save_utils.py b/ui/easydiffusion/utils/save_utils.py index d571d1b8..6affac78 100644 --- a/ui/easydiffusion/utils/save_utils.py +++ b/ui/easydiffusion/utils/save_utils.py @@ -45,6 +45,7 @@ def save_images_to_disk(images: list, filtered_images: list, req: GenerateImageR file_name=make_filename, output_format=task_data.output_format, output_quality=task_data.output_quality, + output_lossless=task_data.output_lossless, ) if task_data.metadata_output_format.lower() in ["json", "txt", "embed"]: save_dicts( @@ -63,6 +64,7 @@ def save_images_to_disk(images: list, filtered_images: list, req: GenerateImageR file_name=make_filename, output_format=task_data.output_format, output_quality=task_data.output_quality, + output_lossless=task_data.output_lossless, ) save_images( filtered_images, @@ -70,6 +72,7 @@ def save_images_to_disk(images: list, filtered_images: list, req: GenerateImageR file_name=make_filter_filename, output_format=task_data.output_format, output_quality=task_data.output_quality, + output_lossless=task_data.output_lossless, ) if task_data.metadata_output_format.lower() in ["json", "txt", "embed"]: save_dicts( diff --git a/ui/index.html b/ui/index.html index 91eba7eb..607546aa 100644 --- a/ui/index.html +++ b/ui/index.html @@ -237,6 +237,9 @@ + + + diff --git a/ui/media/js/auto-save.js b/ui/media/js/auto-save.js index f791ef74..32d9ad1e 100644 --- a/ui/media/js/auto-save.js +++ b/ui/media/js/auto-save.js @@ -26,6 +26,7 @@ const SETTINGS_IDS_LIST = [ "lora_alpha", "output_format", "output_quality", + "output_lossless", "negative_prompt", "stream_image_progress", "use_face_correction", diff --git a/ui/media/js/engine.js b/ui/media/js/engine.js index ae24e5b8..02871b23 100644 --- a/ui/media/js/engine.js +++ b/ui/media/js/engine.js @@ -744,6 +744,7 @@ "block_nsfw": false, "output_format": "png", "output_quality": 75, + "output_lossless": false, } const TASK_OPTIONAL = { "device": 'string', @@ -755,6 +756,7 @@ "use_vae_model": 'string', "use_hypernetwork_model": 'string', "hypernetwork_strength": 'number', + "output_lossless": 'boolean', } // Higer values will result in... diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 9fad8ff9..f11d2046 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -50,6 +50,8 @@ let loraModelField = new ModelDropdown(document.querySelector('#lora_model'), 'l let loraAlphaSlider = document.querySelector('#lora_alpha_slider') let loraAlphaField = document.querySelector('#lora_alpha') let outputFormatField = document.querySelector('#output_format') +let outputLosslessField = document.querySelector('#output_lossless') +let outputLosslessContainer = document.querySelector('#output_lossless_container') let blockNSFWField = document.querySelector('#block_nsfw') let showOnlyFilteredImageField = document.querySelector("#show_only_filtered_image") let updateBranchLabel = document.querySelector("#updateBranchLabel") @@ -1057,6 +1059,7 @@ function getCurrentUserRequest() { block_nsfw: blockNSFWField.checked, output_format: outputFormatField.value, output_quality: parseInt(outputQualityField.value), + output_lossless: outputLosslessField.checked, metadata_output_format: metadataOutputFormatField.value, original_prompt: promptField.value, active_tags: (activeTags.map(x => x.name)), @@ -1517,13 +1520,26 @@ outputQualitySlider.addEventListener('input', updateOutputQuality) outputQualityField.addEventListener('input', debounce(updateOutputQualitySlider, 1500)) updateOutputQuality() -outputFormatField.addEventListener('change', e => { - if (outputFormatField.value === 'png') { +function updateOutputQualityVisibility() { + if (outputFormatField.value === 'webp') { + outputLosslessContainer.style.display = 'unset' + if (outputLosslessField.checked) { + outputQualityRow.style.display='none' + } else { + outputQualityRow.style.display='table-row' + } + } + else if (outputFormatField.value === 'png') { outputQualityRow.style.display='none' + outputLosslessContainer.style.display = 'none' } else { outputQualityRow.style.display='table-row' + outputLosslessContainer.style.display = 'none' } -}) +} + +outputFormatField.addEventListener('change', updateOutputQualityVisibility) +outputLosslessField.addEventListener('change', updateOutputQualityVisibility) /********************* Zoom Slider **********************/ thumbnailSizeField.addEventListener('change', () => { (function (s) { From 2af1b5c064a96a09c0b1be200e610f233634a30c Mon Sep 17 00:00:00 2001 From: Olivia Godone-Maresca Date: Fri, 24 Mar 2023 23:54:31 -0400 Subject: [PATCH 07/26] Make tab bar scrollable and improve SD status overlaps --- ui/media/css/main.css | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ui/media/css/main.css b/ui/media/css/main.css index c5e7c251..987bbcd0 100644 --- a/ui/media/css/main.css +++ b/ui/media/css/main.css @@ -309,8 +309,7 @@ div.img-preview img { #server-status { position: absolute; right: 16px; - top: 50%; - transform: translateY(-50%); + top: 4px; text-align: right; } #server-status-color { @@ -336,6 +335,7 @@ div.img-preview img { position: relative; background: var(--background-color4); display: flex; + padding: 12px 0 0; } .tab .icon { padding-right: 4pt; @@ -344,8 +344,7 @@ div.img-preview img { } #logo { display: inline; - padding: 12px; - padding-top: 8px; + padding: 0 12px 12px; white-space: nowrap; } #logo h1 { @@ -881,9 +880,6 @@ input::file-selector-button { .tab .icon { padding-right: 0px; } - #server-status { - top: 75%; - } .popup > div { padding-left: 5px !important; padding-right: 5px !important; @@ -1126,6 +1122,8 @@ input::file-selector-button { .tab-container { display: flex; align-items: flex-end; + overflow-x: auto; + overflow-y: hidden; } .tab { From 356375677d1a0d250b64829731ed21f927ad706a Mon Sep 17 00:00:00 2001 From: patriceac <48073125+patriceac@users.noreply.github.com> Date: Sat, 25 Mar 2023 02:09:11 -0700 Subject: [PATCH 08/26] Fix restoration of disabled image tags Fix a regression introduced by PR 1003 that causes disabled image tags to be restored in an enabled state by the "image modifiers improvements" plugin. No change in the regular UX. --- ui/media/js/image-modifiers.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ui/media/js/image-modifiers.js b/ui/media/js/image-modifiers.js index a7a030ff..5a56d940 100644 --- a/ui/media/js/image-modifiers.js +++ b/ui/media/js/image-modifiers.js @@ -157,7 +157,7 @@ async function loadModifiers() { document.dispatchEvent(new Event('loadImageModifiers')) } -function refreshModifiersState(newTags) { +function refreshModifiersState(newTags, inactiveTags) { // clear existing modifiers document.querySelector('#editor-modifiers').querySelectorAll('.modifier-card').forEach(modifierCard => { const modifierName = modifierCard.querySelector('.modifier-card-label p').dataset.fullName // pick the full modifier name @@ -211,7 +211,7 @@ function refreshModifiersState(newTags) { }) } }) - refreshTagsList() + refreshTagsList(inactiveTags) } function refreshInactiveTags(inactiveTags) { @@ -228,13 +228,13 @@ function refreshInactiveTags(inactiveTags) { let overlays = document.querySelector('#editor-inputs-tags-list').querySelectorAll('.modifier-card-overlay') overlays.forEach (i => { let modifierName = i.parentElement.getElementsByClassName('modifier-card-label')[0].getElementsByTagName("p")[0].innerText - if (inactiveTags.find(element => element === modifierName) !== undefined) { + if (inactiveTags?.find(element => element === modifierName) !== undefined) { i.parentElement.classList.add('modifier-toggle-inactive') } }) } -function refreshTagsList() { +function refreshTagsList(inactiveTags) { editorModifierTagsList.innerHTML = '' if (activeTags.length == 0) { @@ -266,6 +266,7 @@ function refreshTagsList() { let brk = document.createElement('br') brk.style.clear = 'both' editorModifierTagsList.appendChild(brk) + refreshInactiveTags(inactiveTags) document.dispatchEvent(new Event('refreshImageModifiers')) // notify plugins that the image tags have been refreshed } From 1c2e353fc5c99f42ae942984c48c714f971532f7 Mon Sep 17 00:00:00 2001 From: patriceac <48073125+patriceac@users.noreply.github.com> Date: Sat, 25 Mar 2023 02:47:05 -0700 Subject: [PATCH 09/26] Fire event when random seed is toggled by dnd.js This is to let plugins know that the state of the random seed toggle was programmatically changed by dnd.js. No change for regular UI. --- ui/media/js/dnd.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/media/js/dnd.js b/ui/media/js/dnd.js index f1f00911..b09d8d38 100644 --- a/ui/media/js/dnd.js +++ b/ui/media/js/dnd.js @@ -92,11 +92,13 @@ const TASK_MAPPING = { setUI: (seed) => { if (!seed) { randomSeedField.checked = true + randomSeedField.dispatchEvent(new Event('change')) // let plugins know that the state of the random seed toggle changed seedField.disabled = true seedField.value = 0 return } randomSeedField.checked = false + randomSeedField.dispatchEvent(new Event('change')) // let plugins know that the state of the random seed toggle changed seedField.disabled = false seedField.value = seed }, From 48b233304fe06401b0e01f2ae11eb440fe3b9e75 Mon Sep 17 00:00:00 2001 From: patriceac <48073125+patriceac@users.noreply.github.com> Date: Sat, 25 Mar 2023 02:51:46 -0700 Subject: [PATCH 10/26] Only notify upon disabling --- ui/media/js/dnd.js | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/media/js/dnd.js b/ui/media/js/dnd.js index b09d8d38..9c9ebbf2 100644 --- a/ui/media/js/dnd.js +++ b/ui/media/js/dnd.js @@ -92,7 +92,6 @@ const TASK_MAPPING = { setUI: (seed) => { if (!seed) { randomSeedField.checked = true - randomSeedField.dispatchEvent(new Event('change')) // let plugins know that the state of the random seed toggle changed seedField.disabled = true seedField.value = 0 return From a10dfd038616a7cdabfbcb9a5895dcda1b934747 Mon Sep 17 00:00:00 2001 From: patriceac <48073125+patriceac@users.noreply.github.com> Date: Tue, 28 Mar 2023 03:05:51 -0700 Subject: [PATCH 11/26] Moving attention weighting to InvokeAI syntax (#1055) * Moving attention weighting to InvokeAI syntax () and [] were actually ignored by the legacy parser, so moving the Ctrl+Wheel shortcut to the InvokeAI syntax of '+' and '-'. * Moving attention weighting to InvokeAI syntax () and [] were actually ignored by the legacy parser, so moving the Ctrl+Wheel shortcut to the InvokeAI syntax of '+' and '-'. * Properly cleanup parenthesis '(image tag)++' need to be trimmed to 'image tag' * Add parenthesis as needed when adjusting weights In the InvokeAI syntax, 'image modifier' must become '(image modifier)++' when adjusting weight. * Code cleanup --- ui/media/js/image-modifiers.js | 5 +++- ui/plugins/ui/Modifiers-wheel.plugin.js | 38 ++++++++++++++++--------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/ui/media/js/image-modifiers.js b/ui/media/js/image-modifiers.js index a7a030ff..032c125f 100644 --- a/ui/media/js/image-modifiers.js +++ b/ui/media/js/image-modifiers.js @@ -129,7 +129,10 @@ function createModifierGroup(modifierGroup, initiallyExpanded, removeBy) { } function trimModifiers(tag) { - return tag.replace(/^\(+|\)+$/g, '').replace(/^\[+|\]+$/g, '') + // Remove trailing '-' and/or '+' + tag = tag.replace(/[-+]+$/, ''); + // Remove parentheses at beginning and end + return tag.replace(/^[(]+|[\s)]+$/g, ''); } async function loadModifiers() { diff --git a/ui/plugins/ui/Modifiers-wheel.plugin.js b/ui/plugins/ui/Modifiers-wheel.plugin.js index 322cca8f..0967a725 100644 --- a/ui/plugins/ui/Modifiers-wheel.plugin.js +++ b/ui/plugins/ui/Modifiers-wheel.plugin.js @@ -1,4 +1,8 @@ -(function () { "use strict" +(function () { + "use strict" + + const MAX_WEIGHT = 5 + if (typeof editorModifierTagsList !== 'object') { console.error('editorModifierTagsList missing...') return @@ -34,34 +38,42 @@ break } } + if (s.charAt(0) !== '(' && s.charAt(s.length - 1) !== ')' && s.trim().includes(' ')) { + s = '(' + s + ')' + t = '(' + t + ')' + } if (delta < 0) { // wheel scrolling up - if (s.substring(0, 1) == '[' && s.substring(s.length-1) == ']') { - s = s.substring(1, s.length - 1) - t = t.substring(1, t.length - 1) + if (s.substring(s.length - 1) == '-') { + s = s.substring(0, s.length - 1) + t = t.substring(0, t.length - 1) } else { - if (s.substring(0, 10) !== '('.repeat(10) && s.substring(s.length-10) !== ')'.repeat(10)) { - s = '(' + s + ')' - t = '(' + t + ')' + if (s.substring(s.length - MAX_WEIGHT) !== '+'.repeat(MAX_WEIGHT)) { + s = s + '+' + t = t + '+' } } } else{ // wheel scrolling down - if (s.substring(0, 1) == '(' && s.substring(s.length-1) == ')') { - s = s.substring(1, s.length - 1) - t = t.substring(1, t.length - 1) + if (s.substring(s.length - 1) == '+') { + s = s.substring(0, s.length - 1) + t = t.substring(0, t.length - 1) } else { - if (s.substring(0, 10) !== '['.repeat(10) && s.substring(s.length-10) !== ']'.repeat(10)) { - s = '[' + s + ']' - t = '[' + t + ']' + if (s.substring(s.length - MAX_WEIGHT) !== '-'.repeat(MAX_WEIGHT)) { + s = s + '-' + t = t + '-' } } } + if (s.charAt(0) === '(' && s.charAt(s.length - 1) === ')') { + s = s.substring(1, s.length - 1) + t = t.substring(1, t.length - 1) + } i.parentElement.getElementsByClassName('modifier-card-label')[0].getElementsByTagName("p")[0].innerText = s // update activeTags for (let it = 0; it < overlays.length; it++) { From 728e7c79fd668400a742c234a54aa3d214c5b9dd Mon Sep 17 00:00:00 2001 From: patriceac <48073125+patriceac@users.noreply.github.com> Date: Tue, 28 Mar 2023 03:07:50 -0700 Subject: [PATCH 12/26] Add support for LoRA models to dnd.js (#1054) * Add support for LoRA to dnd.js Adds support for LoRA to dnd.js (task restoration, use settings, etc.). * Correct extensions for LoRA --------- Co-authored-by: cmdr2 --- ui/media/js/dnd.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ui/media/js/dnd.js b/ui/media/js/dnd.js index f1f00911..3c02fa1a 100644 --- a/ui/media/js/dnd.js +++ b/ui/media/js/dnd.js @@ -230,6 +230,20 @@ const TASK_MAPPING = { readUI: () => vaeModelField.value, parse: (val) => val }, + use_lora_model: { name: 'LoRA model', + setUI: (use_lora_model) => { + const oldVal = loraModelField.value + use_lora_model = (use_lora_model === undefined || use_lora_model === null || use_lora_model === 'None' ? '' : use_lora_model) + + if (use_lora_model !== '') { + use_lora_model = getModelPath(use_lora_model, ['.ckpt', '.safetensors']) + use_lora_model = use_lora_model !== '' ? use_lora_model : oldVal + } + loraModelField.value = use_lora_model + }, + readUI: () => loraModelField.value, + parse: (val) => val + }, use_hypernetwork_model: { name: 'Hypernetwork model', setUI: (use_hypernetwork_model) => { const oldVal = hypernetworkModelField.value From 77246aeab183b3efa09bec60fcf92e0f190b12b7 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Tue, 28 Mar 2023 15:42:29 +0530 Subject: [PATCH 13/26] sdkit 1.0.60 - lossless webp --- scripts/on_sd_start.bat | 4 ++-- scripts/on_sd_start.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat index 50bf7dbe..31bec92c 100644 --- a/scripts/on_sd_start.bat +++ b/scripts/on_sd_start.bat @@ -95,7 +95,7 @@ if "%ERRORLEVEL%" EQU "0" ( set PYTHONNOUSERSITE=1 set PYTHONPATH=%INSTALL_ENV_DIR%\lib\site-packages - call python -m pip install --upgrade sdkit==1.0.59 -q || ( + call python -m pip install --upgrade sdkit==1.0.60 -q || ( echo "Error updating sdkit" ) ) @@ -106,7 +106,7 @@ if "%ERRORLEVEL%" EQU "0" ( set PYTHONNOUSERSITE=1 set PYTHONPATH=%INSTALL_ENV_DIR%\lib\site-packages - call python -m pip install sdkit==1.0.59 || ( + call python -m pip install sdkit==1.0.60 || ( echo "Error installing sdkit. 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 exit /b diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh index 4b725653..503eeb55 100755 --- a/scripts/on_sd_start.sh +++ b/scripts/on_sd_start.sh @@ -103,7 +103,7 @@ if python ../scripts/check_modules.py sdkit sdkit.models ldm transformers numpy export PYTHONNOUSERSITE=1 export PYTHONPATH="$INSTALL_ENV_DIR/lib/python3.8/site-packages" - python -m pip install --upgrade sdkit==1.0.59 -q + python -m pip install --upgrade sdkit==1.0.60 -q fi else echo "Installing sdkit: https://pypi.org/project/sdkit/" @@ -111,7 +111,7 @@ else export PYTHONNOUSERSITE=1 export PYTHONPATH="$INSTALL_ENV_DIR/lib/python3.8/site-packages" - if python -m pip install sdkit==1.0.59 ; then + if python -m pip install sdkit==1.0.60 ; then echo "Installed." else fail "sdkit install failed" From 9ee17ec5f1168aac0f049a9bd90b875b618ffee3 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Tue, 28 Mar 2023 15:58:18 +0530 Subject: [PATCH 14/26] changelog --- CHANGES.md | 3 +++ ui/index.html | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 77561e0c..4b225b32 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,9 @@ Our focus continues to remain on an easy installation experience, and an easy user-interface. While still remaining pretty powerful, in terms of features and speed. ### Detailed changelog +* 2.5.30 - 28 Mar 2023 - Allow the user to undo the deletion of tasks or images, instead of showing a pop-up each time. The new `Undo` button will be present at the top of the UI. Thanks @JeLuf. +* 2.5.30 - 28 Mar 2023 - Support saving lossless WEBP images. Thanks @ogmaresca. +* 2.5.30 - 28 Mar 2023 - Lots of bug fixes for the UI (Read LoRA flag in metadata files, new prompt weight format with scrollwheel, fix overflow with lots of tabs, clear button in image editor, shorter filenames in download). Thanks @patriceac, @JeLuf and @ogmaresca. * 2.5.29 - 27 Mar 2023 - Fix a bug where some non-square images would fail while inpainting with a `The size of tensor a must match size of tensor b` error. * 2.5.29 - 27 Mar 2023 - Fix the `incorrect number of channels` error, when given a PNG image with an alpha channel in `Test Diffusers`. * 2.5.29 - 27 Mar 2023 - Fix broken inpainting in `Test Diffusers` (beta). diff --git a/ui/index.html b/ui/index.html index f4298c70..6c067aeb 100644 --- a/ui/index.html +++ b/ui/index.html @@ -30,7 +30,7 @@

Easy Diffusion - v2.5.29 + v2.5.30

From 03800a45e073a71dd6a2b2b4aa49ed504554332c Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Tue, 28 Mar 2023 17:13:37 +0530 Subject: [PATCH 15/26] Allow Ctrl+Z to undo the removal of images/tasks --- ui/index.html | 2 +- ui/media/js/main.js | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ui/index.html b/ui/index.html index 6c067aeb..0bf90733 100644 --- a/ui/index.html +++ b/ui/index.html @@ -298,7 +298,7 @@
- diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 781bb480..7507ba7f 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -278,6 +278,9 @@ function undoableRemove(element, doubleUndo=false) { function undoRemove() { let data = undoBuffer.pop() + if (!data) { + return + } if (data.next == null) { data.parent.appendChild(data.element) } else { @@ -294,6 +297,12 @@ function undoRemove() { undoButton.addEventListener('click', () => { undoRemove() }) +document.addEventListener('keydown', function(e) { + if (e.ctrlKey && e.key === 'z' && e.target == document.body) { + undoRemove() + } +}) + function showImages(reqBody, res, outputContainer, livePreview) { let imageItemElements = outputContainer.querySelectorAll('.imgItem') if(typeof res != 'object') return From 044e3746cabff2975c7cd0d56b2ed627efa54c76 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Tue, 28 Mar 2023 17:32:20 +0530 Subject: [PATCH 16/26] Undo on mac --- 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 7507ba7f..e254956b 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -298,7 +298,7 @@ function undoRemove() { undoButton.addEventListener('click', () => { undoRemove() }) document.addEventListener('keydown', function(e) { - if (e.ctrlKey && e.key === 'z' && e.target == document.body) { + if ((e.ctrlKey || e.metaKey) && e.key === 'z' && e.target == document.body) { undoRemove() } }) From 40598c28af8d20dfb775e4224e24c97505e29f59 Mon Sep 17 00:00:00 2001 From: JeLuF Date: Wed, 29 Mar 2023 00:46:13 +0200 Subject: [PATCH 17/26] Don't show lossless WEBP toggle for JPEG on first load https://discord.com/channels/1014774730907209781/1021695193499582494/1090402304173277266 --- ui/index.html | 2 +- ui/media/js/main.js | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ui/index.html b/ui/index.html index 0bf90733..f7dcf114 100644 --- a/ui/index.html +++ b/ui/index.html @@ -237,7 +237,7 @@ - + diff --git a/ui/media/js/main.js b/ui/media/js/main.js index e254956b..49707f59 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -1557,19 +1557,19 @@ updateOutputQuality() function updateOutputQualityVisibility() { if (outputFormatField.value === 'webp') { - outputLosslessContainer.style.display = 'unset' + outputLosslessContainer.classList.remove('displayNone') if (outputLosslessField.checked) { - outputQualityRow.style.display='none' + outputQualityRow.classList.add('displayNone') } else { - outputQualityRow.style.display='table-row' + outputQualityRow.classList.remove('displayNone') } } else if (outputFormatField.value === 'png') { - outputQualityRow.style.display='none' - outputLosslessContainer.style.display = 'none' + outputQualityRow.classList.add('displayNone') + outputLosslessContainer.classList.add('displayNone') } else { - outputQualityRow.style.display='table-row' - outputLosslessContainer.style.display = 'none' + outputQualityRow.classList.remove('displayNone') + outputLosslessContainer.classList.add('displayNone') } } From e5a47ac9648c2325827c094c5dca95d56b83f614 Mon Sep 17 00:00:00 2001 From: Olivia Godone-Maresca <8977984+ogmaresca@users.noreply.github.com> Date: Tue, 28 Mar 2023 23:49:05 -0400 Subject: [PATCH 18/26] Allow both embedding metadata and saving metadata files (#1058) * Allow both embedding metadata and saving metadata files * Use the correct variable * Descriptive variable --------- Co-authored-by: cmdr2 --- ui/easydiffusion/utils/save_utils.py | 18 ++++++++++-------- ui/media/js/parameters.js | 10 +++++++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/ui/easydiffusion/utils/save_utils.py b/ui/easydiffusion/utils/save_utils.py index 6affac78..950f04b0 100644 --- a/ui/easydiffusion/utils/save_utils.py +++ b/ui/easydiffusion/utils/save_utils.py @@ -47,14 +47,16 @@ def save_images_to_disk(images: list, filtered_images: list, req: GenerateImageR output_quality=task_data.output_quality, output_lossless=task_data.output_lossless, ) - if task_data.metadata_output_format.lower() in ["json", "txt", "embed"]: - save_dicts( - metadata_entries, - save_dir_path, - file_name=make_filename, - output_format=task_data.metadata_output_format, - file_format=task_data.output_format, - ) + if task_data.metadata_output_format: + for metadata_output_format in task_data.metadata_output_format.split(','): + if metadata_output_format.lower() in ["json", "txt", "embed"]: + save_dicts( + metadata_entries, + save_dir_path, + file_name=make_filename, + output_format=metadata_output_format, + file_format=task_data.output_format, + ) else: make_filter_filename = make_filename_callback(req, now=now, suffix="filtered") diff --git a/ui/media/js/parameters.js b/ui/media/js/parameters.js index cb0c7a4c..baa55469 100644 --- a/ui/media/js/parameters.js +++ b/ui/media/js/parameters.js @@ -76,7 +76,15 @@ var PARAMETERS = [ { value: "embed", label: "embed" - } + }, + { + value: "embed,txt", + label: "embed & txt", + }, + { + value: "embed,json", + label: "embed & json", + }, ], }, { From 4836abb5bd80d30869fe8f557094a70304180ef1 Mon Sep 17 00:00:00 2001 From: lucasmarcelli Date: Wed, 29 Mar 2023 13:52:41 -0400 Subject: [PATCH 19/26] reworked how task config is setup --- CHANGES.md | 1 + CONTRIBUTING.md | 2 -- ui/media/css/main.css | 5 +++ ui/media/js/main.js | 74 +++++++++++++++++++++++++++---------------- 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4b225b32..752111f6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,7 @@ Our focus continues to remain on an easy installation experience, and an easy user-interface. While still remaining pretty powerful, in terms of features and speed. ### Detailed changelog +* 2.5.30 - 28 Mar 2023 - Refactor task entry config to use a generating method. Added ability for plugins to easily add to this. Removed confusing sentence from `contributing.md` * 2.5.30 - 28 Mar 2023 - Allow the user to undo the deletion of tasks or images, instead of showing a pop-up each time. The new `Undo` button will be present at the top of the UI. Thanks @JeLuf. * 2.5.30 - 28 Mar 2023 - Support saving lossless WEBP images. Thanks @ogmaresca. * 2.5.30 - 28 Mar 2023 - Lots of bug fixes for the UI (Read LoRA flag in metadata files, new prompt weight format with scrollwheel, fix overflow with lots of tabs, clear button in image editor, shorter filenames in download). Thanks @patriceac, @JeLuf and @ogmaresca. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 02ce6fc6..c01d489a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -42,8 +42,6 @@ or for Windows 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. 11) Please update CHANGES.md in your pull requests. -Check the `ui/frontend/build/README.md` for instructions on running and building the React code. - ## 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. diff --git a/ui/media/css/main.css b/ui/media/css/main.css index 88b8fc58..e6a95cda 100644 --- a/ui/media/css/main.css +++ b/ui/media/css/main.css @@ -572,6 +572,11 @@ div.img-preview img { margin-bottom: 5pt; margin-top: 5pt; } + +.taskConfigContainer { + display: inline; +} + .img-batch { display: inline; } diff --git a/ui/media/js/main.js b/ui/media/js/main.js index e254956b..313f4012 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -5,6 +5,28 @@ const MIN_GPUS_TO_SHOW_SELECTION = 2 const IMAGE_REGEX = new RegExp('data:image/[A-Za-z]+;base64') const htmlTaskMap = new WeakMap() +const taskConfigSetup = { + taskConfig: { + seed: { value: ({ seed }) => seed, label: 'Seed' }, + dimensions: { value: ({ reqBody }) => `${reqBody?.width}x${reqBody?.height}`, label: 'Dimensions' }, + sampler_name: 'Sampler', + num_inference_steps: 'Inference Steps', + guidance_scale: 'Guidance Scale', + use_stable_diffusion_model: 'Model', + use_vae_model: { label: 'VAE', visible: ({ reqBody }) => reqBody?.use_vae_model !== undefined && reqBody?.use_vae_model.trim() !== ''}, + negative_prompt: { label: 'Negative Prompt', visible: ({ reqBody }) => reqBody?.negative_prompt !== undefined && reqBody?.negative_prompt.trim() !== ''}, + prompt_strength: 'Prompt Strength', + use_face_correction: 'Fix Faces', + upscale: { value: ({ reqBody }) => `${reqBody?.use_upscale} (${reqBody?.upscale_amount || 4}x)`, label: 'Upscale', visible: ({ reqBody }) => !!reqBody?.use_upscale }, + use_hypernetwork_model: 'Hypernetwork', + hypernetwork_strength: { label: 'Hypernetwork Strength', visible: ({ reqBody }) => !!reqBody?.use_hypernetwork_model }, + use_lora_model: 'Lora Model', + preserve_init_image_color_profile: 'Preserve Color Profile', + }, + pluginTaskConfig: {}, + getCSSKey: (key) => key.split('_').map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join('') +} + let imageCounter = 0 let imageRequest = [] @@ -952,6 +974,29 @@ function onTaskEntryDragOver(event) { } } +function generateConfig({ label, value, visible, cssKey }) { + if (!visible) return null; + return `
${label}: ${value}` +} + +function getVisibleConfig(config, task) { + const mergedTaskConfig = { ...config.taskConfig, ...config.pluginTaskConfig } + return Object.keys(mergedTaskConfig) + .map((key) => { + const value = mergedTaskConfig?.[key]?.value?.(task) ?? task.reqBody[key] + const visible = mergedTaskConfig?.[key]?.visible?.(task) ?? value !== undefined ?? true + const label = mergedTaskConfig?.[key]?.label ?? mergedTaskConfig?.[key] + const cssKey = config.getCSSKey(key) + return { label, visible, value, cssKey } + }) + .map((obj) => generateConfig(obj)) + .filter(obj => obj) +} + +function createTaskConfig(task) { + return getVisibleConfig(taskConfigSetup, task).join('
') +} + function createTask(task) { let taskConfig = '' @@ -960,33 +1005,8 @@ function createTask(task) { let w = task.reqBody.width * h / task.reqBody.height >>0 taskConfig += `
` } - taskConfig += `Seed: ${task.seed}, Sampler: ${task.reqBody.sampler_name}, Inference Steps: ${task.reqBody.num_inference_steps}, Guidance Scale: ${task.reqBody.guidance_scale}, Model: ${task.reqBody.use_stable_diffusion_model}` - if (task.reqBody.use_vae_model.trim() !== '') { - taskConfig += `, VAE: ${task.reqBody.use_vae_model}` - } - if (task.reqBody.negative_prompt.trim() !== '') { - taskConfig += `, Negative Prompt: ${task.reqBody.negative_prompt}` - } - if (task.reqBody.init_image !== undefined) { - taskConfig += `, Prompt Strength: ${task.reqBody.prompt_strength}` - } - if (task.reqBody.use_face_correction) { - taskConfig += `, Fix Faces: ${task.reqBody.use_face_correction}` - } - if (task.reqBody.use_upscale) { - taskConfig += `, Upscale: ${task.reqBody.use_upscale} (${task.reqBody.upscale_amount || 4}x)` - } - if (task.reqBody.use_hypernetwork_model) { - taskConfig += `, Hypernetwork: ${task.reqBody.use_hypernetwork_model}` - taskConfig += `, Hypernetwork Strength: ${task.reqBody.hypernetwork_strength}` - } - if (task.reqBody.use_lora_model) { - taskConfig += `, LoRA: ${task.reqBody.use_lora_model}` - } - if (task.reqBody.preserve_init_image_color_profile) { - taskConfig += `, Preserve Color Profile: true` - } + taskConfig += `
${createTaskConfig(task)}
`; let taskEntry = document.createElement('div') taskEntry.id = `imageTaskContainer-${Date.now()}` @@ -1085,7 +1105,6 @@ function getCurrentUserRequest() { numOutputsTotal: numOutputsTotal, batchCount: Math.ceil(numOutputsTotal / numOutputsParallel), seed, - reqBody: { seed, used_random_seed: randomSeedField.checked, @@ -1117,7 +1136,6 @@ function getCurrentUserRequest() { if (IMAGE_REGEX.test(initImagePreview.src)) { newTask.reqBody.init_image = initImagePreview.src newTask.reqBody.prompt_strength = parseFloat(promptStrengthField.value) - // if (IMAGE_REGEX.test(maskImagePreview.src)) { // newTask.reqBody.mask = maskImagePreview.src // } From 8f877a2cee559a97a03771039a89ad48c76327cc Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Thu, 30 Mar 2023 18:44:21 +0530 Subject: [PATCH 20/26] Remove Ctrl+Z for undoing task removals until the conflict with other listeners for Ctrl+Z can be figured out --- ui/media/js/main.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 49707f59..11bd9ee4 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -297,12 +297,6 @@ function undoRemove() { undoButton.addEventListener('click', () => { undoRemove() }) -document.addEventListener('keydown', function(e) { - if ((e.ctrlKey || e.metaKey) && e.key === 'z' && e.target == document.body) { - undoRemove() - } -}) - function showImages(reqBody, res, outputContainer, livePreview) { let imageItemElements = outputContainer.querySelectorAll('.imgItem') if(typeof res != 'object') return From 11138a1d97ab5cdb84bb8c71c22e0a1d0698cfc3 Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Thu, 30 Mar 2023 19:08:10 +0530 Subject: [PATCH 21/26] Don't include LoRA in the task info if not used --- 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 d6bc9b01..a03e1e2a 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -20,7 +20,7 @@ const taskConfigSetup = { upscale: { value: ({ reqBody }) => `${reqBody?.use_upscale} (${reqBody?.upscale_amount || 4}x)`, label: 'Upscale', visible: ({ reqBody }) => !!reqBody?.use_upscale }, use_hypernetwork_model: 'Hypernetwork', hypernetwork_strength: { label: 'Hypernetwork Strength', visible: ({ reqBody }) => !!reqBody?.use_hypernetwork_model }, - use_lora_model: 'Lora Model', + use_lora_model: { label: 'Lora Model', visible: ({ reqBody }) => !!reqBody?.use_lora_model }, preserve_init_image_color_profile: 'Preserve Color Profile', }, pluginTaskConfig: {}, From 4f88939c77e27879fdf20a38de80be59723bb10e Mon Sep 17 00:00:00 2001 From: cmdr2 Date: Fri, 31 Mar 2023 16:26:11 +0530 Subject: [PATCH 22/26] sdkit 1.0.61 - reload a LoRA correctly if reloading the SD model --- scripts/on_sd_start.bat | 4 ++-- scripts/on_sd_start.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat index 31bec92c..f95bea97 100644 --- a/scripts/on_sd_start.bat +++ b/scripts/on_sd_start.bat @@ -95,7 +95,7 @@ if "%ERRORLEVEL%" EQU "0" ( set PYTHONNOUSERSITE=1 set PYTHONPATH=%INSTALL_ENV_DIR%\lib\site-packages - call python -m pip install --upgrade sdkit==1.0.60 -q || ( + call python -m pip install --upgrade sdkit==1.0.61 -q || ( echo "Error updating sdkit" ) ) @@ -106,7 +106,7 @@ if "%ERRORLEVEL%" EQU "0" ( set PYTHONNOUSERSITE=1 set PYTHONPATH=%INSTALL_ENV_DIR%\lib\site-packages - call python -m pip install sdkit==1.0.60 || ( + call python -m pip install sdkit==1.0.61 || ( echo "Error installing sdkit. 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 exit /b diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh index 503eeb55..4f887394 100755 --- a/scripts/on_sd_start.sh +++ b/scripts/on_sd_start.sh @@ -103,7 +103,7 @@ if python ../scripts/check_modules.py sdkit sdkit.models ldm transformers numpy export PYTHONNOUSERSITE=1 export PYTHONPATH="$INSTALL_ENV_DIR/lib/python3.8/site-packages" - python -m pip install --upgrade sdkit==1.0.60 -q + python -m pip install --upgrade sdkit==1.0.61 -q fi else echo "Installing sdkit: https://pypi.org/project/sdkit/" @@ -111,7 +111,7 @@ else export PYTHONNOUSERSITE=1 export PYTHONPATH="$INSTALL_ENV_DIR/lib/python3.8/site-packages" - if python -m pip install sdkit==1.0.60 ; then + if python -m pip install sdkit==1.0.61 ; then echo "Installed." else fail "sdkit install failed" From c772347c0977516e8d583cdda6aaf4d9b6619ab5 Mon Sep 17 00:00:00 2001 From: arrowgent <57545549+arrowgent@users.noreply.github.com> Date: Fri, 31 Mar 2023 20:54:00 -0700 Subject: [PATCH 23/26] add artist Zdzislaw Beksinski --- ui/modifiers.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ui/modifiers.json b/ui/modifiers.json index 325e724e..6f93e29d 100644 --- a/ui/modifiers.json +++ b/ui/modifiers.json @@ -2428,6 +2428,19 @@ "path": "artist/by_yoshitaka_amano/landscape-0.jpg" } ] + }, + { + "modifier": "by Zdzislaw Beksinski", + "previews": [ + { + "name": "portrait", + "path": "artist/by_zdzislaw_beksinski/portrait-0.jpg" + }, + { + "name": "landscape", + "path": "artist/by_zdzislaw_beksinski/landscape-0.jpg" + } + ] } ] }, From 22ca01bbdee3dd2768dde634c85b98cc73b3aff0 Mon Sep 17 00:00:00 2001 From: arrowgent <57545549+arrowgent@users.noreply.github.com> Date: Fri, 31 Mar 2023 20:56:22 -0700 Subject: [PATCH 24/26] create folder by_zdzislaw_beksinski --- ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp | 1 + 1 file changed, 1 insertion(+) create mode 100644 ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp diff --git a/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp b/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp new file mode 100644 index 00000000..111f9b0d --- /dev/null +++ b/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp @@ -0,0 +1 @@ +by_zdzislaw_beksinski From 65348e1cb9b6946c7f78ceb805ebc4de6fe9c9b9 Mon Sep 17 00:00:00 2001 From: arrowgent <57545549+arrowgent@users.noreply.github.com> Date: Fri, 31 Mar 2023 20:57:00 -0700 Subject: [PATCH 25/26] generated by zdzislaw beksinski portrait & landscape --- .../by_zdzislaw_beksinski/landscape-0.jpg | Bin 0 -> 40688 bytes .../artist/by_zdzislaw_beksinski/portrait-0.jpg | Bin 0 -> 57937 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/landscape-0.jpg create mode 100644 ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/portrait-0.jpg diff --git a/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/landscape-0.jpg b/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/landscape-0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b37ec0babe3915fcfe33a863e2d247c2c51a5ca8 GIT binary patch literal 40688 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�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 PF5Vpk=lAg4{_X$&B#X8* literal 0 HcmV?d00001 diff --git a/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/portrait-0.jpg b/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/portrait-0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9569a88432fa5b8b75c71dac6c004fd4d8ecda2b GIT binary patch literal 57937 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∈oEan2}70pp7 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

n~;c} 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 literal 0 HcmV?d00001 From ed60bab29470bc3b62784dd9909a2daa3bcc0e2b Mon Sep 17 00:00:00 2001 From: arrowgent <57545549+arrowgent@users.noreply.github.com> Date: Fri, 31 Mar 2023 20:58:20 -0700 Subject: [PATCH 26/26] delete tmp file to create folder. by_zdzislaw_beksinski --- ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp | 1 - 1 file changed, 1 deletion(-) delete mode 100644 ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp diff --git a/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp b/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp deleted file mode 100644 index 111f9b0d..00000000 --- a/ui/media/modifier-thumbnails/artist/by_zdzislaw_beksinski/tmp +++ /dev/null @@ -1 +0,0 @@ -by_zdzislaw_beksinski