From 2579d7420b95f2de7211b2a88957b7a68d20a45f Mon Sep 17 00:00:00 2001 From: zhishi <1951671751@qq.com> Date: Mon, 30 Mar 2026 11:02:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=9F=E6=88=90=E5=88=86?= =?UTF-8?q?=E9=95=9C=E5=9B=BE=E7=89=87=E6=8E=A5=E5=8F=A3=20=E5=BE=85?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router.ts | 240 +++++++++--------- .../storyboard/batchGenerateImage.ts | 74 ++++++ src/types/database.d.ts | 21 +- 3 files changed, 202 insertions(+), 133 deletions(-) create mode 100644 src/routes/production/storyboard/batchGenerateImage.ts diff --git a/src/router.ts b/src/router.ts index 7590ee1..7fc1ab5 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 48f3cafa7563a8ec5d646e1f88ef8bfd +// @routes-hash 6f4b1b062e88dc5cb13583c50c217537 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -55,65 +55,66 @@ import route51 from "./routes/production/getFlowData"; import route52 from "./routes/production/getProductionData"; import route53 from "./routes/production/getStoryboardData"; import route54 from "./routes/production/saveFlowData"; -import route55 from "./routes/production/storyboard/downPreviewImage"; -import route56 from "./routes/production/storyboard/getStoryboardData"; -import route57 from "./routes/production/storyboard/previewImage"; -import route58 from "./routes/production/workbench/confirmSelection"; -import route59 from "./routes/production/workbench/delVideo"; -import route60 from "./routes/production/workbench/generateVideo"; -import route61 from "./routes/production/workbench/getChatLines"; -import route62 from "./routes/production/workbench/getVideoModelDetail"; -import route63 from "./routes/production/workbench/videoPolling"; -import route64 from "./routes/project/addProject"; -import route65 from "./routes/project/addVisual"; -import route66 from "./routes/project/addVisualManual"; -import route67 from "./routes/project/deleteVisualManual"; -import route68 from "./routes/project/delProject"; -import route69 from "./routes/project/editProject"; -import route70 from "./routes/project/editVisualManual"; -import route71 from "./routes/project/getProject"; -import route72 from "./routes/project/getVisualManual"; -import route73 from "./routes/project/visualManual"; -import route74 from "./routes/script/addScript"; -import route75 from "./routes/script/delScript"; -import route76 from "./routes/script/exportScript"; -import route77 from "./routes/script/extractAssets"; -import route78 from "./routes/script/getScrptApi"; -import route79 from "./routes/script/pollScriptAssets"; -import route80 from "./routes/script/updateScript"; -import route81 from "./routes/scriptAgent/getPlanData"; -import route82 from "./routes/scriptAgent/setPlanData"; -import route83 from "./routes/setting/about/checkUpdate"; -import route84 from "./routes/setting/about/downloadApp"; -import route85 from "./routes/setting/agentDeploy/agentSetKey"; -import route86 from "./routes/setting/agentDeploy/deployAgentModel"; -import route87 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route88 from "./routes/setting/dbConfig/clearData"; -import route89 from "./routes/setting/dev/getSwitchAiDevTool"; -import route90 from "./routes/setting/dev/updateSwitchAiDevTool"; -import route91 from "./routes/setting/fileManagement/openFolder"; -import route92 from "./routes/setting/getTextModel"; -import route93 from "./routes/setting/loginConfig/getUser"; -import route94 from "./routes/setting/loginConfig/updateUserPwd"; -import route95 from "./routes/setting/memoryConfig/delAllMemory"; -import route96 from "./routes/setting/memoryConfig/getMemory"; -import route97 from "./routes/setting/memoryConfig/sureMemory"; -import route98 from "./routes/setting/promptManage/getPrompt"; -import route99 from "./routes/setting/promptManage/updatePrompt"; -import route100 from "./routes/setting/skillManagement/getSkillContent"; -import route101 from "./routes/setting/skillManagement/getSkillList"; -import route102 from "./routes/setting/skillManagement/saveSkillContent"; -import route103 from "./routes/setting/vendorConfig/addVendor"; -import route104 from "./routes/setting/vendorConfig/deleteVendor"; -import route105 from "./routes/setting/vendorConfig/getVendorList"; -import route106 from "./routes/setting/vendorConfig/modelTest"; -import route107 from "./routes/setting/vendorConfig/updateCode"; -import route108 from "./routes/setting/vendorConfig/updateVendor"; -import route109 from "./routes/task/getProject"; -import route110 from "./routes/task/getTaskApi"; -import route111 from "./routes/task/getTaskCategories"; -import route112 from "./routes/task/taskDetails"; -import route113 from "./routes/test/test"; +import route55 from "./routes/production/storyboard/batchGenerateImage"; +import route56 from "./routes/production/storyboard/downPreviewImage"; +import route57 from "./routes/production/storyboard/getStoryboardData"; +import route58 from "./routes/production/storyboard/previewImage"; +import route59 from "./routes/production/workbench/confirmSelection"; +import route60 from "./routes/production/workbench/delVideo"; +import route61 from "./routes/production/workbench/generateVideo"; +import route62 from "./routes/production/workbench/getChatLines"; +import route63 from "./routes/production/workbench/getVideoModelDetail"; +import route64 from "./routes/production/workbench/videoPolling"; +import route65 from "./routes/project/addProject"; +import route66 from "./routes/project/addVisual"; +import route67 from "./routes/project/addVisualManual"; +import route68 from "./routes/project/deleteVisualManual"; +import route69 from "./routes/project/delProject"; +import route70 from "./routes/project/editProject"; +import route71 from "./routes/project/editVisualManual"; +import route72 from "./routes/project/getProject"; +import route73 from "./routes/project/getVisualManual"; +import route74 from "./routes/project/visualManual"; +import route75 from "./routes/script/addScript"; +import route76 from "./routes/script/delScript"; +import route77 from "./routes/script/exportScript"; +import route78 from "./routes/script/extractAssets"; +import route79 from "./routes/script/getScrptApi"; +import route80 from "./routes/script/pollScriptAssets"; +import route81 from "./routes/script/updateScript"; +import route82 from "./routes/scriptAgent/getPlanData"; +import route83 from "./routes/scriptAgent/setPlanData"; +import route84 from "./routes/setting/about/checkUpdate"; +import route85 from "./routes/setting/about/downloadApp"; +import route86 from "./routes/setting/agentDeploy/agentSetKey"; +import route87 from "./routes/setting/agentDeploy/deployAgentModel"; +import route88 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route89 from "./routes/setting/dbConfig/clearData"; +import route90 from "./routes/setting/dev/getSwitchAiDevTool"; +import route91 from "./routes/setting/dev/updateSwitchAiDevTool"; +import route92 from "./routes/setting/fileManagement/openFolder"; +import route93 from "./routes/setting/getTextModel"; +import route94 from "./routes/setting/loginConfig/getUser"; +import route95 from "./routes/setting/loginConfig/updateUserPwd"; +import route96 from "./routes/setting/memoryConfig/delAllMemory"; +import route97 from "./routes/setting/memoryConfig/getMemory"; +import route98 from "./routes/setting/memoryConfig/sureMemory"; +import route99 from "./routes/setting/promptManage/getPrompt"; +import route100 from "./routes/setting/promptManage/updatePrompt"; +import route101 from "./routes/setting/skillManagement/getSkillContent"; +import route102 from "./routes/setting/skillManagement/getSkillList"; +import route103 from "./routes/setting/skillManagement/saveSkillContent"; +import route104 from "./routes/setting/vendorConfig/addVendor"; +import route105 from "./routes/setting/vendorConfig/deleteVendor"; +import route106 from "./routes/setting/vendorConfig/getVendorList"; +import route107 from "./routes/setting/vendorConfig/modelTest"; +import route108 from "./routes/setting/vendorConfig/updateCode"; +import route109 from "./routes/setting/vendorConfig/updateVendor"; +import route110 from "./routes/task/getProject"; +import route111 from "./routes/task/getTaskApi"; +import route112 from "./routes/task/getTaskCategories"; +import route113 from "./routes/task/taskDetails"; +import route114 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -170,63 +171,64 @@ export default async (app: Express) => { app.use("/api/production/getProductionData", route52); app.use("/api/production/getStoryboardData", route53); app.use("/api/production/saveFlowData", route54); - app.use("/api/production/storyboard/downPreviewImage", route55); - app.use("/api/production/storyboard/getStoryboardData", route56); - app.use("/api/production/storyboard/previewImage", route57); - app.use("/api/production/workbench/confirmSelection", route58); - app.use("/api/production/workbench/delVideo", route59); - app.use("/api/production/workbench/generateVideo", route60); - app.use("/api/production/workbench/getChatLines", route61); - app.use("/api/production/workbench/getVideoModelDetail", route62); - app.use("/api/production/workbench/videoPolling", route63); - app.use("/api/project/addProject", route64); - app.use("/api/project/addVisual", route65); - app.use("/api/project/addVisualManual", route66); - app.use("/api/project/deleteVisualManual", route67); - app.use("/api/project/delProject", route68); - app.use("/api/project/editProject", route69); - app.use("/api/project/editVisualManual", route70); - app.use("/api/project/getProject", route71); - app.use("/api/project/getVisualManual", route72); - app.use("/api/project/visualManual", route73); - app.use("/api/script/addScript", route74); - app.use("/api/script/delScript", route75); - app.use("/api/script/exportScript", route76); - app.use("/api/script/extractAssets", route77); - app.use("/api/script/getScrptApi", route78); - app.use("/api/script/pollScriptAssets", route79); - app.use("/api/script/updateScript", route80); - app.use("/api/scriptAgent/getPlanData", route81); - app.use("/api/scriptAgent/setPlanData", route82); - app.use("/api/setting/about/checkUpdate", route83); - app.use("/api/setting/about/downloadApp", route84); - app.use("/api/setting/agentDeploy/agentSetKey", route85); - app.use("/api/setting/agentDeploy/deployAgentModel", route86); - app.use("/api/setting/agentDeploy/getAgentDeploy", route87); - app.use("/api/setting/dbConfig/clearData", route88); - app.use("/api/setting/dev/getSwitchAiDevTool", route89); - app.use("/api/setting/dev/updateSwitchAiDevTool", route90); - app.use("/api/setting/fileManagement/openFolder", route91); - app.use("/api/setting/getTextModel", route92); - app.use("/api/setting/loginConfig/getUser", route93); - app.use("/api/setting/loginConfig/updateUserPwd", route94); - app.use("/api/setting/memoryConfig/delAllMemory", route95); - app.use("/api/setting/memoryConfig/getMemory", route96); - app.use("/api/setting/memoryConfig/sureMemory", route97); - app.use("/api/setting/promptManage/getPrompt", route98); - app.use("/api/setting/promptManage/updatePrompt", route99); - app.use("/api/setting/skillManagement/getSkillContent", route100); - app.use("/api/setting/skillManagement/getSkillList", route101); - app.use("/api/setting/skillManagement/saveSkillContent", route102); - app.use("/api/setting/vendorConfig/addVendor", route103); - app.use("/api/setting/vendorConfig/deleteVendor", route104); - app.use("/api/setting/vendorConfig/getVendorList", route105); - app.use("/api/setting/vendorConfig/modelTest", route106); - app.use("/api/setting/vendorConfig/updateCode", route107); - app.use("/api/setting/vendorConfig/updateVendor", route108); - app.use("/api/task/getProject", route109); - app.use("/api/task/getTaskApi", route110); - app.use("/api/task/getTaskCategories", route111); - app.use("/api/task/taskDetails", route112); - app.use("/api/test/test", route113); + app.use("/api/production/storyboard/batchGenerateImage", route55); + app.use("/api/production/storyboard/downPreviewImage", route56); + app.use("/api/production/storyboard/getStoryboardData", route57); + app.use("/api/production/storyboard/previewImage", route58); + app.use("/api/production/workbench/confirmSelection", route59); + app.use("/api/production/workbench/delVideo", route60); + app.use("/api/production/workbench/generateVideo", route61); + app.use("/api/production/workbench/getChatLines", route62); + app.use("/api/production/workbench/getVideoModelDetail", route63); + app.use("/api/production/workbench/videoPolling", route64); + app.use("/api/project/addProject", route65); + app.use("/api/project/addVisual", route66); + app.use("/api/project/addVisualManual", route67); + app.use("/api/project/deleteVisualManual", route68); + app.use("/api/project/delProject", route69); + app.use("/api/project/editProject", route70); + app.use("/api/project/editVisualManual", route71); + app.use("/api/project/getProject", route72); + app.use("/api/project/getVisualManual", route73); + app.use("/api/project/visualManual", route74); + app.use("/api/script/addScript", route75); + app.use("/api/script/delScript", route76); + app.use("/api/script/exportScript", route77); + app.use("/api/script/extractAssets", route78); + app.use("/api/script/getScrptApi", route79); + app.use("/api/script/pollScriptAssets", route80); + app.use("/api/script/updateScript", route81); + app.use("/api/scriptAgent/getPlanData", route82); + app.use("/api/scriptAgent/setPlanData", route83); + app.use("/api/setting/about/checkUpdate", route84); + app.use("/api/setting/about/downloadApp", route85); + app.use("/api/setting/agentDeploy/agentSetKey", route86); + app.use("/api/setting/agentDeploy/deployAgentModel", route87); + app.use("/api/setting/agentDeploy/getAgentDeploy", route88); + app.use("/api/setting/dbConfig/clearData", route89); + app.use("/api/setting/dev/getSwitchAiDevTool", route90); + app.use("/api/setting/dev/updateSwitchAiDevTool", route91); + app.use("/api/setting/fileManagement/openFolder", route92); + app.use("/api/setting/getTextModel", route93); + app.use("/api/setting/loginConfig/getUser", route94); + app.use("/api/setting/loginConfig/updateUserPwd", route95); + app.use("/api/setting/memoryConfig/delAllMemory", route96); + app.use("/api/setting/memoryConfig/getMemory", route97); + app.use("/api/setting/memoryConfig/sureMemory", route98); + app.use("/api/setting/promptManage/getPrompt", route99); + app.use("/api/setting/promptManage/updatePrompt", route100); + app.use("/api/setting/skillManagement/getSkillContent", route101); + app.use("/api/setting/skillManagement/getSkillList", route102); + app.use("/api/setting/skillManagement/saveSkillContent", route103); + app.use("/api/setting/vendorConfig/addVendor", route104); + app.use("/api/setting/vendorConfig/deleteVendor", route105); + app.use("/api/setting/vendorConfig/getVendorList", route106); + app.use("/api/setting/vendorConfig/modelTest", route107); + app.use("/api/setting/vendorConfig/updateCode", route108); + app.use("/api/setting/vendorConfig/updateVendor", route109); + app.use("/api/task/getProject", route110); + app.use("/api/task/getTaskApi", route111); + app.use("/api/task/getTaskCategories", route112); + app.use("/api/task/taskDetails", route113); + app.use("/api/test/test", route114); } diff --git a/src/routes/production/storyboard/batchGenerateImage.ts b/src/routes/production/storyboard/batchGenerateImage.ts new file mode 100644 index 0000000..446f75e --- /dev/null +++ b/src/routes/production/storyboard/batchGenerateImage.ts @@ -0,0 +1,74 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import sharp from "sharp"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +import { Output } from "ai"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + storyboardIds: z.array(z.number()), + projectId: z.number(), + }), + async (req, res) => { + const { storyboardIds, projectId } = req.body; + + const projectSettingData = await u.db("o_project").where("id", projectId).select("imageModel", "imageQuality", "artStyle").first(); + + const sceneArkPrompt = u.getArtPrompt(projectSettingData?.artStyle || "", "art_storyboard"); + const storyboardData = await u.db("o_storyboard").whereIn("id", storyboardIds).select("id", "description", "title"); + const { text } = await u.Ai.Text("universalAi").invoke({ + system: ` + 你需要根据用户提供的分镜的标题与描述,结合当前项目的美术风格,为我优化提示词以便生成更符合项目美术风格的分镜图片。请你只优化提示词,不要添加任何额外的描述性文字,请以JSON格式输出: [{id:"对应分镜ID",prompt:"分镜提示词"}]。 + 美术风格:${sceneArkPrompt}`, + messages: [ + { + role: "user", + content: `一下是我的分镜内容\n ${storyboardData.map((s) => `分镜ID:${s.id},分镜描述:${s.description},分镜标题:${s.title}`).join("\n")}`, + }, + ], + output: Output.object({ + schema: z.array( + z.object({ + prompt: z.string().describe("优化后的提示词"), + }), + ), + }), + }); + for (const item of storyboardData) { + const repeloadObj = { + prompt: text, + size: projectSettingData?.imageQuality as "1K" | "2K" | "4K", + aspectRatio: "16:9", + }; + u.Ai.Image(projectSettingData?.imageModel as `${string}:${string}`).run({ + prompt: text, + imageBase64: [], + size: projectSettingData?.imageQuality as "1K" | "2K" | "4K", + aspectRatio: "16:9", + taskClass: "生成图片", + describe: "资产图片生成", + relatedObjects: JSON.stringify(repeloadObj), + projectId: projectId, + }); + // .then(async (imageCls) => { + // const savePath = `/${resTool.data.projectId}/assets/${resTool.data.scriptId}/${u.uuid()}.jpg`; + // await imageCls.save(savePath); + // const obj = { + // ...item, + // id: item.assetId, + // src: await u.oss.getFileUrl(savePath), + // state: "已完成", + // }; + //更新对应数据库 + // await u.db("o_assets").where("id", item.assetId).update({ imageId: imageId }); + // await u.db("o_image").where({ id: imageId }).update({ state: "已完成", filePath: savePath }); + // }); + } + + return res.status(200).send(success()); + }, +); diff --git a/src/types/database.d.ts b/src/types/database.d.ts index 735f17d..4544078 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,18 +1,12 @@ -// @db-hash e24c7c99757472b92af11f26a2b2b8c7 +// @db-hash f7bc2fdb80756d5536929eb47155578b //该文件由脚本自动生成,请勿手动修改 -export interface _o_project_old_20260328 { - 'artStyle'?: string | null; +export interface _o_script_old_20260327 { + 'content'?: string | null; 'createTime'?: number | null; - 'id'?: number | null; - 'imageModel'?: string | null; - 'intro'?: string | null; + 'id'?: number; 'name'?: string | null; - 'projectType'?: string | null; - 'type'?: string | null; - 'userId'?: number | null; - 'videoModel'?: string | null; - 'videoRatio'?: string | null; + 'projectId'?: number | null; } export interface memories { 'content': string; @@ -60,7 +54,6 @@ export interface o_assets { 'name'?: string | null; 'projectId'?: number | null; 'prompt'?: string | null; - 'promptState'?: string | null; 'remark'?: string | null; 'scriptId'?: number | null; 'startTime'?: number | null; @@ -180,7 +173,7 @@ export interface o_storyboard { 'filePath'?: string | null; 'frameMode'?: string | null; 'id'?: number; - 'index'?: number | null; + 'index'?: string | null; 'lines'?: string | null; 'mode'?: string | null; 'model'?: string | null; @@ -245,7 +238,7 @@ export interface o_videoConfig { } export interface DB { - "_o_project_old_20260328": _o_project_old_20260328; + "_o_script_old_20260327": _o_script_old_20260327; "memories": memories; "o_agentDeploy": o_agentDeploy; "o_agentWorkData": o_agentWorkData;