mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2025-04-19 10:53:29 +00:00
access getConfig via a symbol so structuredClone works (#1677)
This commit is contained in:
parent
72188dffc3
commit
ae3e4e9ad8
@ -4,6 +4,7 @@ import { app } from "../../scripts/app.js";
|
|||||||
const CONVERTED_TYPE = "converted-widget";
|
const CONVERTED_TYPE = "converted-widget";
|
||||||
const VALID_TYPES = ["STRING", "combo", "number", "BOOLEAN"];
|
const VALID_TYPES = ["STRING", "combo", "number", "BOOLEAN"];
|
||||||
const CONFIG = Symbol();
|
const CONFIG = Symbol();
|
||||||
|
const GET_CONFIG = Symbol();
|
||||||
|
|
||||||
function getConfig(widgetName) {
|
function getConfig(widgetName) {
|
||||||
const { nodeData } = this.constructor;
|
const { nodeData } = this.constructor;
|
||||||
@ -66,7 +67,7 @@ function convertToInput(node, widget, config) {
|
|||||||
// Add input and store widget config for creating on primitive node
|
// Add input and store widget config for creating on primitive node
|
||||||
const sz = node.size;
|
const sz = node.size;
|
||||||
node.addInput(widget.name, type, {
|
node.addInput(widget.name, type, {
|
||||||
widget: { name: widget.name, getConfig: () => config },
|
widget: { name: widget.name, [GET_CONFIG]: () => config },
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const widget of node.widgets) {
|
for (const widget of node.widgets) {
|
||||||
@ -146,8 +147,8 @@ app.registerExtension({
|
|||||||
|
|
||||||
for (const input of this.inputs) {
|
for (const input of this.inputs) {
|
||||||
if (input.widget) {
|
if (input.widget) {
|
||||||
if (!input.widget.getConfig) {
|
if (!input.widget[GET_CONFIG]) {
|
||||||
input.widget.getConfig = getConfig.bind(this, input.widget.name);
|
input.widget[GET_CONFIG] = () => getConfig.call(this, input.widget.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup old widget config
|
// Cleanup old widget config
|
||||||
@ -197,8 +198,8 @@ app.registerExtension({
|
|||||||
if (!app.configuringGraph && this.inputs) {
|
if (!app.configuringGraph && this.inputs) {
|
||||||
// On copy + paste of nodes, ensure that widget configs are set up
|
// On copy + paste of nodes, ensure that widget configs are set up
|
||||||
for (const input of this.inputs) {
|
for (const input of this.inputs) {
|
||||||
if (input.widget && !input.widget.getConfig) {
|
if (input.widget && !input.widget[GET_CONFIG]) {
|
||||||
input.widget.getConfig = getConfig.bind(this, input.widget.name);
|
input.widget[GET_CONFIG] = () => getConfig.call(this, input.widget.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -224,7 +225,7 @@ app.registerExtension({
|
|||||||
const input = this.inputs[slot];
|
const input = this.inputs[slot];
|
||||||
if (!input.widget || !input[ignoreDblClick]) {
|
if (!input.widget || !input[ignoreDblClick]) {
|
||||||
// Not a widget input or already handled input
|
// Not a widget input or already handled input
|
||||||
if (!(input.type in ComfyWidgets) && !(input.widget.getConfig?.()?.[0] instanceof Array)) {
|
if (!(input.type in ComfyWidgets) && !(input.widget[GET_CONFIG]?.()?.[0] instanceof Array)) {
|
||||||
return r; //also Not a ComfyWidgets input or combo (do nothing)
|
return r; //also Not a ComfyWidgets input or combo (do nothing)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -299,7 +300,7 @@ app.registerExtension({
|
|||||||
refreshComboInNode() {
|
refreshComboInNode() {
|
||||||
const widget = this.widgets?.[0];
|
const widget = this.widgets?.[0];
|
||||||
if (widget?.type === "combo") {
|
if (widget?.type === "combo") {
|
||||||
widget.options.values = this.outputs[0].widget.getConfig()[0];
|
widget.options.values = this.outputs[0].widget[GET_CONFIG]()[0];
|
||||||
|
|
||||||
if (!widget.options.values.includes(widget.value)) {
|
if (!widget.options.values.includes(widget.value)) {
|
||||||
widget.value = widget.options.values[0];
|
widget.value = widget.options.values[0];
|
||||||
@ -376,18 +377,18 @@ app.registerExtension({
|
|||||||
let widget;
|
let widget;
|
||||||
if (!input.widget) {
|
if (!input.widget) {
|
||||||
if (!(input.type in ComfyWidgets)) return;
|
if (!(input.type in ComfyWidgets)) return;
|
||||||
widget = { name: input.name, getConfig: () => [input.type, {}] }; //fake widget
|
widget = { name: input.name, [GET_CONFIG]: () => [input.type, {}] }; //fake widget
|
||||||
} else {
|
} else {
|
||||||
widget = input.widget;
|
widget = input.widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { type } = getWidgetType(widget.getConfig());
|
const { type } = getWidgetType(widget[GET_CONFIG]());
|
||||||
// Update our output to restrict to the widget type
|
// Update our output to restrict to the widget type
|
||||||
this.outputs[0].type = type;
|
this.outputs[0].type = type;
|
||||||
this.outputs[0].name = type;
|
this.outputs[0].name = type;
|
||||||
this.outputs[0].widget = widget;
|
this.outputs[0].widget = widget;
|
||||||
|
|
||||||
this.#createWidget(widget[CONFIG] ?? widget.getConfig(), theirNode, widget.name, recreating);
|
this.#createWidget(widget[CONFIG] ?? widget[GET_CONFIG](), theirNode, widget.name, recreating);
|
||||||
}
|
}
|
||||||
|
|
||||||
#createWidget(inputData, node, widgetName, recreating) {
|
#createWidget(inputData, node, widgetName, recreating) {
|
||||||
@ -469,7 +470,7 @@ app.registerExtension({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const config1 = output.widget.getConfig();
|
const config1 = output.widget[GET_CONFIG]();
|
||||||
const isNumber = config1[0] === "INT" || config1[0] === "FLOAT";
|
const isNumber = config1[0] === "INT" || config1[0] === "FLOAT";
|
||||||
if (!isNumber) return;
|
if (!isNumber) return;
|
||||||
|
|
||||||
@ -488,8 +489,8 @@ app.registerExtension({
|
|||||||
#isValidConnection(input, forceUpdate) {
|
#isValidConnection(input, forceUpdate) {
|
||||||
// Only allow connections where the configs match
|
// Only allow connections where the configs match
|
||||||
const output = this.outputs[0];
|
const output = this.outputs[0];
|
||||||
const config1 = output.widget[CONFIG] ?? output.widget.getConfig();
|
const config1 = output.widget[CONFIG] ?? output.widget[GET_CONFIG]();
|
||||||
const config2 = input.widget.getConfig();
|
const config2 = input.widget[GET_CONFIG]();
|
||||||
|
|
||||||
if (config1[0] instanceof Array) {
|
if (config1[0] instanceof Array) {
|
||||||
// New input isnt a combo
|
// New input isnt a combo
|
||||||
|
Loading…
Reference in New Issue
Block a user