import { app } from "../../scripts/app.js"; import { RgthreeBaseServerNode } from "./base_node.js"; import { NodeTypesString } from "./constants.js"; class ImageInsetCrop extends RgthreeBaseServerNode { constructor(title = ImageInsetCrop.title) { super(title); } onAdded(graph) { const measurementWidget = this.widgets[0]; let callback = measurementWidget.callback; measurementWidget.callback = (...args) => { this.setWidgetStep(); callback && callback.apply(measurementWidget, [...args]); }; this.setWidgetStep(); } configure(info) { super.configure(info); this.setWidgetStep(); } 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; } } } async handleAction(action) { if (action === "Reset Crop") { for (const widget of this.widgets) { if (["left", "right", "top", "bottom"].includes(widget.name)) { widget.value = 0; } } } } static setUp(comfyClass, nodeData) { RgthreeBaseServerNode.registerForOverride(comfyClass, nodeData, ImageInsetCrop); } } ImageInsetCrop.title = NodeTypesString.IMAGE_INSET_CROP; ImageInsetCrop.type = NodeTypesString.IMAGE_INSET_CROP; ImageInsetCrop.comfyClass = NodeTypesString.IMAGE_INSET_CROP; ImageInsetCrop.exposedActions = ["Reset Crop"]; ImageInsetCrop.maxResolution = 8192; app.registerExtension({ name: "rgthree.ImageInsetCrop", async beforeRegisterNodeDef(nodeType, nodeData, _app) { if (nodeData.name === NodeTypesString.IMAGE_INSET_CROP) { ImageInsetCrop.setUp(nodeType, nodeData); } }, });