From e55cde9b3335bdfcdbac6845e0c9509fca2b89e7 Mon Sep 17 00:00:00 2001 From: DenOfEquity <166248528+DenOfEquity@users.noreply.github.com> Date: Thu, 12 Sep 2024 10:58:59 +0100 Subject: [PATCH] better (not 100%) generate forever Now doesn't spam clicks, so cancel will stop. So works correctly when swapping tabs within webui. But still won't continue generating if switch browser tab or minimise browser. It's like the click doesn't get processed. Possibly related to notification sound not playing if tab not active. --- javascript/contextMenus.js | 76 ++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 28 deletions(-) diff --git a/javascript/contextMenus.js b/javascript/contextMenus.js index e01fd67e..fc2ae43c 100644 --- a/javascript/contextMenus.js +++ b/javascript/contextMenus.js @@ -118,46 +118,66 @@ var appendContextMenuOption = initResponse[0]; var removeContextMenuOption = initResponse[1]; var addContextMenuEventListener = initResponse[2]; +var regen_txt2img = null; +var regen_img2img = null; + (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 generateOnRepeat_txt2img = function() { - generateOnRepeat('#txt2img_generate', '#txt2img_interrupt'); - }; + if ((regen_txt2img == null) && (regen_img2img == null)) { + let generate = gradioApp().querySelector('#txt2img_generate'); + let interrupt = gradioApp().querySelector('#txt2img_interrupt'); + if (!interrupt.offsetParent) { + generate.click(); + } - let generateOnRepeat_img2img = function() { - generateOnRepeat('#img2img_generate', '#img2img_interrupt'); + regen_txt2img = setInterval(function() { + if (interrupt.style.display == 'none') { + generate.click(); + interrupt.style.display = 'block'; + } + }, + 500); + } }; - appendContextMenuOption('#txt2img_generate', 'Generate forever', generateOnRepeat_txt2img); appendContextMenuOption('#txt2img_interrupt', 'Generate forever', generateOnRepeat_txt2img); + + let cancel_regen_txt2img = function() { + clearInterval(regen_txt2img); + regen_txt2img = null; + }; + appendContextMenuOption('#txt2img_interrupt', 'Cancel generate forever', cancel_regen_txt2img); + appendContextMenuOption('#txt2img_generate', 'Cancel generate forever', cancel_regen_txt2img); + + let generateOnRepeat_img2img = function() { + if ((regen_txt2img == null) && (regen_img2img == null)) { + let generate = gradioApp().querySelector('#img2img_generate'); + let interrupt = gradioApp().querySelector('#img2img_interrupt'); + if (!interrupt.offsetParent) { + generate.click(); + } + + regen_img2img = setInterval(function() { + if (interrupt.style.display == 'none') { + generate.click(); + interrupt.style.display = 'block'; + } + }, + 500); + } + }; appendContextMenuOption('#img2img_generate', 'Generate forever', generateOnRepeat_img2img); appendContextMenuOption('#img2img_interrupt', 'Generate forever', generateOnRepeat_img2img); - let cancelGenerateForever = function() { - clearInterval(window.generateOnRepeatInterval); + let cancel_regen_img2img = function() { + clearInterval(regen_img2img); + regen_img2img = null; }; - - appendContextMenuOption('#txt2img_interrupt', 'Cancel generate forever', cancelGenerateForever); - appendContextMenuOption('#txt2img_generate', 'Cancel generate forever', cancelGenerateForever); - appendContextMenuOption('#img2img_interrupt', 'Cancel generate forever', cancelGenerateForever); - appendContextMenuOption('#img2img_generate', 'Cancel generate forever', cancelGenerateForever); + appendContextMenuOption('#img2img_interrupt', 'Cancel generate forever', cancel_regen_img2img); + appendContextMenuOption('#img2img_generate', 'Cancel generate forever', cancel_regen_img2img); })(); -//End example Context Menu Items + onAfterUiUpdate(addContextMenuEventListener);