diff --git a/data/skills/production_agent_decision.md b/data/skills/production_agent_decision.md index 6c23eaa..055f210 100644 --- a/data/skills/production_agent_decision.md +++ b/data/skills/production_agent_decision.md @@ -104,17 +104,27 @@ --- -### 阶段5:生成分镜 +### 阶段5:构建分镜面板 + +| 项 | 说明 | +|----|------| +| 派发 | 执行层调将分镜表拆分生成分镜面板 | +| 输出 | 生成的分镜面板 | +| 前置条件 | 阶段4完成且用户确认 | +| 审核 | 不需要 | + + +### 阶段6:生成分镜 | 项 | 说明 | |----|------| | 派发 | 执行层调用图片生成接口生成分镜图片 | | 输出 | 生成的分镜图片 | -| 前置条件 | 阶段4完成且用户确认 | +| 前置条件 | 阶段5完成且用户确认 | | 审核 | 不需要 | +**阶段特有约束:** `generate_storyboard_images({ ids: [真实分镜ID列表] })` 中的 ids参数 必须指向分镜面板中实际存在的分镜Id。 **决策层行为:** 执行层返回确认后,告知用户图片生成已启动,流程结束。 - --- ## 调度与派发规范 diff --git a/data/skills/production_agent_execution.md b/data/skills/production_agent_execution.md index e4dd8ac..6b3f39f 100644 --- a/data/skills/production_agent_execution.md +++ b/data/skills/production_agent_execution.md @@ -386,14 +386,18 @@ add_deriveAsset({ | 操作 | 调用 | |------|------| | 读取剧本 | `get_flowData("script")` | -| 生成图片 | `generate_storyboard_images({ script: 剧本文本 })` | +| 读取分镜表 | `get_flowData("stoaryTable")` | +| 读取分镜面板 | `get_flowData("storyboard")` | +| 生成图片 | `generate_storyboard_images({ ids: [分镜ID列表] })` | ### 执行流程 -1. 获取 `script` -2. 调用 `generate_storyboard_images({ script: 剧本文本 })` 生成分镜图片(异步,发起即返回) +1. 获取 `script` 、`stoaryTable` +2. 使用XML格式写入工作区分镜面板: +3. 先获取 `storyboard`数据 再调用 `generate_storyboard_images({ ids: [真实分镜ID列表] })` 生成分镜图片(异步,发起即返回) ### 约束 - 前置条件:分镜表已构建完成且用户已确认 - 图片必须与分镜描述匹配 +- 你必须使用XML格式写入工作区分镜面板: \ No newline at end of file diff --git a/src/agents/productionAgent/tools.ts b/src/agents/productionAgent/tools.ts index 96e1888..8ab625a 100644 --- a/src/agents/productionAgent/tools.ts +++ b/src/agents/productionAgent/tools.ts @@ -24,22 +24,11 @@ export const assetItemSchema = z.object({ }); const storyboardSchema = z.object({ id: z.number().describe("分镜ID,必须为真实id"), - title: z.string().describe("分镜标题"), - description: z.string().describe("分镜描述"), - camera: z.string().describe("镜头信息"), duration: z.number().describe("持续时长(秒)"), - frameMode: z.enum(["firstFrame", "endFrame", "linesSoundEffects"]).describe("帧模式: 首帧/尾帧/台词音效"), prompt: z.string().describe("生成提示词"), - lines: z.string().nullable().describe("台词内容"), - sound: z.string().nullable().describe("音效内容"), - mode: z - .union([ - z.enum(["singleImage", "multiImage", "gridImage", "startEndRequired", "endFrameOptional", "startFrameOptional", "text"]), - z.array(z.enum(["video", "image", "audio", "text"])), - ]) - .describe("视频模式"), associateAssetsIds: z.array(z.number()).describe("关联资产ID列表"), src: z.string().nullable().describe("分镜资源路径"), + index: z.number().nullable().optional().describe("分镜排序字段"), }); const workbenchDataSchema = z.object({ name: z.string().describe("项目名称"), diff --git a/src/router.ts b/src/router.ts index c8ad382..474e684 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 980d27529637eef85c489c16b08c445a +// @routes-hash 39d27430eb844d91284da0877818f52f import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -49,83 +49,84 @@ 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/getImageFlow"; -import route50 from "./routes/production/editImage/saveImageFlow"; -import route51 from "./routes/production/editImage/updateImageFlow"; -import route52 from "./routes/production/exportImage"; -import route53 from "./routes/production/getFlowData"; -import route54 from "./routes/production/getProductionData"; -import route55 from "./routes/production/getStoryboardData"; -import route56 from "./routes/production/saveFlowData"; -import route57 from "./routes/production/storyboard/addStoryboard"; -import route58 from "./routes/production/storyboard/batchAddStoryboardInfo"; -import route59 from "./routes/production/storyboard/batchGenerateImage"; -import route60 from "./routes/production/storyboard/downPreviewImage"; -import route61 from "./routes/production/storyboard/editStoryboardInfo"; -import route62 from "./routes/production/storyboard/getStoryboardData"; -import route63 from "./routes/production/storyboard/pollingImage"; -import route64 from "./routes/production/storyboard/previewImage"; -import route65 from "./routes/production/storyboard/removeFrame"; -import route66 from "./routes/production/storyboard/updateStoryboardUrl"; -import route67 from "./routes/production/workbench/addTrack"; -import route68 from "./routes/production/workbench/confirmSelection"; -import route69 from "./routes/production/workbench/delVideo"; -import route70 from "./routes/production/workbench/generateVideo"; -import route71 from "./routes/production/workbench/generateVideoPrompt"; -import route72 from "./routes/production/workbench/getGenerateData"; -import route73 from "./routes/production/workbench/getVideoModelDetail"; -import route74 from "./routes/production/workbench/videoPolling"; -import route75 from "./routes/project/addProject"; -import route76 from "./routes/project/addVisual"; -import route77 from "./routes/project/addVisualManual"; -import route78 from "./routes/project/deleteVisualManual"; -import route79 from "./routes/project/delProject"; -import route80 from "./routes/project/editProject"; -import route81 from "./routes/project/editVisualManual"; -import route82 from "./routes/project/getProject"; -import route83 from "./routes/project/getVisualManual"; -import route84 from "./routes/project/visualManual"; -import route85 from "./routes/script/addScript"; -import route86 from "./routes/script/delScript"; -import route87 from "./routes/script/exportScript"; -import route88 from "./routes/script/extractAssets"; -import route89 from "./routes/script/getScrptApi"; -import route90 from "./routes/script/pollScriptAssets"; -import route91 from "./routes/script/updateScript"; -import route92 from "./routes/scriptAgent/getPlanData"; -import route93 from "./routes/scriptAgent/setPlanData"; -import route94 from "./routes/scriptAgent/updateData"; -import route95 from "./routes/setting/about/checkUpdate"; -import route96 from "./routes/setting/about/downloadApp"; -import route97 from "./routes/setting/agentDeploy/agentSetKey"; -import route98 from "./routes/setting/agentDeploy/deployAgentModel"; -import route99 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route100 from "./routes/setting/dbConfig/clearData"; -import route101 from "./routes/setting/dev/getSwitchAiDevTool"; -import route102 from "./routes/setting/dev/updateSwitchAiDevTool"; -import route103 from "./routes/setting/fileManagement/openFolder"; -import route104 from "./routes/setting/getTextModel"; -import route105 from "./routes/setting/loginConfig/getUser"; -import route106 from "./routes/setting/loginConfig/updateUserPwd"; -import route107 from "./routes/setting/memoryConfig/delAllMemory"; -import route108 from "./routes/setting/memoryConfig/getMemory"; -import route109 from "./routes/setting/memoryConfig/sureMemory"; -import route110 from "./routes/setting/promptManage/getPrompt"; -import route111 from "./routes/setting/promptManage/updatePrompt"; -import route112 from "./routes/setting/skillManagement/getSkillContent"; -import route113 from "./routes/setting/skillManagement/getSkillList"; -import route114 from "./routes/setting/skillManagement/saveSkillContent"; -import route115 from "./routes/setting/vendorConfig/addVendor"; -import route116 from "./routes/setting/vendorConfig/deleteVendor"; -import route117 from "./routes/setting/vendorConfig/getVendorList"; -import route118 from "./routes/setting/vendorConfig/modelTest"; -import route119 from "./routes/setting/vendorConfig/updateCode"; -import route120 from "./routes/setting/vendorConfig/updateVendor"; -import route121 from "./routes/task/getProject"; -import route122 from "./routes/task/getTaskApi"; -import route123 from "./routes/task/getTaskCategories"; -import route124 from "./routes/task/taskDetails"; -import route125 from "./routes/test/test"; +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"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -176,81 +177,82 @@ export default async (app: Express) => { 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/getImageFlow", route49); - app.use("/api/production/editImage/saveImageFlow", route50); - app.use("/api/production/editImage/updateImageFlow", route51); - app.use("/api/production/exportImage", route52); - app.use("/api/production/getFlowData", route53); - app.use("/api/production/getProductionData", route54); - app.use("/api/production/getStoryboardData", route55); - app.use("/api/production/saveFlowData", route56); - app.use("/api/production/storyboard/addStoryboard", route57); - app.use("/api/production/storyboard/batchAddStoryboardInfo", route58); - app.use("/api/production/storyboard/batchGenerateImage", route59); - app.use("/api/production/storyboard/downPreviewImage", route60); - app.use("/api/production/storyboard/editStoryboardInfo", route61); - app.use("/api/production/storyboard/getStoryboardData", route62); - app.use("/api/production/storyboard/pollingImage", route63); - app.use("/api/production/storyboard/previewImage", route64); - app.use("/api/production/storyboard/removeFrame", route65); - app.use("/api/production/storyboard/updateStoryboardUrl", route66); - app.use("/api/production/workbench/addTrack", route67); - app.use("/api/production/workbench/confirmSelection", route68); - app.use("/api/production/workbench/delVideo", route69); - app.use("/api/production/workbench/generateVideo", route70); - app.use("/api/production/workbench/generateVideoPrompt", route71); - app.use("/api/production/workbench/getGenerateData", route72); - app.use("/api/production/workbench/getVideoModelDetail", route73); - app.use("/api/production/workbench/videoPolling", route74); - app.use("/api/project/addProject", route75); - app.use("/api/project/addVisual", route76); - app.use("/api/project/addVisualManual", route77); - app.use("/api/project/deleteVisualManual", route78); - app.use("/api/project/delProject", route79); - app.use("/api/project/editProject", route80); - app.use("/api/project/editVisualManual", route81); - app.use("/api/project/getProject", route82); - app.use("/api/project/getVisualManual", route83); - app.use("/api/project/visualManual", route84); - app.use("/api/script/addScript", route85); - app.use("/api/script/delScript", route86); - app.use("/api/script/exportScript", route87); - app.use("/api/script/extractAssets", route88); - app.use("/api/script/getScrptApi", route89); - app.use("/api/script/pollScriptAssets", route90); - app.use("/api/script/updateScript", route91); - app.use("/api/scriptAgent/getPlanData", route92); - app.use("/api/scriptAgent/setPlanData", route93); - app.use("/api/scriptAgent/updateData", route94); - app.use("/api/setting/about/checkUpdate", route95); - app.use("/api/setting/about/downloadApp", route96); - app.use("/api/setting/agentDeploy/agentSetKey", route97); - app.use("/api/setting/agentDeploy/deployAgentModel", route98); - app.use("/api/setting/agentDeploy/getAgentDeploy", route99); - app.use("/api/setting/dbConfig/clearData", route100); - app.use("/api/setting/dev/getSwitchAiDevTool", route101); - app.use("/api/setting/dev/updateSwitchAiDevTool", route102); - app.use("/api/setting/fileManagement/openFolder", route103); - app.use("/api/setting/getTextModel", route104); - app.use("/api/setting/loginConfig/getUser", route105); - app.use("/api/setting/loginConfig/updateUserPwd", route106); - app.use("/api/setting/memoryConfig/delAllMemory", route107); - app.use("/api/setting/memoryConfig/getMemory", route108); - app.use("/api/setting/memoryConfig/sureMemory", route109); - app.use("/api/setting/promptManage/getPrompt", route110); - app.use("/api/setting/promptManage/updatePrompt", route111); - app.use("/api/setting/skillManagement/getSkillContent", route112); - app.use("/api/setting/skillManagement/getSkillList", route113); - app.use("/api/setting/skillManagement/saveSkillContent", route114); - app.use("/api/setting/vendorConfig/addVendor", route115); - app.use("/api/setting/vendorConfig/deleteVendor", route116); - app.use("/api/setting/vendorConfig/getVendorList", route117); - app.use("/api/setting/vendorConfig/modelTest", route118); - app.use("/api/setting/vendorConfig/updateCode", route119); - app.use("/api/setting/vendorConfig/updateVendor", route120); - app.use("/api/task/getProject", route121); - app.use("/api/task/getTaskApi", route122); - app.use("/api/task/getTaskCategories", route123); - app.use("/api/task/taskDetails", route124); - app.use("/api/test/test", route125); + 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); } diff --git a/src/routes/assetsGenerate/batchGenerateImageAssets.ts b/src/routes/assetsGenerate/batchGenerateImageAssets.ts index 9cd1094..c6e180d 100644 --- a/src/routes/assetsGenerate/batchGenerateImageAssets.ts +++ b/src/routes/assetsGenerate/batchGenerateImageAssets.ts @@ -145,7 +145,7 @@ export default router.post("/", validateFields(requestSchema), async (req, res) await u .db("o_image") .where("id", imageId) - .update({ state: "生成失败", errorReason: u.error(e).message }); + .update({ state: "生成失败", reason: u.error(e).message }); } }), ); diff --git a/src/routes/production/editImage/getDefaultProject.ts b/src/routes/production/editImage/getDefaultProject.ts new file mode 100644 index 0000000..6395cd2 --- /dev/null +++ b/src/routes/production/editImage/getDefaultProject.ts @@ -0,0 +1,19 @@ +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({ + projectId: z.number(), + }), + 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/exportImage.ts b/src/routes/production/exportImage.ts index cd61be6..8789b0f 100644 --- a/src/routes/production/exportImage.ts +++ b/src/routes/production/exportImage.ts @@ -28,10 +28,10 @@ export default router.post( }), ); const zipStream = new compressing.zip.Stream(); - result.forEach((item) => { + result.forEach((item, index) => { const ext = (item.filePath?.split(".").pop() || "png").toLowerCase(); const absPath = path.join(getPath("oss"), item.filePath!); - zipStream.addEntry(absPath, { relativePath: `${item.title}.${ext}` }); + zipStream.addEntry(absPath, { relativePath: `${index}.${ext}` }); }); const fileName = `分镜.zip`; diff --git a/src/routes/production/saveFlowData.ts b/src/routes/production/saveFlowData.ts index deea792..021021f 100644 --- a/src/routes/production/saveFlowData.ts +++ b/src/routes/production/saveFlowData.ts @@ -11,7 +11,7 @@ export default router.post( validateFields({ projectId: z.number(), episodesId: z.number(), - data: flowDataSchema, + data: z.any(), }), async (req, res) => { const {