78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
import { app } from "../../scripts/app.js";
|
|
import { api } from "../../scripts/api.js";
|
|
import { ComfyWidgets } from "/scripts/widgets.js";
|
|
import { findWidgetByName } from "./utils.js";
|
|
|
|
const BUTTON_NAME = "Add Random";
|
|
const MAX_SEED = 2 ** 32 - 1; // 4,294,967,295
|
|
|
|
class D2_MultiOutputClass {
|
|
btnWidget = undefined;
|
|
typeWidget = undefined;
|
|
inputWidget = undefined;
|
|
|
|
// seed生成ボタンの表示切り替え
|
|
changeBtnVisible(value) {
|
|
if (value === "SEED") {
|
|
this.btnWidget.type = "button";
|
|
} else {
|
|
this.btnWidget.type = "converted-widget";
|
|
}
|
|
}
|
|
}
|
|
|
|
const d2mo = new D2_MultiOutputClass();
|
|
|
|
app.registerExtension({
|
|
name: "Comfy.D2.D2_MultiOutput",
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeData.name !== "D2 Multi Output") return;
|
|
|
|
const origOnNodeCreated = nodeType.prototype.onNodeCreated;
|
|
nodeType.prototype.onNodeCreated = function () {
|
|
const r = origOnNodeCreated ? origOnNodeCreated.apply(this) : undefined;
|
|
|
|
d2mo.btnWidget = findWidgetByName(this, BUTTON_NAME);
|
|
d2mo.typeWidget = findWidgetByName(this, "type");
|
|
d2mo.inputWidget = findWidgetByName(this, "parameter");
|
|
|
|
// seed生成ボタンの表示切り替え
|
|
if (d2mo.typeWidget !== undefined) {
|
|
d2mo.typeWidget.callback = (value) => {
|
|
d2mo.changeBtnVisible(value);
|
|
};
|
|
|
|
setTimeout(() => {
|
|
d2mo.changeBtnVisible(d2mo.typeWidget.value);
|
|
}, 200);
|
|
}
|
|
|
|
// const r = origOnNodeCreated
|
|
// ? origOnNodeCreated.apply(this)
|
|
// : undefined;
|
|
// for (const w of this.widgets) {
|
|
// if (w.name === "seed") {
|
|
// w.type = "converted-widget";
|
|
// if (!w.linkedWidgets) continue;
|
|
// for (const lw of w.linkedWidgets) {
|
|
// lw.type = "converted-widget";
|
|
// }
|
|
// }
|
|
// }
|
|
return r;
|
|
};
|
|
},
|
|
getCustomWidgets(app) {
|
|
return {
|
|
D2RESET(node, inputName, inputData, app) {
|
|
const widget = node.addWidget("button", BUTTON_NAME, 0, () => {
|
|
const seed = Math.floor(Math.random() * MAX_SEED);
|
|
d2mo.inputWidget.value += d2mo.inputWidget.value.length >= 1 ? "\n" : "";
|
|
d2mo.inputWidget.value += seed;
|
|
});
|
|
return widget;
|
|
},
|
|
};
|
|
},
|
|
});
|