Files
comfy_backend/src/biz/txt23d.ts
2024-05-21 21:59:30 +08:00

55 lines
2.2 KiB
TypeScript

import { RequestHandler, Txt2ImgRequest } from "../type/request";
import { txt23dApiFormatJSON } from "../comfyJson/txt23d";
import axios from "axios";
import { selectNodeFromApiJSONbyID } from "../utils/editComfyJson";
import WebSocket from "ws";
// const baseUrl = "http://47.108.92.176:20000";
// const baseWsUrl = "ws://47.108.92.176:20000";
const baseUrl = "http://localhost:8188";
const baseWsUrl = "ws://localhost:8188";
axios.defaults.baseURL = baseUrl;
const Txt23DHandler: RequestHandler<Txt2ImgRequest, any> = async (ctx) => {
ctx.set('Access-Control-Allow-Origin', '*')
ctx.set('Access-Control-Allow-Headers', 'Content-Type,Content-Length,Authorization,Accept,X-Requested-With')
ctx.set('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
if (ctx.method == 'OPTIONS') {
ctx.body = 200;
return;
}
const requestBody = ctx.request.body;
const { prompt, loraDetail, loraModel } = requestBody;
const inputNode = selectNodeFromApiJSONbyID(txt23dApiFormatJSON, "33");
inputNode.inputs.string = prompt;
ctx.body = {
url: ctx.body = baseUrl + '/view?filename=' + await new Promise((resolve, reject) => {
const taskID = Math.random().toFixed(10);
const ws = new WebSocket(`${baseWsUrl}/ws?clientId=${taskID}`);
ws.onopen = () => {
try {
axios.post("/prompt", {
client_id: taskID,
prompt: txt23dApiFormatJSON,
// extra_data: txt2imgAPIformatExtraData
});
} catch (error) {
console.log(error);
}
ws.onmessage = (event) => {
if (typeof event.data === "string") {
const { type, data } = JSON.parse(event.data);
if (type === "executed") {
console.log(data.output);
if (data.node === '13') {
resolve(data.output.mesh[0].filename)
}
}
} else {
}
}
}
})
}
}
export default Txt23DHandler;