From d71d0c88e5e36dc702fb5a34fe24bc38b326869c Mon Sep 17 00:00:00 2001 From: comfyanonymous Date: Mon, 6 Feb 2023 23:40:38 -0500 Subject: [PATCH 1/4] Add some simple queue management to the GUI. --- webshit/index.html | 139 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 135 insertions(+), 4 deletions(-) diff --git a/webshit/index.html b/webshit/index.html index 3cdddc93b..b6cf3d692 100644 --- a/webshit/index.html +++ b/webshit/index.html @@ -368,6 +368,7 @@ function promptPosted(data) } canvas.draw(true, true); + loadQueueIfVisible(); } function postPrompt(number) { @@ -533,15 +534,145 @@ document.addEventListener('paste', e=>{ } }); +function deleteQueueElement(delete_id) { + fetch('/queue', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({"delete":[delete_id]}) + }) + .then(data => { + console.log(data); + }) + .catch(error => console.error(error)) +} + + +function loadQueue() { + fetch('/queue') + .then(response => response.json()) + .then(data => { + var queue_div = document.getElementById("queuebutton-content"); + queue_div.style.display = 'block'; + var see_queue_button = document.getElementById("seequeuebutton"); + let old_w = see_queue_button.style.width; + see_queue_button.innerHTML = "Close"; + + let runningcontents = document.getElementById("runningcontents"); + runningcontents.innerHTML = ''; + let queuecontents = document.getElementById("queuecontents"); + queuecontents.innerHTML = ''; + function append_to_list(list_element, append_to_element, append_delete) { + let number = list_element[0]; + let id = list_element[1]; + let prompt = list_element[2]; + let workflow = list_element[3].extra_pnginfo.workflow; + let a = document.createElement("a"); + a.innerHTML = number + ": "; + append_to_element.appendChild(a); + let button = document.createElement("button"); + button.innerHTML = "Load"; + button.style.fontSize = "10px"; + button.workflow = workflow; + button.onclick = function(event) { + loadGraphData(graph, event.target.workflow); + }; + + append_to_element.appendChild(button); + if (append_delete) { + let button = document.createElement("button"); + button.innerHTML = "Delete"; + button.style.fontSize = "10px"; + button.delete_id = id; + button.onclick = function(event) { + deleteQueueElement(event.target.delete_id); + loadQueue(); + }; + append_to_element.appendChild(button); + } + append_to_element.appendChild(document.createElement("br")); + } + for (let x in data.queue_running) { + append_to_list(data.queue_running[x], runningcontents, false); + } + + data.queue_pending.sort((a, b) => a[0] - b[0]); + for (let x in data.queue_pending) { + append_to_list(data.queue_pending[x], queuecontents, true); + } + }).catch((response) => {console.log(response)}); +} + +function loadQueueIfVisible() +{ + var queue_div = document.getElementById("queuebutton-content"); + if (queue_div.style.display == 'block') { + loadQueue(); + } +} + +function seeQueue() { + var queue_div = document.getElementById("queuebutton-content"); + if (queue_div.style.display == 'block') { + queue_div.style.display = 'none'; + var see_queue_button = document.getElementById("seequeuebutton"); + see_queue_button.innerHTML = "See Queue" + } else { + loadQueue(); + } +} + +function closeQueue() { + var queue_div = document.getElementById("queuebutton-content"); + queue_div.style.display = 'none'; +} + +function clearQueue() { + fetch('/queue', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({"clear":true}) + }).then(data => { + loadQueue(); + }) + .catch(error => console.error(error)); +} + - + Queue size: X
-
- -
+
+ + + +
+ +

From 6e40393b6bb27a3f5211ee6aa10588f6336f830a Mon Sep 17 00:00:00 2001 From: comfyanonymous Date: Tue, 7 Feb 2023 00:07:31 -0500 Subject: [PATCH 2/4] Fix delete sometimes not properly refreshing queue state. --- webshit/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webshit/index.html b/webshit/index.html index b6cf3d692..683d96480 100644 --- a/webshit/index.html +++ b/webshit/index.html @@ -534,7 +534,7 @@ document.addEventListener('paste', e=>{ } }); -function deleteQueueElement(delete_id) { +function deleteQueueElement(delete_id, then) { fetch('/queue', { method: 'POST', headers: { @@ -544,6 +544,7 @@ function deleteQueueElement(delete_id) { }) .then(data => { console.log(data); + then(); }) .catch(error => console.error(error)) } @@ -586,8 +587,7 @@ function loadQueue() { button.style.fontSize = "10px"; button.delete_id = id; button.onclick = function(event) { - deleteQueueElement(event.target.delete_id); - loadQueue(); + deleteQueueElement(event.target.delete_id, loadQueue); }; append_to_element.appendChild(button); } From 1f18221e173b9acc98df38526959af990b1794ba Mon Sep 17 00:00:00 2001 From: comfyanonymous Date: Tue, 7 Feb 2023 21:57:17 -0500 Subject: [PATCH 3/4] Add --port to set custom port. --- main.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index a242d52c0..092df6601 100644 --- a/main.py +++ b/main.py @@ -449,6 +449,14 @@ if __name__ == "__main__": address = '0.0.0.0' else: address = '127.0.0.1' - run(q, address=address, port=8188) + + port = 8188 + try: + p_index = sys.argv.index('--port') + port = int(sys.argv[p_index + 1]) + except: + pass + + run(q, address=address, port=port) From e3e65947f2e2cf32dad424e2f3ad33481b28ad28 Mon Sep 17 00:00:00 2001 From: comfyanonymous Date: Tue, 7 Feb 2023 22:12:56 -0500 Subject: [PATCH 4/4] Add a --help to main.py --- main.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/main.py b/main.py index 092df6601..4f7bb65bf 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,16 @@ import threading import heapq import traceback +if __name__ == "__main__": + if '--help' in sys.argv: + print("Valid Command line Arguments:") + print("\t--listen\t\t\tListen on 0.0.0.0 so the UI can be accessed from other computers.") + print("\t--port 8188\t\t\tSet the listen port.") + print("\t--dont-upcast-attention\t\tDisable upcasting of attention \n\t\t\t\t\tcan boost speed but increase the chances of black images.\n") + print("\t--use-split-cross-attention\tUse the split cross attention optimization instead of the sub-quadratic one.\n\t\t\t\t\tIgnored when xformers is used.") + print() + exit() + if '--dont-upcast-attention' in sys.argv: print("disabling upcasting of attention") os.environ['ATTN_PRECISION'] = "fp16"