Files
aigen/shared/studio2/lora-memory.mjs
T

44 lines
1.4 KiB
JavaScript

import {filterLoraStackForUse} from '../../utils/loras.ts'
export function loraUse(form) {
const video=['video','extend'].includes(form.mode)
return video ? (form.engine==='ltx'?'ltx':'minimax') : (form.engine==='krea'?'krea':'flux')
}
// One controller per bench. Storage is optional (SSR/private browsing still works).
export function createLoraMemory(xaigen, storage) {
const stacks={}
let active=null
const key=`studio2-lora-stacks:${xaigen?'xaigen':'aigen'}`
try { Object.assign(stacks,JSON.parse(storage?.getItem(key)||'{}')) } catch {}
const load=use=>filterLoraStackForUse(stacks[use],use,xaigen)
const save=(use,stack)=>{
stacks[use]=filterLoraStackForUse(stack,use,xaigen)
try { storage?.setItem(key,JSON.stringify(stacks)) } catch {}
}
return {
sync(form) {
const use=loraUse(form)
if(active!==use) {
// Every stack edit is remembered by the bench watcher before a later switch.
active=use
form.settings.loraStack=load(use)
}
save(use,form.settings.loraStack)
},
restore(form,stack) {
const use=loraUse(form)
form.settings.loraStack=stack?.length ? filterLoraStackForUse(stack,use,xaigen) : load(use)
active=use
save(use,form.settings.loraStack)
return form
}
}
}
export function restoreLoras(form, stack, xaigen=false, memory) {
if(memory) return memory.restore(form,stack)
form.settings.loraStack=filterLoraStackForUse(stack,loraUse(form),xaigen)
return form
}