Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import { presets, PresetName, Preset } from "@/app/engine/presets" | |
/** | |
* Try to guess the preset from a list of prompts | |
* | |
* @param prompts | |
* @returns | |
*/ | |
export function parsePresetFromPrompts(prompts: string[]): Preset { | |
const presetToCount: Record<PresetName, number> = {} | |
const chunkToPresets: Record<string, PresetName[]> = {} | |
Object.values(presets).forEach(preset => { | |
preset.imagePrompt("").map(x => x.trim().toLowerCase()).forEach(chunk => { | |
chunkToPresets[chunk] = Array.isArray(chunkToPresets[chunk]) ? chunkToPresets[chunk] : [] | |
if (!chunkToPresets[chunk].includes(preset.id)) { | |
chunkToPresets[chunk].push(preset.id) | |
} | |
}) | |
}) | |
prompts.forEach(prompt => { | |
prompt.split(",").map(x => x.trim().toLowerCase()).forEach(chunk => { | |
if (Array.isArray(chunkToPresets[chunk])) { | |
const presetNames = chunkToPresets[chunk] as PresetName[] | |
presetNames.forEach(preset => { | |
presetToCount[preset] = (presetToCount[preset] || 0) + 1 | |
}) | |
} | |
}) | |
}) | |
const bestMatch: PresetName | undefined = Object.entries(presetToCount).sort((a, b) => b[1] - a[1]).map(x => x[0]).at(0) as (PresetName | undefined) | |
return presets[bestMatch || "neutral"] || presets.neutral | |
} |