import {filterLoraStackForUse} from '../../utils/loras.ts' export function loraUse(form) { const video=['video','extend'].includes(form.mode) if (video) return form.engine==='ltx'?'ltx':'minimax' if (form.engine==='qwen21') return 'qwen21' return 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 }