| const { spawn } = require("child_process"); |
| const { resolve } = require("path"); |
| const { existsSync, mkdirSync, writeFileSync } = require("fs"); |
| const http = require("http"); |
|
|
| async function setup() { |
| |
| 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:8188/object_info", (resp) => { |
| let data = ""; |
| resp.on("data", (chunk) => { |
| data += chunk; |
| }); |
| resp.on("end", () => { |
| |
| 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) { |
| |
| 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(); |