Spaces:
Running
on
L40S
Running
on
L40S
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); | |
} | |
}, | |
}); | |