From 24c0f3ea4ee5d53d41da8b0a7946afc428cd10b0 Mon Sep 17 00:00:00 2001
From: zhishi <1951671751@qq.com>
Date: Wed, 1 Apr 2026 01:16:17 +0800
Subject: [PATCH 1/4] no message
---
src/agents/scriptAgent/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/agents/scriptAgent/index.ts b/src/agents/scriptAgent/index.ts
index c2c79a8..b0cb807 100644
--- a/src/agents/scriptAgent/index.ts
+++ b/src/agents/scriptAgent/index.ts
@@ -185,7 +185,7 @@ function createSubAgent(parentCtx: AgentContext) {
prompt,
system:
systemPrompt +
- `\n你必须使用如下XML格式写入工作区:\nXML不得添加任何额外标签剧本内容- 剧本内容
- 剧本内容
`,
+ `\n你必须使用如下XML格式写入工作区:\nXML不得添加任何额外标签剧本内容剧本内容剧本内容`,
messages: [
{ role: "assistant", content: projectPrompt + "\n" + scriptPrompt },
{ role: "user", content: prompt },
From f7830d862c04a1288679418c69f714b4a85dc269 Mon Sep 17 00:00:00 2001
From: zhishi <1951671751@qq.com>
Date: Wed, 1 Apr 2026 02:21:29 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=A7=86=E9=A2=91?=
=?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=E7=94=9F=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/lib/initDB.ts | 3 +
.../storyboard/batchAddStoryboardInfo.ts | 61 ++++++++++++++++++-
src/routes/script/extractAssets.ts | 24 ++------
src/types/database.d.ts | 12 +++-
4 files changed, 79 insertions(+), 21 deletions(-)
diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts
index 6c30f9f..892fead 100644
--- a/src/lib/initDB.ts
+++ b/src/lib/initDB.ts
@@ -536,6 +536,9 @@ description: 专注于从剧本内容中提取所使用的资产(角色、场
table.integer("videoId");
table.integer("projectId");
table.integer("scriptId");
+ table.text("state");
+ table.text("reason");
+ table.text("prompt");
table.primary(["id"]);
table.unique(["id"]);
},
diff --git a/src/routes/production/storyboard/batchAddStoryboardInfo.ts b/src/routes/production/storyboard/batchAddStoryboardInfo.ts
index f238cd2..cd8e80b 100644
--- a/src/routes/production/storyboard/batchAddStoryboardInfo.ts
+++ b/src/routes/production/storyboard/batchAddStoryboardInfo.ts
@@ -72,7 +72,11 @@ export default router.post(
.db("o_storyboard")
.where("scriptId", scriptId)
.select("id", "trackId", "prompt", "duration", "state", "scriptId", "reason", "filePath");
- if (!lastStoryboard || !lastStoryboard.length) return res.status(400).send(error("为查到分镜数据"));
+ if (!lastStoryboard || !lastStoryboard.length) return res.status(400).send(error("未查到分镜数据"));
+ batchGenerateVideoPrompts(
+ data.map((i: any) => i.id),
+ projectId,
+ );
const storyboardData = await Promise.all(
lastStoryboard.map(async (i) => {
return {
@@ -91,3 +95,58 @@ export default router.post(
return res.status(200).send(success(storyboardData));
},
);
+
+async function batchGenerateVideoPrompts(storyboardIds: number[], projectId: number) {
+ const lastStoryboard = await u.db("o_storyboard").whereIn("id", storyboardIds).select("id", "trackId", "prompt");
+ const allTrackIds = lastStoryboard.map((i) => i.trackId);
+ const storyboardPromptRecord: Record = {};
+ lastStoryboard.forEach((i) => {
+ if (i.trackId) {
+ if (!storyboardPromptRecord[i.trackId]) {
+ storyboardPromptRecord[i.trackId] = [];
+ }
+ storyboardPromptRecord[i.trackId].push(i.prompt!);
+ }
+ });
+ const projectSetting = await u.db("o_project").where("id", projectId).select("artStyle").first();
+ const systemPrompt = u.getArtPrompt(projectSetting?.artStyle!, "art_storyboard_video");
+ await u
+ .db("o_videoTrack")
+ .whereIn("id", allTrackIds as number[])
+ .update({
+ state: "生成中",
+ });
+ for (const trackId in storyboardPromptRecord) {
+ const storboardPrompts = storyboardPromptRecord[trackId];
+ try {
+ const { text } = await u.Ai.Text("universalAi").invoke({
+ messages: [
+ {
+ role: "system",
+ content: systemPrompt,
+ },
+ {
+ role: "user",
+ content: `请根据我所提供的 ${storboardPrompts.length} 条分镜内容,为我生成一条视频提示词,请直接输出提示词内容,不做任何解释说明。
+ 分镜内容如下:
+ ${storboardPrompts.map((i, index) => `${index + 1}.${i}`).join("\n")}`,
+ },
+ ],
+ });
+ await u.db("o_videoTrack").where("id", trackId).update({
+ state: "已完成",
+ prompt: text,
+ });
+ console.log("%c Line:116 🍎 text", "background:#42b983", text);
+ } catch (e) {
+ console.error("生成视频提示词失败", e);
+ await u
+ .db("o_videoTrack")
+ .where("id", trackId)
+ .update({
+ state: "生成失败",
+ reason: u.error(e).message,
+ });
+ }
+ }
+}
diff --git a/src/routes/script/extractAssets.ts b/src/routes/script/extractAssets.ts
index 008e0af..d666584 100644
--- a/src/routes/script/extractAssets.ts
+++ b/src/routes/script/extractAssets.ts
@@ -58,37 +58,23 @@ export default router.post(
}),
async (req, res) => {
const { scriptIds, projectId, groupSize = 5 } = req.body;
+
if (!scriptIds.length) return res.status(400).send(error("请先选择剧本"));
const scripts = await u.db("o_script").whereIn("id", scriptIds);
const intansce = u.Ai.Text("universalAi");
- // 查询已有的剧本-资产关联,找出已经提取过资产的剧本
- const existingScriptAssets = await u.db("o_scriptAssets").whereIn("scriptId", scriptIds).select("scriptId");
- const scriptIdsWithAssets = new Set(existingScriptAssets.map((sa: any) => sa.scriptId));
-
// 构建 scriptId -> script 内容的映射
const scriptMap = new Map(scripts.map((s: o_script) => [s.id, s]));
- // 过滤掉已成功提取过资产的剧本(extractState === 1 且有关联资产)
- const filteredScriptIds = scriptIds.filter((id: number) => {
- const script = scriptMap.get(id);
- return !(script?.extractState === 1 && scriptIdsWithAssets.has(id));
- });
- const skippedCount = scriptIds.length - filteredScriptIds.length;
-
- if (!filteredScriptIds.length) {
- return res.send(success("所有剧本已提取过资产,无需重复提取"));
- }
-
- await u.db("o_script").whereIn("id", filteredScriptIds).update({
+ await u.db("o_script").whereIn("id", scriptIds).update({
extractState: 0,
});
const errors: { scriptId: number; error: string }[] = [];
let successCount = 0;
- // 将过滤后的 scriptIds 按 groupSize(默认5)分组,每组一起发给 AI
- const scriptGroups = chunkArray(filteredScriptIds, groupSize);
+ // 将 scriptIds 按 groupSize(默认5)分组,每组一起发给 AI
+ const scriptGroups = chunkArray(scriptIds, groupSize);
/** 一组剧本提取完成后统一入库并建立关联 */
async function persistGroupResult(result: GroupResult) {
@@ -257,6 +243,6 @@ export default router.post(
});
}
- return res.send(success(skippedCount > 0 ? `开始提取资产,跳过 ${skippedCount} 个已提取的剧本` : "开始提取资产"));
+ return res.send(success("开始提取资产"));
},
);
diff --git a/src/types/database.d.ts b/src/types/database.d.ts
index 3839c18..f39f1f2 100644
--- a/src/types/database.d.ts
+++ b/src/types/database.d.ts
@@ -1,6 +1,12 @@
-// @db-hash ae0b5b1d792b614db036441010965ace
+// @db-hash f82eb99171699f051830710c1f816b59
//该文件由脚本自动生成,请勿手动修改
+export interface _o_videoTrack_old_20260401 {
+ 'id'?: number;
+ 'projectId'?: number | null;
+ 'scriptId'?: number | null;
+ 'videoId'?: number | null;
+}
export interface memories {
'content': string;
'createTime': number;
@@ -217,11 +223,15 @@ export interface o_video {
export interface o_videoTrack {
'id'?: number;
'projectId'?: number | null;
+ 'prompt'?: string | null;
+ 'reason'?: string | null;
'scriptId'?: number | null;
+ 'state'?: string | null;
'videoId'?: number | null;
}
export interface DB {
+ "_o_videoTrack_old_20260401": _o_videoTrack_old_20260401;
"memories": memories;
"o_agentDeploy": o_agentDeploy;
"o_agentWorkData": o_agentWorkData;
From 4bc28804e51eb12538badfa7b92891f466973ee4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683>
Date: Wed, 1 Apr 2026 15:00:12 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=90=AF=E7=94=A8?=
=?UTF-8?q?=E7=A6=81=E7=94=A8=E4=BE=9B=E5=BA=94=E5=95=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/lib/initDB.ts | 1 +
src/router.ts | 40 ++++++++++---------
.../vendorConfig/enableEnglishVendor.ts | 19 +++++++++
src/types/database.d.ts | 24 ++++++-----
4 files changed, 55 insertions(+), 29 deletions(-)
create mode 100644 src/routes/setting/vendorConfig/enableEnglishVendor.ts
diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts
index 892fead..83aca7c 100644
--- a/src/lib/initDB.ts
+++ b/src/lib/initDB.ts
@@ -556,6 +556,7 @@ description: 专注于从剧本内容中提取所使用的资产(角色、场
table.text("inputValues"); // 输入项值 JSON
table.text("models"); // 模型配置 JSON
table.text("code"); // 模型配置 JSON
+ table.integer("enableEnglish"); //是否启用供应商
table.integer("createTime");
table.primary(["id"]);
table.unique(["id"]);
diff --git a/src/router.ts b/src/router.ts
index 474e684..f73f1df 100644
--- a/src/router.ts
+++ b/src/router.ts
@@ -1,4 +1,4 @@
-// @routes-hash 39d27430eb844d91284da0877818f52f
+// @routes-hash 5706a0a0e92e01c81f14f8f49c9f837c
import { Express } from "express";
import route1 from "./routes/agents/clearMemory";
@@ -118,15 +118,16 @@ import route114 from "./routes/setting/skillManagement/getSkillList";
import route115 from "./routes/setting/skillManagement/saveSkillContent";
import route116 from "./routes/setting/vendorConfig/addVendor";
import route117 from "./routes/setting/vendorConfig/deleteVendor";
-import route118 from "./routes/setting/vendorConfig/getVendorList";
-import route119 from "./routes/setting/vendorConfig/modelTest";
-import route120 from "./routes/setting/vendorConfig/updateCode";
-import route121 from "./routes/setting/vendorConfig/updateVendor";
-import route122 from "./routes/task/getProject";
-import route123 from "./routes/task/getTaskApi";
-import route124 from "./routes/task/getTaskCategories";
-import route125 from "./routes/task/taskDetails";
-import route126 from "./routes/test/test";
+import route118 from "./routes/setting/vendorConfig/enableEnglishVendor";
+import route119 from "./routes/setting/vendorConfig/getVendorList";
+import route120 from "./routes/setting/vendorConfig/modelTest";
+import route121 from "./routes/setting/vendorConfig/updateCode";
+import route122 from "./routes/setting/vendorConfig/updateVendor";
+import route123 from "./routes/task/getProject";
+import route124 from "./routes/task/getTaskApi";
+import route125 from "./routes/task/getTaskCategories";
+import route126 from "./routes/task/taskDetails";
+import route127 from "./routes/test/test";
export default async (app: Express) => {
app.use("/api/agents/clearMemory", route1);
@@ -246,13 +247,14 @@ export default async (app: Express) => {
app.use("/api/setting/skillManagement/saveSkillContent", route115);
app.use("/api/setting/vendorConfig/addVendor", route116);
app.use("/api/setting/vendorConfig/deleteVendor", route117);
- app.use("/api/setting/vendorConfig/getVendorList", route118);
- app.use("/api/setting/vendorConfig/modelTest", route119);
- app.use("/api/setting/vendorConfig/updateCode", route120);
- app.use("/api/setting/vendorConfig/updateVendor", route121);
- app.use("/api/task/getProject", route122);
- app.use("/api/task/getTaskApi", route123);
- app.use("/api/task/getTaskCategories", route124);
- app.use("/api/task/taskDetails", route125);
- app.use("/api/test/test", route126);
+ app.use("/api/setting/vendorConfig/enableEnglishVendor", route118);
+ app.use("/api/setting/vendorConfig/getVendorList", route119);
+ app.use("/api/setting/vendorConfig/modelTest", route120);
+ app.use("/api/setting/vendorConfig/updateCode", route121);
+ app.use("/api/setting/vendorConfig/updateVendor", route122);
+ app.use("/api/task/getProject", route123);
+ app.use("/api/task/getTaskApi", route124);
+ app.use("/api/task/getTaskCategories", route125);
+ app.use("/api/task/taskDetails", route126);
+ app.use("/api/test/test", route127);
}
diff --git a/src/routes/setting/vendorConfig/enableEnglishVendor.ts b/src/routes/setting/vendorConfig/enableEnglishVendor.ts
new file mode 100644
index 0000000..dc51d4a
--- /dev/null
+++ b/src/routes/setting/vendorConfig/enableEnglishVendor.ts
@@ -0,0 +1,19 @@
+import express from "express";
+import { success, error } from "@/lib/responseFormat";
+import { validateFields } from "@/middleware/middleware";
+import u from "@/utils";
+import { z } from "zod";
+const router = express.Router();
+export default router.post(
+ "/",
+ validateFields({
+ id: z.string(),
+ }),
+ async (req, res) => {
+ const { id, enableEnglish } = req.body;
+ await u.db("o_vendorConfig").where("id", id).update({
+ enableEnglish,
+ });
+ res.status(200).send(success("更新成功"));
+ },
+);
diff --git a/src/types/database.d.ts b/src/types/database.d.ts
index f39f1f2..0139e28 100644
--- a/src/types/database.d.ts
+++ b/src/types/database.d.ts
@@ -1,11 +1,17 @@
-// @db-hash f82eb99171699f051830710c1f816b59
+// @db-hash a27fff5b05e1c9ef490898f17703079a
//该文件由脚本自动生成,请勿手动修改
-export interface _o_videoTrack_old_20260401 {
- 'id'?: number;
- 'projectId'?: number | null;
- 'scriptId'?: number | null;
- 'videoId'?: number | null;
+export interface _o_vendorConfig_old_20260401 {
+ 'author'?: string | null;
+ 'code'?: string | null;
+ 'createTime'?: number | null;
+ 'description'?: string | null;
+ 'icon'?: string | null;
+ 'id'?: string;
+ 'inputs'?: string | null;
+ 'inputValues'?: string | null;
+ 'models'?: string | null;
+ 'name'?: string | null;
}
export interface memories {
'content': string;
@@ -203,6 +209,7 @@ export interface o_vendorConfig {
'code'?: string | null;
'createTime'?: number | null;
'description'?: string | null;
+ 'enableEnglish'?: number | null;
'icon'?: string | null;
'id'?: string;
'inputs'?: string | null;
@@ -223,15 +230,12 @@ export interface o_video {
export interface o_videoTrack {
'id'?: number;
'projectId'?: number | null;
- 'prompt'?: string | null;
- 'reason'?: string | null;
'scriptId'?: number | null;
- 'state'?: string | null;
'videoId'?: number | null;
}
export interface DB {
- "_o_videoTrack_old_20260401": _o_videoTrack_old_20260401;
+ "_o_vendorConfig_old_20260401": _o_vendorConfig_old_20260401;
"memories": memories;
"o_agentDeploy": o_agentDeploy;
"o_agentWorkData": o_agentWorkData;
From 42955a6b2d7b0087094dd36cb03c764a86d84c37 Mon Sep 17 00:00:00 2001
From: zhishi <1951671751@qq.com>
Date: Wed, 1 Apr 2026 15:05:10 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E5=9B=BE=E7=89=87=E7=BC=96=E8=BE=91?=
=?UTF-8?q?=E9=87=8D=E5=86=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/router.ts | 320 +++++++++---------
.../assets/batchGenerateAssetsImage.ts | 2 +-
.../production/assets/updateAssetsUrl.ts | 26 ++
...aultProject.ts => getImageDefaultModle.ts} | 1 -
src/routes/production/getFlowData.ts | 4 +-
src/routes/script/extractAssets.ts | 23 +-
6 files changed, 203 insertions(+), 173 deletions(-)
create mode 100644 src/routes/production/assets/updateAssetsUrl.ts
rename src/routes/production/editImage/{getDefaultProject.ts => getImageDefaultModle.ts} (99%)
diff --git a/src/router.ts b/src/router.ts
index 474e684..6ab4ca8 100644
--- a/src/router.ts
+++ b/src/router.ts
@@ -1,4 +1,4 @@
-// @routes-hash 39d27430eb844d91284da0877818f52f
+// @routes-hash f45d740a638124d31e8f3a4ff25493ba
import { Express } from "express";
import route1 from "./routes/agents/clearMemory";
@@ -48,85 +48,86 @@ import route44 from "./routes/other/getVersion";
import route45 from "./routes/production/assets/batchGenerateAssetsImage";
import route46 from "./routes/production/assets/getAssetsData";
import route47 from "./routes/production/assets/pollingImage";
-import route48 from "./routes/production/editImage/generateFlowImage";
-import route49 from "./routes/production/editImage/getDefaultProject";
-import route50 from "./routes/production/editImage/getImageFlow";
-import route51 from "./routes/production/editImage/saveImageFlow";
-import route52 from "./routes/production/editImage/updateImageFlow";
-import route53 from "./routes/production/exportImage";
-import route54 from "./routes/production/getFlowData";
-import route55 from "./routes/production/getProductionData";
-import route56 from "./routes/production/getStoryboardData";
-import route57 from "./routes/production/saveFlowData";
-import route58 from "./routes/production/storyboard/addStoryboard";
-import route59 from "./routes/production/storyboard/batchAddStoryboardInfo";
-import route60 from "./routes/production/storyboard/batchGenerateImage";
-import route61 from "./routes/production/storyboard/downPreviewImage";
-import route62 from "./routes/production/storyboard/editStoryboardInfo";
-import route63 from "./routes/production/storyboard/getStoryboardData";
-import route64 from "./routes/production/storyboard/pollingImage";
-import route65 from "./routes/production/storyboard/previewImage";
-import route66 from "./routes/production/storyboard/removeFrame";
-import route67 from "./routes/production/storyboard/updateStoryboardUrl";
-import route68 from "./routes/production/workbench/addTrack";
-import route69 from "./routes/production/workbench/confirmSelection";
-import route70 from "./routes/production/workbench/delVideo";
-import route71 from "./routes/production/workbench/generateVideo";
-import route72 from "./routes/production/workbench/generateVideoPrompt";
-import route73 from "./routes/production/workbench/getGenerateData";
-import route74 from "./routes/production/workbench/getVideoModelDetail";
-import route75 from "./routes/production/workbench/videoPolling";
-import route76 from "./routes/project/addProject";
-import route77 from "./routes/project/addVisual";
-import route78 from "./routes/project/addVisualManual";
-import route79 from "./routes/project/deleteVisualManual";
-import route80 from "./routes/project/delProject";
-import route81 from "./routes/project/editProject";
-import route82 from "./routes/project/editVisualManual";
-import route83 from "./routes/project/getProject";
-import route84 from "./routes/project/getVisualManual";
-import route85 from "./routes/project/visualManual";
-import route86 from "./routes/script/addScript";
-import route87 from "./routes/script/delScript";
-import route88 from "./routes/script/exportScript";
-import route89 from "./routes/script/extractAssets";
-import route90 from "./routes/script/getScrptApi";
-import route91 from "./routes/script/pollScriptAssets";
-import route92 from "./routes/script/updateScript";
-import route93 from "./routes/scriptAgent/getPlanData";
-import route94 from "./routes/scriptAgent/setPlanData";
-import route95 from "./routes/scriptAgent/updateData";
-import route96 from "./routes/setting/about/checkUpdate";
-import route97 from "./routes/setting/about/downloadApp";
-import route98 from "./routes/setting/agentDeploy/agentSetKey";
-import route99 from "./routes/setting/agentDeploy/deployAgentModel";
-import route100 from "./routes/setting/agentDeploy/getAgentDeploy";
-import route101 from "./routes/setting/dbConfig/clearData";
-import route102 from "./routes/setting/dev/getSwitchAiDevTool";
-import route103 from "./routes/setting/dev/updateSwitchAiDevTool";
-import route104 from "./routes/setting/fileManagement/openFolder";
-import route105 from "./routes/setting/getTextModel";
-import route106 from "./routes/setting/loginConfig/getUser";
-import route107 from "./routes/setting/loginConfig/updateUserPwd";
-import route108 from "./routes/setting/memoryConfig/delAllMemory";
-import route109 from "./routes/setting/memoryConfig/getMemory";
-import route110 from "./routes/setting/memoryConfig/sureMemory";
-import route111 from "./routes/setting/promptManage/getPrompt";
-import route112 from "./routes/setting/promptManage/updatePrompt";
-import route113 from "./routes/setting/skillManagement/getSkillContent";
-import route114 from "./routes/setting/skillManagement/getSkillList";
-import route115 from "./routes/setting/skillManagement/saveSkillContent";
-import route116 from "./routes/setting/vendorConfig/addVendor";
-import route117 from "./routes/setting/vendorConfig/deleteVendor";
-import route118 from "./routes/setting/vendorConfig/getVendorList";
-import route119 from "./routes/setting/vendorConfig/modelTest";
-import route120 from "./routes/setting/vendorConfig/updateCode";
-import route121 from "./routes/setting/vendorConfig/updateVendor";
-import route122 from "./routes/task/getProject";
-import route123 from "./routes/task/getTaskApi";
-import route124 from "./routes/task/getTaskCategories";
-import route125 from "./routes/task/taskDetails";
-import route126 from "./routes/test/test";
+import route48 from "./routes/production/assets/updateAssetsUrl";
+import route49 from "./routes/production/editImage/generateFlowImage";
+import route50 from "./routes/production/editImage/getImageDefaultModle";
+import route51 from "./routes/production/editImage/getImageFlow";
+import route52 from "./routes/production/editImage/saveImageFlow";
+import route53 from "./routes/production/editImage/updateImageFlow";
+import route54 from "./routes/production/exportImage";
+import route55 from "./routes/production/getFlowData";
+import route56 from "./routes/production/getProductionData";
+import route57 from "./routes/production/getStoryboardData";
+import route58 from "./routes/production/saveFlowData";
+import route59 from "./routes/production/storyboard/addStoryboard";
+import route60 from "./routes/production/storyboard/batchAddStoryboardInfo";
+import route61 from "./routes/production/storyboard/batchGenerateImage";
+import route62 from "./routes/production/storyboard/downPreviewImage";
+import route63 from "./routes/production/storyboard/editStoryboardInfo";
+import route64 from "./routes/production/storyboard/getStoryboardData";
+import route65 from "./routes/production/storyboard/pollingImage";
+import route66 from "./routes/production/storyboard/previewImage";
+import route67 from "./routes/production/storyboard/removeFrame";
+import route68 from "./routes/production/storyboard/updateStoryboardUrl";
+import route69 from "./routes/production/workbench/addTrack";
+import route70 from "./routes/production/workbench/confirmSelection";
+import route71 from "./routes/production/workbench/delVideo";
+import route72 from "./routes/production/workbench/generateVideo";
+import route73 from "./routes/production/workbench/generateVideoPrompt";
+import route74 from "./routes/production/workbench/getGenerateData";
+import route75 from "./routes/production/workbench/getVideoModelDetail";
+import route76 from "./routes/production/workbench/videoPolling";
+import route77 from "./routes/project/addProject";
+import route78 from "./routes/project/addVisual";
+import route79 from "./routes/project/addVisualManual";
+import route80 from "./routes/project/deleteVisualManual";
+import route81 from "./routes/project/delProject";
+import route82 from "./routes/project/editProject";
+import route83 from "./routes/project/editVisualManual";
+import route84 from "./routes/project/getProject";
+import route85 from "./routes/project/getVisualManual";
+import route86 from "./routes/project/visualManual";
+import route87 from "./routes/script/addScript";
+import route88 from "./routes/script/delScript";
+import route89 from "./routes/script/exportScript";
+import route90 from "./routes/script/extractAssets";
+import route91 from "./routes/script/getScrptApi";
+import route92 from "./routes/script/pollScriptAssets";
+import route93 from "./routes/script/updateScript";
+import route94 from "./routes/scriptAgent/getPlanData";
+import route95 from "./routes/scriptAgent/setPlanData";
+import route96 from "./routes/scriptAgent/updateData";
+import route97 from "./routes/setting/about/checkUpdate";
+import route98 from "./routes/setting/about/downloadApp";
+import route99 from "./routes/setting/agentDeploy/agentSetKey";
+import route100 from "./routes/setting/agentDeploy/deployAgentModel";
+import route101 from "./routes/setting/agentDeploy/getAgentDeploy";
+import route102 from "./routes/setting/dbConfig/clearData";
+import route103 from "./routes/setting/dev/getSwitchAiDevTool";
+import route104 from "./routes/setting/dev/updateSwitchAiDevTool";
+import route105 from "./routes/setting/fileManagement/openFolder";
+import route106 from "./routes/setting/getTextModel";
+import route107 from "./routes/setting/loginConfig/getUser";
+import route108 from "./routes/setting/loginConfig/updateUserPwd";
+import route109 from "./routes/setting/memoryConfig/delAllMemory";
+import route110 from "./routes/setting/memoryConfig/getMemory";
+import route111 from "./routes/setting/memoryConfig/sureMemory";
+import route112 from "./routes/setting/promptManage/getPrompt";
+import route113 from "./routes/setting/promptManage/updatePrompt";
+import route114 from "./routes/setting/skillManagement/getSkillContent";
+import route115 from "./routes/setting/skillManagement/getSkillList";
+import route116 from "./routes/setting/skillManagement/saveSkillContent";
+import route117 from "./routes/setting/vendorConfig/addVendor";
+import route118 from "./routes/setting/vendorConfig/deleteVendor";
+import route119 from "./routes/setting/vendorConfig/getVendorList";
+import route120 from "./routes/setting/vendorConfig/modelTest";
+import route121 from "./routes/setting/vendorConfig/updateCode";
+import route122 from "./routes/setting/vendorConfig/updateVendor";
+import route123 from "./routes/task/getProject";
+import route124 from "./routes/task/getTaskApi";
+import route125 from "./routes/task/getTaskCategories";
+import route126 from "./routes/task/taskDetails";
+import route127 from "./routes/test/test";
export default async (app: Express) => {
app.use("/api/agents/clearMemory", route1);
@@ -176,83 +177,84 @@ export default async (app: Express) => {
app.use("/api/production/assets/batchGenerateAssetsImage", route45);
app.use("/api/production/assets/getAssetsData", route46);
app.use("/api/production/assets/pollingImage", route47);
- app.use("/api/production/editImage/generateFlowImage", route48);
- app.use("/api/production/editImage/getDefaultProject", route49);
- app.use("/api/production/editImage/getImageFlow", route50);
- app.use("/api/production/editImage/saveImageFlow", route51);
- app.use("/api/production/editImage/updateImageFlow", route52);
- app.use("/api/production/exportImage", route53);
- app.use("/api/production/getFlowData", route54);
- app.use("/api/production/getProductionData", route55);
- app.use("/api/production/getStoryboardData", route56);
- app.use("/api/production/saveFlowData", route57);
- app.use("/api/production/storyboard/addStoryboard", route58);
- app.use("/api/production/storyboard/batchAddStoryboardInfo", route59);
- app.use("/api/production/storyboard/batchGenerateImage", route60);
- app.use("/api/production/storyboard/downPreviewImage", route61);
- app.use("/api/production/storyboard/editStoryboardInfo", route62);
- app.use("/api/production/storyboard/getStoryboardData", route63);
- app.use("/api/production/storyboard/pollingImage", route64);
- app.use("/api/production/storyboard/previewImage", route65);
- app.use("/api/production/storyboard/removeFrame", route66);
- app.use("/api/production/storyboard/updateStoryboardUrl", route67);
- app.use("/api/production/workbench/addTrack", route68);
- app.use("/api/production/workbench/confirmSelection", route69);
- app.use("/api/production/workbench/delVideo", route70);
- app.use("/api/production/workbench/generateVideo", route71);
- app.use("/api/production/workbench/generateVideoPrompt", route72);
- app.use("/api/production/workbench/getGenerateData", route73);
- app.use("/api/production/workbench/getVideoModelDetail", route74);
- app.use("/api/production/workbench/videoPolling", route75);
- app.use("/api/project/addProject", route76);
- app.use("/api/project/addVisual", route77);
- app.use("/api/project/addVisualManual", route78);
- app.use("/api/project/deleteVisualManual", route79);
- app.use("/api/project/delProject", route80);
- app.use("/api/project/editProject", route81);
- app.use("/api/project/editVisualManual", route82);
- app.use("/api/project/getProject", route83);
- app.use("/api/project/getVisualManual", route84);
- app.use("/api/project/visualManual", route85);
- app.use("/api/script/addScript", route86);
- app.use("/api/script/delScript", route87);
- app.use("/api/script/exportScript", route88);
- app.use("/api/script/extractAssets", route89);
- app.use("/api/script/getScrptApi", route90);
- app.use("/api/script/pollScriptAssets", route91);
- app.use("/api/script/updateScript", route92);
- app.use("/api/scriptAgent/getPlanData", route93);
- app.use("/api/scriptAgent/setPlanData", route94);
- app.use("/api/scriptAgent/updateData", route95);
- app.use("/api/setting/about/checkUpdate", route96);
- app.use("/api/setting/about/downloadApp", route97);
- app.use("/api/setting/agentDeploy/agentSetKey", route98);
- app.use("/api/setting/agentDeploy/deployAgentModel", route99);
- app.use("/api/setting/agentDeploy/getAgentDeploy", route100);
- app.use("/api/setting/dbConfig/clearData", route101);
- app.use("/api/setting/dev/getSwitchAiDevTool", route102);
- app.use("/api/setting/dev/updateSwitchAiDevTool", route103);
- app.use("/api/setting/fileManagement/openFolder", route104);
- app.use("/api/setting/getTextModel", route105);
- app.use("/api/setting/loginConfig/getUser", route106);
- app.use("/api/setting/loginConfig/updateUserPwd", route107);
- app.use("/api/setting/memoryConfig/delAllMemory", route108);
- app.use("/api/setting/memoryConfig/getMemory", route109);
- app.use("/api/setting/memoryConfig/sureMemory", route110);
- app.use("/api/setting/promptManage/getPrompt", route111);
- app.use("/api/setting/promptManage/updatePrompt", route112);
- app.use("/api/setting/skillManagement/getSkillContent", route113);
- app.use("/api/setting/skillManagement/getSkillList", route114);
- app.use("/api/setting/skillManagement/saveSkillContent", route115);
- app.use("/api/setting/vendorConfig/addVendor", route116);
- app.use("/api/setting/vendorConfig/deleteVendor", route117);
- app.use("/api/setting/vendorConfig/getVendorList", route118);
- app.use("/api/setting/vendorConfig/modelTest", route119);
- app.use("/api/setting/vendorConfig/updateCode", route120);
- app.use("/api/setting/vendorConfig/updateVendor", route121);
- app.use("/api/task/getProject", route122);
- app.use("/api/task/getTaskApi", route123);
- app.use("/api/task/getTaskCategories", route124);
- app.use("/api/task/taskDetails", route125);
- app.use("/api/test/test", route126);
+ app.use("/api/production/assets/updateAssetsUrl", route48);
+ app.use("/api/production/editImage/generateFlowImage", route49);
+ app.use("/api/production/editImage/getImageDefaultModle", route50);
+ app.use("/api/production/editImage/getImageFlow", route51);
+ app.use("/api/production/editImage/saveImageFlow", route52);
+ app.use("/api/production/editImage/updateImageFlow", route53);
+ app.use("/api/production/exportImage", route54);
+ app.use("/api/production/getFlowData", route55);
+ app.use("/api/production/getProductionData", route56);
+ app.use("/api/production/getStoryboardData", route57);
+ app.use("/api/production/saveFlowData", route58);
+ app.use("/api/production/storyboard/addStoryboard", route59);
+ app.use("/api/production/storyboard/batchAddStoryboardInfo", route60);
+ app.use("/api/production/storyboard/batchGenerateImage", route61);
+ app.use("/api/production/storyboard/downPreviewImage", route62);
+ app.use("/api/production/storyboard/editStoryboardInfo", route63);
+ app.use("/api/production/storyboard/getStoryboardData", route64);
+ app.use("/api/production/storyboard/pollingImage", route65);
+ app.use("/api/production/storyboard/previewImage", route66);
+ app.use("/api/production/storyboard/removeFrame", route67);
+ app.use("/api/production/storyboard/updateStoryboardUrl", route68);
+ app.use("/api/production/workbench/addTrack", route69);
+ app.use("/api/production/workbench/confirmSelection", route70);
+ app.use("/api/production/workbench/delVideo", route71);
+ app.use("/api/production/workbench/generateVideo", route72);
+ app.use("/api/production/workbench/generateVideoPrompt", route73);
+ app.use("/api/production/workbench/getGenerateData", route74);
+ app.use("/api/production/workbench/getVideoModelDetail", route75);
+ app.use("/api/production/workbench/videoPolling", route76);
+ app.use("/api/project/addProject", route77);
+ app.use("/api/project/addVisual", route78);
+ app.use("/api/project/addVisualManual", route79);
+ app.use("/api/project/deleteVisualManual", route80);
+ app.use("/api/project/delProject", route81);
+ app.use("/api/project/editProject", route82);
+ app.use("/api/project/editVisualManual", route83);
+ app.use("/api/project/getProject", route84);
+ app.use("/api/project/getVisualManual", route85);
+ app.use("/api/project/visualManual", route86);
+ app.use("/api/script/addScript", route87);
+ app.use("/api/script/delScript", route88);
+ app.use("/api/script/exportScript", route89);
+ app.use("/api/script/extractAssets", route90);
+ app.use("/api/script/getScrptApi", route91);
+ app.use("/api/script/pollScriptAssets", route92);
+ app.use("/api/script/updateScript", route93);
+ app.use("/api/scriptAgent/getPlanData", route94);
+ app.use("/api/scriptAgent/setPlanData", route95);
+ app.use("/api/scriptAgent/updateData", route96);
+ app.use("/api/setting/about/checkUpdate", route97);
+ app.use("/api/setting/about/downloadApp", route98);
+ app.use("/api/setting/agentDeploy/agentSetKey", route99);
+ app.use("/api/setting/agentDeploy/deployAgentModel", route100);
+ app.use("/api/setting/agentDeploy/getAgentDeploy", route101);
+ app.use("/api/setting/dbConfig/clearData", route102);
+ app.use("/api/setting/dev/getSwitchAiDevTool", route103);
+ app.use("/api/setting/dev/updateSwitchAiDevTool", route104);
+ app.use("/api/setting/fileManagement/openFolder", route105);
+ app.use("/api/setting/getTextModel", route106);
+ app.use("/api/setting/loginConfig/getUser", route107);
+ app.use("/api/setting/loginConfig/updateUserPwd", route108);
+ app.use("/api/setting/memoryConfig/delAllMemory", route109);
+ app.use("/api/setting/memoryConfig/getMemory", route110);
+ app.use("/api/setting/memoryConfig/sureMemory", route111);
+ app.use("/api/setting/promptManage/getPrompt", route112);
+ app.use("/api/setting/promptManage/updatePrompt", route113);
+ app.use("/api/setting/skillManagement/getSkillContent", route114);
+ app.use("/api/setting/skillManagement/getSkillList", route115);
+ app.use("/api/setting/skillManagement/saveSkillContent", route116);
+ app.use("/api/setting/vendorConfig/addVendor", route117);
+ app.use("/api/setting/vendorConfig/deleteVendor", route118);
+ app.use("/api/setting/vendorConfig/getVendorList", route119);
+ app.use("/api/setting/vendorConfig/modelTest", route120);
+ app.use("/api/setting/vendorConfig/updateCode", route121);
+ app.use("/api/setting/vendorConfig/updateVendor", route122);
+ app.use("/api/task/getProject", route123);
+ app.use("/api/task/getTaskApi", route124);
+ app.use("/api/task/getTaskCategories", route125);
+ app.use("/api/task/taskDetails", route126);
+ app.use("/api/test/test", route127);
}
diff --git a/src/routes/production/assets/batchGenerateAssetsImage.ts b/src/routes/production/assets/batchGenerateAssetsImage.ts
index 9ba69a9..5ba4f67 100644
--- a/src/routes/production/assets/batchGenerateAssetsImage.ts
+++ b/src/routes/production/assets/batchGenerateAssetsImage.ts
@@ -96,7 +96,7 @@ export default router.post(
const savePath = `/${projectId}/assets/${scriptId}/${u.uuid()}.jpg`;
await imageCls.save(savePath);
// 更新对应数据库
- await u.db("o_assets").where("id", item.id).update({ imageId: imageId });
+ await u.db("o_assets").where("id", item.id).update({ imageId: imageId, prompt: text });
await u.db("o_image").where({ id: imageId }).update({ state: "已完成", filePath: savePath });
imageData.push({
id: item.id,
diff --git a/src/routes/production/assets/updateAssetsUrl.ts b/src/routes/production/assets/updateAssetsUrl.ts
new file mode 100644
index 0000000..6317e83
--- /dev/null
+++ b/src/routes/production/assets/updateAssetsUrl.ts
@@ -0,0 +1,26 @@
+import express from "express";
+import u from "@/utils";
+import { z } from "zod";
+import { success } from "@/lib/responseFormat";
+import { validateFields } from "@/middleware/middleware";
+import { id } from "zod/locales";
+const router = express.Router();
+
+export default router.post(
+ "/",
+ validateFields({
+ id: z.number(),
+ url: z.string(),
+ flowId: z.number(),
+ }),
+ async (req, res) => {
+ const { id, url, flowId } = req.body;
+ const [imageId] = await u.db("o_image").insert({
+ filePath: new URL(url).pathname,
+ state: "已完成",
+ assetsId: id,
+ });
+ await u.db("o_assets").where({ id }).update({ flowId, imageId });
+ res.status(200).send(success({ message: "更新提示词成功" }));
+ },
+);
diff --git a/src/routes/production/editImage/getDefaultProject.ts b/src/routes/production/editImage/getImageDefaultModle.ts
similarity index 99%
rename from src/routes/production/editImage/getDefaultProject.ts
rename to src/routes/production/editImage/getImageDefaultModle.ts
index 6395cd2..02fa86d 100644
--- a/src/routes/production/editImage/getDefaultProject.ts
+++ b/src/routes/production/editImage/getImageDefaultModle.ts
@@ -13,7 +13,6 @@ export default router.post(
async (req, res) => {
const { projectId } = req.body;
const imageFlowData = await u.db("o_project").where("id", projectId).select("imageModel", "imageQuality").first();
-
return res.status(200).send(success(imageFlowData));
},
);
diff --git a/src/routes/production/getFlowData.ts b/src/routes/production/getFlowData.ts
index f73749b..c6d1a70 100644
--- a/src/routes/production/getFlowData.ts
+++ b/src/routes/production/getFlowData.ts
@@ -27,7 +27,7 @@ export default router.post(
const assetsData = await u
.db("o_assets")
.leftJoin("o_image", "o_assets.imageId", "o_image.id")
- .select("o_assets.*", "o_image.filePath")
+ .select("o_assets.*", "o_image.filePath", "o_image.state")
// @ts-ignore
.where("o_assets.id", "in", assetIds)
.whereNull("o_assets.assetsId")
@@ -35,7 +35,7 @@ export default router.post(
let childAssetsData = await u
.db("o_assets")
.leftJoin("o_image", "o_assets.imageId", "o_image.id")
- .select("o_assets.*", "o_image.filePath")
+ .select("o_assets.*", "o_image.filePath", "o_image.state")
.where("o_assets.projectId", projectId)
// @ts-ignore
.where("o_assets.id", "in", assetIds)
diff --git a/src/routes/script/extractAssets.ts b/src/routes/script/extractAssets.ts
index d666584..33219a2 100644
--- a/src/routes/script/extractAssets.ts
+++ b/src/routes/script/extractAssets.ts
@@ -61,13 +61,12 @@ export default router.post(
if (!scriptIds.length) return res.status(400).send(error("请先选择剧本"));
const scripts = await u.db("o_script").whereIn("id", scriptIds);
- const intansce = u.Ai.Text("universalAi");
// 构建 scriptId -> script 内容的映射
const scriptMap = new Map(scripts.map((s: o_script) => [s.id, s]));
await u.db("o_script").whereIn("id", scriptIds).update({
- extractState: 0,
+ extractState: 2,
});
const errors: { scriptId: number; error: string }[] = [];
@@ -139,7 +138,7 @@ export default router.post(
errorReason: null,
});
}
-
+ res.send(success("开始提取资产"));
// 逐组处理(每组最多 groupSize 集剧本一起发给 AI)
for (const group of scriptGroups) {
// 过滤有效剧本
@@ -150,11 +149,19 @@ export default router.post(
errors.push({ scriptId, error: "未找到对应剧本" });
await u.db("o_script").where("id", scriptId).update({ extractState: -1, errorReason: "未找到对应剧本" });
} else {
- validScripts.push({ id: scriptId, script });
+ // 查看状态是否为等待提取,仅对等待提取进行生成
+ const item = await u.db("o_script").where("id", scriptId).select("extractState").first();
+ if (item?.extractState == 2) {
+ validScripts.push({ id: scriptId, script });
+ }
}
}
if (!validScripts.length) continue;
-
+ const validScriptIds = validScripts.map((v) => v.id);
+ // 修改状态为正在提取中
+ await u.db("o_script").whereIn("id", validScriptIds).update({
+ extractState: 0, // 正在提取
+ });
// 查询当前项目已有的资产列表,提供给 AI 参考
const existingAssets = await u.db("o_assets").where("projectId", projectId).select("name", "type");
const existingAssetsList = existingAssets.map((a) => `${a.name}(${a.type})`).join("、");
@@ -164,8 +171,6 @@ export default router.post(
.map(({ id, script }) => `===== 【剧本ID: ${id}】${script.name || ""} =====\n${script.content}`)
.join("\n\n");
- const validScriptIds = validScripts.map((v) => v.id);
-
// 用闭包收集 AI 返回的资产
let collectedNew: NewAsset[] = [];
let collectedExisting: ExistingAssetRef[] = [];
@@ -194,7 +199,7 @@ export default router.post(
? `\n\n【已有资产列表】:${existingAssetsList}\n对于已有资产,如果在剧本中出现,只需在 existingAssetRefs 中给出资产名称和对应的 scriptIds 数组即可,无需重复生成 desc/type。对于新发现的资产(不在已有列表中),请在 newAssets 中给出完整信息。`
: "";
- const output = await intansce.invoke({
+ const output = await u.Ai.Text("universalAi").invoke({
messages: [
{
role: "system",
@@ -242,7 +247,5 @@ export default router.post(
existingRefs: collectedExisting,
});
}
-
- return res.send(success("开始提取资产"));
},
);