79 lines
2.4 KiB
TypeScript
79 lines
2.4 KiB
TypeScript
|
|
import { PresetCategory } from '@/define/data/presetData'
|
|||
|
|
import { PresetBasic } from './presetBasic'
|
|||
|
|
import { PromptMergeType } from '@/define/enum/bookEnum'
|
|||
|
|
import { isEmpty } from 'lodash'
|
|||
|
|
|
|||
|
|
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
|
|||
|
|
): 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()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//这边坐下合并
|
|||
|
|
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('不支持的合并类型')
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|