Spaces:
Paused
Paused
| const { spawn } = require("child_process"); | |
| const { resolve } = require("path"); | |
| const { existsSync, mkdirSync, writeFileSync } = require("fs"); | |
| const http = require("http"); | |
| async function setup() { | |
| // Wait up to 30s for it to start | |
| let success = false; | |
| let child; | |
| for (let i = 0; i < 30; i++) { | |
| try { | |
| await new Promise((res, rej) => { | |
| http | |
| .get("http://127.0.0.1:7860/object_info", (resp) => { | |
| let data = ""; | |
| resp.on("data", (chunk) => { | |
| data += chunk; | |
| }); | |
| resp.on("end", () => { | |
| // Modify the response data to add some checkpoints | |
| const objectInfo = JSON.parse(data); | |
| objectInfo.CheckpointLoaderSimple.input.required.ckpt_name[0] = ["model1.safetensors", "model2.ckpt"]; | |
| objectInfo.VAELoader.input.required.vae_name[0] = ["vae1.safetensors", "vae2.ckpt"]; | |
| data = JSON.stringify(objectInfo, undefined, "\t"); | |
| const outDir = resolve("./data"); | |
| if (!existsSync(outDir)) { | |
| mkdirSync(outDir); | |
| } | |
| const outPath = resolve(outDir, "object_info.json"); | |
| console.log(`Writing ${Object.keys(objectInfo).length} nodes to ${outPath}`); | |
| writeFileSync(outPath, data, { | |
| encoding: "utf8", | |
| }); | |
| res(); | |
| }); | |
| }) | |
| .on("error", rej); | |
| }); | |
| success = true; | |
| break; | |
| } catch (error) { | |
| console.log(i + "/30", error); | |
| if (i === 0) { | |
| // Start the server on first iteration if it fails to connect | |
| console.log("Starting ComfyUI server..."); | |
| let python = resolve("../../python_embeded/python.exe"); | |
| let args; | |
| let cwd; | |
| if (existsSync(python)) { | |
| args = ["-s", "ComfyUI/main.py"]; | |
| cwd = "../.."; | |
| } else { | |
| python = "python"; | |
| args = ["main.py"]; | |
| cwd = ".."; | |
| } | |
| args.push("--cpu"); | |
| console.log(python, ...args); | |
| child = spawn(python, args, { cwd }); | |
| child.on("error", (err) => { | |
| console.log(`Server error (${err})`); | |
| i = 30; | |
| }); | |
| child.on("exit", (code) => { | |
| if (!success) { | |
| console.log(`Server exited (${code})`); | |
| i = 30; | |
| } | |
| }); | |
| } | |
| await new Promise((r) => { | |
| setTimeout(r, 1000); | |
| }); | |
| } | |
| } | |
| child?.kill(); | |
| if (!success) { | |
| throw new Error("Waiting for server failed..."); | |
| } | |
| } | |
| setup(); |