diff --git a/src/ts/process/inlayScreen.ts b/src/ts/process/inlayScreen.ts index 9bd6bece..87839eb8 100644 --- a/src/ts/process/inlayScreen.ts +++ b/src/ts/process/inlayScreen.ts @@ -2,39 +2,44 @@ import { writeInlayImage } from "../image"; import type { character } from "../storage/database"; import { generateAIImage } from "./stableDiff"; +const imggenRegex = [//gi, /{{ImgGen="(.+?)"}}/gi] as const + export function runInlayScreen(char:character, data:string):{text:string, promise?:Promise} { if(char.inlayViewScreen){ if(char.viewScreen === 'emotion'){ - return {text: data.replace(//g, '{{emotion::$1}}')} + return {text: data.replace(//gi, '{{emotion::$1}}')} } if(char.viewScreen === 'imggen'){ return { - text: data.replace(//g,'[Generating...]'), + text: data.replace(imggenRegex[0],'[Generating...]').replace(imggenRegex[1],'[Generating...]'), promise : (async () => { - const promises:Promise[] = []; - const neg = char.newGenData.negative - data.replace(//g, (match, p1) => { - const prompt = char.newGenData.prompt.replaceAll('{{slot}}', p1) - promises.push((async () => { - const v = await generateAIImage(prompt, char, neg, 'inlay') - if(!v){ + for(const regex of imggenRegex){ + const promises:Promise[] = []; + const neg = char.newGenData.negative + data.replace(regex, (match, p1) => { + const prompt = char.newGenData.prompt.replaceAll('{{slot}}', p1) + promises.push((async () => { + const v = await generateAIImage(prompt, char, neg, 'inlay') + if(!v){ + return '' + } + const imgHTML = new Image() + imgHTML.src = v + const inlay = await writeInlayImage(imgHTML) + return inlay + })()) + return match + }) + const d = await Promise.all(promises) + data = data.replace(regex, () => { + const result = d.shift() + if(result === false){ return '' } - const imgHTML = new Image() - imgHTML.src = v - const inlay = await writeInlayImage(imgHTML) - return inlay - })()) - return match - }) - const d = await Promise.all(promises) - return data.replace(//g, () => { - const result = d.shift() - if(result === false){ - return '' - } - return result - }) + return result + }) + } + return data })() } }