Remember Studio 2 LoRA stacks for each engine
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user