This commit is contained in:
小帅 2026-03-21 10:36:13 +08:00
commit 5dd533e563
7 changed files with 149 additions and 1 deletions

View File

@ -55,6 +55,7 @@
"express-ws": "^5.0.2",
"fast-glob": "^3.3.3",
"form-data": "^4.0.5",
"graphlib": "^2.1.8",
"is-path-inside": "^4.0.0",
"js-md5": "^0.8.3",
"jsonwebtoken": "^9.0.3",

View File

@ -307,7 +307,12 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
name: "o_storyboard",
builder: (table) => {
table.integer("id").notNullable();
table.string("name");
table.text("name");
table.text("detail");
table.text("prompt");
table.text("seconds");
table.text("filePath");
table.text("frameType");
table.integer("createTime");
table.primary(["id"]);
table.unique(["id"]);
@ -414,6 +419,17 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
table.index(["isolationKey", "summarized"]);
},
},
//分镜工作流表
{
name: "o_storyboardFlow",
builder: (table) => {
table.integer("id").notNullable();
table.text("flowData").notNullable();
table.integer("stroryboardId").notNullable();
table.primary(["id"]);
table.unique(["id"]);
},
},
];
for (const t of tables) {

View File

@ -0,0 +1,41 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
export default router.post(
"/",
validateFields({
model: z.string(),
references: z.array(z.string()).optional(),
quality: z.string(),
ratio: z.string(),
prompt: z.string(),
projectId: z.number(),
}),
async (req, res) => {
const { model, references = [], quality, ratio, prompt, projectId } = req.body;
const imageClass = await u.Ai.Image(model).run({
prompt: prompt,
imageBase64: references,
size: quality,
aspectRatio: ratio,
taskClass: "分镜生成",
describe: "生成分镜图片",
relatedObjects: JSON.stringify(req.body),
projectId: projectId,
});
const savePath = `${projectId}/storyboard/${u.uuid()}.jpg`;
await imageClass.save(savePath);
const url = await u.oss.getFileUrl(savePath);
const [imageId] = await u.db("o_image").insert({
filePath: savePath,
state: "1",
type: "storyFlow",
});
return res.status(200).send(success({ imageId, url }));
},
);

View File

@ -0,0 +1,27 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
export default router.post(
"/",
validateFields({
id: z.number(),
}),
async (req, res) => {
const { id } = req.body;
console.log("%c Line:15 🥤 id", "background:#e41a6a", id);
const storyboardFlowData = await u.db("o_storyboardFlow").where("stroryboardId", id).first();
if (storyboardFlowData?.flowData) {
return res.status(200).send(success(JSON.parse(storyboardFlowData?.flowData)));
}
return res.status(200).send(
success({
nodes: [],
edges: [],
}),
);
},
);

View File

@ -0,0 +1,28 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
export default router.post(
"/",
validateFields({
edges: z.any(),
nodes: z.any(),
imageId: z.number(),
}),
async (req, res) => {
const { edges, nodes, imageId } = req.body;
// if
const [id] = await u.db("o_storyboad").insert({
imageId,
});
await u.db("o_storyboardFlow").insert({
id: 1,
stroryboardId: id,
flowData: JSON.stringify({ edges, nodes }),
});
return res.status(200).send(success());
},
);

View File

@ -0,0 +1,28 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
export default router.post(
"/",
validateFields({
edges: z.any(),
nodes: z.any(),
id: z.number(),
imageId: z.number(),
}),
async (req, res) => {
const { edges, nodes, id, imageId } = req.body;
// if
await u.db("o_storyboard").where("id", id).update({ imageId });
await u
.db("o_storyboardFlow")
.where("stroryboardId", id)
.update({
flowData: JSON.stringify({ edges, nodes }),
});
return res.status(200).send(success());
},
);

View File

@ -2520,6 +2520,13 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11,
resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
graphlib@^2.1.8:
version "2.1.8"
resolved "https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da"
integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==
dependencies:
lodash "^4.17.15"
guid-typescript@^1.0.9:
version "1.0.9"
resolved "https://registry.npmmirror.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc"