From 20b13b6a8b1c1ff48eea9f529beb607a70545ff6 Mon Sep 17 00:00:00 2001 From: MoonRide303 Date: Mon, 16 Oct 2023 11:04:54 +0200 Subject: [PATCH 1/4] Merged some MRE features (generate hotkey, generate forever, notification sound) --- .gitignore | 3 +- css/style.css | 28 ++++++ javascript/contextMenus.js | 171 ++++++++++++++++++++++++++++++++ javascript/script.js | 33 ++++++ modules/ui_gradio_extensions.py | 46 +++++++++ notification-example.ogg | Bin 0 -> 59038 bytes webui.py | 22 ++-- 7 files changed, 295 insertions(+), 8 deletions(-) create mode 100644 css/style.css create mode 100644 javascript/contextMenus.js create mode 100644 javascript/script.js create mode 100644 modules/ui_gradio_extensions.py create mode 100644 notification-example.ogg diff --git a/.gitignore b/.gitignore index 57e31e98..baeabd50 100644 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,8 @@ build_chb.py /interrogate /user.css /.idea -notification.mp3 +/notification.ogg +/notification.mp3 /SwinIR /textual_inversion .vscode diff --git a/css/style.css b/css/style.css new file mode 100644 index 00000000..d94ec87b --- /dev/null +++ b/css/style.css @@ -0,0 +1,28 @@ +/* based on https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/v1.6.0/style.css */ + +#context-menu{ + z-index:9999; + position:absolute; + display:block; + padding:0px 0; + border:2px solid #a55000; + border-radius:8px; + box-shadow:1px 1px 2px #CE6400; + width: 200px; +} + +.context-menu-items{ + list-style: none; + margin: 0; + padding: 0; +} + +.context-menu-items a{ + display:block; + padding:5px; + cursor:pointer; +} + +.context-menu-items a:hover{ + background: #a55000; +} diff --git a/javascript/contextMenus.js b/javascript/contextMenus.js new file mode 100644 index 00000000..cf76993f --- /dev/null +++ b/javascript/contextMenus.js @@ -0,0 +1,171 @@ +// based on https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/v1.6.0/javascript/contextMenus.js + +var contextMenuInit = function() { + let eventListenerApplied = false; + let menuSpecs = new Map(); + + const uid = function() { + return Date.now().toString(36) + Math.random().toString(36).substring(2); + }; + + function showContextMenu(event, element, menuEntries) { + let posx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; + let posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop; + + let oldMenu = gradioApp().querySelector('#context-menu'); + if (oldMenu) { + oldMenu.remove(); + } + + let baseStyle = window.getComputedStyle(gradioApp().querySelector('button.selected')); + + const contextMenu = document.createElement('nav'); + contextMenu.id = "context-menu"; + contextMenu.style.background = baseStyle.background; + contextMenu.style.color = baseStyle.color; + contextMenu.style.fontFamily = baseStyle.fontFamily; + contextMenu.style.top = posy + 'px'; + contextMenu.style.left = posx + 'px'; + + const contextMenuList = document.createElement('ul'); + contextMenuList.className = 'context-menu-items'; + contextMenu.append(contextMenuList); + + menuEntries.forEach(function(entry) { + let contextMenuEntry = document.createElement('a'); + contextMenuEntry.innerHTML = entry['name']; + contextMenuEntry.addEventListener("click", function() { + entry['func'](); + }); + contextMenuList.append(contextMenuEntry); + + }); + + gradioApp().appendChild(contextMenu); + + let menuWidth = contextMenu.offsetWidth + 4; + let menuHeight = contextMenu.offsetHeight + 4; + + let windowWidth = window.innerWidth; + let windowHeight = window.innerHeight; + + if ((windowWidth - posx) < menuWidth) { + contextMenu.style.left = windowWidth - menuWidth + "px"; + } + + if ((windowHeight - posy) < menuHeight) { + contextMenu.style.top = windowHeight - menuHeight + "px"; + } + + } + + function appendContextMenuOption(targetElementSelector, entryName, entryFunction) { + + var currentItems = menuSpecs.get(targetElementSelector); + + if (!currentItems) { + currentItems = []; + menuSpecs.set(targetElementSelector, currentItems); + } + let newItem = { + id: targetElementSelector + '_' + uid(), + name: entryName, + func: entryFunction, + isNew: true + }; + + currentItems.push(newItem); + return newItem['id']; + } + + function removeContextMenuOption(uid) { + menuSpecs.forEach(function(v) { + let index = -1; + v.forEach(function(e, ei) { + if (e['id'] == uid) { + index = ei; + } + }); + if (index >= 0) { + v.splice(index, 1); + } + }); + } + + function addContextMenuEventListener() { + if (eventListenerApplied) { + return; + } + gradioApp().addEventListener("click", function(e) { + if (!e.isTrusted) { + return; + } + + let oldMenu = gradioApp().querySelector('#context-menu'); + if (oldMenu) { + oldMenu.remove(); + } + }); + gradioApp().addEventListener("contextmenu", function(e) { + let oldMenu = gradioApp().querySelector('#context-menu'); + if (oldMenu) { + oldMenu.remove(); + } + menuSpecs.forEach(function(v, k) { + if (e.composedPath()[0].matches(k)) { + showContextMenu(e, e.composedPath()[0], v); + e.preventDefault(); + } + }); + }); + eventListenerApplied = true; + + } + + return [appendContextMenuOption, removeContextMenuOption, addContextMenuEventListener]; +}; + +var initResponse = contextMenuInit(); +var appendContextMenuOption = initResponse[0]; +var removeContextMenuOption = initResponse[1]; +var addContextMenuEventListener = initResponse[2]; + +(function() { + //Start example Context Menu Items + let generateOnRepeat = function(genbuttonid, interruptbuttonid) { + let genbutton = gradioApp().querySelector(genbuttonid); + let interruptbutton = gradioApp().querySelector(interruptbuttonid); + if (!interruptbutton.offsetParent) { + genbutton.click(); + } + clearInterval(window.generateOnRepeatInterval); + window.generateOnRepeatInterval = setInterval(function() { + if (!interruptbutton.offsetParent) { + genbutton.click(); + } + }, + 500); + }; + + let generateOnRepeatForButtons = function() { + generateOnRepeat('#generate_button', '#stop_button'); + }; + + appendContextMenuOption('#generate_button', 'Generate forever', generateOnRepeatForButtons); + appendContextMenuOption('#stop_button', 'Generate forever', generateOnRepeatForButtons); + + let cancelGenerateForever = function() { + clearInterval(window.generateOnRepeatInterval); + }; + + appendContextMenuOption('#stop_button', 'Cancel generate forever', cancelGenerateForever); + appendContextMenuOption('#generate_button', 'Cancel generate forever', cancelGenerateForever); + +})(); +//End example Context Menu Items + +document.onreadystatechange = function () { + if (document.readyState == "complete") { + addContextMenuEventListener(); + } +}; diff --git a/javascript/script.js b/javascript/script.js new file mode 100644 index 00000000..1098affd --- /dev/null +++ b/javascript/script.js @@ -0,0 +1,33 @@ +// based on https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/v1.6.0/script.js + +function gradioApp() { + const elems = document.getElementsByTagName('gradio-app'); + const elem = elems.length == 0 ? document : elems[0]; + + if (elem !== document) { + elem.getElementById = function(id) { + return document.getElementById(id); + }; + } + return elem.shadowRoot ? elem.shadowRoot : elem; +} + +function playNotification() { + gradioApp().querySelector('#audio_notification audio')?.play(); +} + +document.addEventListener('keydown', function(e) { + var handled = false; + if (e.key !== undefined) { + if ((e.key == "Enter" && (e.metaKey || e.ctrlKey || e.altKey))) handled = true; + } else if (e.keyCode !== undefined) { + if ((e.keyCode == 13 && (e.metaKey || e.ctrlKey || e.altKey))) handled = true; + } + if (handled) { + var button = gradioApp().querySelector('button[id=generate_button]'); + if (button) { + button.click(); + } + e.preventDefault(); + } +}); diff --git a/modules/ui_gradio_extensions.py b/modules/ui_gradio_extensions.py new file mode 100644 index 00000000..9c90857b --- /dev/null +++ b/modules/ui_gradio_extensions.py @@ -0,0 +1,46 @@ +# based on https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/v1.6.0/modules/ui_gradio_extensions.py + +import os +import gradio as gr + +GradioTemplateResponseOriginal = gr.routes.templates.TemplateResponse + +modules_path = os.path.dirname(os.path.realpath(__file__)) +script_path = os.path.dirname(modules_path) + + +def webpath(fn): + if fn.startswith(script_path): + web_path = os.path.relpath(fn, script_path).replace('\\', '/') + else: + web_path = os.path.abspath(fn) + + return f'file={web_path}?{os.path.getmtime(fn)}' + + +def javascript_html(): + script_js_path = webpath('javascript/script.js') + context_menus_js_path = webpath('javascript/contextMenus.js') + head = f'\n' + head += f'\n' + return head + + +def css_html(): + style_css_path = webpath('css/style.css') + head = f'' + return head + + +def reload_javascript(): + js = javascript_html() + css = css_html() + + def template_response(*args, **kwargs): + res = GradioTemplateResponseOriginal(*args, **kwargs) + res.body = res.body.replace(b'', f'{js}'.encode("utf8")) + res.body = res.body.replace(b'', f'{css}'.encode("utf8")) + res.init_headers() + return res + + gr.routes.templates.TemplateResponse = template_response diff --git a/notification-example.ogg b/notification-example.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fe4291d0682e7401b014c23ace4bfafac23f5137 GIT binary patch literal 59038 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 literal 0 HcmV?d00001 diff --git a/webui.py b/webui.py index b5e09c0d..908ae682 100644 --- a/webui.py +++ b/webui.py @@ -15,6 +15,8 @@ import args_manager from modules.sdxl_styles import legal_style_names, aspect_ratios from modules.private_logger import get_current_html_path +from modules.ui_gradio_extensions import reload_javascript +from os.path import exists def generate_clicked(*args): @@ -47,6 +49,8 @@ def generate_clicked(*args): return +reload_javascript() + shared.gradio_root = gr.Blocks( title=f'Fooocus {fooocus_version.version} ' + ('' if args_manager.args.preset is None else args_manager.args.preset), css=modules.html.css).queue() @@ -63,9 +67,9 @@ with shared.gradio_root: value=modules.path.default_positive_prompt, container=False, autofocus=True, elem_classes='type_row', lines=1024) with gr.Column(scale=0.15, min_width=0): - run_button = gr.Button(label="Generate", value="Generate", elem_classes='type_row', visible=True) + generate_button = gr.Button(label="Generate", value="Generate", elem_classes='type_row', elem_id='generate_button', visible=True) skip_button = gr.Button(label="Skip", value="Skip", elem_classes='type_row_half', visible=False) - stop_button = gr.Button(label="Stop", value="Stop", elem_classes='type_row_half', visible=False) + stop_button = gr.Button(label="Stop", value="Stop", elem_classes='type_row_half', elem_id='stop_button', visible=False) def stop_clicked(): import fcbh.model_management as model_management @@ -337,12 +341,16 @@ with shared.gradio_root: ctrls += [outpaint_selections, inpaint_input_image] ctrls += ip_ctrls - run_button.click(lambda: (gr.update(visible=True, interactive=True), gr.update(visible=True, interactive=True), gr.update(visible=False), []), outputs=[stop_button, skip_button, run_button, gallery])\ - .then(fn=refresh_seed, inputs=[seed_random, image_seed], outputs=image_seed)\ - .then(advanced_parameters.set_all_advanced_parameters, inputs=adps)\ - .then(fn=generate_clicked, inputs=ctrls, outputs=[progress_html, progress_window, gallery])\ - .then(lambda: (gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)), outputs=[run_button, stop_button, skip_button]) + generate_button.click(lambda: (gr.update(visible=True, interactive=True), gr.update(visible=True, interactive=True), gr.update(visible=False), []), outputs=[stop_button, skip_button, generate_button, gallery]) \ + .then(fn=refresh_seed, inputs=[seed_random, image_seed], outputs=image_seed) \ + .then(advanced_parameters.set_all_advanced_parameters, inputs=adps) \ + .then(fn=generate_clicked, inputs=ctrls, outputs=[progress_html, progress_window, gallery]) \ + .then(lambda: (gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)), outputs=[generate_button, stop_button, skip_button]) \ + .then(fn=None, _js='playNotification') + notification_file = 'notification.ogg' if exists('notification.ogg') else 'notification.mp3' if exists('notification.mp3') else None + if notification_file != None: + gr.Audio(interactive=False, value=notification_file, elem_id='audio_notification', visible=False) shared.gradio_root.launch( inbrowser=args_manager.args.auto_launch, From 4e1441c07ecffcb625eaa8f3b035b1c283df1589 Mon Sep 17 00:00:00 2001 From: MoonRide303 Date: Mon, 16 Oct 2023 12:12:49 +0200 Subject: [PATCH 2/4] Simplified stopping generate forever --- javascript/contextMenus.js | 13 ++++++------- webui.py | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/javascript/contextMenus.js b/javascript/contextMenus.js index cf76993f..983be6ab 100644 --- a/javascript/contextMenus.js +++ b/javascript/contextMenus.js @@ -130,6 +130,10 @@ var appendContextMenuOption = initResponse[0]; var removeContextMenuOption = initResponse[1]; var addContextMenuEventListener = initResponse[2]; +let cancelGenerateForever = function() { + clearInterval(window.generateOnRepeatInterval); +}; + (function() { //Start example Context Menu Items let generateOnRepeat = function(genbuttonid, interruptbuttonid) { @@ -154,13 +158,8 @@ var addContextMenuEventListener = initResponse[2]; appendContextMenuOption('#generate_button', 'Generate forever', generateOnRepeatForButtons); appendContextMenuOption('#stop_button', 'Generate forever', generateOnRepeatForButtons); - let cancelGenerateForever = function() { - clearInterval(window.generateOnRepeatInterval); - }; - - appendContextMenuOption('#stop_button', 'Cancel generate forever', cancelGenerateForever); - appendContextMenuOption('#generate_button', 'Cancel generate forever', cancelGenerateForever); - +// appendContextMenuOption('#stop_button', 'Cancel generate forever', cancelGenerateForever); +// appendContextMenuOption('#generate_button', 'Cancel generate forever', cancelGenerateForever); })(); //End example Context Menu Items diff --git a/webui.py b/webui.py index 908ae682..77ac42a6 100644 --- a/webui.py +++ b/webui.py @@ -83,7 +83,7 @@ with shared.gradio_root: model_management.interrupt_current_processing() return - stop_button.click(stop_clicked, outputs=[skip_button, stop_button], queue=False) + stop_button.click(stop_clicked, outputs=[skip_button, stop_button], queue=False, _js='cancelGenerateForever') skip_button.click(skip_clicked, queue=False) with gr.Row(elem_classes='advanced_check_row'): input_image_checkbox = gr.Checkbox(label='Input Image', value=False, container=False, elem_classes='min_check') From 9cc23258912948fa7240a5b39a3ca11bb615624f Mon Sep 17 00:00:00 2001 From: MoonRide303 Date: Mon, 16 Oct 2023 13:18:15 +0200 Subject: [PATCH 3/4] Removed context menu from Stop button --- javascript/contextMenus.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/contextMenus.js b/javascript/contextMenus.js index 983be6ab..2f32af1b 100644 --- a/javascript/contextMenus.js +++ b/javascript/contextMenus.js @@ -156,7 +156,7 @@ let cancelGenerateForever = function() { }; appendContextMenuOption('#generate_button', 'Generate forever', generateOnRepeatForButtons); - appendContextMenuOption('#stop_button', 'Generate forever', generateOnRepeatForButtons); +// appendContextMenuOption('#stop_button', 'Generate forever', generateOnRepeatForButtons); // appendContextMenuOption('#stop_button', 'Cancel generate forever', cancelGenerateForever); // appendContextMenuOption('#generate_button', 'Cancel generate forever', cancelGenerateForever); From 79f2f22101b026ef281b47cb2a214fce820985a5 Mon Sep 17 00:00:00 2001 From: MoonRide303 Date: Mon, 16 Oct 2023 13:49:26 +0200 Subject: [PATCH 4/4] Updated version --- fooocus_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fooocus_version.py b/fooocus_version.py index de2e600a..a11822f5 100644 --- a/fooocus_version.py +++ b/fooocus_version.py @@ -1 +1 @@ -version = '2.1.680' +version = '2.1.681'