import { app } from "../../scripts/app.js"; // Node that allows you to redirect connections for cleaner graphs app.registerExtension({ name: "Comfy.RerouteNode", registerCustomNodes() { class RerouteNode { constructor() { if (!this.properties) { this.properties = {}; } this.properties.showOutputText = RerouteNode.defaultVisibility; this.addInput("", "*"); this.addOutput(this.properties.showOutputText ? "*" : "", "*"); this.onConnectInput = function (_, type) { if (type !== this.outputs[0].type) { this.removeOutput(0); this.addOutput(this.properties.showOutputText ? type : "", type); this.size = this.computeSize(); } }; this.clone = function () { const cloned = RerouteNode.prototype.clone.apply(this); cloned.removeOutput(0); cloned.addOutput(this.properties.showOutputText ? "*" : "", "*"); cloned.size = cloned.computeSize(); return cloned; }; // This node is purely frontend and does not impact the resulting prompt so should not be serialized this.isVirtualNode = true; } getExtraMenuOptions(_, options) { options.unshift( { content: (this.properties.showOutputText ? "Hide" : "Show") + " Type", callback: () => { this.properties.showOutputText = !this.properties.showOutputText; if (this.properties.showOutputText) { this.outputs[0].name = this.outputs[0].type; } else { this.outputs[0].name = ""; } this.size = this.computeSize(); app.graph.setDirtyCanvas(true); }, }, { content: (RerouteNode.defaultVisibility ? "Hide" : "Show") + " Type By Default", callback: () => { RerouteNode.setDefaultTextVisibility(!RerouteNode.defaultVisibility); }, } ); } computeSize() { return [ this.properties.showOutputText && this.outputs && this.outputs.length ? Math.max(55, LiteGraph.NODE_TEXT_SIZE * this.outputs[0].name.length * 0.6 + 40) : 55, 26, ]; } static setDefaultTextVisibility(visible) { RerouteNode.defaultVisibility = visible; if (visible) { localStorage["Comfy.RerouteNode.DefaultVisibility"] = "true"; } else { delete localStorage["Comfy.RerouteNode.DefaultVisibility"]; } } } // Load default visibility RerouteNode.setDefaultTextVisibility(!!localStorage["Comfy.RerouteNode.DefaultVisibility"]); LiteGraph.registerNodeType( "Reroute", Object.assign(RerouteNode, { title_mode: LiteGraph.NO_TITLE, title: "Reroute", }) ); RerouteNode.category = "utils"; }, });