From d3a375c8fbd443b674eb4a1027c200cb34a59359 Mon Sep 17 00:00:00 2001 From: ltdrdata <128333288+ltdrdata@users.noreply.github.com> Date: Tue, 28 Mar 2023 02:27:09 +0900 Subject: [PATCH] Add support for file list refresh feature in node (#192) * Added file reload feature to widgets. * Modify feature name 'reload' to 'refresh' and fixed ignoring button name. * refresh widget bugfix * crash patch for "widget" input by type mismatch * compensate offset on showimage * adding widget caused misaligned offset * patch refresh feature for general method * clean up patch and following upstream * make more clean code for refresh feature * move refresh button position * robust patch for refresh feature * patch for refreh feature * avoid specify REFRESH_LIST for each node * prevent updating selected value unless removed item * update all combo list for 'required input' in node --------- Co-authored-by: Lt.Dr.Data --- web/scripts/app.js | 25 +++++++++++++++++++++++++ web/scripts/ui.js | 1 + 2 files changed, 26 insertions(+) diff --git a/web/scripts/app.js b/web/scripts/app.js index 89eb7112..43d7f7b5 100644 --- a/web/scripts/app.js +++ b/web/scripts/app.js @@ -901,6 +901,31 @@ class ComfyApp { } this.extensions.push(extension); } + + /** + * Refresh combo list on whole nodes + */ + async refreshComboInNodes() { + const defs = await api.getNodeDefs(); + + for(let nodeNum in this.graph._nodes) { + const node = this.graph._nodes[nodeNum]; + + const def = defs[node.type]; + + for(const widgetNum in node.widgets) { + const widget = node.widgets[widgetNum] + + if(widget.type == "combo" && def["input"]["required"][widget.name] !== undefined) { + widget.options.values = def["input"]["required"][widget.name][0]; + + if(!widget.options.values.includes(widget.value)) { + widget.value = widget.options.values[0]; + } + } + } + } + } } export const app = new ComfyApp(); diff --git a/web/scripts/ui.js b/web/scripts/ui.js index 94f3c528..2c3bf87c 100644 --- a/web/scripts/ui.js +++ b/web/scripts/ui.js @@ -376,6 +376,7 @@ export class ComfyUI { }, }), $el("button", { textContent: "Load", onclick: () => fileInput.click() }), + $el("button", { textContent: "Refresh", onclick: () => app.refreshComboInNodes() }), $el("button", { textContent: "Clear", onclick: () => app.graph.clear() }), $el("button", { textContent: "Load Default", onclick: () => app.loadGraphData() }), ]);