495 lines
11 KiB
TypeScript
Raw Normal View History

2025-09-04 16:58:42 +08:00
//#region 图转视频类型
import { t } from '@/i18n'
import { BookBackTaskType } from './bookEnum'
2025-09-04 16:58:42 +08:00
/** 图片转视频的方式 */
export enum ImageToVideoModels {
/** runway 生成视频 */
RUNWAY = 'RUNWAY',
2025-09-04 16:58:42 +08:00
/** luma 生成视频 */
LUMA = 'LUMA',
2025-09-04 16:58:42 +08:00
/** 可灵生成视频 */
KLING = 'KLING',
/** 可灵视频拓展 */
KLING_VIDEO_EXTEND = 'KLING_VIDEO_EXTEND',
2025-09-04 16:58:42 +08:00
/** Pika 生成视频 */
PIKA = 'PIKA',
2025-09-04 16:58:42 +08:00
/** MJ 图转视频 */
MJ_VIDEO = 'MJ_VIDEO',
2025-09-04 16:58:42 +08:00
/** MJ 视频拓展 */
MJ_VIDEO_EXTEND = 'MJ_VIDEO_EXTEND'
2025-09-04 16:58:42 +08:00
}
2025-09-04 16:58:42 +08:00
export const MappingTaskTypeToVideoModel = (type: BookBackTaskType | string) => {
switch (type) {
case BookBackTaskType.LUMA_VIDEO:
return ImageToVideoModels.LUMA
2025-09-04 16:58:42 +08:00
case BookBackTaskType.RUNWAY_VIDEO:
return ImageToVideoModels.RUNWAY
2025-09-04 16:58:42 +08:00
case BookBackTaskType.KLING_VIDEO:
return ImageToVideoModels.KLING
case BookBackTaskType.KLING_VIDEO_EXTEND:
return ImageToVideoModels.KLING_VIDEO_EXTEND
2025-09-04 16:58:42 +08:00
case BookBackTaskType.MJ_VIDEO:
return ImageToVideoModels.MJ_VIDEO
2025-09-04 16:58:42 +08:00
case BookBackTaskType.MJ_VIDEO_EXTEND:
return ImageToVideoModels.MJ_VIDEO_EXTEND
2025-09-04 16:58:42 +08:00
default:
return 'UNKNOWN'
2025-09-04 16:58:42 +08:00
}
}
/**
*
* @param model
* @returns
*/
export const GetImageToVideoModelsLabel = (model: ImageToVideoModels | string) => {
switch (model) {
case ImageToVideoModels.RUNWAY:
return 'Runway'
2025-09-04 16:58:42 +08:00
case ImageToVideoModels.LUMA:
return 'Luma'
2025-09-04 16:58:42 +08:00
case ImageToVideoModels.KLING:
return t('可灵')
2025-09-04 16:58:42 +08:00
case ImageToVideoModels.PIKA:
return 'Pika'
2025-09-04 16:58:42 +08:00
case ImageToVideoModels.MJ_VIDEO:
case ImageToVideoModels.MJ_VIDEO_EXTEND:
return t('MJ视频')
2025-09-04 16:58:42 +08:00
default:
return '未知'
2025-09-04 16:58:42 +08:00
}
}
/**
*
*
2025-09-04 16:58:42 +08:00
*
* labelvalue
* GetImageToVideoModelsLabel 使 ImageToVideoModels
*
2025-09-04 16:58:42 +08:00
* @returns label value
*/
export const GetImageToVideoModelsOptions = () => {
return [
{
label: GetImageToVideoModelsLabel(ImageToVideoModels.MJ_VIDEO),
value: ImageToVideoModels.MJ_VIDEO
},
{
label: GetImageToVideoModelsLabel(ImageToVideoModels.RUNWAY),
value: ImageToVideoModels.RUNWAY
},
2025-09-04 16:58:42 +08:00
{ label: GetImageToVideoModelsLabel(ImageToVideoModels.LUMA), value: ImageToVideoModels.LUMA },
{
label: GetImageToVideoModelsLabel(ImageToVideoModels.KLING),
value: ImageToVideoModels.KLING
},
{ label: GetImageToVideoModelsLabel(ImageToVideoModels.PIKA), value: ImageToVideoModels.PIKA }
2025-09-04 16:58:42 +08:00
]
}
//#endregion
//#region 通用
/** 生成视频的方式 */
export enum VideoModel {
/** 文生视频 */
TEXT_TO_VIDEO = 'textToVideo',
2025-09-04 16:58:42 +08:00
/** 图生视频 */
IMAGE_TO_VIDEO = 'imageToVideo'
2025-09-04 16:58:42 +08:00
}
/** 图转视频的状态 */
export enum VideoStatus {
/** 等待 */
WAIT = 'wait',
/** 提交成功 */
SUBMITTED = 'submitted',
2025-09-04 16:58:42 +08:00
/** 处理中 */
PROCESSING = 'processing',
2025-09-04 16:58:42 +08:00
/** 完成 */
SUCCESS = 'success',
2025-09-04 16:58:42 +08:00
/** 失败 */
FAIL = 'fail'
2025-09-04 16:58:42 +08:00
}
export const GetVideoStatus = (status: VideoStatus | string) => {
switch (status) {
case VideoStatus.WAIT:
case '0':
return t('等待')
2025-09-04 16:58:42 +08:00
case VideoStatus.PROCESSING:
case '1':
return t('处理中')
2025-09-04 16:58:42 +08:00
case VideoStatus.SUCCESS:
case '3':
return t('完成')
2025-09-04 16:58:42 +08:00
case VideoStatus.FAIL:
case '2':
return t('失败')
2025-09-04 16:58:42 +08:00
default:
return t('未知')
2025-09-04 16:58:42 +08:00
}
}
//#endregion
//#region runway 相关
/** runway 生成视频的模型 */
export enum RunawayModel {
GNE2 = 'gen2',
GNE3 = 'gen3'
2025-09-04 16:58:42 +08:00
}
/** runway 合成视频的时长 */
export enum RunwaySeconds {
FIVE = 5,
TEN = 10
2025-09-04 16:58:42 +08:00
}
//#endregion
//#region 可灵相关
/**
*
* - std
* - pro
*/
2025-09-04 16:58:42 +08:00
export enum KlingMode {
/** 高性能 */
STD = 'std',
2025-09-04 16:58:42 +08:00
/** 高表现 */
PRO = 'pro'
2025-09-04 16:58:42 +08:00
}
/**
*
*
* @param mode
* @returns
*/
export function GetKlingModeLabel(mode: KlingMode | string) {
switch (mode) {
case KlingMode.STD:
return t('高性能 (std)')
case KlingMode.PRO:
return t('高表现 (pro)')
default:
return t('未知')
}
}
/**
*
*
* @returns UI组件
*/
export function GetKlingModeOptions() {
return [
{
label: GetKlingModeLabel(KlingMode.STD),
value: KlingMode.STD
},
{
label: GetKlingModeLabel(KlingMode.PRO),
value: KlingMode.PRO
}
]
}
/**
*
* - '5'5
* - '10'10
*/
export enum KlingDuration {
FIVE = 5,
TEN = 10
}
/**
*
*
* @param duration
* @returns
*/
export function GetKlingDurationLabel(duration: KlingDuration | string) {
switch (duration) {
case KlingDuration.FIVE:
return t('5秒')
case KlingDuration.TEN:
return t('10秒')
default:
return t('未知')
}
}
/**
*
*
* @returns UI组件
*/
export function GetKlingDurationOptions() {
return [
{
label: GetKlingDurationLabel(KlingDuration.FIVE),
value: KlingDuration.FIVE
},
{
label: GetKlingDurationLabel(KlingDuration.TEN),
value: KlingDuration.TEN
}
]
}
/**
*
* - kling-v1V1
* - kling-v1-5V1.5
* - kling-v1-6V1.6
* - kling-v2-masterV2 master
* - kling-v2-1V2.1
* - kling-v2-1-masterV2.1 master
*/
export enum KlingModelName {
/** V1 版本 */
KLING_V1 = 'kling-v1',
/** V1.5 版本 */
KLING_V1_5 = 'kling-v1-5',
/** V1.6 版本 */
KLING_V1_6 = 'kling-v1-6',
/** V2 master 版本 */
KLING_V2_MASTER = 'kling-v2-master',
/** V2.1 版本 */
KLING_V2_1 = 'kling-v2-1',
/** V2.1 master 版本 */
KLING_V2_1_MASTER = 'kling-v2-1-master'
}
/**
*
*
* @param modelName
* @returns
*/
export function GetKlingModelNameLabel(modelName: KlingModelName | string) {
switch (modelName) {
case KlingModelName.KLING_V1:
return t('Kling V1')
case KlingModelName.KLING_V1_5:
return t('Kling V1.5')
case KlingModelName.KLING_V1_6:
return t('Kling V1.6')
case KlingModelName.KLING_V2_MASTER:
return t('Kling V2 Master')
case KlingModelName.KLING_V2_1:
return t('Kling V2.1')
case KlingModelName.KLING_V2_1_MASTER:
return t('Kling V2.1 Master')
default:
return t('未知')
}
}
/**
*
*
* @returns UI组件
*/
export function GetKlingModelNameOptions() {
return [
{
label: GetKlingModelNameLabel(KlingModelName.KLING_V1),
value: KlingModelName.KLING_V1
},
{
label: GetKlingModelNameLabel(KlingModelName.KLING_V1_5),
value: KlingModelName.KLING_V1_5
},
{
label: GetKlingModelNameLabel(KlingModelName.KLING_V1_6),
value: KlingModelName.KLING_V1_6
},
{
label: GetKlingModelNameLabel(KlingModelName.KLING_V2_MASTER),
value: KlingModelName.KLING_V2_MASTER
},
{
label: GetKlingModelNameLabel(KlingModelName.KLING_V2_1),
value: KlingModelName.KLING_V2_1
},
{
label: GetKlingModelNameLabel(KlingModelName.KLING_V2_1_MASTER),
value: KlingModelName.KLING_V2_1_MASTER
}
]
}
2025-09-04 16:58:42 +08:00
//#endregion
//#region MJ Video
/**
* indextaskId必填
*/
export enum MJVideoAction {
Extend = 'extend'
2025-09-04 16:58:42 +08:00
}
/**
*
*/
export enum MJVideoImageType {
Base64 = 'base64',
Url = 'url'
2025-09-04 16:58:42 +08:00
}
/**
* MJ Video的动作幅度
*/
export enum MJVideoMotion {
High = 'high',
Low = 'low'
2025-09-04 16:58:42 +08:00
}
2025-09-04 16:58:42 +08:00
/**
* MJ视频动作幅度的标签
*
2025-09-04 16:58:42 +08:00
* @param model MJ视频动作幅度枚举值或字符串
* @returns
*/
export function GetMJVideoMotionLabel(model: MJVideoMotion | string) {
switch (model) {
case MJVideoMotion.High:
return t('高 (High)')
2025-09-04 16:58:42 +08:00
case MJVideoMotion.Low:
return t('低 (Low)')
2025-09-04 16:58:42 +08:00
default:
return t('未知')
2025-09-04 16:58:42 +08:00
}
}
/**
* MJ视频动作幅度的选项列表
*
2025-09-04 16:58:42 +08:00
* @returns UI组件
*/
export function GetMJVideoMotionOptions() {
return [
{
label: GetMJVideoMotionLabel(MJVideoMotion.Low),
value: MJVideoMotion.Low
},
{
label: GetMJVideoMotionLabel(MJVideoMotion.High),
value: MJVideoMotion.High
}
]
}
/**
* MJ Video
*/
export enum MJVideoType {
/** 标清 480p */
SD = 'vid_1.1_i2v_480',
/** 高清 720p */
HD = 'vid_1.1_i2v_720'
}
/**
* MJ视频质量类型的标签
*
* @param type MJ视频质量类型枚举值或字符串
* @returns
*/
export function GetMJVideoTypeLabel(type: MJVideoType | string) {
switch (type) {
case MJVideoType.SD:
return t('标清 (SD 480p)')
case MJVideoType.HD:
return t('高清 (HD 720p)')
default:
return t('未知')
}
}
/**
* MJ视频质量类型的选项列表
*
* @returns UI组件
*/
export function GetMJVideoTypeOptions() {
return [
{
label: GetMJVideoTypeLabel(MJVideoType.SD),
value: MJVideoType.SD
},
{ label: GetMJVideoTypeLabel(MJVideoType.HD), value: MJVideoType.HD }
]
}
/**
* MJ Video
*/
export enum MJVideoBatchSize {
/** 生成1个视频 */
ONE = 1,
/** 生成2个视频 */
TWO = 2,
/** 生成4个视频 */
FOUR = 4
}
/**
* MJ视频批次大小的标签
*
* @param batchSize MJ视频批次大小枚举值或数字
* @returns
*/
export function GetMJVideoBatchSizeLabel(batchSize: MJVideoBatchSize | number) {
switch (batchSize) {
case MJVideoBatchSize.ONE:
return t('1个视频')
case MJVideoBatchSize.TWO:
return t('2个视频')
case MJVideoBatchSize.FOUR:
return t('4个视频')
default:
return t('未知')
}
}
/**
* MJ视频批次大小的选项列表
*
* @returns UI组件
*/
export function GetMJVideoBatchSizeOptions() {
return [
{
label: GetMJVideoBatchSizeLabel(MJVideoBatchSize.ONE),
value: MJVideoBatchSize.ONE
},
{
label: GetMJVideoBatchSizeLabel(MJVideoBatchSize.TWO),
value: MJVideoBatchSize.TWO
},
{
label: GetMJVideoBatchSizeLabel(MJVideoBatchSize.FOUR),
value: MJVideoBatchSize.FOUR
2025-09-04 16:58:42 +08:00
}
]
}
//#endregion