63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
import "./type";
|
|
import u from "@/utils";
|
|
import modelList from "./modelList";
|
|
import axios from "axios";
|
|
|
|
import volcengine from "./owned/volcengine";
|
|
import kling from "./owned/kling";
|
|
import vidu from "./owned/vidu";
|
|
import wan from "./owned/wan";
|
|
import runninghub from "./owned/runninghub";
|
|
import gemini from "./owned/gemini";
|
|
|
|
const modelInstance = {
|
|
volcengine: volcengine,
|
|
kling: kling,
|
|
vidu: vidu,
|
|
wan: wan,
|
|
gemini: gemini,
|
|
runninghub: runninghub,
|
|
apimart: null,
|
|
} as const;
|
|
|
|
export default async (input: VideoConfig, config?: AIConfig) => {
|
|
const sqlTextModelConfig = await u.getConfig("video");
|
|
const { model, apiKey, baseURL, manufacturer } = { ...sqlTextModelConfig, ...config };
|
|
const manufacturerFn = modelInstance[manufacturer as keyof typeof modelInstance];
|
|
if (!manufacturerFn) if (!manufacturerFn) throw new Error("不支持的视频厂商");
|
|
const owned = modelList.find((m) => m.model === model);
|
|
if (!owned) throw new Error("不支持的模型");
|
|
|
|
// 补充图片的 base64 内容类型字符串
|
|
if (input.imageBase64 && input.imageBase64.length > 0) {
|
|
input.imageBase64 = input.imageBase64.map((img) => {
|
|
if (img.startsWith("data:image/")) {
|
|
return img;
|
|
}
|
|
// 根据 base64 头部判断图片类型
|
|
if (img.startsWith("/9j/")) {
|
|
return `data:image/jpeg;base64,${img}`;
|
|
}
|
|
if (img.startsWith("iVBORw")) {
|
|
return `data:image/png;base64,${img}`;
|
|
}
|
|
if (img.startsWith("R0lGOD")) {
|
|
return `data:image/gif;base64,${img}`;
|
|
}
|
|
if (img.startsWith("UklGR")) {
|
|
return `data:image/webp;base64,${img}`;
|
|
}
|
|
// 默认使用 png
|
|
return `data:image/png;base64,${img}`;
|
|
});
|
|
}
|
|
|
|
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;
|
|
}
|
|
return videoUrl;
|
|
};
|