修改生成视频提示词api单个传入
This commit is contained in:
parent
68f2c62c46
commit
9158783918
@ -9,53 +9,49 @@ export default router.post(
|
||||
"/",
|
||||
validateFields({
|
||||
projectId: z.number(),
|
||||
storyboardIds: z.array(z.number()),
|
||||
storyboardId: z.number(),
|
||||
}),
|
||||
async (req, res) => {
|
||||
const { projectId, storyboardIds } = req.body;
|
||||
const { projectId, storyboardId } = req.body;
|
||||
|
||||
// 查询分镜及其关联的资产提示词
|
||||
const data = await u
|
||||
.db("o_storyboard")
|
||||
.leftJoin("o_assets2Storyboard", "o_storyboard.id", "o_assets2Storyboard.storyboardId")
|
||||
.leftJoin("o_assets", "o_assets2Storyboard.assetId", "o_assets.id")
|
||||
.leftJoin("o_videoConfig", "o_storyboard.id", "o_videoConfig.storyboardId")
|
||||
.whereIn("o_storyboard.id", storyboardIds)
|
||||
.where("o_storyboard.id", storyboardId)
|
||||
.select("o_storyboard.id", "o_storyboard.prompt", "o_assets.prompt as assetPrompt", "o_videoConfig.model as videoModel");
|
||||
|
||||
// 按分镜id分组,聚合资产提示词
|
||||
const storyboardMap = new Map<number, { prompt: string; assetPrompts: string[]; videoModel: string }>();
|
||||
for (const row of data) {
|
||||
if (!storyboardMap.has(row.id)) {
|
||||
storyboardMap.set(row.id, { prompt: row.prompt || "", assetPrompts: [], videoModel: row.videoModel || "" });
|
||||
}
|
||||
if (row.assetPrompt) {
|
||||
storyboardMap.get(row.id)!.assetPrompts.push(row.assetPrompt);
|
||||
}
|
||||
if (data.length === 0) {
|
||||
return res.status(200).send(success({ data: null }));
|
||||
}
|
||||
|
||||
// 逐个分镜生成视频提示词
|
||||
const results: { storyboardId: number; videoPrompt: string }[] = [];
|
||||
for (const [id, { prompt, assetPrompts, videoModel }] of storyboardMap) {
|
||||
let model = "";
|
||||
if (videoModel) {
|
||||
model = videoModel;
|
||||
} else {
|
||||
const videoModel = await u.db("o_project").where("id", projectId).select("videoModel").first();
|
||||
model = videoModel?.videoModel || "";
|
||||
}
|
||||
if (!model) continue; //分镜没有指定视频模型,且项目也没有默认视频模型,跳过生成提示词
|
||||
const systemPrompt = `你是一个专业的${model}视频生成助手。请根据分镜提示词和关联资产提示词,生成一段完整的、可直接用于视频生成模型的中文提示词。`;
|
||||
const userContent = `分镜提示词:${prompt || "无"}\n资产提示词:${assetPrompts.length > 0 ? assetPrompts.join("\n") : "无"}`;
|
||||
// 聚合资产提示词
|
||||
const prompt = data[0].prompt || "";
|
||||
const videoModel = data[0].videoModel || "";
|
||||
const assetPrompts = data.map((row) => row.assetPrompt).filter(Boolean) as string[];
|
||||
|
||||
const { text } = await u.Ai.Text("universalAi").invoke({
|
||||
system: systemPrompt,
|
||||
messages: [{ role: "user", content: userContent }],
|
||||
});
|
||||
|
||||
await u.db("o_storyboard").where("id", id).update({ videoPrompt: text });
|
||||
results.push({ storyboardId: id, videoPrompt: text });
|
||||
// 确定视频模型
|
||||
let model = videoModel;
|
||||
if (!model) {
|
||||
const project = await u.db("o_project").where("id", projectId).select("videoModel").first();
|
||||
model = project?.videoModel || "";
|
||||
}
|
||||
if (!model) {
|
||||
return res.status(200).send(success({ data: null }));
|
||||
}
|
||||
|
||||
res.status(200).send(success({ data: results }));
|
||||
const systemPrompt = `你是一个专业的${model}视频生成助手。请根据分镜提示词和关联资产提示词,生成一段完整的、可直接用于视频生成模型的中文提示词。`;
|
||||
const userContent = `分镜提示词:${prompt || "无"}\n资产提示词:${assetPrompts.length > 0 ? assetPrompts.join("\n") : "无"}`;
|
||||
|
||||
const { text } = await u.Ai.Text("universalAi").invoke({
|
||||
system: systemPrompt,
|
||||
messages: [{ role: "user", content: userContent }],
|
||||
});
|
||||
|
||||
await u.db("o_storyboard").where("id", storyboardId).update({ videoPrompt: text });
|
||||
|
||||
res.status(200).send(success({ data: { storyboardId, videoPrompt: text } }));
|
||||
},
|
||||
);
|
||||
|
||||
62
src/types/database.d.ts
vendored
62
src/types/database.d.ts
vendored
@ -1,13 +1,62 @@
|
||||
// @db-hash 93b2462070c45c2b449e9a18c4e88763
|
||||
// @db-hash ea0c51ccb8c93a2f019139db9621721e
|
||||
//该文件由脚本自动生成,请勿手动修改
|
||||
|
||||
export interface _o_project_old_20260330 {
|
||||
'artStyle'?: string | null;
|
||||
'createTime'?: number | null;
|
||||
'id'?: number | null;
|
||||
'intro'?: string | null;
|
||||
'name'?: string | null;
|
||||
'projectType'?: string | null;
|
||||
'type'?: string | null;
|
||||
'userId'?: number | null;
|
||||
'videoRatio'?: string | null;
|
||||
}
|
||||
export interface _o_storyboard_old_20260325 {
|
||||
'camera'?: string | null;
|
||||
'createTime'?: number | null;
|
||||
'description'?: string | null;
|
||||
'duration'?: string | null;
|
||||
'filePath'?: string | null;
|
||||
'frameMode'?: string | null;
|
||||
'id'?: number;
|
||||
'lines'?: string | null;
|
||||
'mode'?: string | null;
|
||||
'model'?: string | null;
|
||||
'prompt'?: string | null;
|
||||
'reason'?: string | null;
|
||||
'resolution'?: string | null;
|
||||
'scriptId'?: number | null;
|
||||
'sound'?: string | null;
|
||||
'state'?: string | null;
|
||||
'title'?: string | null;
|
||||
}
|
||||
export interface _o_storyboard_old_20260330 {
|
||||
'camera'?: string | null;
|
||||
'createTime'?: number | null;
|
||||
'description'?: string | null;
|
||||
'duration'?: string | null;
|
||||
'filePath'?: string | null;
|
||||
'frameMode'?: string | null;
|
||||
'id'?: number;
|
||||
'index'?: string | null;
|
||||
'lines'?: string | null;
|
||||
'mode'?: string | null;
|
||||
'model'?: string | null;
|
||||
'prompt'?: string | null;
|
||||
'reason'?: string | null;
|
||||
'resolution'?: string | null;
|
||||
'scriptId'?: number | null;
|
||||
'sound'?: string | null;
|
||||
'state'?: string | null;
|
||||
'title'?: string | null;
|
||||
}
|
||||
export interface memories {
|
||||
'content': string;
|
||||
'createTime': number;
|
||||
'embedding'?: string | null;
|
||||
'id'?: string;
|
||||
'isolationKey': string;
|
||||
'name'?: string | null;
|
||||
'relatedMessageIds'?: string | null;
|
||||
'role'?: string | null;
|
||||
'summarized'?: number | null;
|
||||
@ -47,7 +96,6 @@ export interface o_assets {
|
||||
'name'?: string | null;
|
||||
'projectId'?: number | null;
|
||||
'prompt'?: string | null;
|
||||
'promptState'?: string | null;
|
||||
'remark'?: string | null;
|
||||
'scriptId'?: number | null;
|
||||
'startTime'?: number | null;
|
||||
@ -129,8 +177,6 @@ export interface o_prompt {
|
||||
export interface o_script {
|
||||
'content'?: string | null;
|
||||
'createTime'?: number | null;
|
||||
'errorReason'?: string | null;
|
||||
'extractState'?: number | null;
|
||||
'id'?: number;
|
||||
'name'?: string | null;
|
||||
'projectId'?: number | null;
|
||||
@ -167,7 +213,7 @@ export interface o_storyboard {
|
||||
'filePath'?: string | null;
|
||||
'frameMode'?: string | null;
|
||||
'id'?: number;
|
||||
'index'?: number | null;
|
||||
'index'?: string | null;
|
||||
'lines'?: string | null;
|
||||
'mode'?: string | null;
|
||||
'model'?: string | null;
|
||||
@ -178,6 +224,7 @@ export interface o_storyboard {
|
||||
'sound'?: string | null;
|
||||
'state'?: string | null;
|
||||
'title'?: string | null;
|
||||
'videoPrompt'?: string | null;
|
||||
}
|
||||
export interface o_tasks {
|
||||
'describe'?: string | null;
|
||||
@ -232,6 +279,9 @@ export interface o_videoConfig {
|
||||
}
|
||||
|
||||
export interface DB {
|
||||
"_o_project_old_20260330": _o_project_old_20260330;
|
||||
"_o_storyboard_old_20260325": _o_storyboard_old_20260325;
|
||||
"_o_storyboard_old_20260330": _o_storyboard_old_20260330;
|
||||
"memories": memories;
|
||||
"o_agentDeploy": o_agentDeploy;
|
||||
"o_agentWorkData": o_agentWorkData;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user