From abe81213f5cfd0361853b22a1ffccb5f3209c475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Mon, 6 Apr 2026 22:19:27 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=B5=84=E4=BA=A7=E5=9B=BE=E5=8F=96=E6=B6=88=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router.ts | 464 +++++++++--------- .../batchGenerateImageAssets.ts | 8 +- src/routes/assetsGenerate/cancelGenerate.ts | 22 + src/routes/assetsGenerate/generateAssets.ts | 4 +- src/routes/cornerScape/getAllAssets.ts | 10 +- 5 files changed, 272 insertions(+), 236 deletions(-) create mode 100644 src/routes/assetsGenerate/cancelGenerate.ts diff --git a/src/router.ts b/src/router.ts index 597e80c..b286702 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 3fe6b0875d18070c4a2ef9d9f8e97e91 +// @routes-hash 533b8bb2b9e91ff514cd1560e6d1cca8 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -22,121 +22,122 @@ import route18 from "./routes/assets/updateAssets"; import route19 from "./routes/assets/uploadClip"; import route20 from "./routes/assetsGenerate/batchGenerateImageAssets"; import route21 from "./routes/assetsGenerate/batchPolishAssetsPrompt"; -import route22 from "./routes/assetsGenerate/generateAssets"; -import route23 from "./routes/assetsGenerate/polishAssetsPrompt"; -import route24 from "./routes/cornerScape/getAllAssets"; -import route25 from "./routes/general/generalStatistics"; -import route26 from "./routes/general/getSingleProject"; -import route27 from "./routes/general/updateProject"; -import route28 from "./routes/login/login"; -import route29 from "./routes/migrate/migrateData"; -import route30 from "./routes/modelSelect/getModelDetail"; -import route31 from "./routes/modelSelect/getModelList"; -import route32 from "./routes/novel/addNovel"; -import route33 from "./routes/novel/batchDeleteNovel"; -import route34 from "./routes/novel/delNovel"; -import route35 from "./routes/novel/event/batchDeleteEvent"; -import route36 from "./routes/novel/event/deletEvent"; -import route37 from "./routes/novel/event/generateEvents"; -import route38 from "./routes/novel/event/getEvent"; -import route39 from "./routes/novel/getNovel"; -import route40 from "./routes/novel/getNovelData"; -import route41 from "./routes/novel/getNovelEventState"; -import route42 from "./routes/novel/getNovelIndex"; -import route43 from "./routes/novel/updateNovel"; -import route44 from "./routes/other/deleteAllData"; -import route45 from "./routes/other/getVersion"; -import route46 from "./routes/production/assets/batchGenerateAssetsImage"; -import route47 from "./routes/production/assets/deleteAssetsDireve"; -import route48 from "./routes/production/assets/getAssetsData"; -import route49 from "./routes/production/assets/pollingImage"; -import route50 from "./routes/production/assets/updateAssetsUrl"; -import route51 from "./routes/production/editImage/generateFlowImage"; -import route52 from "./routes/production/editImage/getImageDefaultModle"; -import route53 from "./routes/production/editImage/getImageFlow"; -import route54 from "./routes/production/editImage/saveImageFlow"; -import route55 from "./routes/production/editImage/updateImageFlow"; -import route56 from "./routes/production/editImage/uploadImage"; -import route57 from "./routes/production/exportImage"; -import route58 from "./routes/production/getFlowData"; -import route59 from "./routes/production/getProductionData"; -import route60 from "./routes/production/getStoryboardData"; -import route61 from "./routes/production/saveFlowData"; -import route62 from "./routes/production/storyboard/addStoryboard"; -import route63 from "./routes/production/storyboard/batchAddStoryboardInfo"; -import route64 from "./routes/production/storyboard/batchGenerateImage"; -import route65 from "./routes/production/storyboard/downPreviewImage"; -import route66 from "./routes/production/storyboard/editStoryboardInfo"; -import route67 from "./routes/production/storyboard/getStoryboardData"; -import route68 from "./routes/production/storyboard/pollingImage"; -import route69 from "./routes/production/storyboard/previewImage"; -import route70 from "./routes/production/storyboard/removeFrame"; -import route71 from "./routes/production/storyboard/updateStoryboardUrl"; -import route72 from "./routes/production/workbench/addTrack"; -import route73 from "./routes/production/workbench/deleteTrack"; -import route74 from "./routes/production/workbench/delVideo"; -import route75 from "./routes/production/workbench/generateVideo"; -import route76 from "./routes/production/workbench/generateVideoPrompt"; -import route77 from "./routes/production/workbench/getGenerateData"; -import route78 from "./routes/production/workbench/getVideoList"; -import route79 from "./routes/production/workbench/getVideoModelDetail"; -import route80 from "./routes/production/workbench/selectVideo"; -import route81 from "./routes/project/addDirectorManual"; -import route82 from "./routes/project/addProject"; -import route83 from "./routes/project/addVisualManual"; -import route84 from "./routes/project/deleteDirectorManual"; -import route85 from "./routes/project/deleteVisualManual"; -import route86 from "./routes/project/delProject"; -import route87 from "./routes/project/editDirectorlManual"; -import route88 from "./routes/project/editProject"; -import route89 from "./routes/project/editVisualManual"; -import route90 from "./routes/project/getProject"; -import route91 from "./routes/project/getVisualManual"; -import route92 from "./routes/project/queryDirectorManual"; -import route93 from "./routes/project/visualManual"; -import route94 from "./routes/script/addScript"; -import route95 from "./routes/script/delScript"; -import route96 from "./routes/script/exportScript"; -import route97 from "./routes/script/extractAssets"; -import route98 from "./routes/script/getScrptApi"; -import route99 from "./routes/script/pollScriptAssets"; -import route100 from "./routes/script/updateScript"; -import route101 from "./routes/scriptAgent/getPlanData"; -import route102 from "./routes/scriptAgent/setPlanData"; -import route103 from "./routes/scriptAgent/updateData"; -import route104 from "./routes/setting/about/checkUpdate"; -import route105 from "./routes/setting/about/downloadApp"; -import route106 from "./routes/setting/agentDeploy/agentSetKey"; -import route107 from "./routes/setting/agentDeploy/deployAgentModel"; -import route108 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route109 from "./routes/setting/dbConfig/clearData"; -import route110 from "./routes/setting/dev/getSwitchAiDevTool"; -import route111 from "./routes/setting/dev/updateSwitchAiDevTool"; -import route112 from "./routes/setting/fileManagement/openFolder"; -import route113 from "./routes/setting/getTextModel"; -import route114 from "./routes/setting/loginConfig/getUser"; -import route115 from "./routes/setting/loginConfig/updateUserPwd"; -import route116 from "./routes/setting/memoryConfig/delAllMemory"; -import route117 from "./routes/setting/memoryConfig/getMemory"; -import route118 from "./routes/setting/memoryConfig/sureMemory"; -import route119 from "./routes/setting/promptManage/getPrompt"; -import route120 from "./routes/setting/promptManage/updatePrompt"; -import route121 from "./routes/setting/skillManagement/getSkillContent"; -import route122 from "./routes/setting/skillManagement/getSkillList"; -import route123 from "./routes/setting/skillManagement/saveSkillContent"; -import route124 from "./routes/setting/vendorConfig/addVendor"; -import route125 from "./routes/setting/vendorConfig/deleteVendor"; -import route126 from "./routes/setting/vendorConfig/enableVendor"; -import route127 from "./routes/setting/vendorConfig/getCodeByLink"; -import route128 from "./routes/setting/vendorConfig/getVendorList"; -import route129 from "./routes/setting/vendorConfig/modelTest"; -import route130 from "./routes/setting/vendorConfig/updateCode"; -import route131 from "./routes/setting/vendorConfig/updateVendor"; -import route132 from "./routes/task/getProject"; -import route133 from "./routes/task/getTaskApi"; -import route134 from "./routes/task/getTaskCategories"; -import route135 from "./routes/task/taskDetails"; -import route136 from "./routes/test/test"; +import route22 from "./routes/assetsGenerate/cancelGenerate"; +import route23 from "./routes/assetsGenerate/generateAssets"; +import route24 from "./routes/assetsGenerate/polishAssetsPrompt"; +import route25 from "./routes/cornerScape/getAllAssets"; +import route26 from "./routes/general/generalStatistics"; +import route27 from "./routes/general/getSingleProject"; +import route28 from "./routes/general/updateProject"; +import route29 from "./routes/login/login"; +import route30 from "./routes/migrate/migrateData"; +import route31 from "./routes/modelSelect/getModelDetail"; +import route32 from "./routes/modelSelect/getModelList"; +import route33 from "./routes/novel/addNovel"; +import route34 from "./routes/novel/batchDeleteNovel"; +import route35 from "./routes/novel/delNovel"; +import route36 from "./routes/novel/event/batchDeleteEvent"; +import route37 from "./routes/novel/event/deletEvent"; +import route38 from "./routes/novel/event/generateEvents"; +import route39 from "./routes/novel/event/getEvent"; +import route40 from "./routes/novel/getNovel"; +import route41 from "./routes/novel/getNovelData"; +import route42 from "./routes/novel/getNovelEventState"; +import route43 from "./routes/novel/getNovelIndex"; +import route44 from "./routes/novel/updateNovel"; +import route45 from "./routes/other/deleteAllData"; +import route46 from "./routes/other/getVersion"; +import route47 from "./routes/production/assets/batchGenerateAssetsImage"; +import route48 from "./routes/production/assets/deleteAssetsDireve"; +import route49 from "./routes/production/assets/getAssetsData"; +import route50 from "./routes/production/assets/pollingImage"; +import route51 from "./routes/production/assets/updateAssetsUrl"; +import route52 from "./routes/production/editImage/generateFlowImage"; +import route53 from "./routes/production/editImage/getImageDefaultModle"; +import route54 from "./routes/production/editImage/getImageFlow"; +import route55 from "./routes/production/editImage/saveImageFlow"; +import route56 from "./routes/production/editImage/updateImageFlow"; +import route57 from "./routes/production/editImage/uploadImage"; +import route58 from "./routes/production/exportImage"; +import route59 from "./routes/production/getFlowData"; +import route60 from "./routes/production/getProductionData"; +import route61 from "./routes/production/getStoryboardData"; +import route62 from "./routes/production/saveFlowData"; +import route63 from "./routes/production/storyboard/addStoryboard"; +import route64 from "./routes/production/storyboard/batchAddStoryboardInfo"; +import route65 from "./routes/production/storyboard/batchGenerateImage"; +import route66 from "./routes/production/storyboard/downPreviewImage"; +import route67 from "./routes/production/storyboard/editStoryboardInfo"; +import route68 from "./routes/production/storyboard/getStoryboardData"; +import route69 from "./routes/production/storyboard/pollingImage"; +import route70 from "./routes/production/storyboard/previewImage"; +import route71 from "./routes/production/storyboard/removeFrame"; +import route72 from "./routes/production/storyboard/updateStoryboardUrl"; +import route73 from "./routes/production/workbench/addTrack"; +import route74 from "./routes/production/workbench/deleteTrack"; +import route75 from "./routes/production/workbench/delVideo"; +import route76 from "./routes/production/workbench/generateVideo"; +import route77 from "./routes/production/workbench/generateVideoPrompt"; +import route78 from "./routes/production/workbench/getGenerateData"; +import route79 from "./routes/production/workbench/getVideoList"; +import route80 from "./routes/production/workbench/getVideoModelDetail"; +import route81 from "./routes/production/workbench/selectVideo"; +import route82 from "./routes/project/addDirectorManual"; +import route83 from "./routes/project/addProject"; +import route84 from "./routes/project/addVisualManual"; +import route85 from "./routes/project/deleteDirectorManual"; +import route86 from "./routes/project/deleteVisualManual"; +import route87 from "./routes/project/delProject"; +import route88 from "./routes/project/editDirectorlManual"; +import route89 from "./routes/project/editProject"; +import route90 from "./routes/project/editVisualManual"; +import route91 from "./routes/project/getProject"; +import route92 from "./routes/project/getVisualManual"; +import route93 from "./routes/project/queryDirectorManual"; +import route94 from "./routes/project/visualManual"; +import route95 from "./routes/script/addScript"; +import route96 from "./routes/script/delScript"; +import route97 from "./routes/script/exportScript"; +import route98 from "./routes/script/extractAssets"; +import route99 from "./routes/script/getScrptApi"; +import route100 from "./routes/script/pollScriptAssets"; +import route101 from "./routes/script/updateScript"; +import route102 from "./routes/scriptAgent/getPlanData"; +import route103 from "./routes/scriptAgent/setPlanData"; +import route104 from "./routes/scriptAgent/updateData"; +import route105 from "./routes/setting/about/checkUpdate"; +import route106 from "./routes/setting/about/downloadApp"; +import route107 from "./routes/setting/agentDeploy/agentSetKey"; +import route108 from "./routes/setting/agentDeploy/deployAgentModel"; +import route109 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route110 from "./routes/setting/dbConfig/clearData"; +import route111 from "./routes/setting/dev/getSwitchAiDevTool"; +import route112 from "./routes/setting/dev/updateSwitchAiDevTool"; +import route113 from "./routes/setting/fileManagement/openFolder"; +import route114 from "./routes/setting/getTextModel"; +import route115 from "./routes/setting/loginConfig/getUser"; +import route116 from "./routes/setting/loginConfig/updateUserPwd"; +import route117 from "./routes/setting/memoryConfig/delAllMemory"; +import route118 from "./routes/setting/memoryConfig/getMemory"; +import route119 from "./routes/setting/memoryConfig/sureMemory"; +import route120 from "./routes/setting/promptManage/getPrompt"; +import route121 from "./routes/setting/promptManage/updatePrompt"; +import route122 from "./routes/setting/skillManagement/getSkillContent"; +import route123 from "./routes/setting/skillManagement/getSkillList"; +import route124 from "./routes/setting/skillManagement/saveSkillContent"; +import route125 from "./routes/setting/vendorConfig/addVendor"; +import route126 from "./routes/setting/vendorConfig/deleteVendor"; +import route127 from "./routes/setting/vendorConfig/enableVendor"; +import route128 from "./routes/setting/vendorConfig/getCodeByLink"; +import route129 from "./routes/setting/vendorConfig/getVendorList"; +import route130 from "./routes/setting/vendorConfig/modelTest"; +import route131 from "./routes/setting/vendorConfig/updateCode"; +import route132 from "./routes/setting/vendorConfig/updateVendor"; +import route133 from "./routes/task/getProject"; +import route134 from "./routes/task/getTaskApi"; +import route135 from "./routes/task/getTaskCategories"; +import route136 from "./routes/task/taskDetails"; +import route137 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -160,119 +161,120 @@ export default async (app: Express) => { app.use("/api/assets/uploadClip", route19); app.use("/api/assetsGenerate/batchGenerateImageAssets", route20); app.use("/api/assetsGenerate/batchPolishAssetsPrompt", route21); - app.use("/api/assetsGenerate/generateAssets", route22); - app.use("/api/assetsGenerate/polishAssetsPrompt", route23); - app.use("/api/cornerScape/getAllAssets", route24); - app.use("/api/general/generalStatistics", route25); - app.use("/api/general/getSingleProject", route26); - app.use("/api/general/updateProject", route27); - app.use("/api/login/login", route28); - app.use("/api/migrate/migrateData", route29); - app.use("/api/modelSelect/getModelDetail", route30); - app.use("/api/modelSelect/getModelList", route31); - app.use("/api/novel/addNovel", route32); - app.use("/api/novel/batchDeleteNovel", route33); - app.use("/api/novel/delNovel", route34); - app.use("/api/novel/event/batchDeleteEvent", route35); - app.use("/api/novel/event/deletEvent", route36); - app.use("/api/novel/event/generateEvents", route37); - app.use("/api/novel/event/getEvent", route38); - app.use("/api/novel/getNovel", route39); - app.use("/api/novel/getNovelData", route40); - app.use("/api/novel/getNovelEventState", route41); - app.use("/api/novel/getNovelIndex", route42); - app.use("/api/novel/updateNovel", route43); - app.use("/api/other/deleteAllData", route44); - app.use("/api/other/getVersion", route45); - app.use("/api/production/assets/batchGenerateAssetsImage", route46); - app.use("/api/production/assets/deleteAssetsDireve", route47); - app.use("/api/production/assets/getAssetsData", route48); - app.use("/api/production/assets/pollingImage", route49); - app.use("/api/production/assets/updateAssetsUrl", route50); - app.use("/api/production/editImage/generateFlowImage", route51); - app.use("/api/production/editImage/getImageDefaultModle", route52); - app.use("/api/production/editImage/getImageFlow", route53); - app.use("/api/production/editImage/saveImageFlow", route54); - app.use("/api/production/editImage/updateImageFlow", route55); - app.use("/api/production/editImage/uploadImage", route56); - app.use("/api/production/exportImage", route57); - app.use("/api/production/getFlowData", route58); - app.use("/api/production/getProductionData", route59); - app.use("/api/production/getStoryboardData", route60); - app.use("/api/production/saveFlowData", route61); - app.use("/api/production/storyboard/addStoryboard", route62); - app.use("/api/production/storyboard/batchAddStoryboardInfo", route63); - app.use("/api/production/storyboard/batchGenerateImage", route64); - app.use("/api/production/storyboard/downPreviewImage", route65); - app.use("/api/production/storyboard/editStoryboardInfo", route66); - app.use("/api/production/storyboard/getStoryboardData", route67); - app.use("/api/production/storyboard/pollingImage", route68); - app.use("/api/production/storyboard/previewImage", route69); - app.use("/api/production/storyboard/removeFrame", route70); - app.use("/api/production/storyboard/updateStoryboardUrl", route71); - app.use("/api/production/workbench/addTrack", route72); - app.use("/api/production/workbench/deleteTrack", route73); - app.use("/api/production/workbench/delVideo", route74); - app.use("/api/production/workbench/generateVideo", route75); - app.use("/api/production/workbench/generateVideoPrompt", route76); - app.use("/api/production/workbench/getGenerateData", route77); - app.use("/api/production/workbench/getVideoList", route78); - app.use("/api/production/workbench/getVideoModelDetail", route79); - app.use("/api/production/workbench/selectVideo", route80); - app.use("/api/project/addDirectorManual", route81); - app.use("/api/project/addProject", route82); - app.use("/api/project/addVisualManual", route83); - app.use("/api/project/deleteDirectorManual", route84); - app.use("/api/project/deleteVisualManual", route85); - app.use("/api/project/delProject", route86); - app.use("/api/project/editDirectorlManual", route87); - app.use("/api/project/editProject", route88); - app.use("/api/project/editVisualManual", route89); - app.use("/api/project/getProject", route90); - app.use("/api/project/getVisualManual", route91); - app.use("/api/project/queryDirectorManual", route92); - app.use("/api/project/visualManual", route93); - app.use("/api/script/addScript", route94); - app.use("/api/script/delScript", route95); - app.use("/api/script/exportScript", route96); - app.use("/api/script/extractAssets", route97); - app.use("/api/script/getScrptApi", route98); - app.use("/api/script/pollScriptAssets", route99); - app.use("/api/script/updateScript", route100); - app.use("/api/scriptAgent/getPlanData", route101); - app.use("/api/scriptAgent/setPlanData", route102); - app.use("/api/scriptAgent/updateData", route103); - app.use("/api/setting/about/checkUpdate", route104); - app.use("/api/setting/about/downloadApp", route105); - app.use("/api/setting/agentDeploy/agentSetKey", route106); - app.use("/api/setting/agentDeploy/deployAgentModel", route107); - app.use("/api/setting/agentDeploy/getAgentDeploy", route108); - app.use("/api/setting/dbConfig/clearData", route109); - app.use("/api/setting/dev/getSwitchAiDevTool", route110); - app.use("/api/setting/dev/updateSwitchAiDevTool", route111); - app.use("/api/setting/fileManagement/openFolder", route112); - app.use("/api/setting/getTextModel", route113); - app.use("/api/setting/loginConfig/getUser", route114); - app.use("/api/setting/loginConfig/updateUserPwd", route115); - app.use("/api/setting/memoryConfig/delAllMemory", route116); - app.use("/api/setting/memoryConfig/getMemory", route117); - app.use("/api/setting/memoryConfig/sureMemory", route118); - app.use("/api/setting/promptManage/getPrompt", route119); - app.use("/api/setting/promptManage/updatePrompt", route120); - app.use("/api/setting/skillManagement/getSkillContent", route121); - app.use("/api/setting/skillManagement/getSkillList", route122); - app.use("/api/setting/skillManagement/saveSkillContent", route123); - app.use("/api/setting/vendorConfig/addVendor", route124); - app.use("/api/setting/vendorConfig/deleteVendor", route125); - app.use("/api/setting/vendorConfig/enableVendor", route126); - app.use("/api/setting/vendorConfig/getCodeByLink", route127); - app.use("/api/setting/vendorConfig/getVendorList", route128); - app.use("/api/setting/vendorConfig/modelTest", route129); - app.use("/api/setting/vendorConfig/updateCode", route130); - app.use("/api/setting/vendorConfig/updateVendor", route131); - app.use("/api/task/getProject", route132); - app.use("/api/task/getTaskApi", route133); - app.use("/api/task/getTaskCategories", route134); - app.use("/api/task/taskDetails", route135); - app.use("/api/test/test", route136); + app.use("/api/assetsGenerate/cancelGenerate", route22); + app.use("/api/assetsGenerate/generateAssets", route23); + app.use("/api/assetsGenerate/polishAssetsPrompt", route24); + app.use("/api/cornerScape/getAllAssets", route25); + app.use("/api/general/generalStatistics", route26); + app.use("/api/general/getSingleProject", route27); + app.use("/api/general/updateProject", route28); + app.use("/api/login/login", route29); + app.use("/api/migrate/migrateData", route30); + app.use("/api/modelSelect/getModelDetail", route31); + app.use("/api/modelSelect/getModelList", route32); + app.use("/api/novel/addNovel", route33); + app.use("/api/novel/batchDeleteNovel", route34); + app.use("/api/novel/delNovel", route35); + app.use("/api/novel/event/batchDeleteEvent", route36); + app.use("/api/novel/event/deletEvent", route37); + app.use("/api/novel/event/generateEvents", route38); + app.use("/api/novel/event/getEvent", route39); + app.use("/api/novel/getNovel", route40); + app.use("/api/novel/getNovelData", route41); + app.use("/api/novel/getNovelEventState", route42); + app.use("/api/novel/getNovelIndex", route43); + app.use("/api/novel/updateNovel", route44); + app.use("/api/other/deleteAllData", route45); + app.use("/api/other/getVersion", route46); + app.use("/api/production/assets/batchGenerateAssetsImage", route47); + app.use("/api/production/assets/deleteAssetsDireve", route48); + app.use("/api/production/assets/getAssetsData", route49); + app.use("/api/production/assets/pollingImage", route50); + app.use("/api/production/assets/updateAssetsUrl", route51); + app.use("/api/production/editImage/generateFlowImage", route52); + app.use("/api/production/editImage/getImageDefaultModle", route53); + app.use("/api/production/editImage/getImageFlow", route54); + app.use("/api/production/editImage/saveImageFlow", route55); + app.use("/api/production/editImage/updateImageFlow", route56); + app.use("/api/production/editImage/uploadImage", route57); + app.use("/api/production/exportImage", route58); + app.use("/api/production/getFlowData", route59); + app.use("/api/production/getProductionData", route60); + app.use("/api/production/getStoryboardData", route61); + app.use("/api/production/saveFlowData", route62); + app.use("/api/production/storyboard/addStoryboard", route63); + app.use("/api/production/storyboard/batchAddStoryboardInfo", route64); + app.use("/api/production/storyboard/batchGenerateImage", route65); + app.use("/api/production/storyboard/downPreviewImage", route66); + app.use("/api/production/storyboard/editStoryboardInfo", route67); + app.use("/api/production/storyboard/getStoryboardData", route68); + app.use("/api/production/storyboard/pollingImage", route69); + app.use("/api/production/storyboard/previewImage", route70); + app.use("/api/production/storyboard/removeFrame", route71); + app.use("/api/production/storyboard/updateStoryboardUrl", route72); + app.use("/api/production/workbench/addTrack", route73); + app.use("/api/production/workbench/deleteTrack", route74); + app.use("/api/production/workbench/delVideo", route75); + app.use("/api/production/workbench/generateVideo", route76); + app.use("/api/production/workbench/generateVideoPrompt", route77); + app.use("/api/production/workbench/getGenerateData", route78); + app.use("/api/production/workbench/getVideoList", route79); + app.use("/api/production/workbench/getVideoModelDetail", route80); + app.use("/api/production/workbench/selectVideo", route81); + app.use("/api/project/addDirectorManual", route82); + app.use("/api/project/addProject", route83); + app.use("/api/project/addVisualManual", route84); + app.use("/api/project/deleteDirectorManual", route85); + app.use("/api/project/deleteVisualManual", route86); + app.use("/api/project/delProject", route87); + app.use("/api/project/editDirectorlManual", route88); + app.use("/api/project/editProject", route89); + app.use("/api/project/editVisualManual", route90); + app.use("/api/project/getProject", route91); + app.use("/api/project/getVisualManual", route92); + app.use("/api/project/queryDirectorManual", route93); + app.use("/api/project/visualManual", route94); + app.use("/api/script/addScript", route95); + app.use("/api/script/delScript", route96); + app.use("/api/script/exportScript", route97); + app.use("/api/script/extractAssets", route98); + app.use("/api/script/getScrptApi", route99); + app.use("/api/script/pollScriptAssets", route100); + app.use("/api/script/updateScript", route101); + app.use("/api/scriptAgent/getPlanData", route102); + app.use("/api/scriptAgent/setPlanData", route103); + app.use("/api/scriptAgent/updateData", route104); + app.use("/api/setting/about/checkUpdate", route105); + app.use("/api/setting/about/downloadApp", route106); + app.use("/api/setting/agentDeploy/agentSetKey", route107); + app.use("/api/setting/agentDeploy/deployAgentModel", route108); + app.use("/api/setting/agentDeploy/getAgentDeploy", route109); + app.use("/api/setting/dbConfig/clearData", route110); + app.use("/api/setting/dev/getSwitchAiDevTool", route111); + app.use("/api/setting/dev/updateSwitchAiDevTool", route112); + app.use("/api/setting/fileManagement/openFolder", route113); + app.use("/api/setting/getTextModel", route114); + app.use("/api/setting/loginConfig/getUser", route115); + app.use("/api/setting/loginConfig/updateUserPwd", route116); + app.use("/api/setting/memoryConfig/delAllMemory", route117); + app.use("/api/setting/memoryConfig/getMemory", route118); + app.use("/api/setting/memoryConfig/sureMemory", route119); + app.use("/api/setting/promptManage/getPrompt", route120); + app.use("/api/setting/promptManage/updatePrompt", route121); + app.use("/api/setting/skillManagement/getSkillContent", route122); + app.use("/api/setting/skillManagement/getSkillList", route123); + app.use("/api/setting/skillManagement/saveSkillContent", route124); + app.use("/api/setting/vendorConfig/addVendor", route125); + app.use("/api/setting/vendorConfig/deleteVendor", route126); + app.use("/api/setting/vendorConfig/enableVendor", route127); + app.use("/api/setting/vendorConfig/getCodeByLink", route128); + app.use("/api/setting/vendorConfig/getVendorList", route129); + app.use("/api/setting/vendorConfig/modelTest", route130); + app.use("/api/setting/vendorConfig/updateCode", route131); + app.use("/api/setting/vendorConfig/updateVendor", route132); + app.use("/api/task/getProject", route133); + app.use("/api/task/getTaskApi", route134); + app.use("/api/task/getTaskCategories", route135); + app.use("/api/task/taskDetails", route136); + app.use("/api/test/test", route137); } diff --git a/src/routes/assetsGenerate/batchGenerateImageAssets.ts b/src/routes/assetsGenerate/batchGenerateImageAssets.ts index ec753fa..e1aba45 100644 --- a/src/routes/assetsGenerate/batchGenerateImageAssets.ts +++ b/src/routes/assetsGenerate/batchGenerateImageAssets.ts @@ -98,6 +98,10 @@ export default router.post("/", validateFields(requestSchema), async (req, res) const tasks = items.map((item: { id: number; type: string; name: string; prompt: string; base64: string | null | undefined }, index: number) => limit(async () => { const imageId = totalNovelId[index]; + const data = await u.db("o_image").where("id", imageId).select("state").first(); + if (data?.state === "生成失败") { + return; + } const cfg = assetTypeConfig[item.type as AssetType]; if (!cfg) return; @@ -126,8 +130,10 @@ export default router.post("/", validateFields(requestSchema), async (req, res) aiImage.save(imagePath); const imageData = await u.db("o_image").where("id", imageId).select("*").first(); + console.log("%c Line:133 🥒 imageData", "background:#465975", imageData); + if (!imageData) return res.status(500).send("资产已被删除"); if (!imageData) return; - + if (imageData.state === "生成失败") return; await u .db("o_image") .where("id", imageId) diff --git a/src/routes/assetsGenerate/cancelGenerate.ts b/src/routes/assetsGenerate/cancelGenerate.ts new file mode 100644 index 0000000..21f21a1 --- /dev/null +++ b/src/routes/assetsGenerate/cancelGenerate.ts @@ -0,0 +1,22 @@ +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:16 🌭 id", "background:#2eafb0", id); + await u.db("o_image").where("id", id).update({ + state: "生成失败", + }); + res.status(200).send(success({ message: "取消成功" })); + }, +); diff --git a/src/routes/assetsGenerate/generateAssets.ts b/src/routes/assetsGenerate/generateAssets.ts index 1c32f5d..da71f4f 100644 --- a/src/routes/assetsGenerate/generateAssets.ts +++ b/src/routes/assetsGenerate/generateAssets.ts @@ -96,7 +96,6 @@ export default router.post("/", validateFields(requestSchema), async (req, res) const relatedObjects = { id, projectId, type: cfg.label }; try { - // 4. 调用 AI 生成图片 const aiImage = u.Ai.Image(model); await aiImage.run( { @@ -113,11 +112,10 @@ export default router.post("/", validateFields(requestSchema), async (req, res) }, ); aiImage.save(imagePath); - // 5. 更新记录 & 返回结果 const imageData = await u.db("o_image").where("id", imageId).select("*").first(); if (!imageData) return res.status(500).send("资产已被删除"); - + if (imageData.state === "生成失败") return; await u .db("o_image") .where("id", imageId) diff --git a/src/routes/cornerScape/getAllAssets.ts b/src/routes/cornerScape/getAllAssets.ts index 4fa8712..c0446fb 100644 --- a/src/routes/cornerScape/getAllAssets.ts +++ b/src/routes/cornerScape/getAllAssets.ts @@ -16,7 +16,15 @@ export default router.post( const data = await u .db("o_assets") .leftJoin("o_image", "o_assets.imageId", "o_image.id") - .select("o_assets.*", "o_image.filePath", "o_image.state", "o_image.model", "o_image.resolution", "o_image.errorReason") + .select( + "o_assets.*", + "o_image.filePath", + "o_image.state", + "o_image.model", + "o_image.resolution", + "o_image.errorReason", + "o_image.id as imageId", + ) .where("o_assets.projectId", projectId) .andWhere("o_assets.type", "<>", "clip") .andWhere("o_assets.assetsId", null) From 04b0d4483f59d9f681ca1392b4d59bc96228f4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Mon, 6 Apr 2026 23:04:46 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=E8=A1=A8useData=EF=BC=8C=E5=8E=BB=E6=8E=89=E5=86=97?= =?UTF-8?q?=E4=BD=99=E7=9A=84associationSkills?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/fixDB.ts | 1 + src/lib/initDB.ts | 1 + .../workbench/generateVideoPrompt.ts | 8 +++- src/routes/script/extractAssets.ts | 11 ++++-- src/routes/setting/promptManage/getPrompt.ts | 10 ++++- .../setting/promptManage/updatePrompt.ts | 2 +- src/routes/setting/vendorConfig/addVendor.ts | 1 - src/routes/setting/vendorConfig/updateCode.ts | 2 - .../setting/vendorConfig/updateVendor.ts | 2 - src/types/database.d.ts | 37 ++++++++++++++++++- src/utils/cleanNovel.ts | 10 ++++- 11 files changed, 71 insertions(+), 14 deletions(-) diff --git a/src/lib/fixDB.ts b/src/lib/fixDB.ts index 7d06c60..5550136 100644 --- a/src/lib/fixDB.ts +++ b/src/lib/fixDB.ts @@ -47,4 +47,5 @@ export default async (knex: Knex): Promise => { state: "生成失败", errorReason: "软件退出导致失败", }); + await addColumn("o_prompt", "useData", "text"); }; diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index ba6e956..ea025ad 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -196,6 +196,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => table.string("name"); table.string("type"); table.text("data"); + table.text("useData"); table.primary(["id"]); table.unique(["id"]); }, diff --git a/src/routes/production/workbench/generateVideoPrompt.ts b/src/routes/production/workbench/generateVideoPrompt.ts index a0bf5ca..0c791d3 100644 --- a/src/routes/production/workbench/generateVideoPrompt.ts +++ b/src/routes/production/workbench/generateVideoPrompt.ts @@ -75,6 +75,12 @@ export default router.post( const [id, modelData] = model.split(":"); const projectData = await u.db("o_project").select("*").where({ id: projectId }).first(); const videoPrompt = await u.db("o_prompt").where("type", "videoPromptGeneration").first(); + let videoPromptGeneration = "" as string | undefined; + if (videoPrompt && videoPrompt.useData) { + videoPromptGeneration = videoPrompt.useData; + } else { + videoPromptGeneration = videoPrompt?.data ?? undefined; + } const artStyle = projectData?.artStyle || "无"; const visualManual = u.getArtPrompt(artStyle, "art_skills", "art_storyboard_video"); const content = ` @@ -94,7 +100,7 @@ export default router.post( try { const { text } = await u.Ai.Text("universalAi").invoke({ - system: videoPrompt?.data!, + system: videoPromptGeneration, messages: [ { role: "assistant", diff --git a/src/routes/script/extractAssets.ts b/src/routes/script/extractAssets.ts index cb20786..30b35dc 100644 --- a/src/routes/script/extractAssets.ts +++ b/src/routes/script/extractAssets.ts @@ -65,7 +65,6 @@ export default router.post( if (!scriptIds.length) return res.status(400).send(error("请先选择剧本")); const scripts = await u.db("o_script").whereIn("id", scriptIds); - // 构建 scriptId -> script 内容的映射 const scriptMap = new Map(scripts.map((s: o_script) => [s.id, s])); @@ -198,7 +197,13 @@ export default router.post( return "无需回复用户任何内容"; }, }); - const data = await u.db("o_prompt").where("type", "scriptAssetExtraction").first("data"); + const promptData = await u.db("o_prompt").where("type", "scriptAssetExtraction").first(); + let scriptAssetExtraction = "" as string | undefined; + if (promptData && promptData.useData) { + scriptAssetExtraction = promptData.useData; + } else { + scriptAssetExtraction = promptData?.data ?? undefined; + } const existingHint = existingAssetsList ? `\n\n【已有资产列表】:${existingAssetsList}\n对于已有资产,如果在剧本中出现,只需在 existingAssetRefs 中给出资产名称和对应的 scriptIds 数组即可,无需重复生成 desc/type。对于新发现的资产(不在已有列表中),请在 newAssets 中给出完整信息。` : ""; @@ -207,7 +212,7 @@ export default router.post( { role: "system", content: - data?.data + + scriptAssetExtraction + "\n\n提取剧本中涉及的资产(角色、场景、道具),参考技能 script_assets_extract 规范,结果必须通过 resultTool 工具返回。" + "\n\n注意:本次会同时提供多集剧本,每集剧本以 ===== 【剧本ID: xxx】 ===== 分隔。你需要分析每集剧本使用了哪些资产,并在输出中用 scriptIds 数组标明每个资产在哪些剧本中出现。", }, diff --git a/src/routes/setting/promptManage/getPrompt.ts b/src/routes/setting/promptManage/getPrompt.ts index a698249..ca0228e 100644 --- a/src/routes/setting/promptManage/getPrompt.ts +++ b/src/routes/setting/promptManage/getPrompt.ts @@ -5,6 +5,14 @@ import { success, error } from "@/lib/responseFormat"; const router = express.Router(); export default router.post("/", async (req, res) => { - const data = await u.db("o_prompt").select("*"); + const list = await u.db("o_prompt").select("*"); + const data = await Promise.all( + list.map(async (item) => { + return { + ...item, + data: item.useData ? item.useData : item.data, + }; + }), + ); res.status(200).send(success(data)); }); diff --git a/src/routes/setting/promptManage/updatePrompt.ts b/src/routes/setting/promptManage/updatePrompt.ts index b39dfad..ec2046e 100644 --- a/src/routes/setting/promptManage/updatePrompt.ts +++ b/src/routes/setting/promptManage/updatePrompt.ts @@ -13,7 +13,7 @@ export default router.post( async (req, res) => { const { id, data } = req.body; await u.db("o_prompt").where("id", id).update({ - data, + useData: data, }); res.status(200).send(success(123)); }, diff --git a/src/routes/setting/vendorConfig/addVendor.ts b/src/routes/setting/vendorConfig/addVendor.ts index 19797cd..f293131 100644 --- a/src/routes/setting/vendorConfig/addVendor.ts +++ b/src/routes/setting/vendorConfig/addVendor.ts @@ -35,7 +35,6 @@ const vendorConfigSchema = z.object({ modelName: z.string(), type: z.literal("image"), mode: z.array(z.enum(["text", "singleImage", "multiReference"])), - associationSkills: z.string().optional(), }), z.object({ name: z.string(), diff --git a/src/routes/setting/vendorConfig/updateCode.ts b/src/routes/setting/vendorConfig/updateCode.ts index d0ab2c1..08721bb 100644 --- a/src/routes/setting/vendorConfig/updateCode.ts +++ b/src/routes/setting/vendorConfig/updateCode.ts @@ -36,7 +36,6 @@ const vendorConfigSchema = z.object({ modelName: z.string(), type: z.literal("image"), mode: z.array(z.enum(["text", "singleImage", "multiReference"])), - associationSkills: z.string().optional(), }), z.object({ name: z.string(), @@ -48,7 +47,6 @@ const vendorConfigSchema = z.object({ z.array(z.enum(["audioReference", "videoReference", "textReference", "imageReference"])), ]), ), - associationSkills: z.string().optional(), audio: z.union([z.literal("optional"), z.boolean()]), durationResolutionMap: z.array( z.object({ diff --git a/src/routes/setting/vendorConfig/updateVendor.ts b/src/routes/setting/vendorConfig/updateVendor.ts index 0d066b8..1f9338f 100644 --- a/src/routes/setting/vendorConfig/updateVendor.ts +++ b/src/routes/setting/vendorConfig/updateVendor.ts @@ -33,7 +33,6 @@ export default router.post( modelName: z.string(), type: z.literal("image"), mode: z.array(z.enum(["text", "singleImage", "multiReference"])), - associationSkills: z.string().optional(), }), z.object({ name: z.string(), @@ -45,7 +44,6 @@ export default router.post( z.array(z.enum(["audioReference", "videoReference", "textReference", "imageReference"])), ]), ), - associationSkills: z.string().optional(), audio: z.union([z.literal("optional"), z.boolean()]), durationResolutionMap: z.array( z.object({ diff --git a/src/types/database.d.ts b/src/types/database.d.ts index 1af96b9..8adea86 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,6 +1,37 @@ -// @db-hash 6fa5017e455bc367c9c902ba574d11b4 +// @db-hash 6cd709d9bdfe00c4dc87961a8ebba149 //该文件由脚本自动生成,请勿手动修改 +export interface _o_project_old_20260404 { + 'artStyle'?: string | null; + 'createTime'?: number | null; + 'directorManual'?: string | null; + 'id'?: number | null; + 'imageModel'?: string | null; + 'imageQuality'?: string | null; + 'intro'?: string | null; + 'mode'?: string | null; + 'name'?: string | null; + 'projectType'?: string | null; + 'type'?: string | null; + 'userId'?: number | null; + 'videoModel'?: string | null; + 'videoRatio'?: string | null; +} +export interface _o_prompt_old_20260406 { + 'data'?: string | null; + 'id'?: number; + 'name'?: string | null; + 'type'?: string | null; + 'useData'?: string | null; +} +export interface _o_prompt_old_20260406_1 { + 'data'?: string | null; + 'id'?: number; + 'name'?: string | null; + 'TEXT'?: any | null; + 'type'?: string | null; + 'useData'?: string | null; +} export interface memories { 'content': string; 'createTime': number; @@ -128,6 +159,7 @@ export interface o_prompt { 'id'?: number; 'name'?: string | null; 'type'?: string | null; + 'useData'?: string | null; } export interface o_script { 'content'?: string | null; @@ -231,6 +263,9 @@ export interface o_videoTrack { } export interface DB { + "_o_project_old_20260404": _o_project_old_20260404; + "_o_prompt_old_20260406": _o_prompt_old_20260406; + "_o_prompt_old_20260406_1": _o_prompt_old_20260406_1; "memories": memories; "o_agentDeploy": o_agentDeploy; "o_agentWorkData": o_agentWorkData; diff --git a/src/utils/cleanNovel.ts b/src/utils/cleanNovel.ts index b82d10c..22ed6d9 100644 --- a/src/utils/cleanNovel.ts +++ b/src/utils/cleanNovel.ts @@ -27,9 +27,15 @@ class CleanNovel { private async processChapter(novel: o_novel): Promise { try { const prompt = await u.getPrompts("event"); - const data = await u.db("o_prompt").where("type", "eventExtraction").first("data"); + const promptData = await u.db("o_prompt").where("type", "eventExtraction").first(); + let eventExtraction = "" as string | undefined; + if (promptData && promptData.useData) { + eventExtraction = promptData.useData; + } else { + eventExtraction = promptData?.data ?? undefined; + } const resData = await u.Ai.Text("universalAi").invoke({ - system: data ? JSON.stringify(data.data) : (prompt as string), + system: eventExtraction ? JSON.stringify(eventExtraction) : (prompt as string), messages: [ { role: "user", From 6fb12a1f0711c4e92f8f65517f6dbabf2d5d4c7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Mon, 6 Apr 2026 23:45:00 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E6=8F=90=E7=A4=BA=E8=AF=8D=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=AD=97=E6=AE=B5useData?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/fixDB.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/fixDB.ts b/src/lib/fixDB.ts index 5550136..fc550ee 100644 --- a/src/lib/fixDB.ts +++ b/src/lib/fixDB.ts @@ -48,4 +48,11 @@ export default async (knex: Knex): Promise => { errorReason: "软件退出导致失败", }); await addColumn("o_prompt", "useData", "text"); + + await db("o_prompt").where("type", "scriptAssetExtraction").update({ + data: `---\nname: universal_agent\ndescription: 专注于从剧本内容中提取所使用的资产(角色、场景、道具)并生成结构化资产列表的助手。\n---\n\n# Script Assets Extract\n\n你是一个专业的剧本内容分析助手,专注于从剧本文本中识别和提取所有涉及的资产(角色、场景、道具),并为每项资产生成可供下游制作流程使用的结构化描述和提示词。\n\n## 何时使用\n\n用户提供剧本内容,你需要逐段阅读并提取其中涉及的所有资产(人物角色、场景地点、道具物件),输出为结构化的资产列表。产出的资产描述将用于后续 AI 图片生成和制作流程。\n\n## 与系统的对应关系\n\n- 资产类型:\n - \`role\` — 角色(对应 \`o_assets.type = "role"\`)\n - \`scene\` — 场景(对应 \`o_assets.type = "scene"\`)\n - \`tool\` — 道具(对应 \`o_assets.type = "tool"\`)\n- 下游用途:资产提示词生成 → AI 资产图生成 → 分镜制作\n\n## 输出要求\n\n**必须通过调用 \`resultTool\` 工具返回结果**,禁止以纯文本、Markdown 表格或 JSON 代码块等形式直接输出资产列表。\n\`resultTool\` 的 schema 会对字段类型和枚举值做强校验,调用时请严格按照下方字段定义填写,确保数据结构正确、字段完整、类型匹配。\n\n每个资产对象包含以下字段:\n\n| 字段 | 类型 | 必填 | 说明 |\n| ---- | ---- | ---- | ---- |\n| \`name\` | string | 是 | 资产名称,使用剧本中的原始称呼,不做其他多余描述 |\n| \`desc\` | string | 是 | 资产描述,30-80 字的视觉化描述 |\n| \`prompt\` | string | 是 | 生成提示词,英文,用于 AI 图片生成 |\n| \`type\` | enum | 是 | 资产类型:\`role\` / \`scene\` / \`tool\` |\n\n## 提取规则\n\n### 角色(role)\n\n- 提取剧本中出现的所有有名字的角色\n- \`desc\`:包含性别、外貌特征、服饰风格、体态气质等视觉要素,需在描述开头明确标注角色性别(如"男性,……"或"女性,……")\n- \`prompt\`:英文提示词,描述角色的外观特征,需以性别词开头(如 \`a young man, ...\` 或 \`a young woman, ...\`),适用于 AI 角色图生成\n- 同一角色有多个称呼时,取最常用的作为 \`name\`\n- 无名龙套(如"路人甲"、"士兵")可跳过,除非其造型对剧情有重要视觉意义\n\n### 场景(scene)\n\n- 提取剧本中出现的所有场景/地点\n- \`desc\`:包含空间结构、光照氛围、关键陈设、色调基调等视觉要素\n- \`prompt\`:英文提示词,描述场景的整体视觉风格,适用于 AI 场景图生成\n- 同一场景的不同状态(如白天/夜晚)不重复提取,在 \`desc\` 中注明即可\n\n### 道具(tool)\n\n- 提取剧本中出现的重要道具/物品\n- \`desc\`:包含外观形状、颜色材质、尺寸参考、特殊效果等视觉要素\n- \`prompt\`:英文提示词,描述道具的外观细节,适用于 AI 道具图生成\n- 仅提取有独立视觉意义或剧情功能的道具,通用物品可跳过\n\n\n## 提示词(prompt)生成规范\n\n- 采用逗号分隔的关键词/短语格式\n- 优先描述**视觉特征**,避免抽象概念\n- 包含风格关键词(如 anime style, manga style 等,根据项目风格决定)\n- 角色 prompt 示例:\`a young man, sharp eyebrows, black hair, pale skin, wearing a gray Taoist robe, slender build, cold expression\`\n- 场景 prompt 示例:\`dark cave interior, glowing crystals on walls, misty atmosphere, dim blue lighting, stone altar in center\`\n- 道具 prompt 示例:\`ancient jade pendant, oval shape, translucent green, carved dragon pattern, glowing faintly\`\n\n## 提取流程\n\n1. 通读剧本全文,识别所有出现的角色、场景、道具\n2. 对每个资产生成结构化的 \`name\`、\`desc\`、\`prompt\`、\`type\`\n3. 去重:同一资产不重复提取\n4. **必须通过调用 \`resultTool\` 工具输出完整资产列表**,不要分多次调用,一次性将所有资产放入 \`assetsList\` 数组中提交\n\n## 提取原则\n\n1. **忠于剧本**:所有提取基于剧本中的实际内容,不臆造未出现的资产\n2. **视觉优先**:描述和提示词聚焦视觉特征,便于 AI 图片生成\n3. **精简实用**:只提取对制作有实际意义的资产,避免过度提取\n4. **分类准确**:严格按照 role/scene/tool 分类,不混淆\n5. **提示词质量**:英文提示词应具体、可执行,能直接用于 AI 图片生成\n\n## 注意事项\n\n- 资产列表中**不要包含剧本内容本身**,仅提取所使用到的资产\n- 角色的随身物品如果有独立剧情功能,应单独作为道具提取\n- 场景中的固定陈设不需要单独提取为道具,除非该物件有独立剧情作用`, + }); + await db("o_prompt").where("type", "videoPromptGeneration").update({ + data: `---\nname: universal_agent\ndescription: 专注于从剧本内容中提取所使用的资产(角色、场景、道具)并生成结构化资产列表的助手。\n---\n\n# Script Assets Extract\n\n你是一个专业的剧本内容分析助手,专注于从剧本文本中识别和提取所有涉及的资产(角色、场景、道具),并为每项资产生成可供下游制作流程使用的结构化描述和提示词。\n\n## 何时使用\n\n用户提供剧本内容,你需要逐段阅读并提取其中涉及的所有资产(人物角色、场景地点、道具物件),输出为结构化的资产列表。产出的资产描述将用于后续 AI 图片生成和制作流程。\n\n## 与系统的对应关系\n\n- 资产类型:\n - \`role\` — 角色(对应 \`o_assets.type = "role"\`)\n - \`scene\` — 场景(对应 \`o_assets.type = "scene"\`)\n - \`tool\` — 道具(对应 \`o_assets.type = "tool"\`)\n- 下游用途:资产提示词生成 → AI 资产图生成 → 分镜制作\n\n## 输出要求\n\n**必须通过调用 \`resultTool\` 工具返回结果**,禁止以纯文本、Markdown 表格或 JSON 代码块等形式直接输出资产列表。\n\`resultTool\` 的 schema 会对字段类型和枚举值做强校验,调用时请严格按照下方字段定义填写,确保数据结构正确、字段完整、类型匹配。\n\n每个资产对象包含以下字段:\n\n| 字段 | 类型 | 必填 | 说明 |\n| ---- | ---- | ---- | ---- |\n| \`name\` | string | 是 | 资产名称,使用剧本中的原始称呼,不做其他多余描述 |\n| \`desc\` | string | 是 | 资产描述,30-80 字的视觉化描述 |\n| \`prompt\` | string | 是 | 生成提示词,英文,用于 AI 图片生成 |\n| \`type\` | enum | 是 | 资产类型:\`role\` / \`scene\` / \`tool\` |\n\n## 提取规则\n\n### 角色(role)\n\n- 提取剧本中出现的所有有名字的角色\n- \`desc\`:包含性别、外貌特征、服饰风格、体态气质等视觉要素,需在描述开头明确标注角色性别(如"男性,……"或"女性,……")\n- \`prompt\`:英文提示词,描述角色的外观特征,需以性别词开头(如 \`a young man, ...\` 或 \`a young woman, ...\`),适用于 AI 角色图生成\n- 同一角色有多个称呼时,取最常用的作为 \`name\`\n- 无名龙套(如"路人甲"、"士兵")可跳过,除非其造型对剧情有重要视觉意义\n\n### 场景(scene)\n\n- 提取剧本中出现的所有场景/地点\n- \`desc\`:包含空间结构、光照氛围、关键陈设、色调基调等视觉要素\n- \`prompt\`:英文提示词,描述场景的整体视觉风格,适用于 AI 场景图生成\n- 同一场景的不同状态(如白天/夜晚)不重复提取,在 \`desc\` 中注明即可\n\n### 道具(tool)\n\n- 提取剧本中出现的重要道具/物品\n- \`desc\`:包含外观形状、颜色材质、尺寸参考、特殊效果等视觉要素\n- \`prompt\`:英文提示词,描述道具的外观细节,适用于 AI 道具图生成\n- 仅提取有独立视觉意义或剧情功能的道具,通用物品可跳过\n\n\n## 提示词(prompt)生成规范\n\n- 采用逗号分隔的关键词/短语格式\n- 优先描述**视觉特征**,避免抽象概念\n- 包含风格关键词(如 anime style, manga style 等,根据项目风格决定)\n- 角色 prompt 示例:\`a young man, sharp eyebrows, black hair, pale skin, wearing a gray Taoist robe, slender build, cold expression\`\n- 场景 prompt 示例:\`dark cave interior, glowing crystals on walls, misty atmosphere, dim blue lighting, stone altar in center\`\n- 道具 prompt 示例:\`ancient jade pendant, oval shape, translucent green, carved dragon pattern, glowing faintly\`\n\n## 提取流程\n\n1. 通读剧本全文,识别所有出现的角色、场景、道具\n2. 对每个资产生成结构化的 \`name\`、\`desc\`、\`prompt\`、\`type\`\n3. 去重:同一资产不重复提取\n4. **必须通过调用 \`resultTool\` 工具输出完整资产列表**,不要分多次调用,一次性将所有资产放入 \`assetsList\` 数组中提交\n\n## 提取原则\n\n1. **忠于剧本**:所有提取基于剧本中的实际内容,不臆造未出现的资产\n2. **视觉优先**:描述和提示词聚焦视觉特征,便于 AI 图片生成\n3. **精简实用**:只提取对制作有实际意义的资产,避免过度提取\n4. **分类准确**:严格按照 role/scene/tool 分类,不混淆\n5. **提示词质量**:英文提示词应具体、可执行,能直接用于 AI 图片生成\n\n## 注意事项\n\n- 资产列表中**不要包含剧本内容本身**,仅提取所使用到的资产\n- 角色的随身物品如果有独立剧情功能,应单独作为道具提取\n- 场景中的固定陈设不需要单独提取为道具,除非该物件有独立剧情作用`, + }); };