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 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 }, 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/media/js/main.js b/ui/media/js/main.js index 9fad8ff9..a36167a4 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -1192,31 +1192,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 } @@ -1296,7 +1275,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 => { @@ -1325,9 +1304,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`); }) } 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++) {