46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
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
|
|
}
|