127 lines
3.7 KiB
JavaScript
127 lines
3.7 KiB
JavaScript
import { app } from "../../scripts/app.js";
|
|
import { api } from "../../scripts/api.js";
|
|
import Compositor4 from "./compositor4.js";
|
|
import { fabric } from "./fabric.js";
|
|
import {PREFERENCES, addCompositorPreferences, getPreferences} from "./compositor4preferences.js";
|
|
import Init from "./init.js";
|
|
|
|
const COMPOSITOR = Symbol();
|
|
|
|
/** check if this is a Compositor3 node */
|
|
function isCompositor4(node) {
|
|
return node.constructor.comfyClass == "Compositor4";
|
|
}
|
|
|
|
function isCompositorConfig4(node) {
|
|
return node.constructor.comfyClass == "CompositorConfig4";
|
|
}
|
|
|
|
function getCompositorWidget(node, widgetName) {
|
|
return node.widgets.find((w) => w.name === widgetName);
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "Comfy.Compositor4",
|
|
|
|
// async getCustomWidgets(app) {
|
|
// return {
|
|
// async COMPOSITOR(node, inputName, inputData, app) {
|
|
|
|
// const container = document.createElement("div");
|
|
// await this.initEditor(container);
|
|
|
|
// /**
|
|
// * NOTE: hideOnZoom:false FIXES not being able to take screenshot and disappearing on zoom out
|
|
// * but creates some inconsistencies as lines get too small to be rendered properly
|
|
// */
|
|
// return {widget: node.addDOMWidget(inputName, "COMPOSITOR4", container, {hideOnZoom: false})};
|
|
// },
|
|
// };
|
|
// },
|
|
|
|
async setup(app) {
|
|
|
|
addCompositorPreferences(PREFERENCES);
|
|
|
|
function executingMessageHandler(event) {}
|
|
|
|
function executedMessageHandler(event, a, b) {}
|
|
|
|
function configureHandler() {}
|
|
|
|
function executionStartHandler() {}
|
|
|
|
function executionCachedHandler() {}
|
|
|
|
function graphChangedHandler() {}
|
|
|
|
function changeWorkflowHandler() {}
|
|
|
|
api.addEventListener("compositor_init", executedMessageHandler);
|
|
api.addEventListener("graphChanged", graphChangedHandler);
|
|
api.addEventListener("change_workflow", changeWorkflowHandler);
|
|
api.addEventListener("execution_start", executionStartHandler);
|
|
api.addEventListener("execution_cached", executionCachedHandler);
|
|
api.addEventListener("executing", executingMessageHandler);
|
|
/** when a node returns an ui element */
|
|
api.addEventListener("executed", executedMessageHandler);
|
|
api.addEventListener("configure", configureHandler);
|
|
},
|
|
|
|
async init(args) {
|
|
// console.log("init", args)
|
|
},
|
|
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {},
|
|
|
|
async loadedGraphNode(node, app) {
|
|
// console.log("loadedGraphNode");
|
|
},
|
|
async afterConfigureGraph(args) {},
|
|
|
|
async nodeCreated(node) {
|
|
if (!isCompositor4(node)) return;
|
|
|
|
//const el = this.init();
|
|
const el = document.createElement("div");
|
|
el.style.backgroundColor = "transparent";
|
|
el.width = 800;
|
|
el.height = 600;
|
|
el.id = "compositor4container";
|
|
el.value = "foobar.jpg";
|
|
|
|
const imageNameWidget = getCompositorWidget(node, "imageName");
|
|
|
|
|
|
node.editorWidget = node.addDOMWidget("test", "test", el, {
|
|
serialize: true,
|
|
hideOnZoom: false,
|
|
resizable: false,
|
|
|
|
getValue() {
|
|
console.log("getValue", el.value);
|
|
return el.value;
|
|
},
|
|
setValue(v2) {
|
|
// imageNameWidget.value = v2;
|
|
console.log("setValue", v2);
|
|
el.value = v2;
|
|
},
|
|
});
|
|
|
|
// const originalSerializeValue = node.editorWidget.serializeValue;
|
|
// node.editorWidget.serializeValue = (e) => {
|
|
// console.log("serializeValue",e);
|
|
// //return el.value;
|
|
// };
|
|
|
|
const init = new Init();
|
|
const preferences = getPreferences()
|
|
const editor = await init.initEditor(el, preferences);
|
|
console.log("editor", editor);
|
|
node.setSize(editor.getWidgetDimensions());
|
|
|
|
node.setDirtyCanvas(true, true);
|
|
},
|
|
});
|