|
import { app } from "scripts/app.js";
|
|
import type { ComfyApp, ComfyNodeConstructor, ComfyObjectInfo } from "typings/comfy.js";
|
|
import { RgthreeBaseServerNode } from "./base_node.js";
|
|
import { LGraph, LGraphNode, SerializedLGraphNode } from "typings/litegraph.js";
|
|
import { NodeTypesString } from "./constants.js";
|
|
|
|
class ImageInsetCrop extends RgthreeBaseServerNode {
|
|
static override title = NodeTypesString.IMAGE_INSET_CROP;
|
|
static override type = NodeTypesString.IMAGE_INSET_CROP;
|
|
static comfyClass = NodeTypesString.IMAGE_INSET_CROP;
|
|
|
|
static override exposedActions = ["Reset Crop"];
|
|
static maxResolution = 8192;
|
|
|
|
constructor(title = ImageInsetCrop.title) {
|
|
super(title);
|
|
}
|
|
|
|
override onAdded(graph: LGraph): void {
|
|
const measurementWidget = this.widgets[0]!;
|
|
let callback = measurementWidget.callback;
|
|
measurementWidget.callback = (...args) => {
|
|
this.setWidgetStep();
|
|
callback && callback.apply(measurementWidget, [...args]);
|
|
};
|
|
this.setWidgetStep();
|
|
}
|
|
|
|
override configure(info: SerializedLGraphNode<LGraphNode>): void {
|
|
super.configure(info);
|
|
this.setWidgetStep();
|
|
}
|
|
|
|
private setWidgetStep() {
|
|
const measurementWidget = this.widgets[0]!;
|
|
for (let i = 1; i <= 4; i++) {
|
|
if (measurementWidget.value === "Pixels") {
|
|
this.widgets[i]!.options.step = 80;
|
|
this.widgets[i]!.options.max = ImageInsetCrop.maxResolution;
|
|
} else {
|
|
this.widgets[i]!.options.step = 10;
|
|
this.widgets[i]!.options.max = 99;
|
|
}
|
|
}
|
|
}
|
|
|
|
override async handleAction(action: string): Promise<void> {
|
|
if (action === "Reset Crop") {
|
|
for (const widget of this.widgets) {
|
|
if (["left", "right", "top", "bottom"].includes(widget.name!)) {
|
|
widget.value = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static override setUp(comfyClass: ComfyNodeConstructor, nodeData: ComfyObjectInfo) {
|
|
RgthreeBaseServerNode.registerForOverride(comfyClass, nodeData, ImageInsetCrop);
|
|
}
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "rgthree.ImageInsetCrop",
|
|
async beforeRegisterNodeDef(
|
|
nodeType: ComfyNodeConstructor,
|
|
nodeData: ComfyObjectInfo,
|
|
_app: ComfyApp,
|
|
) {
|
|
if (nodeData.name === NodeTypesString.IMAGE_INSET_CROP) {
|
|
ImageInsetCrop.setUp(nodeType, nodeData);
|
|
}
|
|
},
|
|
});
|
|
|