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 <lt.dr.data@gmail.com>
This commit is contained in:
ltdrdata 2023-03-28 02:27:09 +09:00 committed by GitHub
parent bb1223d83f
commit d3a375c8fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 0 deletions

View File

@ -901,6 +901,31 @@ class ComfyApp {
} }
this.extensions.push(extension); 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(); export const app = new ComfyApp();

View File

@ -376,6 +376,7 @@ export class ComfyUI {
}, },
}), }),
$el("button", { textContent: "Load", onclick: () => fileInput.click() }), $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: "Clear", onclick: () => app.graph.clear() }),
$el("button", { textContent: "Load Default", onclick: () => app.loadGraphData() }), $el("button", { textContent: "Load Default", onclick: () => app.loadGraphData() }),
]); ]);