172 lines
6.4 KiB
JavaScript
172 lines
6.4 KiB
JavaScript
// ComfyUI.SimpleBridgeNode v.0.1.0
|
|
import { app } from "../../scripts/app.js";
|
|
|
|
app.registerExtension({
|
|
name: "SimpleBridgeNode",
|
|
registerCustomNodes(app) {
|
|
// Global storage for bridges
|
|
if (!window.SimpleBridgeStorage) {
|
|
window.SimpleBridgeStorage = {};
|
|
}
|
|
|
|
// Store Bridge Node
|
|
class StoreBridgeNode extends LGraphNode {
|
|
constructor() {
|
|
super("Store Bridge");
|
|
this.addInput("input", "*");
|
|
this.addOutput("output", "*");
|
|
this.addWidget("text", "bridge_name", "bridge1", (v) => {
|
|
this.properties.bridge_name = v;
|
|
});
|
|
|
|
this.properties = {
|
|
bridge_name: "bridge1"
|
|
};
|
|
|
|
this.linkType = "*";
|
|
this.size = this.computeSize();
|
|
|
|
// Handle connection changes
|
|
this.onConnectionsChange = function(type, index, connected, link_info) {
|
|
if (connected && type === LiteGraph.INPUT) {
|
|
const link = app.graph.links[this.inputs[0].link];
|
|
if (!link) return;
|
|
|
|
const sourceNode = app.graph.getNodeById(link.origin_id);
|
|
const outputType = sourceNode.outputs[link.origin_slot].type || "*";
|
|
|
|
// Update type and store
|
|
this.linkType = outputType;
|
|
this.outputs[0].type = outputType;
|
|
|
|
// Store the connection type in the named bridge
|
|
window.BridgeStorage[this.properties.bridge_name] = {
|
|
type: outputType
|
|
};
|
|
|
|
// Set the link color
|
|
const linkColor = LGraphCanvas.link_type_colors[outputType];
|
|
if (link) link.color = linkColor;
|
|
}
|
|
|
|
// Update connections that come after this node
|
|
if (this.outputs && this.outputs[0] && this.outputs[0].links) {
|
|
for (const linkId of this.outputs[0].links) {
|
|
const link = app.graph.links[linkId];
|
|
if (!link) continue;
|
|
|
|
link.color = LGraphCanvas.link_type_colors[this.linkType];
|
|
}
|
|
}
|
|
};
|
|
|
|
// When widget value changes
|
|
this.onPropertyChanged = function(name, value) {
|
|
if (name === "bridge_name") {
|
|
// Register this bridge name with its type
|
|
if (this.linkType !== "*") {
|
|
window.BridgeStorage[value] = {
|
|
type: this.linkType
|
|
};
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
// Called when node processes data
|
|
onExecute() {
|
|
const input = this.getInputData(0);
|
|
if (input !== undefined) {
|
|
// Store the actual data
|
|
window.SimpleBridgeStorage[this.properties.bridge_name].data = input;
|
|
// Pass through the data
|
|
this.setOutputData(0, input);
|
|
}
|
|
}
|
|
|
|
computeSize() {
|
|
return [160, 80];
|
|
}
|
|
}
|
|
|
|
// Load Bridge Node
|
|
class LoadBridgeNode extends LGraphNode {
|
|
constructor() {
|
|
super("Load Bridge");
|
|
this.addOutput("output", "*");
|
|
this.addWidget("text", "bridge_name", "bridge1", (v) => {
|
|
this.properties.bridge_name = v;
|
|
this.updateType();
|
|
});
|
|
|
|
this.properties = {
|
|
bridge_name: "bridge1"
|
|
};
|
|
|
|
this.linkType = "*";
|
|
this.size = this.computeSize();
|
|
|
|
// Update type based on bridge name
|
|
this.updateType = function() {
|
|
const bridgeName = this.properties.bridge_name;
|
|
const bridge = window.SimpleBridgeStorage[bridgeName];
|
|
|
|
if (bridge && bridge.type) {
|
|
this.linkType = bridge.type;
|
|
this.outputs[0].type = bridge.type;
|
|
|
|
// Update connection colors
|
|
if (this.outputs && this.outputs[0] && this.outputs[0].links) {
|
|
for (const linkId of this.outputs[0].links) {
|
|
const link = app.graph.links[linkId];
|
|
if (!link) continue;
|
|
|
|
link.color = LGraphCanvas.link_type_colors[bridge.type];
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// When property changes
|
|
this.onPropertyChanged = function(name, value) {
|
|
if (name === "bridge_name") {
|
|
this.updateType();
|
|
}
|
|
};
|
|
}
|
|
|
|
// Called when node processes data
|
|
onExecute() {
|
|
const bridgeName = this.properties.bridge_name;
|
|
const bridge = window.SimpleBridgeStorage[bridgeName];
|
|
|
|
if (bridge && bridge.data !== undefined) {
|
|
this.setOutputData(0, bridge.data);
|
|
}
|
|
}
|
|
|
|
computeSize() {
|
|
return [160, 50];
|
|
}
|
|
}
|
|
|
|
// Register the nodes
|
|
LiteGraph.registerNodeType(
|
|
"StoreBridge",
|
|
Object.assign(StoreBridgeNode, {
|
|
title: "Simple Bridge Store",
|
|
})
|
|
);
|
|
|
|
LiteGraph.registerNodeType(
|
|
"LoadBridge",
|
|
Object.assign(LoadBridgeNode, {
|
|
title: "Simple Bridge Load",
|
|
})
|
|
);
|
|
|
|
StoreBridgeNode.category = "utils";
|
|
LoadBridgeNode.category = "utils";
|
|
},
|
|
});
|