73 lines
2.1 KiB
JavaScript
73 lines
2.1 KiB
JavaScript
/** @type {import("@comfyorg/comfyui-frontend-types").ComfyExtension} */
|
|
export default {
|
|
name: "dynamicInputs",
|
|
|
|
beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeType.comfyClass === "DrawThingsLoRA") {
|
|
// update inputs when a new node is added
|
|
setCallback(nodeType.prototype, "onAdded", function (graph) {
|
|
updateInputs(this)
|
|
})
|
|
|
|
// or when the model changes
|
|
setCallback(nodeType.prototype, "onWidgetChanged", function (name, value, old_Value, widget) {
|
|
updateInputs(this)
|
|
})
|
|
}
|
|
},
|
|
}
|
|
|
|
/** @param {LGraphNode} node */
|
|
function updateInputs(node) {
|
|
const s = saveSize(node)
|
|
|
|
// the first input should always be lora
|
|
if (node.inputs.length < 1 || node.inputs.length > 2 || node.inputs[0].type !== "DT_LORA") {
|
|
for (let i = node.inputs.length - 1; i >= 0; i--) {
|
|
node.removeInput(i)
|
|
}
|
|
node.addInput("lora", "DT_LORA")
|
|
}
|
|
|
|
const modelWidget = node?.widgets?.find((w) => w.options?.modelType)
|
|
if (!modelWidget) return
|
|
const modifier = modelWidget.value?.value?.modifier
|
|
|
|
if (modifier) {
|
|
if (node.inputs.length < 2 || node.inputs[1]?.type !== "IMAGE") {
|
|
node.removeInput(1)
|
|
node.addInput("control_image", "IMAGE")
|
|
}
|
|
} else {
|
|
while (node.inputs.length > 1) {
|
|
node.removeInput(1)
|
|
}
|
|
}
|
|
s()
|
|
}
|
|
|
|
/** @param {LGraphNode} node */
|
|
function saveSize(node) {
|
|
const width = node.width
|
|
return () => node.setSize([width, node.computeSize()[1]])
|
|
}
|
|
|
|
/**
|
|
* @template {Object} T
|
|
* @template {keyof T} K
|
|
* @param {T} target
|
|
* @param {K} callbackName
|
|
* @param {T[K]} callback
|
|
*/
|
|
export function setCallback(target, callbackName, callback) {
|
|
const originalCallback = target[callbackName]
|
|
target[callbackName] = function (...args) {
|
|
const r = originalCallback?.apply(this, args)
|
|
callback?.apply(this, args)
|
|
return r
|
|
}
|
|
}
|
|
|
|
/** @import { ComfyApi, ComfyApp } from "@comfyorg/comfyui-frontend-types"; */
|
|
/** @import { LGraphNode } from "@comfyorg/litegraph" */
|