diff --git a/data/skills/art_prompts/chinese_sweet_romance/README.md b/data/skills/art_prompts/chinese_sweet_romance/README.md index 32ec9f7..7c3c2c7 100644 --- a/data/skills/art_prompts/chinese_sweet_romance/README.md +++ b/data/skills/art_prompts/chinese_sweet_romance/README.md @@ -1,5 +1,3 @@ -# 全局美学基础 · 古风甜宠写实超现实主义 -123 123 1212121212的王师傅水电费第三方水电费 1212121212 diff --git a/data/skills/art_prompts/chinese_sweet_romance/images/f0f89ce4-b197-4bd6-9794-3d14d1c3ab1e.jpg b/data/skills/art_prompts/chinese_sweet_romance/images/f0f89ce4-b197-4bd6-9794-3d14d1c3ab1e.jpg new file mode 100644 index 0000000..9ec69a9 Binary files /dev/null and b/data/skills/art_prompts/chinese_sweet_romance/images/f0f89ce4-b197-4bd6-9794-3d14d1c3ab1e.jpg differ diff --git a/data/skills/production_agent_execution.md b/data/skills/production_agent_execution.md index 47f90bf..7522a1e 100644 --- a/data/skills/production_agent_execution.md +++ b/data/skills/production_agent_execution.md @@ -664,7 +664,7 @@ Image [2]: @图2 — [外貌关键描述] ### 约束 - 前置条件:分镜表已构建完成且用户已确认 -- 你必须使用XML格式写入工作区分镜面板: +- 你必须使用XML格式写入工作区分镜面板: - 分组总时长约束:每个 `group` 的累计时长不得超过 15 秒 - 行数一致性约束:分镜面板 `items` 数量必须与 `stoaryTable` 的分镜数据行数量完全一致(不包含表头与分隔行) - 时长一致性约束:分镜面板 `duration` 必须与 `stoaryTable` 对应行时长完全一致 diff --git a/src/agents/productionAgent/index.ts b/src/agents/productionAgent/index.ts index 37665b1..441d3e7 100644 --- a/src/agents/productionAgent/index.ts +++ b/src/agents/productionAgent/index.ts @@ -135,7 +135,7 @@ function createSubAgent(parentCtx: AgentContext) { "你必须使用如下XML格式写入工作区:\n```", "拍摄计划:内容", "分镜表:内容", - "分镜面板:", + "分镜面板:", "```", ].join("\n"); const projectData = await u.db("o_project").where("id", resTool.data.projectId).first(); diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index 235a9b1..d1c44d3 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -256,11 +256,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => - 多条平行事件线时,选对主角影响最大的一条,其余简要带过 - 对话密集章节,关注对话推动了什么结果,而非复述对话内容`, }, - { - name: "资产提示词生成", - type: "assetsPromptGeneration", - data: "# 资产提示词生成指令 根据提供的项目参数和资产设定,生成符合要求的提示词\n\n请根据以下参数生成提示词:\n\n**基础参数:**\n- 风格: {风格}\n- 小说类型: {小说类型}\n- 小说背景: {小说背景}\n\n**资产设定:**\n- 类型: {角色/场景/道具}\n- 名称:{名称}\n- 描述:{描述}\n\n请严格按照skill规范生成提示词。", - }, { name: "剧本资产提取", type: "scriptAssetExtraction", @@ -355,6 +350,11 @@ description: 专注于从剧本内容中提取所使用的资产(角色、场 - 场景中的固定陈设不需要单独提取为道具,除非该物件有独立剧情作用 `, }, + { + name: "视频提示词生成", + type: "videoPromptGeneration", + data: "根据以下提示词生成一个视频提示词", + }, ]); }, }, diff --git a/src/routes/production/getFlowData.ts b/src/routes/production/getFlowData.ts index 309e904..0df76f0 100644 --- a/src/routes/production/getFlowData.ts +++ b/src/routes/production/getFlowData.ts @@ -27,18 +27,20 @@ export default router.post( const assetsData = await u .db("o_assets") .leftJoin("o_image", "o_assets.imageId", "o_image.id") - .select("o_assets.*", "o_image.filePath", "o_image.state") + .select("o_assets.*", "o_image.filePath", "o_image.state", "o_image.errorReason") // @ts-ignore .where("o_assets.id", "in", assetIds) - .whereNull("o_assets.assetsId") + .andWhere("o_assets.assetsId", null) .where("o_assets.projectId", projectId); + console.log("%c Line:28 🎂 assetsData", "background:#6ec1c2", assetsData); + let childAssetsData = await u .db("o_assets") .leftJoin("o_image", "o_assets.imageId", "o_image.id") - .select("o_assets.*", "o_image.filePath", "o_image.state") + .select("o_assets.*", "o_image.filePath", "o_image.state", "o_image.errorReason") .where("o_assets.projectId", projectId) // @ts-ignore - .where("o_assets.id", "in", assetIds) + .where("o_assets.assetsId", "in", assetIds) .whereNotNull("o_assets.assetsId"); if (!sqlData) { @@ -141,6 +143,8 @@ export default router.post( associateAssetsIds: assets2StoryboardMap[i.id!] ?? [], src: i.filePath, state: i.state, + videoDesc: i.videoDesc, + shouldGenerateImage: i.shouldGenerateImage, reason: i?.reason ?? "", })) .sort((a, b) => (a.index ?? 0) - (b.index ?? 0)); diff --git a/src/routes/production/storyboard/editStoryboardInfo.ts b/src/routes/production/storyboard/editStoryboardInfo.ts index b62449c..ab2f78e 100644 --- a/src/routes/production/storyboard/editStoryboardInfo.ts +++ b/src/routes/production/storyboard/editStoryboardInfo.ts @@ -14,7 +14,7 @@ export default router.post( videoDesc: z.string(), }), async (req, res) => { - const { id, prompt } = req.body; + const { id, prompt, videoDesc } = req.body; await u.db("o_storyboard").where({ id }).update({ prompt, videoDesc, diff --git a/src/routes/production/workbench/generateVideoPrompt.ts b/src/routes/production/workbench/generateVideoPrompt.ts index 2c49ebb..f1990f6 100644 --- a/src/routes/production/workbench/generateVideoPrompt.ts +++ b/src/routes/production/workbench/generateVideoPrompt.ts @@ -17,10 +17,11 @@ export default router.post( const { trackId, projectId, prompt, model } = req.body; 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(); const artStyle = projectData?.artStyle || "无"; const visualManual = u.getArtPrompt(artStyle, "art_storyboard_video"); const { text } = await u.Ai.Text("universalAi").invoke({ - system: visualManual, + system: `${videoPrompt?.data},${visualManual}`, messages: [ { role: "user",