90 lines
2.4 KiB
JavaScript
90 lines
2.4 KiB
JavaScript
import { app } from "../../scripts/app.js";
|
|
import { api } from "../../scripts/api.js";
|
|
|
|
function isType(comfyClass, node) {
|
|
return node.constructor.comfyClass == comfyClass;
|
|
}
|
|
|
|
function getWidget(node, widgetName) {
|
|
return node.widgets.find((w) => w.name === widgetName);
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "Comfy.CompositorTools3",
|
|
async getCustomWidgets(app) {
|
|
return {};
|
|
},
|
|
async setup(app) {},
|
|
async init(args) {},
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {},
|
|
|
|
async loadedGraphNode(node, app) {},
|
|
async afterConfigureGraph(args) {
|
|
// not enough to do here only we also in node created (for later or connection changed)
|
|
//console.log("after configure graph");
|
|
// To do something when a workflow has loaded, use afterConfigureGraph, not setup
|
|
// console.log("afterConfigureGraph", args);
|
|
|
|
const tools = app.graph.findNodesByType("CompositorTools3");
|
|
tools.forEach((node) => {
|
|
const CHANNELNAME = `Tools${node.id}`;
|
|
// console.log(CHANNELNAME);
|
|
const channel = new BroadcastChannel(CHANNELNAME);
|
|
|
|
node["togglePreciseSelection"] = () => {
|
|
//console.log(arguments);
|
|
channel.postMessage({
|
|
action: "togglePreciseSelection",
|
|
value: node.preciseSelection.value,
|
|
nodeId: node.id,
|
|
});
|
|
};
|
|
|
|
node["centerSelected"] = () => {
|
|
//console.log(arguments);
|
|
channel.postMessage({
|
|
action: "centerSelected",
|
|
value: true,
|
|
nodeId: node.id,
|
|
});
|
|
};
|
|
|
|
node["resetTransforms"] = () => {
|
|
//console.log(arguments);
|
|
channel.postMessage({
|
|
action: "resetTransforms",
|
|
value: true,
|
|
nodeId: node.id,
|
|
});
|
|
};
|
|
|
|
node.centerSelected = node.addWidget(
|
|
"button",
|
|
"centerSelected",
|
|
false,
|
|
node.centerSelected
|
|
);
|
|
node.preciseSelection = node.addWidget(
|
|
"toggle",
|
|
"preciseSelection",
|
|
false,
|
|
node.togglePreciseSelection
|
|
);
|
|
node.resetTransforms = node.addWidget(
|
|
"button",
|
|
"resetTransforms",
|
|
false,
|
|
node.resetTransforms
|
|
);
|
|
//node.preciseSelection.serialize = ()=>{}
|
|
node.setDirtyCanvas(true, true);
|
|
});
|
|
},
|
|
async nodeCreated(node) {
|
|
if (!isType("CompositorTools3", node)) return;
|
|
// console.log("better log it");
|
|
node.serialize_widgets = false;
|
|
node.isVirtualNode = true;
|
|
},
|
|
});
|