Spaces:
Running
on
L40S
Running
on
L40S
import { app } from "scripts/app.js"; | |
import { NodeTypesString } from "../constants.js"; | |
import { wait } from "rgthree/common/shared_utils.js"; | |
import type { LGraphNode } from "typings/litegraph.js"; | |
type addNodeOptions = { | |
placement?: string; | |
}; | |
/** | |
* A testing environment to make setting up, clearing, and queuing more predictable in an | |
* integration test environment. | |
*/ | |
export class ComfyUITestEnvironment { | |
private lastNode: LGraphNode | null = null; | |
private maxY = 0; | |
constructor() {} | |
async addNode(nodeString: string, options: addNodeOptions = {}) { | |
const [canvas, graph] = [app.canvas, app.graph]; | |
const node = LiteGraph.createNode(nodeString); | |
let x = 0; | |
let y = 30; | |
if (this.lastNode) { | |
const placement = options.placement || "right"; | |
if (placement === "under") { | |
x = this.lastNode.pos[0]; | |
y = this.lastNode.pos[1] + this.lastNode.size[1] + 30; | |
} else if (placement === "right") { | |
x = this.lastNode.pos[0] + this.lastNode.size[0] + 100; | |
y = this.lastNode.pos[1]; | |
} else if (placement === "start") { | |
x = 0; | |
y = this.maxY + 50; | |
} | |
} | |
canvas.graph.add(node); | |
node.pos = [x, y]; | |
canvas.selectNode(node); | |
app.graph.setDirtyCanvas(true, true); | |
await wait(); | |
this.lastNode = node; | |
this.maxY = Math.max(this.maxY, y + this.lastNode.size[1]); | |
return (this.lastNode = node); | |
} | |
async clear() { | |
app.clean(); | |
app.graph.clear(); | |
const nodeConfig = await this.addNode(NodeTypesString.KSAMPLER_CONFIG); | |
const displayAny = await this.addNode(NodeTypesString.DISPLAY_ANY); | |
nodeConfig.widgets[0]!.value = Math.round(Math.random() * 100); | |
nodeConfig.connect(0, displayAny, 0); | |
await this.queuePrompt(); | |
app.clean(); | |
app.graph.clear(); | |
this.lastNode = null; | |
this.maxY = 0; | |
await wait(); | |
} | |
async queuePrompt() { | |
await app.queuePrompt(); | |
await wait(150); | |
} | |
} | |