58 lines
2.4 KiB
JavaScript
58 lines
2.4 KiB
JavaScript
// AI Disclosure: Code comments were generated with AI
|
|
|
|
import { app } from "../../scripts/app.js";
|
|
|
|
app.registerExtension({
|
|
name: "ComfyUI.SimpleFString",
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeData.name === "SimpleFStringNode") {
|
|
|
|
// This function adds the "Add Input" and "Remove Input" options
|
|
// to the right-click context menu of the node.
|
|
const getExtraMenuOptions = nodeType.prototype.getExtraMenuOptions;
|
|
nodeType.prototype.getExtraMenuOptions = function(_, options) {
|
|
|
|
// Run the original menu logic first (if any)
|
|
if (getExtraMenuOptions) {
|
|
getExtraMenuOptions.apply(this, arguments);
|
|
}
|
|
|
|
// Add "Add Input" option
|
|
options.unshift({
|
|
content: "Add Input (Variable)",
|
|
callback: () => {
|
|
// Ask the user for the variable name (e.g., "my_image")
|
|
const name = prompt("Enter input name (used in f-string as {name}):");
|
|
if (name) {
|
|
// Verify duplicates
|
|
const exists = this.findInputSlot(name);
|
|
if (exists !== -1) {
|
|
alert("Input with that name already exists!");
|
|
return;
|
|
}
|
|
|
|
// 1st arg: name, 2nd arg: type ("*" = wildcard), 3rd arg: shape
|
|
this.addInput(name, "*");
|
|
|
|
// Tell ComfyUI the graph changed so it saves the new slot
|
|
this.setDirtyCanvas(true, true);
|
|
}
|
|
}
|
|
});
|
|
|
|
// Add "Remove Input" option
|
|
options.unshift({
|
|
content: "Remove Last Input",
|
|
callback: () => {
|
|
// Check if we have optional inputs to remove
|
|
// (We don't want to remove the required "template" input)
|
|
if (this.inputs && this.inputs.length > 1) {
|
|
// Remove the last input in the array
|
|
this.removeInput(this.inputs.length - 1);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
}
|
|
},
|
|
}); |