# Conflicts:
#	package-lock.json
#	yarn.lock
This commit is contained in:
ACT丶流星雨 2026-03-26 21:55:48 +08:00
commit 29b3e1c233
15 changed files with 220 additions and 176 deletions

View File

@ -77,6 +77,7 @@
"@types/cors": "^2.8.19", "@types/cors": "^2.8.19",
"@types/express": "^5.0.6", "@types/express": "^5.0.6",
"@types/express-ws": "^3.0.6", "@types/express-ws": "^3.0.6",
"@types/graphlib": "^2.1.12",
"@types/jsonwebtoken": "^9.0.10", "@types/jsonwebtoken": "^9.0.10",
"@types/license-checker": "^25.0.6", "@types/license-checker": "^25.0.6",
"@types/lodash": "^4.17.24", "@types/lodash": "^4.17.24",

View File

@ -86,9 +86,8 @@ function createMainWindow(): void {
frame: false, frame: false,
show: true, show: true,
autoHideMenuBar: true, autoHideMenuBar: true,
titleBarStyle: "hidden", resizable: true,
titleBarOverlay: false, thickFrame: true,
roundedCorners: true
}); });
mainWindow = win; mainWindow = win;
win.setMenuBarVisibility(false); win.setMenuBarVisibility(false);
@ -154,7 +153,7 @@ app.whenReady().then(async () => {
return { ok: true }; return { ok: true };
}, },
windowclose: () => { windowclose: () => {
mainWindow?.close(); app.exit(0);
return { ok: true }; return { ok: true };
}, },
windowismaximized: () => ({ windowismaximized: () => ({

View File

@ -492,7 +492,6 @@ export default (resTool: ResTool, toolsNames?: string[]) => {
resTool.systemMessage(`图片生成调度计划:共 ${levels.length} 层,${images.length} 张图片`); resTool.systemMessage(`图片生成调度计划:共 ${levels.length} 层,${images.length} 张图片`);
// --- 准备公共数据 --- // --- 准备公共数据 ---
const skill = await useSkill("universal_agent.md");
const projectData = await u.db("o_project").where("id", resTool.data.projectId).select("videoRatio").first(); const projectData = await u.db("o_project").where("id", resTool.data.projectId).select("videoRatio").first();
const imageModel = resTool.data.imageModel; const imageModel = resTool.data.imageModel;
@ -514,7 +513,6 @@ export default (resTool: ResTool, toolsNames?: string[]) => {
]); ]);
const imageCls = await u.Ai.Image(imageModel?.modelId).run({ const imageCls = await u.Ai.Image(imageModel?.modelId).run({
systemPrompt: skill.prompt,
prompt: item.prompt, prompt: item.prompt,
imageBase64: [...assetsBase64, ...referenceBase64], imageBase64: [...assetsBase64, ...referenceBase64],
size: imageModel?.quality, size: imageModel?.quality,
@ -595,7 +593,6 @@ export default (resTool: ResTool, toolsNames?: string[]) => {
), ),
}), }),
execute: async ({ images }) => { execute: async ({ images }) => {
const skill = await useSkill("universal_agent.md");
console.log("[tools] generate_assets_images", images); console.log("[tools] generate_assets_images", images);
//先获取到前端资产数据 //先获取到前端资产数据
const flowData: FlowData = await new Promise((resolve) => socket.emit("getFlowData", { key: "assets" }, (res: any) => resolve(res))); const flowData: FlowData = await new Promise((resolve) => socket.emit("getFlowData", { key: "assets" }, (res: any) => resolve(res)));
@ -623,7 +620,6 @@ export default (resTool: ResTool, toolsNames?: string[]) => {
}); });
u.Ai.Image(imageModel?.modelId) u.Ai.Image(imageModel?.modelId)
.run({ .run({
// systemPrompt: skill.prompt,
prompt: item.prompt, prompt: item.prompt,
imageBase64: await getAssetsImageBase64(item.id ? [item.id] : []), imageBase64: await getAssetsImageBase64(item.id ? [item.id] : []),
size: imageModel?.quality, size: imageModel?.quality,

View File

@ -94,37 +94,37 @@ export default (resTool: ResTool, toolsNames?: string[]) => {
description: "将剧本内容插入sqlite数据库供后续业务使用", description: "将剧本内容插入sqlite数据库供后续业务使用",
inputSchema: z.object({ inputSchema: z.object({
script: ScriptSchema, script: ScriptSchema,
assetsList: z.array(AssetSchema).describe("剧本所使用资产列表,注意不要包含剧本内容,仅为所使用到的 道具、人物、场景、素材"), // assetsList: z.array(AssetSchema).describe("剧本所使用资产列表,注意不要包含剧本内容,仅为所使用到的 道具、人物、场景、素材"),
}), }),
execute: async ({ assetsList, script }) => { execute: async ({ script }) => {
console.log("%c Line:103 🍷 script", "background:#42b983", script); console.log("%c Line:103 🍷 script", "background:#42b983", script);
console.log("[tools] insert_script_to_sqlite", assetsList); // console.log("[tools] insert_script_to_sqlite", assetsList);
const [scriptId] = await u.db("o_script").insert({ const [scriptId] = await u.db("o_script").insert({
name: script.name, name: script.name,
content: script.content, content: script.content,
projectId: resTool.data.projectId, projectId: resTool.data.projectId,
createTime: Date.now(), createTime: Date.now(),
}); });
if (assetsList && assetsList.length) { // if (assetsList && assetsList.length) {
const assetId = []; // const assetId = [];
for (const i of assetsList) { // for (const i of assetsList) {
if (i.id) { // if (i.id) {
assetId.push(i.id); // assetId.push(i.id);
continue; // continue;
} // }
const [id] = await u.db("o_assets").insert({ // const [id] = await u.db("o_assets").insert({
name: i.name, // name: i.name,
prompt: i.prompt, // prompt: i.prompt,
type: i.type, // type: i.type,
describe: i.desc, // describe: i.desc,
projectId: resTool.data.projectId, // projectId: resTool.data.projectId,
startTime: Date.now(), // startTime: Date.now(),
}); // });
assetId.push(id); // assetId.push(id);
} // }
await u.db("o_scriptAssets").insert(assetId.map((i) => ({ scriptId, assetId: i }))); // await u.db("o_scriptAssets").insert(assetId.map((i) => ({ scriptId, assetId: i })));
} // }
socket.emit("setPlanData", { key: "script", value: scriptId }); socket.emit("setPlanData", { key: "script", value: scriptId });
return true; return true;
}, },

View File

@ -1,4 +1,4 @@
// @routes-hash 758e343e27eb25780faf00eeab306216 // @routes-hash 8097a5206252be753261d3f059243260
import { Express } from "express"; import { Express } from "express";
import route1 from "./routes/agents/clearMemory"; import route1 from "./routes/agents/clearMemory";
@ -66,37 +66,38 @@ import route62 from "./routes/project/getProject";
import route63 from "./routes/script/addScript"; import route63 from "./routes/script/addScript";
import route64 from "./routes/script/delScript"; import route64 from "./routes/script/delScript";
import route65 from "./routes/script/exportScript"; import route65 from "./routes/script/exportScript";
import route66 from "./routes/script/getScrptApi"; import route66 from "./routes/script/extractAssets";
import route67 from "./routes/script/updateScript"; import route67 from "./routes/script/getScrptApi";
import route68 from "./routes/scriptAgent/getPlanData"; import route68 from "./routes/script/updateScript";
import route69 from "./routes/scriptAgent/setPlanData"; import route69 from "./routes/scriptAgent/getPlanData";
import route70 from "./routes/setting/agentDeploy/agentSetKey"; import route70 from "./routes/scriptAgent/setPlanData";
import route71 from "./routes/setting/agentDeploy/deployAgentModel"; import route71 from "./routes/setting/agentDeploy/agentSetKey";
import route72 from "./routes/setting/agentDeploy/getAgentDeploy"; import route72 from "./routes/setting/agentDeploy/deployAgentModel";
import route73 from "./routes/setting/dbConfig/clearData"; import route73 from "./routes/setting/agentDeploy/getAgentDeploy";
import route74 from "./routes/setting/fileManagement/openFolder"; import route74 from "./routes/setting/dbConfig/clearData";
import route75 from "./routes/setting/getTextModel"; import route75 from "./routes/setting/fileManagement/openFolder";
import route76 from "./routes/setting/loginConfig/getUser"; import route76 from "./routes/setting/getTextModel";
import route77 from "./routes/setting/loginConfig/updateUserPwd"; import route77 from "./routes/setting/loginConfig/getUser";
import route78 from "./routes/setting/memoryConfig/delAllMemory"; import route78 from "./routes/setting/loginConfig/updateUserPwd";
import route79 from "./routes/setting/memoryConfig/getMemory"; import route79 from "./routes/setting/memoryConfig/delAllMemory";
import route80 from "./routes/setting/memoryConfig/sureMemory"; import route80 from "./routes/setting/memoryConfig/getMemory";
import route81 from "./routes/setting/skillManagement/addSkill"; import route81 from "./routes/setting/memoryConfig/sureMemory";
import route82 from "./routes/setting/skillManagement/deleteSkill"; import route82 from "./routes/setting/skillManagement/addSkill";
import route83 from "./routes/setting/skillManagement/embeddingSkill"; import route83 from "./routes/setting/skillManagement/deleteSkill";
import route84 from "./routes/setting/skillManagement/generateDescription"; import route84 from "./routes/setting/skillManagement/embeddingSkill";
import route85 from "./routes/setting/skillManagement/getSkillList"; import route85 from "./routes/setting/skillManagement/generateDescription";
import route86 from "./routes/setting/skillManagement/scanSkills"; import route86 from "./routes/setting/skillManagement/getSkillList";
import route87 from "./routes/setting/skillManagement/updateSkill"; import route87 from "./routes/setting/skillManagement/scanSkills";
import route88 from "./routes/setting/vendorConfig/addVendor"; import route88 from "./routes/setting/skillManagement/updateSkill";
import route89 from "./routes/setting/vendorConfig/deleteVendor"; import route89 from "./routes/setting/vendorConfig/addVendor";
import route90 from "./routes/setting/vendorConfig/getVendorList"; import route90 from "./routes/setting/vendorConfig/deleteVendor";
import route91 from "./routes/setting/vendorConfig/modelTest"; import route91 from "./routes/setting/vendorConfig/getVendorList";
import route92 from "./routes/setting/vendorConfig/updateVendor"; import route92 from "./routes/setting/vendorConfig/modelTest";
import route93 from "./routes/task/getTaskApi"; import route93 from "./routes/setting/vendorConfig/updateVendor";
import route94 from "./routes/task/getTaskCategories"; import route94 from "./routes/task/getTaskApi";
import route95 from "./routes/task/taskDetails"; import route95 from "./routes/task/getTaskCategories";
import route96 from "./routes/test/test"; import route96 from "./routes/task/taskDetails";
import route97 from "./routes/test/test";
export default async (app: Express) => { export default async (app: Express) => {
app.use("/api/agents/clearMemory", route1); app.use("/api/agents/clearMemory", route1);
@ -164,35 +165,36 @@ export default async (app: Express) => {
app.use("/api/script/addScript", route63); app.use("/api/script/addScript", route63);
app.use("/api/script/delScript", route64); app.use("/api/script/delScript", route64);
app.use("/api/script/exportScript", route65); app.use("/api/script/exportScript", route65);
app.use("/api/script/getScrptApi", route66); app.use("/api/script/extractAssets", route66);
app.use("/api/script/updateScript", route67); app.use("/api/script/getScrptApi", route67);
app.use("/api/scriptAgent/getPlanData", route68); app.use("/api/script/updateScript", route68);
app.use("/api/scriptAgent/setPlanData", route69); app.use("/api/scriptAgent/getPlanData", route69);
app.use("/api/setting/agentDeploy/agentSetKey", route70); app.use("/api/scriptAgent/setPlanData", route70);
app.use("/api/setting/agentDeploy/deployAgentModel", route71); app.use("/api/setting/agentDeploy/agentSetKey", route71);
app.use("/api/setting/agentDeploy/getAgentDeploy", route72); app.use("/api/setting/agentDeploy/deployAgentModel", route72);
app.use("/api/setting/dbConfig/clearData", route73); app.use("/api/setting/agentDeploy/getAgentDeploy", route73);
app.use("/api/setting/fileManagement/openFolder", route74); app.use("/api/setting/dbConfig/clearData", route74);
app.use("/api/setting/getTextModel", route75); app.use("/api/setting/fileManagement/openFolder", route75);
app.use("/api/setting/loginConfig/getUser", route76); app.use("/api/setting/getTextModel", route76);
app.use("/api/setting/loginConfig/updateUserPwd", route77); app.use("/api/setting/loginConfig/getUser", route77);
app.use("/api/setting/memoryConfig/delAllMemory", route78); app.use("/api/setting/loginConfig/updateUserPwd", route78);
app.use("/api/setting/memoryConfig/getMemory", route79); app.use("/api/setting/memoryConfig/delAllMemory", route79);
app.use("/api/setting/memoryConfig/sureMemory", route80); app.use("/api/setting/memoryConfig/getMemory", route80);
app.use("/api/setting/skillManagement/addSkill", route81); app.use("/api/setting/memoryConfig/sureMemory", route81);
app.use("/api/setting/skillManagement/deleteSkill", route82); app.use("/api/setting/skillManagement/addSkill", route82);
app.use("/api/setting/skillManagement/embeddingSkill", route83); app.use("/api/setting/skillManagement/deleteSkill", route83);
app.use("/api/setting/skillManagement/generateDescription", route84); app.use("/api/setting/skillManagement/embeddingSkill", route84);
app.use("/api/setting/skillManagement/getSkillList", route85); app.use("/api/setting/skillManagement/generateDescription", route85);
app.use("/api/setting/skillManagement/scanSkills", route86); app.use("/api/setting/skillManagement/getSkillList", route86);
app.use("/api/setting/skillManagement/updateSkill", route87); app.use("/api/setting/skillManagement/scanSkills", route87);
app.use("/api/setting/vendorConfig/addVendor", route88); app.use("/api/setting/skillManagement/updateSkill", route88);
app.use("/api/setting/vendorConfig/deleteVendor", route89); app.use("/api/setting/vendorConfig/addVendor", route89);
app.use("/api/setting/vendorConfig/getVendorList", route90); app.use("/api/setting/vendorConfig/deleteVendor", route90);
app.use("/api/setting/vendorConfig/modelTest", route91); app.use("/api/setting/vendorConfig/getVendorList", route91);
app.use("/api/setting/vendorConfig/updateVendor", route92); app.use("/api/setting/vendorConfig/modelTest", route92);
app.use("/api/task/getTaskApi", route93); app.use("/api/setting/vendorConfig/updateVendor", route93);
app.use("/api/task/getTaskCategories", route94); app.use("/api/task/getTaskApi", route94);
app.use("/api/task/taskDetails", route95); app.use("/api/task/getTaskCategories", route95);
app.use("/api/test/test", route96); app.use("/api/task/taskDetails", route96);
app.use("/api/test/test", route97);
} }

View File

@ -12,7 +12,6 @@ export default router.post(
}), }),
async (req, res) => { async (req, res) => {
const { id } = req.body; const { id } = req.body;
console.log("%c Line:15 🍑 id", "background:#465975", id);
const assetsData = await u.db("o_image").where("assetsId", id); const assetsData = await u.db("o_image").where("assetsId", id);
await Promise.all(assetsData.map((i) => i.filePath && u.oss.deleteFile(i.filePath))); await Promise.all(assetsData.map((i) => i.filePath && u.oss.deleteFile(i.filePath)));
await u.db("o_assets").where({ id }).delete(); await u.db("o_assets").where({ id }).delete();

View File

@ -12,5 +12,21 @@ export default router.post("/", async (req, res) => {
filePath: item.filePath ? await u.oss.getFileUrl(item.filePath) : "", filePath: item.filePath ? await u.oss.getFileUrl(item.filePath) : "",
})), })),
); );
res.status(200).send(success(data)); // 查询o_videoConfig表拿到已选中的videoId
const configRows = await u.db("o_videoConfig").select("videoId");
const selectedIds = new Set(configRows.map((row) => row.videoId));
// 查询o_video表
const videoRows = await u.db("o_video").where("state", "生成成功").select("*");
// 处理并返回结果
const video = await Promise.all(
videoRows.map(async (row) => ({
id: row.id,
filePath: row.filePath ? await u.oss.getFileUrl(row.filePath) : "",
selected: selectedIds.has(row.id),
storyboard: row.storyboardId,
})),
);
res.status(200).send(success({ data, video }));
}); });

View File

@ -5,17 +5,6 @@ import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware"; import { validateFields } from "@/middleware/middleware";
import axios from "axios"; import axios from "axios";
const router = express.Router(); const router = express.Router();
async function getImageBase64ForId(imageId: string | number) {
const imagePath = await u
.db("o_image")
.select("filePath")
.where({ id: Number(imageId) })
.first();
if (!imagePath || !imagePath.filePath) return ""; // 未找到图片路径
const url = await u.oss.getFileUrl(imagePath.filePath);
return await urlToBase64(url);
}
async function urlToBase64(imageUrl: string): Promise<string> { async function urlToBase64(imageUrl: string): Promise<string> {
const response = await axios.get(imageUrl, { responseType: "arraybuffer" }); const response = await axios.get(imageUrl, { responseType: "arraybuffer" });
@ -23,57 +12,11 @@ async function urlToBase64(imageUrl: string): Promise<string> {
const base64 = Buffer.from(response.data, "binary").toString("base64"); const base64 = Buffer.from(response.data, "binary").toString("base64");
return `data:${contentType};base64,${base64}`; return `data:${contentType};base64,${base64}`;
} }
// 将图片ID和指令转换为base64数组和替换后的指令
async function convertDirectiveAndImages(images: Record<string, string>, directive: string) {
// step1: 列出所有别名
const aliasList = Object.keys(images);
// step2: 在指令中提取所有 @别名出现
const aliasRegex = /@[\u4e00-\u9fa5\w]+/g;
const referencedAliases = directive.match(aliasRegex) || [];
// step3: 检查别名
for (const alias of referencedAliases) {
if (!(alias in images)) {
throw new Error(`您引用了不存在的图片:${alias}`);
}
}
// step4: 构建别名与顺序编号映射
const aliasToIndex: Record<string, number> = {};
aliasList.forEach((alias, i) => {
aliasToIndex[alias] = i + 1;
});
// step5: 替换指令中的别名为"图N"
let prompt = directive;
for (const [alias, idx] of Object.entries(aliasToIndex)) {
// 转义alias可能含特殊字符
const reg = new RegExp(alias.replace(/([.*+?^${}()|\[\]\/\\])/g, "\\$1"), "g");
prompt = prompt.replace(reg, `${idx}`);
}
// step6: 依次获取图片 base64 内容区分id或者本身就是base64
const base64Images: string[] = [];
for (const imageVal of Object.values(images)) {
// 判断是否为base64串
const isBase64 = typeof imageVal === "string" && /^data:image\//.test(imageVal);
if (isBase64) {
base64Images.push(imageVal);
} else if (typeof imageVal === "number") {
const base64 = await getImageBase64ForId(imageVal);
base64Images.push(base64);
} else if (imageVal.includes("http")) {
const base64 = await urlToBase64(imageVal);
base64Images.push(base64);
}
}
return {
prompt,
images: base64Images,
};
}
export default router.post( export default router.post(
"/", "/",
validateFields({ validateFields({
model: z.string(), model: z.string(),
references: z.object().optional(), references: z.array(z.string()).optional(),
quality: z.string(), quality: z.string(),
ratio: z.string(), ratio: z.string(),
prompt: z.string(), prompt: z.string(),
@ -81,12 +24,11 @@ export default router.post(
type: z.enum(["role", "scene", "storyboard", "clip", "tool"]), type: z.enum(["role", "scene", "storyboard", "clip", "tool"]),
}), }),
async (req, res) => { async (req, res) => {
const { model, references = {}, quality, ratio, prompt, projectId, type } = req.body; const { model, references = [], quality, ratio, prompt, projectId, type } = req.body;
const { prompt: userPrompt, images: base64Images } = await convertDirectiveAndImages(references, prompt);
console.log("%c Line:86 🥒 base64Images", "background:#42b983", base64Images.map((s) => s.slice(0, 4)));
const imageClass = await u.Ai.Image(model).run({ const imageClass = await u.Ai.Image(model).run({
prompt: userPrompt, prompt: prompt,
imageBase64: base64Images, imageBase64: references && references.length ? await Promise.all(references.map((url: string) => urlToBase64(url))) : [],
size: quality, size: quality,
aspectRatio: ratio, aspectRatio: ratio,
taskClass: "分镜生成", taskClass: "分镜生成",

View File

@ -62,7 +62,7 @@ export default router.post(
}); });
insertFlowId = storyboardId; insertFlowId = storyboardId;
} }
} } else insertFlowId = id;
await u.db("o_imageFlow").insert({ await u.db("o_imageFlow").insert({
flowData: JSON.stringify({ edges, nodes }), flowData: JSON.stringify({ edges, nodes }),

View File

@ -14,6 +14,7 @@ export default router.post(
async (req, res) => { async (req, res) => {
const { scriptId, specifyIds } = req.body; const { scriptId, specifyIds } = req.body;
const data = await u.db("o_video").where("scriptId", scriptId).whereIn("id", specifyIds).andWhere("state", "生成中").select("*"); const data = await u.db("o_video").where("scriptId", scriptId).whereIn("id", specifyIds).andWhere("state", "生成中").select("*");
console.log("%c Line:17 🧀 data", "background:#93c0a4", data.length);
res.status(200).send(success(data)); res.status(200).send(success(data));
}, },
); );

View File

@ -20,9 +20,6 @@ export default router.post(
const assetsData = await u.db("o_assets").where("projectId", id).select("id"); const assetsData = await u.db("o_assets").where("projectId", id).select("id");
const assetsIds = assetsData.map((item: any) => item.id); const assetsIds = assetsData.map((item: any) => item.id);
const videoData = await u.db("o_video").whereIn("scriptId", scriptIds).select("id");
const videoIds = videoData.map((item: any) => item.id);
await u.db("o_project").where("id", id).delete(); await u.db("o_project").where("id", id).delete();
await u.db("o_novel").where("projectId", id).delete(); await u.db("o_novel").where("projectId", id).delete();
await u.db("o_outline").where("projectId", id).delete(); await u.db("o_outline").where("projectId", id).delete();
@ -31,17 +28,9 @@ export default router.post(
await u.db("o_script").where("projectId", id).delete(); await u.db("o_script").where("projectId", id).delete();
await u.db("o_assets").where("projectId", id).delete(); await u.db("o_assets").where("projectId", id).delete();
const tempAssetsQuery = u.db("o_image").where("projectId", id);
if (assetsIds.length > 0) { if (assetsIds.length > 0) {
tempAssetsQuery.orWhereIn("assetsId", assetsIds); await u.db("o_image").where("projectId", id).orWhereIn("assetsId", assetsIds).delete();
} }
if (scriptIds.length > 0) {
tempAssetsQuery.orWhereIn("scriptId", scriptIds);
}
if (videoIds.length > 0) {
tempAssetsQuery.orWhereIn("videoId", videoIds);
}
await tempAssetsQuery.delete();
await u.db("o_video").whereIn("scriptId", scriptIds).delete(); await u.db("o_video").whereIn("scriptId", scriptIds).delete();

View File

@ -0,0 +1,34 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { error, success } from "@/lib/responseFormat";
import compressing from "compressing";
import { validateFields } from "@/middleware/middleware";
import { useSkill } from "@/utils/agent/skillsTools";
const router = express.Router();
export default router.post(
"/",
validateFields({
scriptIds: z.array(z.number()),
}),
async (req, res) => {
const { scriptIds } = req.body;
if (!scriptIds.length) return res.status(400).send(error("请先选择剧本"));
const scripts = await u.db("o_script").whereIn("id", scriptIds);
const intansce = u.Ai.Text("universalAgent");
const skill = await useSkill("universal_agent.md");
const resData = await intansce.invoke({
system: skill.prompt,
messages: [
{
role: "user",
content: "请根据以下小说章节生成事件摘要:\n",
},
],
tools: skill.tools,
});
},
);

View File

@ -1,6 +1,25 @@
// @db-hash d807205fbb27fc5ddb04cae060fb4430 // @db-hash ce28b6d566911952421c2661e14bfde5
//该文件由脚本自动生成,请勿手动修改 //该文件由脚本自动生成,请勿手动修改
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 memories { export interface memories {
'content': string; 'content': string;
'createTime': number; 'createTime': number;
@ -108,13 +127,11 @@ export interface o_project {
'artStyle'?: string | null; 'artStyle'?: string | null;
'createTime'?: number | null; 'createTime'?: number | null;
'id'?: number | null; 'id'?: number | null;
'imageModel'?: string | null;
'intro'?: string | null; 'intro'?: string | null;
'name'?: string | null; 'name'?: string | null;
'projectType'?: string | null; 'projectType'?: string | null;
'type'?: string | null; 'type'?: string | null;
'userId'?: number | null; 'userId'?: number | null;
'videoModel'?: string | null;
'videoRatio'?: string | null; 'videoRatio'?: string | null;
} }
export interface o_script { export interface o_script {
@ -220,6 +237,7 @@ export interface o_videoConfig {
} }
export interface DB { export interface DB {
"_o_storyboard_old_20260325": _o_storyboard_old_20260325;
"memories": memories; "memories": memories;
"o_agentDeploy": o_agentDeploy; "o_agentDeploy": o_agentDeploy;
"o_agentWorkData": o_agentWorkData; "o_agentWorkData": o_agentWorkData;

View File

@ -118,6 +118,7 @@ interface VideoConfig {
projectId: number; // 项目ID projectId: number; // 项目ID
prompt: string; //视频提示词 prompt: string; //视频提示词
imageBase64: string[]; //输入的图片提示词 imageBase64: string[]; //输入的图片提示词
aspectRatio: `${number}:${number}`; // 长宽比
mode: string; //模式 mode: string; //模式
duration: number; // 视频时长,单位秒 duration: number; // 视频时长,单位秒
resolution: string; // 视频分辨率 resolution: string; // 视频分辨率
@ -136,6 +137,8 @@ class AiVideo {
async run(input: VideoConfig) { async run(input: VideoConfig) {
return withTaskRecord(this.key, input.taskClass, input.describe, input.relatedObjects, input.projectId, async (modelName) => { return withTaskRecord(this.key, input.taskClass, input.describe, input.relatedObjects, input.projectId, async (modelName) => {
const fn = await getVendorTemplateFn("videoRequest", modelName); const fn = await getVendorTemplateFn("videoRequest", modelName);
console.log("%c Line:142 🎂 input", "background:#42b983", input);
this.result = await fn(input); this.result = await fn(input);
if (this.result.startsWith("http")) this.result = await urlToBase64(this.result); if (this.result.startsWith("http")) this.result = await urlToBase64(this.result);
return this; return this;

View File

@ -32,10 +32,17 @@
"@hono/node-server" "^1.13.7" "@hono/node-server" "^1.13.7"
hono "^4.6.14" hono "^4.6.14"
<<<<<<< HEAD
"@ai-sdk/gateway@3.0.59": "@ai-sdk/gateway@3.0.59":
version "3.0.59" version "3.0.59"
resolved "https://registry.npmmirror.com/@ai-sdk/gateway/-/gateway-3.0.59.tgz" resolved "https://registry.npmmirror.com/@ai-sdk/gateway/-/gateway-3.0.59.tgz"
integrity sha512-MbtheWHgEFV/8HL1Z6E3hOAsmP73zZlNFg0F0nJAD0Adnjp4J/plqNK00Y896d+dWTw+r0OXzyov9/2wCFjH0Q== integrity sha512-MbtheWHgEFV/8HL1Z6E3hOAsmP73zZlNFg0F0nJAD0Adnjp4J/plqNK00Y896d+dWTw+r0OXzyov9/2wCFjH0Q==
=======
"@ai-sdk/gateway@3.0.80":
version "3.0.80"
resolved "https://registry.npmmirror.com/@ai-sdk/gateway/-/gateway-3.0.80.tgz#fbd43e14395f013dea49f427020b882be8840af2"
integrity sha512-uM7kpZB5l977lW7+2X1+klBUxIZQ78+1a9jHlaHFEzcOcmmslTl3sdP0QqfuuBcO0YBM2gwOiqVdp8i4TRQYcw==
>>>>>>> 248dc724d4c0552222a2ddcec19980de82f88997
dependencies: dependencies:
"@ai-sdk/provider" "3.0.8" "@ai-sdk/provider" "3.0.8"
"@ai-sdk/provider-utils" "4.0.16" "@ai-sdk/provider-utils" "4.0.16"
@ -812,6 +819,11 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/graphlib@^2.1.12":
version "2.1.12"
resolved "https://registry.npmmirror.com/@types/graphlib/-/graphlib-2.1.12.tgz#089d1218bafe2277c98b12597abb24c3b73965aa"
integrity sha512-abRfQWMphT2qlXwppQa+CTCtUz/GqxBeozQcMjnOFD/WOKD6sRgxkfG8vq1yagV03447BBzCYhuJ0wiNb+/r+Q==
"@types/http-cache-semantics@*": "@types/http-cache-semantics@*":
version "4.2.0" version "4.2.0"
resolved "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz" resolved "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz"
@ -998,11 +1010,19 @@ agent-base@^7.1.0, agent-base@^7.1.2:
integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
ai@^6.0.67: ai@^6.0.67:
<<<<<<< HEAD
version "6.0.105" version "6.0.105"
resolved "https://registry.npmmirror.com/ai/-/ai-6.0.105.tgz" resolved "https://registry.npmmirror.com/ai/-/ai-6.0.105.tgz"
integrity sha512-rp+exWtZS3J0DDvZIfetpKCIg7D3cCsvBPoFN3I67IDTs9aoBZDbpecoIkmNLT+U9RBkoEial3OGHRvme23HCw== integrity sha512-rp+exWtZS3J0DDvZIfetpKCIg7D3cCsvBPoFN3I67IDTs9aoBZDbpecoIkmNLT+U9RBkoEial3OGHRvme23HCw==
dependencies: dependencies:
"@ai-sdk/gateway" "3.0.59" "@ai-sdk/gateway" "3.0.59"
=======
version "6.0.138"
resolved "https://registry.npmmirror.com/ai/-/ai-6.0.138.tgz#96bfa9ebdd9748bc72862d14d6c4fc8e28070f10"
integrity sha512-49OfPe0f5uxJ6jUdA5BBXjIinP6+ZdYfAtpF2aEH64GA5wPcxH2rf/TBUQQ0bbamBz/D+TLMV18xilZqOC+zaA==
dependencies:
"@ai-sdk/gateway" "3.0.80"
>>>>>>> 248dc724d4c0552222a2ddcec19980de82f88997
"@ai-sdk/provider" "3.0.8" "@ai-sdk/provider" "3.0.8"
"@ai-sdk/provider-utils" "4.0.16" "@ai-sdk/provider-utils" "4.0.16"
"@opentelemetry/api" "1.9.0" "@opentelemetry/api" "1.9.0"
@ -1279,9 +1299,15 @@ brace-expansion@^2.0.1, brace-expansion@^2.0.2:
balanced-match "^1.0.0" balanced-match "^1.0.0"
brace-expansion@^5.0.2: brace-expansion@^5.0.2:
<<<<<<< HEAD
version "5.0.4" version "5.0.4"
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-5.0.4.tgz" resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-5.0.4.tgz"
integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==
=======
version "5.0.5"
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb"
integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==
>>>>>>> 248dc724d4c0552222a2ddcec19980de82f88997
dependencies: dependencies:
balanced-match "^4.0.2" balanced-match "^4.0.2"
@ -1901,9 +1927,15 @@ electron-publish@26.8.1:
mime "^2.5.2" mime "^2.5.2"
electron@^40.0.0: electron@^40.0.0:
<<<<<<< HEAD
version "40.6.1" version "40.6.1"
resolved "https://registry.npmmirror.com/electron/-/electron-40.6.1.tgz" resolved "https://registry.npmmirror.com/electron/-/electron-40.6.1.tgz"
integrity sha512-u9YfoixttdauciHV9Ut9Zf3YipJoU093kR1GSYTTXTAXqhiXI0G1A0NnL/f0O2m2UULCXaXMf2W71PloR6V9pQ== integrity sha512-u9YfoixttdauciHV9Ut9Zf3YipJoU093kR1GSYTTXTAXqhiXI0G1A0NnL/f0O2m2UULCXaXMf2W71PloR6V9pQ==
=======
version "40.8.4"
resolved "https://registry.npmmirror.com/electron/-/electron-40.8.4.tgz#91c0591e2ee7377e0a5c80e4fc4680cc26d84c33"
integrity sha512-7AoSakFr+g2CTukHDS79cqNiaWPoD8bQ4kIahwUUVv0O5fy4BfZawVCxOFLc61POq8xDvqMSDKPfeFXK/Coc5g==
>>>>>>> 248dc724d4c0552222a2ddcec19980de82f88997
dependencies: dependencies:
"@electron/get" "^2.0.0" "@electron/get" "^2.0.0"
"@types/node" "^24.9.0" "@types/node" "^24.9.0"
@ -2905,9 +2937,15 @@ keyv@^4.0.0:
json-buffer "3.0.1" json-buffer "3.0.1"
knex@^3.1.0, knex@^3.2.5: knex@^3.1.0, knex@^3.2.5:
<<<<<<< HEAD
version "3.2.5" version "3.2.5"
resolved "https://registry.npmmirror.com/knex/-/knex-3.2.5.tgz" resolved "https://registry.npmmirror.com/knex/-/knex-3.2.5.tgz"
integrity sha512-eY21Uwq0l0bFW6/+3ARO+NPjlUmcKsd72/Od+iHVFRhY6xwRVKn/nfeBEErtSnvJRVj0d0Jc20LzNnSgRQwMlQ== integrity sha512-eY21Uwq0l0bFW6/+3ARO+NPjlUmcKsd72/Od+iHVFRhY6xwRVKn/nfeBEErtSnvJRVj0d0Jc20LzNnSgRQwMlQ==
=======
version "3.2.6"
resolved "https://registry.npmmirror.com/knex/-/knex-3.2.6.tgz#d6653ebf7961a83ae0014db1a7c56c75ce1ffa00"
integrity sha512-26I1Tvx0D9SOsFBF9jRWT/JdE3FPI52jAwYpXfREEtnoqgjGvAi8/ux8ktjaTC9IQcAVTCrREkOpa7lrjeAcow==
>>>>>>> 248dc724d4c0552222a2ddcec19980de82f88997
dependencies: dependencies:
colorette "2.0.19" colorette "2.0.19"
commander "^10.0.0" commander "^10.0.0"
@ -3178,11 +3216,17 @@ minipass-fetch@^4.0.0:
encoding "^0.1.13" encoding "^0.1.13"
minipass-flush@^1.0.5: minipass-flush@^1.0.5:
<<<<<<< HEAD
version "1.0.5" version "1.0.5"
resolved "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz" resolved "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz"
integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
=======
version "1.0.6"
resolved "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.6.tgz#a3f43e5d588f3bd5f1585cc68504a5f05ebd77a8"
integrity sha512-7Uf5gMJZ2kTkFisE3toGxT991s+cg+vMh42nbZGM2bNxfYVpkpqRudf1QrcOy72a3PwcL4JYqL+4NY7t0Hdd0A==
>>>>>>> 248dc724d4c0552222a2ddcec19980de82f88997
dependencies: dependencies:
minipass "^3.0.0" minipass "^7.1.3"
minipass-pipeline@^1.2.4: minipass-pipeline@^1.2.4:
version "1.2.4" version "1.2.4"
@ -3205,7 +3249,7 @@ minipass@^3.0.0:
dependencies: dependencies:
yallist "^4.0.0" yallist "^4.0.0"
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2: "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2, minipass@^7.1.3:
version "7.1.3" version "7.1.3"
resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.3.tgz" resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.3.tgz"
integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==