生图片、视频加入到任务 中心,添加风格数据

This commit is contained in:
小帅 2026-03-03 11:36:39 +08:00
parent af4cce8fb6
commit 3153b2b79d
21 changed files with 5640 additions and 226 deletions

1411
output.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -317,6 +317,10 @@ export default async (cells: { prompt: string }[], scriptId: number, projectId:
size: "4K",
aspectRatio: projectInfo?.videoRatio ? (projectInfo.videoRatio as any) : "16:9",
imageBase64: processedImages.map((buf) => buf.toString("base64")),
taskClass: "分镜图生成",
name: `分镜图-${outline?.title || "未知剧集"}`,
describe: prompts,
projectId,
},
apiConfig,
);

1411
src/lib/artStyle.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,6 @@
import { Knex } from "knex";
import { v4 as uuid } from "uuid";
import { artStyle } from "./artStyle";
interface TableSchema {
name: string;
builder: (table: Knex.CreateTableBuilder) => void;
@ -160,20 +161,6 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
table.unique(["id"]);
},
},
{
name: "t_taskList",
builder: (table) => {
table.integer("id").notNullable();
table.integer("projectName");
table.text("name");
table.text("prompt");
table.text("state");
table.text("startTime");
table.text("endTime");
table.primary(["id"]);
table.unique(["id"]);
},
},
{
name: "t_image",
builder: (table) => {
@ -207,6 +194,35 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
},
initData: async (knex) => {},
},
{
name: "t_myTasks",
builder: (table) => {
table.integer("id").notNullable();
table.integer("projectId");
table.string("taskClass");
table.string("relatedObjects");
table.string("model");
table.text("describe");
table.string("state");
table.integer("startTime");
table.primary(["id"]);
table.unique(["id"]);
},
initData: async (knex) => {},
},
{
name: "t_artStyle",
builder: (table) => {
table.integer("id").notNullable();
table.string("name");
table.text("styles");
table.primary(["id"]);
table.unique(["id"]);
},
initData: async (knex) => {
await knex("t_artStyle").insert(artStyle.map((item, index) => ({ id: index + 1, name: item.name, styles: JSON.stringify(item.styles) })));
},
},
{
name: "t_videoConfig",
builder: (table) => {

View File

@ -1,170 +1,174 @@
// @routes-hash c97cf72361299980ea4b0c43549a0de8
// @routes-hash b847c9a4378ca63b381628ce9b2ebc81
import { Express } from "express";
import route1 from "./routes/assets/addAssets";
import route2 from "./routes/assets/delAssets";
import route3 from "./routes/assets/delAssetsImage";
import route4 from "./routes/assets/generateAssets";
import route5 from "./routes/assets/getAssets";
import route6 from "./routes/assets/getImage";
import route7 from "./routes/assets/getStoryboard";
import route8 from "./routes/assets/polishPrompt";
import route9 from "./routes/assets/saveAssets";
import route10 from "./routes/assets/updateAssets";
import route11 from "./routes/index/index";
import route12 from "./routes/novel/addNovel";
import route13 from "./routes/novel/delNovel";
import route14 from "./routes/novel/getNovel";
import route15 from "./routes/novel/updateNovel";
import route16 from "./routes/other/clearDatabase";
import route17 from "./routes/other/deleteAllData";
import route18 from "./routes/other/getCaptcha";
import route19 from "./routes/other/login";
import route20 from "./routes/other/testAI";
import route21 from "./routes/other/testImage";
import route22 from "./routes/other/testVideo";
import route23 from "./routes/outline/addOutline";
import route24 from "./routes/outline/agentsOutline";
import route25 from "./routes/outline/delOutline";
import route26 from "./routes/outline/getHistory";
import route27 from "./routes/outline/getOutline";
import route28 from "./routes/outline/getPartScript";
import route29 from "./routes/outline/getStoryline";
import route30 from "./routes/outline/setHistory";
import route31 from "./routes/outline/updateOutline";
import route32 from "./routes/outline/updateScript";
import route33 from "./routes/outline/updateStoryline";
import route34 from "./routes/project/addProject";
import route35 from "./routes/project/delProject";
import route36 from "./routes/project/getProject";
import route37 from "./routes/project/getProjectCount";
import route38 from "./routes/project/getSingleProject";
import route39 from "./routes/project/updateProject";
import route40 from "./routes/prompt/getPrompts";
import route41 from "./routes/prompt/updatePrompt";
import route42 from "./routes/script/generateScriptApi";
import route43 from "./routes/script/generateScriptSave";
import route44 from "./routes/script/geScriptApi";
import route45 from "./routes/setting/addModel";
import route46 from "./routes/setting/configurationModel";
import route47 from "./routes/setting/delModel";
import route48 from "./routes/setting/getAiModelList";
import route49 from "./routes/setting/getAiModelMap";
import route50 from "./routes/setting/getLog";
import route51 from "./routes/setting/getSetting";
import route52 from "./routes/setting/getVideoModelDetail";
import route53 from "./routes/setting/getVideoModelList";
import route54 from "./routes/setting/updateModel";
import route55 from "./routes/setting/updeteModel";
import route56 from "./routes/storyboard/batchSuperScoreImage";
import route57 from "./routes/storyboard/chatStoryboard";
import route58 from "./routes/storyboard/delStoryboard";
import route59 from "./routes/storyboard/generateShotImage";
import route60 from "./routes/storyboard/generateStoryboardApi";
import route61 from "./routes/storyboard/generateVideoPrompt";
import route62 from "./routes/storyboard/getStoryboard";
import route63 from "./routes/storyboard/keepStoryboard";
import route64 from "./routes/storyboard/saveStoryboard";
import route65 from "./routes/storyboard/uploadImage";
import route66 from "./routes/task/getTaskApi";
import route67 from "./routes/task/taskDetails";
import route68 from "./routes/user/getUser";
import route69 from "./routes/user/saveUser";
import route70 from "./routes/video/addVideo";
import route71 from "./routes/video/addVideoConfig";
import route72 from "./routes/video/deleteVideoConfig";
import route73 from "./routes/video/generatePrompt";
import route74 from "./routes/video/generateVideo";
import route75 from "./routes/video/getManufacturer";
import route76 from "./routes/video/getVideo";
import route77 from "./routes/video/getVideoConfigs";
import route78 from "./routes/video/getVideoModel";
import route79 from "./routes/video/getVideoStoryboards";
import route80 from "./routes/video/reviseVideoStoryboards";
import route81 from "./routes/video/saveVideo";
import route82 from "./routes/video/upDateVideoConfig";
import route1 from "./routes/artStyle/getArtStyle";
import route2 from "./routes/assets/addAssets";
import route3 from "./routes/assets/delAssets";
import route4 from "./routes/assets/delAssetsImage";
import route5 from "./routes/assets/generateAssets";
import route6 from "./routes/assets/getAssets";
import route7 from "./routes/assets/getImage";
import route8 from "./routes/assets/getStoryboard";
import route9 from "./routes/assets/polishPrompt";
import route10 from "./routes/assets/saveAssets";
import route11 from "./routes/assets/updateAssets";
import route12 from "./routes/index/index";
import route13 from "./routes/novel/addNovel";
import route14 from "./routes/novel/delNovel";
import route15 from "./routes/novel/getNovel";
import route16 from "./routes/novel/updateNovel";
import route17 from "./routes/other/clearDatabase";
import route18 from "./routes/other/deleteAllData";
import route19 from "./routes/other/getCaptcha";
import route20 from "./routes/other/login";
import route21 from "./routes/other/testAI";
import route22 from "./routes/other/testImage";
import route23 from "./routes/other/testVideo";
import route24 from "./routes/outline/addOutline";
import route25 from "./routes/outline/agentsOutline";
import route26 from "./routes/outline/delOutline";
import route27 from "./routes/outline/getHistory";
import route28 from "./routes/outline/getOutline";
import route29 from "./routes/outline/getPartScript";
import route30 from "./routes/outline/getStoryline";
import route31 from "./routes/outline/setHistory";
import route32 from "./routes/outline/updateOutline";
import route33 from "./routes/outline/updateScript";
import route34 from "./routes/outline/updateStoryline";
import route35 from "./routes/project/addProject";
import route36 from "./routes/project/delProject";
import route37 from "./routes/project/getProject";
import route38 from "./routes/project/getProjectCount";
import route39 from "./routes/project/getSingleProject";
import route40 from "./routes/project/updateProject";
import route41 from "./routes/prompt/getPrompts";
import route42 from "./routes/prompt/updatePrompt";
import route43 from "./routes/script/generateScriptApi";
import route44 from "./routes/script/generateScriptSave";
import route45 from "./routes/script/geScriptApi";
import route46 from "./routes/setting/addModel";
import route47 from "./routes/setting/configurationModel";
import route48 from "./routes/setting/delModel";
import route49 from "./routes/setting/getAiModelList";
import route50 from "./routes/setting/getAiModelMap";
import route51 from "./routes/setting/getLog";
import route52 from "./routes/setting/getSetting";
import route53 from "./routes/setting/getVideoModelDetail";
import route54 from "./routes/setting/getVideoModelList";
import route55 from "./routes/setting/updateModel";
import route56 from "./routes/setting/updeteModel";
import route57 from "./routes/storyboard/batchSuperScoreImage";
import route58 from "./routes/storyboard/chatStoryboard";
import route59 from "./routes/storyboard/delStoryboard";
import route60 from "./routes/storyboard/generateShotImage";
import route61 from "./routes/storyboard/generateStoryboardApi";
import route62 from "./routes/storyboard/generateVideoPrompt";
import route63 from "./routes/storyboard/getStoryboard";
import route64 from "./routes/storyboard/keepStoryboard";
import route65 from "./routes/storyboard/saveStoryboard";
import route66 from "./routes/storyboard/uploadImage";
import route67 from "./routes/task/getMyTaskApi";
import route68 from "./routes/task/getTaskCategories";
import route69 from "./routes/task/taskDetails";
import route70 from "./routes/user/getUser";
import route71 from "./routes/user/saveUser";
import route72 from "./routes/video/addVideo";
import route73 from "./routes/video/addVideoConfig";
import route74 from "./routes/video/deleteVideoConfig";
import route75 from "./routes/video/generatePrompt";
import route76 from "./routes/video/generateVideo";
import route77 from "./routes/video/getManufacturer";
import route78 from "./routes/video/getVideo";
import route79 from "./routes/video/getVideoConfigs";
import route80 from "./routes/video/getVideoModel";
import route81 from "./routes/video/getVideoStoryboards";
import route82 from "./routes/video/reviseVideoStoryboards";
import route83 from "./routes/video/saveVideo";
import route84 from "./routes/video/upDateVideoConfig";
export default async (app: Express) => {
app.use("/assets/addAssets", route1);
app.use("/assets/delAssets", route2);
app.use("/assets/delAssetsImage", route3);
app.use("/assets/generateAssets", route4);
app.use("/assets/getAssets", route5);
app.use("/assets/getImage", route6);
app.use("/assets/getStoryboard", route7);
app.use("/assets/polishPrompt", route8);
app.use("/assets/saveAssets", route9);
app.use("/assets/updateAssets", route10);
app.use("/index", route11);
app.use("/novel/addNovel", route12);
app.use("/novel/delNovel", route13);
app.use("/novel/getNovel", route14);
app.use("/novel/updateNovel", route15);
app.use("/other/clearDatabase", route16);
app.use("/other/deleteAllData", route17);
app.use("/other/getCaptcha", route18);
app.use("/other/login", route19);
app.use("/other/testAI", route20);
app.use("/other/testImage", route21);
app.use("/other/testVideo", route22);
app.use("/outline/addOutline", route23);
app.use("/outline/agentsOutline", route24);
app.use("/outline/delOutline", route25);
app.use("/outline/getHistory", route26);
app.use("/outline/getOutline", route27);
app.use("/outline/getPartScript", route28);
app.use("/outline/getStoryline", route29);
app.use("/outline/setHistory", route30);
app.use("/outline/updateOutline", route31);
app.use("/outline/updateScript", route32);
app.use("/outline/updateStoryline", route33);
app.use("/project/addProject", route34);
app.use("/project/delProject", route35);
app.use("/project/getProject", route36);
app.use("/project/getProjectCount", route37);
app.use("/project/getSingleProject", route38);
app.use("/project/updateProject", route39);
app.use("/prompt/getPrompts", route40);
app.use("/prompt/updatePrompt", route41);
app.use("/script/generateScriptApi", route42);
app.use("/script/generateScriptSave", route43);
app.use("/script/geScriptApi", route44);
app.use("/setting/addModel", route45);
app.use("/setting/configurationModel", route46);
app.use("/setting/delModel", route47);
app.use("/setting/getAiModelList", route48);
app.use("/setting/getAiModelMap", route49);
app.use("/setting/getLog", route50);
app.use("/setting/getSetting", route51);
app.use("/setting/getVideoModelDetail", route52);
app.use("/setting/getVideoModelList", route53);
app.use("/setting/updateModel", route54);
app.use("/setting/updeteModel", route55);
app.use("/storyboard/batchSuperScoreImage", route56);
app.use("/storyboard/chatStoryboard", route57);
app.use("/storyboard/delStoryboard", route58);
app.use("/storyboard/generateShotImage", route59);
app.use("/storyboard/generateStoryboardApi", route60);
app.use("/storyboard/generateVideoPrompt", route61);
app.use("/storyboard/getStoryboard", route62);
app.use("/storyboard/keepStoryboard", route63);
app.use("/storyboard/saveStoryboard", route64);
app.use("/storyboard/uploadImage", route65);
app.use("/task/getTaskApi", route66);
app.use("/task/taskDetails", route67);
app.use("/user/getUser", route68);
app.use("/user/saveUser", route69);
app.use("/video/addVideo", route70);
app.use("/video/addVideoConfig", route71);
app.use("/video/deleteVideoConfig", route72);
app.use("/video/generatePrompt", route73);
app.use("/video/generateVideo", route74);
app.use("/video/getManufacturer", route75);
app.use("/video/getVideo", route76);
app.use("/video/getVideoConfigs", route77);
app.use("/video/getVideoModel", route78);
app.use("/video/getVideoStoryboards", route79);
app.use("/video/reviseVideoStoryboards", route80);
app.use("/video/saveVideo", route81);
app.use("/video/upDateVideoConfig", route82);
app.use("/artStyle/getArtStyle", route1);
app.use("/assets/addAssets", route2);
app.use("/assets/delAssets", route3);
app.use("/assets/delAssetsImage", route4);
app.use("/assets/generateAssets", route5);
app.use("/assets/getAssets", route6);
app.use("/assets/getImage", route7);
app.use("/assets/getStoryboard", route8);
app.use("/assets/polishPrompt", route9);
app.use("/assets/saveAssets", route10);
app.use("/assets/updateAssets", route11);
app.use("/index", route12);
app.use("/novel/addNovel", route13);
app.use("/novel/delNovel", route14);
app.use("/novel/getNovel", route15);
app.use("/novel/updateNovel", route16);
app.use("/other/clearDatabase", route17);
app.use("/other/deleteAllData", route18);
app.use("/other/getCaptcha", route19);
app.use("/other/login", route20);
app.use("/other/testAI", route21);
app.use("/other/testImage", route22);
app.use("/other/testVideo", route23);
app.use("/outline/addOutline", route24);
app.use("/outline/agentsOutline", route25);
app.use("/outline/delOutline", route26);
app.use("/outline/getHistory", route27);
app.use("/outline/getOutline", route28);
app.use("/outline/getPartScript", route29);
app.use("/outline/getStoryline", route30);
app.use("/outline/setHistory", route31);
app.use("/outline/updateOutline", route32);
app.use("/outline/updateScript", route33);
app.use("/outline/updateStoryline", route34);
app.use("/project/addProject", route35);
app.use("/project/delProject", route36);
app.use("/project/getProject", route37);
app.use("/project/getProjectCount", route38);
app.use("/project/getSingleProject", route39);
app.use("/project/updateProject", route40);
app.use("/prompt/getPrompts", route41);
app.use("/prompt/updatePrompt", route42);
app.use("/script/generateScriptApi", route43);
app.use("/script/generateScriptSave", route44);
app.use("/script/geScriptApi", route45);
app.use("/setting/addModel", route46);
app.use("/setting/configurationModel", route47);
app.use("/setting/delModel", route48);
app.use("/setting/getAiModelList", route49);
app.use("/setting/getAiModelMap", route50);
app.use("/setting/getLog", route51);
app.use("/setting/getSetting", route52);
app.use("/setting/getVideoModelDetail", route53);
app.use("/setting/getVideoModelList", route54);
app.use("/setting/updateModel", route55);
app.use("/setting/updeteModel", route56);
app.use("/storyboard/batchSuperScoreImage", route57);
app.use("/storyboard/chatStoryboard", route58);
app.use("/storyboard/delStoryboard", route59);
app.use("/storyboard/generateShotImage", route60);
app.use("/storyboard/generateStoryboardApi", route61);
app.use("/storyboard/generateVideoPrompt", route62);
app.use("/storyboard/getStoryboard", route63);
app.use("/storyboard/keepStoryboard", route64);
app.use("/storyboard/saveStoryboard", route65);
app.use("/storyboard/uploadImage", route66);
app.use("/task/getMyTaskApi", route67);
app.use("/task/getTaskCategories", route68);
app.use("/task/taskDetails", route69);
app.use("/user/getUser", route70);
app.use("/user/saveUser", route71);
app.use("/video/addVideo", route72);
app.use("/video/addVideoConfig", route73);
app.use("/video/deleteVideoConfig", route74);
app.use("/video/generatePrompt", route75);
app.use("/video/generateVideo", route76);
app.use("/video/getManufacturer", route77);
app.use("/video/getVideo", route78);
app.use("/video/getVideoConfigs", route79);
app.use("/video/getVideoModel", route80);
app.use("/video/getVideoStoryboards", route81);
app.use("/video/reviseVideoStoryboards", route82);
app.use("/video/saveVideo", route83);
app.use("/video/upDateVideoConfig", route84);
}

View File

@ -0,0 +1,19 @@
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(),
}),
async (req, res) => {
const { name } = req.body;
const data = await u.db("t_artStyle").where("name", name).select("styles").first();
const styles = data?.styles ? JSON.parse(data.styles) : [];
res.status(200).send(success(styles));
},
);

View File

@ -123,8 +123,13 @@ export default router.post(
state: "生成中",
assetsId: id,
});
const apiConfig = await u.getPromptAi("assetsImage");
let taskClass = "";
if (type == "role") taskClass = "角色图生成";
if (type == "scene") taskClass = "场景图生成";
if (type == "props") taskClass = "道具图生成";
if (type == "storyboard") taskClass = "分镜图生成";
const apiConfig = await u.getPromptAi("assetsImage");
try {
const contentStr = await u.ai.image(
{
@ -133,6 +138,10 @@ export default router.post(
imageBase64: base64 ? [base64] : [],
size: "2K",
aspectRatio: "16:9",
taskClass: taskClass,
name: name,
describe: prompt,
projectId: projectId,
},
apiConfig,
);
@ -171,7 +180,6 @@ export default router.post(
filePath: imagePath,
type: insertType,
});
const path = await u.oss.getFileUrl(imagePath!);
// const state = await u.db("t_assets").where("id", id).select("state").first();

View File

@ -24,6 +24,10 @@ export default router.post(
imageBase64: [],
aspectRatio: "16:9",
size: "1K",
taskClass: "测试任务",
name: "测试图片生成",
describe: "测试语言模型生成图片",
projectId: 0,
},
{
model: modelName,

View File

@ -28,6 +28,10 @@ export default router.post(
aspectRatio: "16:9",
audio: false,
mode: "single",
taskClass: "测试视频生成",
name: "测试视频生成",
describe: "测试视频生成",
projectId: 0,
},
{
model: modelName,

View File

@ -27,6 +27,10 @@ async function superResolutionAndSave(src: string, projectId: number, videoRatio
systemPrompt: "你的核心任务是将所给的图片超分到 1K ,不改变图片任何内容,仅改变分辨率",
prompt: "你的核心任务是将所给的图片超分到 1K ,不改变图片任何内容,仅改变分辨率",
imageBase64: [await urlToBase64(src)],
taskClass: "分镜图超分",
name: `分镜图超分-${v4()}`,
describe: `原始图片链接: ${src}`,
projectId,
},
apiConfig,
);

View File

@ -4,50 +4,45 @@ import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
import { number, z } from "zod";
const router = express.Router();
export default router.get(
export default router.post(
"/",
validateFields({
projectName: z.string(),
taskName: z.string(),
state: z.string(),
state: z.string().optional().nullable(),
taskClass: z.string().optional().nullable(),
page: z.number(),
limit: z.number(),
projectId: z.number(),
}),
async (req, res) => {
const { projectName, taskName, state, page = 1, limit = 10 }: any = req.query;
const { taskClass, state, page = 1, limit = 10, projectId }: any = req.body;
const offset = (page - 1) * limit;
const data = await u
.db("t_taskList")
.db("t_myTasks")
.where("projectId", projectId)
.andWhere((qb) => {
if (projectName) {
qb.andWhere("t_taskList.projectName", projectName);
}
if (taskName) {
qb.andWhere("t_taskList.name", taskName);
if (taskClass) {
qb.andWhere("t_myTasks.taskClass", taskClass);
}
if (state) {
qb.andWhere("t_taskList.state", state);
qb.andWhere("t_myTasks.state", state);
}
})
.select("*")
.offset(offset)
.limit(limit);
const totalQuery = (await u
.db("t_taskList")
.db("t_myTasks")
.where("projectId", projectId)
.andWhere((qb) => {
if (projectName) {
qb.andWhere("t_taskList.projectName", projectName);
}
if (taskName) {
qb.andWhere("t_taskList.name", taskName);
if (taskClass) {
qb.andWhere("t_myTasks.taskClass", taskClass);
}
if (state) {
qb.andWhere("t_taskList.state", state);
qb.andWhere("t_myTasks.state", state);
}
})
.count("* as total")
.first()) as any;
res.status(200).send(success({ data, total: totalQuery?.total }));
}
},
);

View File

@ -0,0 +1,17 @@
import express from "express";
import u from "@/utils";
import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
import { number, z } from "zod";
const router = express.Router();
export default router.post(
"/",
validateFields({
projectId: z.number(),
}),
async (req, res) => {
const data = await u.db("t_myTasks").where("projectId", req.body.projectId).select("taskClass").groupBy("taskClass");
res.status(200).send(success(data));
},
);

View File

@ -177,6 +177,10 @@ ${prompt}
resolution: resolution as any,
audio: audioEnabled,
mode: mode as any,
taskClass: "视频生成",
name: `视频生成-${videoId}`,
describe: `视频生成,时长${duration}秒,分辨率${resolution}`,
projectId,
},
{
baseURL: aiConfigData?.baseUrl!,

View File

@ -1,4 +1,4 @@
// @db-hash 0f9789bd5ad2eebd79bd502988efcb4e
// @db-hash 4073740ecb78a07f69489a53512e9b4d
//该文件由脚本自动生成,请勿手动修改
export interface t_aiModelMap {
@ -7,6 +7,11 @@ export interface t_aiModelMap {
'key'?: string | null;
'name'?: string | null;
}
export interface t_artStyle {
'id'?: number;
'name'?: string | null;
'styles'?: string | null;
}
export interface t_assets {
'duration'?: string | null;
'episode'?: string | null;
@ -59,6 +64,16 @@ export interface t_imageModel {
'model'?: string | null;
'type'?: string | null;
}
export interface t_myTasks {
'describe'?: string | null;
'id'?: number;
'model'?: string | null;
'projectId'?: number | null;
'relatedObjects'?: string | null;
'startTime'?: number | null;
'state'?: string | null;
'taskClass'?: string | null;
}
export interface t_novel {
'chapter'?: string | null;
'chapterData'?: string | null;
@ -115,15 +130,6 @@ export interface t_storyline {
'novelIds'?: string | null;
'projectId'?: number | null;
}
export interface t_taskList {
'endTime'?: string | null;
'id'?: number;
'name'?: string | null;
'projectName'?: number | null;
'prompt'?: string | null;
'startTime'?: string | null;
'state'?: string | null;
}
export interface t_textModel {
'id'?: number;
'image'?: number | null;
@ -183,11 +189,13 @@ export interface t_videoModel {
export interface DB {
"t_aiModelMap": t_aiModelMap;
"t_artStyle": t_artStyle;
"t_assets": t_assets;
"t_chatHistory": t_chatHistory;
"t_config": t_config;
"t_image": t_image;
"t_imageModel": t_imageModel;
"t_myTasks": t_myTasks;
"t_novel": t_novel;
"t_outline": t_outline;
"t_project": t_project;
@ -195,7 +203,6 @@ export interface DB {
"t_script": t_script;
"t_setting": t_setting;
"t_storyline": t_storyline;
"t_taskList": t_taskList;
"t_textModel": t_textModel;
"t_user": t_user;
"t_video": t_video;

View File

@ -12,6 +12,7 @@ import other from "./owned/other";
import gemini from "./owned/gemini";
import modelScope from "./owned/modelScope";
import grsai from "./owned/grsai";
import { tr } from "zod/locales";
const urlToBase64 = async (url: string): Promise<string> => {
const res = await axios.get(url, { responseType: "arraybuffer" });
@ -29,20 +30,31 @@ const modelInstance = {
// apimart: apimart,
modelScope,
other,
grsai
grsai,
} as const;
export default async (input: ImageConfig, config: AIConfig) => {
const { model, apiKey, baseURL, manufacturer } = { ...config };
if (!config || !config?.model || !config?.apiKey || !config?.manufacturer) throw new Error("请检查模型配置是否正确");
const manufacturerFn = modelInstance[manufacturer as keyof typeof modelInstance];
if (!manufacturerFn) if (!manufacturerFn) throw new Error("不支持的图片厂商");
// if (manufacturer !== "other") {
// const owned = modelList.find((m) => m.model === model);
// if (!owned) throw new Error("不支持的模型");
// }
//添加到任务中心
const [taskId] = await u.db("t_myTasks").insert({
taskClass: input.taskClass,
relatedObjects: input.name,
model: config?.model ? config.model : "未知模型",
describe: input.describe ? input.describe : "无",
state: "进行中",
startTime: Date.now(),
projectId: input.projectId,
});
// 补充图片的 base64 内容类型字符串
if (input.imageBase64 && input.imageBase64.length > 0) {
input.imageBase64 = input.imageBase64.map((img) => {
@ -66,9 +78,18 @@ export default async (input: ImageConfig, config: AIConfig) => {
return `data:image/png;base64,${img}`;
});
}
let imageUrl = await manufacturerFn(input, { model, apiKey, baseURL });
if (!input.resType) input.resType = "b64";
if (input.resType === "b64" && imageUrl.startsWith("http")) imageUrl = await urlToBase64(imageUrl);
return imageUrl;
try {
let imageUrl = await manufacturerFn(input, { model, apiKey, baseURL });
if (!input.resType) input.resType = "b64";
if (input.resType === "b64" && imageUrl.startsWith("http")) imageUrl = await urlToBase64(imageUrl);
await u.db("t_myTasks").where("id", taskId).update({
state: "已完成",
});
return imageUrl;
} catch (error) {
await u.db("t_myTasks").where("id", taskId).update({
state: "生成失败",
});
throw error;
}
};

View File

@ -5,6 +5,10 @@ interface ImageConfig {
size: "1K" | "2K" | "4K";
aspectRatio: string;
resType?: "url" | "b64";
taskClass: string;
name: string;
describe: string;
projectId: number;
}
interface AIConfig {

View File

@ -79,7 +79,7 @@ const ai = Object.create({}) as {
ai.invoke = async (input: AIInput<any>, config: AIConfig) => {
const options = await buildOptions(input, config);
const result = await generateText(options.config);
if (options.responseFormat === "object" && input.output) {
const pattern = /{[^{}]*}|{(?:[^{}]*|{[^{}]*})*}/g;

View File

@ -21,7 +21,7 @@ const modelInstance = {
runninghub: runninghub,
apimart: apimart,
other: other,
grsai:grsai
grsai: grsai,
} as const;
export default async (input: VideoConfig, config?: AIConfig) => {
@ -32,7 +32,16 @@ export default async (input: VideoConfig, config?: AIConfig) => {
if (!manufacturerFn) if (!manufacturerFn) throw new Error("不支持的视频厂商");
// const owned = modelList.find((m) => m.model === model);
// if (!owned) throw new Error("不支持的模型");
//添加到任务中心
const [taskId] = await u.db("t_myTasks").insert({
taskClass: input.taskClass,
relatedObjects: input.name,
model: config?.model ? config.model : "未知模型",
describe: input.describe ? input.describe : "无",
state: "进行中",
startTime: Date.now(),
projectId: input.projectId,
});
// 补充图片的 base64 内容类型字符串
if (input.imageBase64 && input.imageBase64.length > 0) {
input.imageBase64 = input.imageBase64.map((img) => {
@ -59,9 +68,19 @@ export default async (input: VideoConfig, config?: AIConfig) => {
let videoUrl = await manufacturerFn(input, { model, apiKey, baseURL });
if (videoUrl) {
const response = await axios.get(videoUrl, { responseType: "stream" });
await u.oss.writeFile(input.savePath, response.data);
return input.savePath;
try {
const response = await axios.get(videoUrl, { responseType: "stream" });
await u.oss.writeFile(input.savePath, response.data);
await u.db("t_myTasks").where("id", taskId).update({
state: "已完成",
});
return input.savePath;
} catch (err) {
await u.db("t_myTasks").where("id", taskId).update({
state: "生成失败",
});
return videoUrl;
}
}
return videoUrl;
};

View File

@ -7,6 +7,10 @@ interface VideoConfig {
imageBase64?: string[];
audio?: boolean;
mode: "startEnd" | "multi" | "single" | "text";
taskClass: string;
name: string;
projectId: number;
describe?: string;
}
interface AIConfig {

View File

@ -88,6 +88,10 @@ export default async (images: Record<string, string>, directive: string, project
imageBase64: base64Images,
aspectRatio: aspectRatio ? aspectRatio : "16:9",
size: "1K",
taskClass: "图片编辑",
name: `图片编辑-${uuid()}`,
describe: `编辑指令: ${directive}`,
projectId,
},
apiConfig,
);

File diff suppressed because it is too large Load Diff