LaiTool_PRO/src/main/service/preset/presetBasicService.ts
lq1405 2b70e511d2 4.0.3 (2025.09.26)
1. 新增 海螺生成视频(文生视频,图转视频,首尾帧视频)
2. 修复MJ出图的部分问题
3. 优化原创的加载速度,分批次渲染,加快界面显示速度
2025-09-26 12:11:02 +08:00

89 lines
2.7 KiB
TypeScript

import { PresetCategory } from '@/define/data/presetData'
import { PresetBasic } from './presetBasic'
import { PromptMergeType } from '@/define/enum/bookEnum'
import { isEmpty } from 'lodash'
import { t } from '@/i18n'
export class PresetBasicService extends PresetBasic {
constructor() {
super()
}
/**
* 获取场景的提示词
* @param ids 需要获取的IDs
* @returns
*/
async GetScenePresetStringByIds(ids: string[]): Promise<string> {
await this.InitPresetBasic()
let sceneString = ''
for (let i = 0; i < ids.length; i++) {
const id = ids[i]
let scenes = this.presetRealmService.GetPresetByCondition({
id: id,
type: PresetCategory.Scene,
isShow: true
})
if (scenes.presetArray.length <= 0) {
continue
}
sceneString += scenes.presetArray[0].prompt + ', '
}
return sceneString
}
/**
* 获取人物提示词,包括垫图链接
* @param ids 需要获取的IDs
* @returns
*/
async GetCharacterPresetStringByIds(
ids: string[],
type: PromptMergeType = PromptMergeType.MJ_MERGE,
mjModel: string = ''
): Promise<{ characterString: string; characterUrl: string }> {
await this.InitPresetBasic()
let characterString = ''
let characterUrl = ''
let crefCw = ''
let characters = this.presetRealmService.GetPresetByIds(ids, PresetCategory.Character)
if (type == PromptMergeType.MJ_MERGE) {
for (let i = 0; i < characters.length; i++) {
const element = characters[i]
characterString += element.prompt + ', '
if (element.imageUrl && element.imageUrl != '' && element.crefCw) {
characterUrl += ` ${element.imageUrl} `
crefCw = (element.crefCw ?? 20).toString()
}
}
// 判断是不是v7
if (mjModel == '0d33ae62-e0a8-4429-89e4-304bfd20cd6f') {
//这边坐下合并
if (characterUrl != '') {
characterUrl = ` --oref ${characterUrl} --ow ${crefCw}`
}
} else {
// 其他
//这边坐下合并
if (characterUrl != '') {
characterUrl = ` --cref ${characterUrl} --cw ${crefCw}`
}
}
return { characterString, characterUrl }
} else if (type == PromptMergeType.SD_MERGE) {
let result = ''
for (let i = 0; i < characters.length; i++) {
let character = characters[i]
result += character.prompt + ', '
if (!isEmpty(character.lora) && character.lora != '无') {
result += `, <lora:${character.lora}:${character.loraWeight ?? 1}>`
}
}
return { characterString: result, characterUrl: '' }
} else {
throw new Error(t('不支持的合并类型'))
}
}
}