refactor/fix: Treat forceInput widgets as standard widgets

This commit is contained in:
Michael Poutre 2023-08-03 19:49:52 -07:00
parent cfe1c54de8
commit 9a7a52f8b5
No known key found for this signature in database
GPG Key ID: ACEAC6CFD77EB15E
2 changed files with 34 additions and 18 deletions

View File

@ -5,7 +5,7 @@ const CONVERTED_TYPE = "converted-widget";
const VALID_TYPES = ["STRING", "combo", "number", "BOOLEAN"];
function isConvertableWidget(widget, config) {
return VALID_TYPES.includes(widget.type) || VALID_TYPES.includes(config[0]);
return (VALID_TYPES.includes(widget.type) || VALID_TYPES.includes(config[0])) && !widget.options?.forceInput;
}
function hideWidget(node, widget, suffix = "") {
@ -103,6 +103,9 @@ app.registerExtension({
let toInput = [];
let toWidget = [];
for (const w of this.widgets) {
if (w.options?.forceInput) {
continue;
}
if (w.type === CONVERTED_TYPE) {
toWidget.push({
content: `Convert ${w.name} to widget`,
@ -130,6 +133,20 @@ app.registerExtension({
return r;
};
const origOnNodeCreated = nodeType.prototype.onNodeCreated
nodeType.prototype.onNodeCreated = function () {
const r = origOnNodeCreated ? origOnNodeCreated.apply(this) : undefined;
if (this.widgets) {
for (const w of this.widgets) {
if (w?.options?.forceInput) {
const config = nodeData?.input?.required[w.name] || nodeData?.input?.optional?.[w.name] || [w.type, w.options || {}];
convertToInput(this, w, config);
}
}
}
return r;
}
// On initial configure of nodes hide all converted widgets
const origOnConfigure = nodeType.prototype.onConfigure;
nodeType.prototype.onConfigure = function () {
@ -137,7 +154,7 @@ app.registerExtension({
if (this.inputs) {
for (const input of this.inputs) {
if (input.widget) {
if (input.widget && !input.widget.config[1]?.forceInput) {
const w = this.widgets.find((w) => w.name === input.widget.name);
if (w) {
hideWidget(this, w);
@ -374,7 +391,7 @@ app.registerExtension({
}
for (const k in config1[1]) {
if (k !== "default") {
if (k !== "default" && k !== 'forceInput') {
if (config1[1][k] !== config2[1][k]) {
return false;
}

View File

@ -1151,22 +1151,21 @@ export class ComfyApp {
const inputData = inputs[inputName];
const type = inputData[0];
if(inputData[1]?.forceInput) {
this.addInput(inputName, type);
if (Array.isArray(type)) {
// Enums
Object.assign(config, widgets.COMBO(this, inputName, inputData, app) || {});
} else if (`${type}:${inputName}` in widgets) {
// Support custom widgets by Type:Name
Object.assign(config, widgets[`${type}:${inputName}`](this, inputName, inputData, app) || {});
} else if (type in widgets) {
// Standard type widgets
Object.assign(config, widgets[type](this, inputName, inputData, app) || {});
} else {
if (Array.isArray(type)) {
// Enums
Object.assign(config, widgets.COMBO(this, inputName, inputData, app) || {});
} else if (`${type}:${inputName}` in widgets) {
// Support custom widgets by Type:Name
Object.assign(config, widgets[`${type}:${inputName}`](this, inputName, inputData, app) || {});
} else if (type in widgets) {
// Standard type widgets
Object.assign(config, widgets[type](this, inputName, inputData, app) || {});
} else {
// Node connection inputs
this.addInput(inputName, type);
}
// Node connection inputs
this.addInput(inputName, type);
}
if(inputData[1]?.forceInput && config?.widget) {
config.widget.options.forceInput = inputData[1].forceInput;
}
}