From 80b4ed4ee4c690fbbdfaa03b9b6e4f0b9b6b79f9 Mon Sep 17 00:00:00 2001 From: zhishi <1951671751@qq.com> Date: Fri, 10 Apr 2026 18:32:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=9F=B3=E9=A2=91=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agents/productionAgent/tools.ts | 7 +- src/lib/initDB.ts | 9 + src/router.ts | 534 +++++++++--------- src/routes/assets/addAudioAssets.ts | 66 +++ src/routes/assets/delAssets.ts | 1 + src/routes/assets/getAssetsApi.ts | 1 + src/routes/assets/updateAudioAssets.ts | 98 ++++ src/routes/cornerScape/batchBindAudio.ts | 75 +++ src/routes/cornerScape/getAllAssets.ts | 15 + src/routes/cornerScape/updateAssetsAudio.ts | 23 + .../storyboard/batchGenerateImage.ts | 1 - src/types/database.d.ts | 7 +- 12 files changed, 571 insertions(+), 266 deletions(-) create mode 100644 src/routes/assets/addAudioAssets.ts create mode 100644 src/routes/assets/updateAudioAssets.ts create mode 100644 src/routes/cornerScape/batchBindAudio.ts create mode 100644 src/routes/cornerScape/updateAssetsAudio.ts diff --git a/src/agents/productionAgent/tools.ts b/src/agents/productionAgent/tools.ts index bdebaf2..ac27ff0 100644 --- a/src/agents/productionAgent/tools.ts +++ b/src/agents/productionAgent/tools.ts @@ -86,7 +86,12 @@ export default (toolCpnfig: ToolConfig) => { description: "新增或更新衍生资产", inputSchema: z.object({ assetsId: z.number().describe("关联的资产ID"), - id: z.number().nullable().describe("衍生资产ID,如果新增则为空"), + id: z.preprocess( + (val) => { + if (val === "null" || val === "" || val === undefined) return null; + return val; + }, + z.number().nullable().describe("衍生资产ID,如果新增则为空")), name: z.string().describe("衍生资产名称"), desc: z.string().describe("衍生资产描述"), }), diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index ea025ad..03fb09e 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -935,6 +935,15 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => table.index(["isolationKey", "summarized"]); }, }, + { + name: "o_assetsRole2Audio", + builder: (table) => { + table.integer("assetsRoleId").notNullable(); + table.integer("assetsAudioId").notNullable(); + table.primary(["assetsAudioId", "assetsRoleId"]); + table.unique(["assetsAudioId", "assetsRoleId"]); + }, + }, ]; for (const t of tables) { diff --git a/src/router.ts b/src/router.ts index e04828c..59dd134 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 5f94013d5d29facaed754713858ed40b +// @routes-hash 04a067f990aac8e584acabe110983618 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -8,137 +8,141 @@ import route4 from "./routes/artStyle/editArtStyle"; import route5 from "./routes/artStyle/extractStylePrompt"; import route6 from "./routes/artStyle/getArtStyle"; import route7 from "./routes/assets/addAssets"; -import route8 from "./routes/assets/batchDelete"; -import route9 from "./routes/assets/batchGenerationData"; -import route10 from "./routes/assets/delAssets"; -import route11 from "./routes/assets/delImage"; -import route12 from "./routes/assets/getAssetsApi"; -import route13 from "./routes/assets/getImage"; -import route14 from "./routes/assets/getMaterialData"; -import route15 from "./routes/assets/pollingImageAssets"; -import route16 from "./routes/assets/pollingPromptAssets"; -import route17 from "./routes/assets/saveAssets"; -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/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/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/production/workbench/updateVideoPrompt"; -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/batchAddScript"; -import route97 from "./routes/script/delScript"; -import route98 from "./routes/script/exportScript"; -import route99 from "./routes/script/extractAssets"; -import route100 from "./routes/script/getScrptApi"; -import route101 from "./routes/script/pollScriptAssets"; -import route102 from "./routes/script/updateScript"; -import route103 from "./routes/scriptAgent/getPlanData"; -import route104 from "./routes/scriptAgent/setPlanData"; -import route105 from "./routes/scriptAgent/updateData"; -import route106 from "./routes/setting/about/checkUpdate"; -import route107 from "./routes/setting/about/downloadApp"; -import route108 from "./routes/setting/agentDeploy/agentSetKey"; -import route109 from "./routes/setting/agentDeploy/deployAgentModel"; -import route110 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route111 from "./routes/setting/dbConfig/clearData"; -import route112 from "./routes/setting/dev/getSwitchAiDevTool"; -import route113 from "./routes/setting/dev/updateSwitchAiDevTool"; -import route114 from "./routes/setting/fileManagement/openFolder"; -import route115 from "./routes/setting/getTextModel"; -import route116 from "./routes/setting/loginConfig/getUser"; -import route117 from "./routes/setting/loginConfig/updateUserPwd"; -import route118 from "./routes/setting/memoryConfig/delAllMemory"; -import route119 from "./routes/setting/memoryConfig/getMemory"; -import route120 from "./routes/setting/memoryConfig/sureMemory"; -import route121 from "./routes/setting/promptManage/getPrompt"; -import route122 from "./routes/setting/promptManage/updatePrompt"; -import route123 from "./routes/setting/skillManagement/getSkillContent"; -import route124 from "./routes/setting/skillManagement/getSkillList"; -import route125 from "./routes/setting/skillManagement/saveSkillContent"; -import route126 from "./routes/setting/vendorConfig/addVendor"; -import route127 from "./routes/setting/vendorConfig/deleteVendor"; -import route128 from "./routes/setting/vendorConfig/enableVendor"; -import route129 from "./routes/setting/vendorConfig/getCodeByLink"; -import route130 from "./routes/setting/vendorConfig/getVendorList"; -import route131 from "./routes/setting/vendorConfig/modelTest"; -import route132 from "./routes/setting/vendorConfig/updateCode"; -import route133 from "./routes/setting/vendorConfig/updateVendor"; -import route134 from "./routes/task/getProject"; -import route135 from "./routes/task/getTaskApi"; -import route136 from "./routes/task/getTaskCategories"; -import route137 from "./routes/task/taskDetails"; -import route138 from "./routes/test/test"; +import route8 from "./routes/assets/addAudioAssets"; +import route9 from "./routes/assets/batchDelete"; +import route10 from "./routes/assets/batchGenerationData"; +import route11 from "./routes/assets/delAssets"; +import route12 from "./routes/assets/delImage"; +import route13 from "./routes/assets/getAssetsApi"; +import route14 from "./routes/assets/getImage"; +import route15 from "./routes/assets/getMaterialData"; +import route16 from "./routes/assets/pollingImageAssets"; +import route17 from "./routes/assets/pollingPromptAssets"; +import route18 from "./routes/assets/saveAssets"; +import route19 from "./routes/assets/updateAssets"; +import route20 from "./routes/assets/updateAudioAssets"; +import route21 from "./routes/assets/uploadClip"; +import route22 from "./routes/assetsGenerate/batchGenerateImageAssets"; +import route23 from "./routes/assetsGenerate/batchPolishAssetsPrompt"; +import route24 from "./routes/assetsGenerate/cancelGenerate"; +import route25 from "./routes/assetsGenerate/generateAssets"; +import route26 from "./routes/assetsGenerate/polishAssetsPrompt"; +import route27 from "./routes/cornerScape/batchBindAudio"; +import route28 from "./routes/cornerScape/getAllAssets"; +import route29 from "./routes/cornerScape/updateAssetsAudio"; +import route30 from "./routes/general/generalStatistics"; +import route31 from "./routes/general/getSingleProject"; +import route32 from "./routes/general/updateProject"; +import route33 from "./routes/login/login"; +import route34 from "./routes/migrate/migrateData"; +import route35 from "./routes/modelSelect/getModelDetail"; +import route36 from "./routes/modelSelect/getModelList"; +import route37 from "./routes/novel/addNovel"; +import route38 from "./routes/novel/batchDeleteNovel"; +import route39 from "./routes/novel/delNovel"; +import route40 from "./routes/novel/event/batchDeleteEvent"; +import route41 from "./routes/novel/event/deletEvent"; +import route42 from "./routes/novel/event/generateEvents"; +import route43 from "./routes/novel/event/getEvent"; +import route44 from "./routes/novel/getNovel"; +import route45 from "./routes/novel/getNovelData"; +import route46 from "./routes/novel/getNovelEventState"; +import route47 from "./routes/novel/getNovelIndex"; +import route48 from "./routes/novel/updateNovel"; +import route49 from "./routes/other/deleteAllData"; +import route50 from "./routes/other/getVersion"; +import route51 from "./routes/production/assets/batchGenerateAssetsImage"; +import route52 from "./routes/production/assets/deleteAssetsDireve"; +import route53 from "./routes/production/assets/getAssetsData"; +import route54 from "./routes/production/assets/pollingImage"; +import route55 from "./routes/production/assets/updateAssetsUrl"; +import route56 from "./routes/production/editImage/generateFlowImage"; +import route57 from "./routes/production/editImage/getImageDefaultModle"; +import route58 from "./routes/production/editImage/getImageFlow"; +import route59 from "./routes/production/editImage/saveImageFlow"; +import route60 from "./routes/production/editImage/updateImageFlow"; +import route61 from "./routes/production/editImage/uploadImage"; +import route62 from "./routes/production/getFlowData"; +import route63 from "./routes/production/getProductionData"; +import route64 from "./routes/production/getStoryboardData"; +import route65 from "./routes/production/saveFlowData"; +import route66 from "./routes/production/storyboard/addStoryboard"; +import route67 from "./routes/production/storyboard/batchAddStoryboardInfo"; +import route68 from "./routes/production/storyboard/batchGenerateImage"; +import route69 from "./routes/production/storyboard/downPreviewImage"; +import route70 from "./routes/production/storyboard/editStoryboardInfo"; +import route71 from "./routes/production/storyboard/getStoryboardData"; +import route72 from "./routes/production/storyboard/pollingImage"; +import route73 from "./routes/production/storyboard/previewImage"; +import route74 from "./routes/production/storyboard/removeFrame"; +import route75 from "./routes/production/storyboard/updateStoryboardUrl"; +import route76 from "./routes/production/workbench/addTrack"; +import route77 from "./routes/production/workbench/deleteTrack"; +import route78 from "./routes/production/workbench/delVideo"; +import route79 from "./routes/production/workbench/generateVideo"; +import route80 from "./routes/production/workbench/generateVideoPrompt"; +import route81 from "./routes/production/workbench/getGenerateData"; +import route82 from "./routes/production/workbench/getVideoList"; +import route83 from "./routes/production/workbench/getVideoModelDetail"; +import route84 from "./routes/production/workbench/selectVideo"; +import route85 from "./routes/production/workbench/updateVideoPrompt"; +import route86 from "./routes/project/addDirectorManual"; +import route87 from "./routes/project/addProject"; +import route88 from "./routes/project/addVisualManual"; +import route89 from "./routes/project/deleteDirectorManual"; +import route90 from "./routes/project/deleteVisualManual"; +import route91 from "./routes/project/delProject"; +import route92 from "./routes/project/editDirectorlManual"; +import route93 from "./routes/project/editProject"; +import route94 from "./routes/project/editVisualManual"; +import route95 from "./routes/project/getProject"; +import route96 from "./routes/project/getVisualManual"; +import route97 from "./routes/project/queryDirectorManual"; +import route98 from "./routes/project/visualManual"; +import route99 from "./routes/script/addScript"; +import route100 from "./routes/script/batchAddScript"; +import route101 from "./routes/script/delScript"; +import route102 from "./routes/script/exportScript"; +import route103 from "./routes/script/extractAssets"; +import route104 from "./routes/script/getScrptApi"; +import route105 from "./routes/script/pollScriptAssets"; +import route106 from "./routes/script/updateScript"; +import route107 from "./routes/scriptAgent/getPlanData"; +import route108 from "./routes/scriptAgent/setPlanData"; +import route109 from "./routes/scriptAgent/updateData"; +import route110 from "./routes/setting/about/checkUpdate"; +import route111 from "./routes/setting/about/downloadApp"; +import route112 from "./routes/setting/agentDeploy/agentSetKey"; +import route113 from "./routes/setting/agentDeploy/deployAgentModel"; +import route114 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route115 from "./routes/setting/dbConfig/clearData"; +import route116 from "./routes/setting/dev/getSwitchAiDevTool"; +import route117 from "./routes/setting/dev/updateSwitchAiDevTool"; +import route118 from "./routes/setting/fileManagement/openFolder"; +import route119 from "./routes/setting/getTextModel"; +import route120 from "./routes/setting/loginConfig/getUser"; +import route121 from "./routes/setting/loginConfig/updateUserPwd"; +import route122 from "./routes/setting/memoryConfig/delAllMemory"; +import route123 from "./routes/setting/memoryConfig/getMemory"; +import route124 from "./routes/setting/memoryConfig/sureMemory"; +import route125 from "./routes/setting/promptManage/getPrompt"; +import route126 from "./routes/setting/promptManage/updatePrompt"; +import route127 from "./routes/setting/skillManagement/getSkillContent"; +import route128 from "./routes/setting/skillManagement/getSkillList"; +import route129 from "./routes/setting/skillManagement/saveSkillContent"; +import route130 from "./routes/setting/vendorConfig/addVendor"; +import route131 from "./routes/setting/vendorConfig/deleteVendor"; +import route132 from "./routes/setting/vendorConfig/enableVendor"; +import route133 from "./routes/setting/vendorConfig/getCodeByLink"; +import route134 from "./routes/setting/vendorConfig/getVendorList"; +import route135 from "./routes/setting/vendorConfig/modelTest"; +import route136 from "./routes/setting/vendorConfig/updateCode"; +import route137 from "./routes/setting/vendorConfig/updateVendor"; +import route138 from "./routes/task/getProject"; +import route139 from "./routes/task/getTaskApi"; +import route140 from "./routes/task/getTaskCategories"; +import route141 from "./routes/task/taskDetails"; +import route142 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -148,135 +152,139 @@ export default async (app: Express) => { app.use("/api/artStyle/extractStylePrompt", route5); app.use("/api/artStyle/getArtStyle", route6); app.use("/api/assets/addAssets", route7); - app.use("/api/assets/batchDelete", route8); - app.use("/api/assets/batchGenerationData", route9); - app.use("/api/assets/delAssets", route10); - app.use("/api/assets/delImage", route11); - app.use("/api/assets/getAssetsApi", route12); - app.use("/api/assets/getImage", route13); - app.use("/api/assets/getMaterialData", route14); - app.use("/api/assets/pollingImageAssets", route15); - app.use("/api/assets/pollingPromptAssets", route16); - app.use("/api/assets/saveAssets", route17); - app.use("/api/assets/updateAssets", route18); - app.use("/api/assets/uploadClip", route19); - app.use("/api/assetsGenerate/batchGenerateImageAssets", route20); - app.use("/api/assetsGenerate/batchPolishAssetsPrompt", route21); - 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/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/production/workbench/updateVideoPrompt", 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/batchAddScript", route96); - app.use("/api/script/delScript", route97); - app.use("/api/script/exportScript", route98); - app.use("/api/script/extractAssets", route99); - app.use("/api/script/getScrptApi", route100); - app.use("/api/script/pollScriptAssets", route101); - app.use("/api/script/updateScript", route102); - app.use("/api/scriptAgent/getPlanData", route103); - app.use("/api/scriptAgent/setPlanData", route104); - app.use("/api/scriptAgent/updateData", route105); - app.use("/api/setting/about/checkUpdate", route106); - app.use("/api/setting/about/downloadApp", route107); - app.use("/api/setting/agentDeploy/agentSetKey", route108); - app.use("/api/setting/agentDeploy/deployAgentModel", route109); - app.use("/api/setting/agentDeploy/getAgentDeploy", route110); - app.use("/api/setting/dbConfig/clearData", route111); - app.use("/api/setting/dev/getSwitchAiDevTool", route112); - app.use("/api/setting/dev/updateSwitchAiDevTool", route113); - app.use("/api/setting/fileManagement/openFolder", route114); - app.use("/api/setting/getTextModel", route115); - app.use("/api/setting/loginConfig/getUser", route116); - app.use("/api/setting/loginConfig/updateUserPwd", route117); - app.use("/api/setting/memoryConfig/delAllMemory", route118); - app.use("/api/setting/memoryConfig/getMemory", route119); - app.use("/api/setting/memoryConfig/sureMemory", route120); - app.use("/api/setting/promptManage/getPrompt", route121); - app.use("/api/setting/promptManage/updatePrompt", route122); - app.use("/api/setting/skillManagement/getSkillContent", route123); - app.use("/api/setting/skillManagement/getSkillList", route124); - app.use("/api/setting/skillManagement/saveSkillContent", route125); - app.use("/api/setting/vendorConfig/addVendor", route126); - app.use("/api/setting/vendorConfig/deleteVendor", route127); - app.use("/api/setting/vendorConfig/enableVendor", route128); - app.use("/api/setting/vendorConfig/getCodeByLink", route129); - app.use("/api/setting/vendorConfig/getVendorList", route130); - app.use("/api/setting/vendorConfig/modelTest", route131); - app.use("/api/setting/vendorConfig/updateCode", route132); - app.use("/api/setting/vendorConfig/updateVendor", route133); - app.use("/api/task/getProject", route134); - app.use("/api/task/getTaskApi", route135); - app.use("/api/task/getTaskCategories", route136); - app.use("/api/task/taskDetails", route137); - app.use("/api/test/test", route138); + app.use("/api/assets/addAudioAssets", route8); + app.use("/api/assets/batchDelete", route9); + app.use("/api/assets/batchGenerationData", route10); + app.use("/api/assets/delAssets", route11); + app.use("/api/assets/delImage", route12); + app.use("/api/assets/getAssetsApi", route13); + app.use("/api/assets/getImage", route14); + app.use("/api/assets/getMaterialData", route15); + app.use("/api/assets/pollingImageAssets", route16); + app.use("/api/assets/pollingPromptAssets", route17); + app.use("/api/assets/saveAssets", route18); + app.use("/api/assets/updateAssets", route19); + app.use("/api/assets/updateAudioAssets", route20); + app.use("/api/assets/uploadClip", route21); + app.use("/api/assetsGenerate/batchGenerateImageAssets", route22); + app.use("/api/assetsGenerate/batchPolishAssetsPrompt", route23); + app.use("/api/assetsGenerate/cancelGenerate", route24); + app.use("/api/assetsGenerate/generateAssets", route25); + app.use("/api/assetsGenerate/polishAssetsPrompt", route26); + app.use("/api/cornerScape/batchBindAudio", route27); + app.use("/api/cornerScape/getAllAssets", route28); + app.use("/api/cornerScape/updateAssetsAudio", route29); + app.use("/api/general/generalStatistics", route30); + app.use("/api/general/getSingleProject", route31); + app.use("/api/general/updateProject", route32); + app.use("/api/login/login", route33); + app.use("/api/migrate/migrateData", route34); + app.use("/api/modelSelect/getModelDetail", route35); + app.use("/api/modelSelect/getModelList", route36); + app.use("/api/novel/addNovel", route37); + app.use("/api/novel/batchDeleteNovel", route38); + app.use("/api/novel/delNovel", route39); + app.use("/api/novel/event/batchDeleteEvent", route40); + app.use("/api/novel/event/deletEvent", route41); + app.use("/api/novel/event/generateEvents", route42); + app.use("/api/novel/event/getEvent", route43); + app.use("/api/novel/getNovel", route44); + app.use("/api/novel/getNovelData", route45); + app.use("/api/novel/getNovelEventState", route46); + app.use("/api/novel/getNovelIndex", route47); + app.use("/api/novel/updateNovel", route48); + app.use("/api/other/deleteAllData", route49); + app.use("/api/other/getVersion", route50); + app.use("/api/production/assets/batchGenerateAssetsImage", route51); + app.use("/api/production/assets/deleteAssetsDireve", route52); + app.use("/api/production/assets/getAssetsData", route53); + app.use("/api/production/assets/pollingImage", route54); + app.use("/api/production/assets/updateAssetsUrl", route55); + app.use("/api/production/editImage/generateFlowImage", route56); + app.use("/api/production/editImage/getImageDefaultModle", route57); + app.use("/api/production/editImage/getImageFlow", route58); + app.use("/api/production/editImage/saveImageFlow", route59); + app.use("/api/production/editImage/updateImageFlow", route60); + app.use("/api/production/editImage/uploadImage", route61); + app.use("/api/production/getFlowData", route62); + app.use("/api/production/getProductionData", route63); + app.use("/api/production/getStoryboardData", route64); + app.use("/api/production/saveFlowData", route65); + app.use("/api/production/storyboard/addStoryboard", route66); + app.use("/api/production/storyboard/batchAddStoryboardInfo", route67); + app.use("/api/production/storyboard/batchGenerateImage", route68); + app.use("/api/production/storyboard/downPreviewImage", route69); + app.use("/api/production/storyboard/editStoryboardInfo", route70); + app.use("/api/production/storyboard/getStoryboardData", route71); + app.use("/api/production/storyboard/pollingImage", route72); + app.use("/api/production/storyboard/previewImage", route73); + app.use("/api/production/storyboard/removeFrame", route74); + app.use("/api/production/storyboard/updateStoryboardUrl", route75); + app.use("/api/production/workbench/addTrack", route76); + app.use("/api/production/workbench/deleteTrack", route77); + app.use("/api/production/workbench/delVideo", route78); + app.use("/api/production/workbench/generateVideo", route79); + app.use("/api/production/workbench/generateVideoPrompt", route80); + app.use("/api/production/workbench/getGenerateData", route81); + app.use("/api/production/workbench/getVideoList", route82); + app.use("/api/production/workbench/getVideoModelDetail", route83); + app.use("/api/production/workbench/selectVideo", route84); + app.use("/api/production/workbench/updateVideoPrompt", route85); + app.use("/api/project/addDirectorManual", route86); + app.use("/api/project/addProject", route87); + app.use("/api/project/addVisualManual", route88); + app.use("/api/project/deleteDirectorManual", route89); + app.use("/api/project/deleteVisualManual", route90); + app.use("/api/project/delProject", route91); + app.use("/api/project/editDirectorlManual", route92); + app.use("/api/project/editProject", route93); + app.use("/api/project/editVisualManual", route94); + app.use("/api/project/getProject", route95); + app.use("/api/project/getVisualManual", route96); + app.use("/api/project/queryDirectorManual", route97); + app.use("/api/project/visualManual", route98); + app.use("/api/script/addScript", route99); + app.use("/api/script/batchAddScript", route100); + app.use("/api/script/delScript", route101); + app.use("/api/script/exportScript", route102); + app.use("/api/script/extractAssets", route103); + app.use("/api/script/getScrptApi", route104); + app.use("/api/script/pollScriptAssets", route105); + app.use("/api/script/updateScript", route106); + app.use("/api/scriptAgent/getPlanData", route107); + app.use("/api/scriptAgent/setPlanData", route108); + app.use("/api/scriptAgent/updateData", route109); + app.use("/api/setting/about/checkUpdate", route110); + app.use("/api/setting/about/downloadApp", route111); + app.use("/api/setting/agentDeploy/agentSetKey", route112); + app.use("/api/setting/agentDeploy/deployAgentModel", route113); + app.use("/api/setting/agentDeploy/getAgentDeploy", route114); + app.use("/api/setting/dbConfig/clearData", route115); + app.use("/api/setting/dev/getSwitchAiDevTool", route116); + app.use("/api/setting/dev/updateSwitchAiDevTool", route117); + app.use("/api/setting/fileManagement/openFolder", route118); + app.use("/api/setting/getTextModel", route119); + app.use("/api/setting/loginConfig/getUser", route120); + app.use("/api/setting/loginConfig/updateUserPwd", route121); + app.use("/api/setting/memoryConfig/delAllMemory", route122); + app.use("/api/setting/memoryConfig/getMemory", route123); + app.use("/api/setting/memoryConfig/sureMemory", route124); + app.use("/api/setting/promptManage/getPrompt", route125); + app.use("/api/setting/promptManage/updatePrompt", route126); + app.use("/api/setting/skillManagement/getSkillContent", route127); + app.use("/api/setting/skillManagement/getSkillList", route128); + app.use("/api/setting/skillManagement/saveSkillContent", route129); + app.use("/api/setting/vendorConfig/addVendor", route130); + app.use("/api/setting/vendorConfig/deleteVendor", route131); + app.use("/api/setting/vendorConfig/enableVendor", route132); + app.use("/api/setting/vendorConfig/getCodeByLink", route133); + app.use("/api/setting/vendorConfig/getVendorList", route134); + app.use("/api/setting/vendorConfig/modelTest", route135); + app.use("/api/setting/vendorConfig/updateCode", route136); + app.use("/api/setting/vendorConfig/updateVendor", route137); + app.use("/api/task/getProject", route138); + app.use("/api/task/getTaskApi", route139); + app.use("/api/task/getTaskCategories", route140); + app.use("/api/task/taskDetails", route141); + app.use("/api/test/test", route142); } diff --git a/src/routes/assets/addAudioAssets.ts b/src/routes/assets/addAudioAssets.ts new file mode 100644 index 0000000..6b4b527 --- /dev/null +++ b/src/routes/assets/addAudioAssets.ts @@ -0,0 +1,66 @@ +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({ + name: z.string(), + describe: z.string(), + projectId: z.number(), + assetsItem: z.array( + z.object({ + base64: z.string(), + prompt: z.string(), + describe: z.string(), + name: z.string(), + }), + ), + }), + async (req, res) => { + const { name, describe, projectId, assetsItem } = req.body; + await Promise.all( + assetsItem.map(async (i: { src?: string; base64: string; prompt: string }) => { + if (i.base64) { + const savePath = `/${projectId}/assets/audio/${u.uuid()}.mp4`; + await u.oss.writeFile(savePath, i.base64); + i.src = savePath; + } + }), + ); + + const [id] = await u.db("o_assets").insert({ + name, + describe, + type: "audio", + projectId, + startTime: Date.now(), + }); + for (const item of assetsItem) { + const [assetsId] = await u.db("o_assets").insert({ + prompt: item.prompt, + assetsId: id, + type: "audio", + describe: item.describe, + name: item.name, + projectId, + startTime: Date.now(), + }); + const [imageId] = await u.db("o_image").insert({ + filePath: item.src, + type: "audio", + assetsId, + state: "已完成", + }); + await u.db("o_assets").where("id", assetsId).update({ + imageId, + }); + } + + res.status(200).send(success({ message: "新增资产成功" })); + }, +); diff --git a/src/routes/assets/delAssets.ts b/src/routes/assets/delAssets.ts index cbca48f..faec2b8 100644 --- a/src/routes/assets/delAssets.ts +++ b/src/routes/assets/delAssets.ts @@ -28,6 +28,7 @@ export default router.post( } await u.db("o_image").where({ assetsId: id }).delete(); await u.db("o_assets").where({ id }).delete(); + await u.db("o_assets").where("assetsId", id).delete(); res.status(200).send(success({ message: "删除资产成功" })); }, ); diff --git a/src/routes/assets/getAssetsApi.ts b/src/routes/assets/getAssetsApi.ts index c3d95b1..c117998 100644 --- a/src/routes/assets/getAssetsApi.ts +++ b/src/routes/assets/getAssetsApi.ts @@ -57,6 +57,7 @@ export default router.post( ...parent, sonAssets: childAssetsWithSrc.filter((child) => child.assetsId === parent.id), src: parent.filePath && (await u.oss.getFileUrl(parent.filePath!)), + ...(parent.type == "audio" ? { sex: parent.describe?.split("|")[0], describe: parent.describe?.split("|")[1] } : {}), })), ); diff --git a/src/routes/assets/updateAudioAssets.ts b/src/routes/assets/updateAudioAssets.ts new file mode 100644 index 0000000..6d112ac --- /dev/null +++ b/src/routes/assets/updateAudioAssets.ts @@ -0,0 +1,98 @@ +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(), + name: z.string(), + describe: z.string(), + projectId: z.number(), + assetsItem: z.array( + z.object({ + src: z.string().optional(), + id: z.number().optional(), + base64: z.string().optional(), + prompt: z.string(), + describe: z.string(), + name: z.string(), + }), + ), + }), + async (req, res) => { + const { id, name, describe, projectId, assetsItem } = req.body; + await Promise.all( + assetsItem.map(async (i: { src?: string; id?: number; base64: string; prompt: string }) => { + if (i.src) { + i.src = u.replaceUrl(i.src); + } + if (i.base64) { + const savePath = `/${projectId}/assets/audio/${u.uuid()}.mp4`; + await u.oss.writeFile(savePath, i.base64); + i.src = savePath; + } + }), + ); + + await u.db("o_assets").where("id", id).update({ + name, + describe, + }); + + // 删除不在 assetsItem 中的子项 + const existingItems = await u.db("o_assets").where("assetsId", id).select("id"); + const existingIds = existingItems.map((i: { id?: number }) => i.id!); + const incomingIds = assetsItem.filter((i: { id?: number }) => i.id).map((i: { id?: number }) => i.id); + const toDeleteIds = existingIds.filter((eid: number) => !incomingIds.includes(eid)); + if (toDeleteIds.length > 0) { + const deleteItems = await u.db("o_assets").whereIn("id", toDeleteIds).select("imageId"); + const deleteImageIds = deleteItems.map((i: { imageId?: number | null }) => i.imageId!).filter(Boolean); + // 先将 o_assets.imageId 置空,解除外键约束,再删除 o_image,最后删除 o_assets + await u.db("o_assets").whereIn("id", toDeleteIds).update({ imageId: null }); + if (deleteImageIds.length > 0) { + await u.db("o_image").whereIn("id", deleteImageIds).delete(); + } + await u.db("o_assets").whereIn("id", toDeleteIds).delete(); + } + + for (const item of assetsItem) { + if (item.id) { + await u.db("o_assets").where("id", item.id).update({ + prompt: item.prompt, + describe: item.describe, + name: item.name, + }); + const itemData = await u.db("o_assets").where("id", item.id).select("imageId").first(); + await u.db("o_image").where("id", itemData?.imageId).update({ + filePath: item.src, + }); + } else { + const [assetsId] = await u.db("o_assets").insert({ + prompt: item.prompt, + assetsId: id, + type: "audio", + projectId, + describe: item.describe, + name: item.name, + startTime: Date.now(), + }); + const [imageId] = await u.db("o_image").insert({ + filePath: item.src, + type: "audio", + assetsId, + state: "已完成", + }); + await u.db("o_assets").where("id", assetsId).update({ + imageId, + }); + } + } + + res.status(200).send(success({ message: "新增资产成功" })); + }, +); diff --git a/src/routes/cornerScape/batchBindAudio.ts b/src/routes/cornerScape/batchBindAudio.ts new file mode 100644 index 0000000..6da14ca --- /dev/null +++ b/src/routes/cornerScape/batchBindAudio.ts @@ -0,0 +1,75 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +import { tool } from "ai"; +const router = express.Router(); + +// 获取资产 +export default router.post( + "/", + validateFields({ + projectId: z.number(), + assetsIds: z.array(z.number()), + concurrentCount: z.number().min(1).optional(), + }), + async (req, res) => { + const { projectId, assetsIds, concurrentCount } = req.body; + const assetsData = await u + .db("o_assets") + .where("type", "audio") + .whereIn("id", assetsIds) + .andWhere("projectId", projectId) + .select("id", "name", "describe"); + console.log("%c Line:20 🍎 assetsData", "background:#b03734", assetsData); + + const audioData = await u.db("o_assets").where("type", "audio").whereNull("assetsId").andWhere("projectId", projectId).select("id", "name", "describe"); + console.log("%c Line:26 🍋 audioData", "background:#ea7e5c", audioData); + async function processGroup() { + try { + const resultTool = tool({ + description: "返回结果时必须调用这个工具", + inputSchema: z.object({ + result: z.array(z.object({ + id: z.number(), + audioIds: z.array(z.number()).describe("适配的音频id 无适配内容可以为 空数组") + })).describe("适配的音色列表,id为资产id,audioIds为适配的音频id 无适配内容可以为 空数组") + }), + execute: async ({ result }) => { + console.log("[tools] extractAssets result", result); + for (const item of result) { + await u.db("o_assetsRole2Audio").where("assetsRoleId", item.id).delete() + if (item.audioIds.length) + await u.db("o_assetsRole2Audio").insert(item.audioIds.map(i => ({ assetsRoleId: item.id, assetsAudioId: i }))) + } + return "无需回复用户任何内容"; + }, + }); + + const { text } = await u.Ai.Text("universalAi").invoke({ + messages: [ + { + role: "system", + content: `请根据提供的资产内容描述 与 提供的音色 进行匹配,返回适配的音色,结果必须调用 resultTool 工具返回, 调用工具之后你无需回复用户任何内容。`, + }, + { + role: "user", + content: `音频内容:${audioData.map(i => `Id:${i.id},音色名称:${i.name},描述:${i.describe}`).join("\n")}\n\n + 资产内容:${assetsData.map(i => `ID:${i.id},名称:${i.name},描述:${i.describe}`).join("\n")}\n\n + 请根据提供的资产内容描述 与 对应已有的音色 进行匹配,返回适配的音色`, + }, + ], + tools: { resultTool }, + }); + console.log("%c Line:44 🍞 text", "background:#f5ce50", text); + + } catch (e) { + console.error(`提取失败:`, e); + return; + } + } + await processGroup() + res.status(200).send(success()); + }, +); diff --git a/src/routes/cornerScape/getAllAssets.ts b/src/routes/cornerScape/getAllAssets.ts index c0446fb..f62d7bf 100644 --- a/src/routes/cornerScape/getAllAssets.ts +++ b/src/routes/cornerScape/getAllAssets.ts @@ -32,6 +32,20 @@ export default router.post( if (type && type.length > 0) qb.whereIn("o_assets.type", type); }) .orderByRaw(`CASE o_assets.type WHEN 'role' THEN 1 WHEN 'scene' THEN 2 WHEN 'tool' THEN 3 ELSE 4 END`); + const assets2AudioData = await u + .db("o_assetsRole2Audio") + .leftJoin("o_assets", "o_assets.id", "o_assetsRole2Audio.assetsRoleId") + .whereIn( + "assetsRoleId", + data.map((i:any) => i.id!), + ) + .select( "o_assets.id", "o_assets.name"); + console.log("%c Line:36 🍎 assets2AudioData", "background:#3f7cff", assets2AudioData); + const repleAssets:Record = {}; + assets2AudioData.forEach((item) => { + if (!repleAssets[item.id]) repleAssets[item.id] = [item]; + else repleAssets[item.id].push(item); + }); const result = await Promise.all( data.map(async (parent: any) => { const historyImages = await u.db("o_image").where("assetsId", parent.id).andWhere("state", "已完成").select("id", "filePath"); @@ -45,6 +59,7 @@ export default router.post( ...parent, filePath: parent.filePath && (await u.oss.getFileUrl(parent.filePath!)), historyImages: historyImagesWithUrl, + relepedAudio:repleAssets[parent.id] ?? [] }; }), ); diff --git a/src/routes/cornerScape/updateAssetsAudio.ts b/src/routes/cornerScape/updateAssetsAudio.ts new file mode 100644 index 0000000..a8f6b4d --- /dev/null +++ b/src/routes/cornerScape/updateAssetsAudio.ts @@ -0,0 +1,23 @@ +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({ + assetsId: z.number(), + audioIds: z.array(z.number()), + }), + async (req, res) => { + const { assetsId, audioIds } = req.body; + await u.db("o_assetsRole2Audio").where("assetsRoleId", assetsId).delete(); + if (audioIds.length) { + await u.db("o_assetsRole2Audio").insert(audioIds.map((i: number) => ({ assetsRoleId: assetsId, assetsAudioId: i }))); + } + res.status(200).send(success({ message: "更新音频成功" })); + }, +); diff --git a/src/routes/production/storyboard/batchGenerateImage.ts b/src/routes/production/storyboard/batchGenerateImage.ts index cf19a06..d66463b 100644 --- a/src/routes/production/storyboard/batchGenerateImage.ts +++ b/src/routes/production/storyboard/batchGenerateImage.ts @@ -55,7 +55,6 @@ export default router.post( .leftJoin("o_assets2Storyboard", "o_assets.id", "o_assets2Storyboard.assetId") .whereIn("o_assets2Storyboard.storyboardId", finalStoryboardIds) .select("o_assets2Storyboard.storyboardId", "o_assets.imageId"); - console.log("%c Line:42 🥪 assetData", "background:#ea7e5c", assetData); const assetRecord: Record = {}; assetData.forEach((item: any) => { diff --git a/src/types/database.d.ts b/src/types/database.d.ts index 2a9745d..a787e02 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 3296433eb24314b094ac5d3839c049c5 +// @db-hash 71e339c0a728c10bedb294a93976dcd8 //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -59,6 +59,10 @@ export interface o_assets2Storyboard { 'assetId'?: number; 'storyboardId'?: number; } +export interface o_assetsRole2Audio { + 'assetsAudioId'?: number; + 'assetsRoleId'?: number; +} export interface o_event { 'createTime'?: number | null; 'detail'?: string | null; @@ -238,6 +242,7 @@ export interface DB { "o_artStyle": o_artStyle; "o_assets": o_assets; "o_assets2Storyboard": o_assets2Storyboard; + "o_assetsRole2Audio": o_assetsRole2Audio; "o_event": o_event; "o_eventChapter": o_eventChapter; "o_image": o_image;