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",