Merge lora name+strength into single key to stay under 32 output limit
Combines separate lora name and strength keys into "name:strength" format, removing 6 strength keys to free output slots for mode. Migration handles legacy <lora:> wrapper, separate strength keys, and already-merged formats. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+24
-25
@@ -296,9 +296,9 @@ def render_batch_processor(state: AppState):
|
||||
ui.button('From Source', icon='file_download', on_click=add_from_source)
|
||||
|
||||
# --- Standard / LoRA / VACE key sets ---
|
||||
lora_keys = ['lora 1 high', 'lora 1 high strength', 'lora 1 low', 'lora 1 low strength',
|
||||
'lora 2 high', 'lora 2 high strength', 'lora 2 low', 'lora 2 low strength',
|
||||
'lora 3 high', 'lora 3 high strength', 'lora 3 low', 'lora 3 low strength']
|
||||
lora_keys = ['lora 1 high', 'lora 1 low',
|
||||
'lora 2 high', 'lora 2 low',
|
||||
'lora 3 high', 'lora 3 low']
|
||||
standard_keys = {
|
||||
'name', 'mode', 'general_prompt', 'general_negative', 'current_prompt', 'negative', 'prompt',
|
||||
'seed', 'cfg', 'camera', 'flf', KEY_SEQUENCE_NUMBER,
|
||||
@@ -561,28 +561,26 @@ def _render_sequence_card(i, seq, batch_list, data, file_path, state,
|
||||
with ui.expansion('LoRA Settings', icon='style').classes('w-full'):
|
||||
for lora_idx in range(1, 4):
|
||||
for tier, tier_label in [('high', 'High'), ('low', 'Low')]:
|
||||
name_key = f'lora {lora_idx} {tier}'
|
||||
str_key = f'lora {lora_idx} {tier} strength'
|
||||
lora_key = f'lora {lora_idx} {tier}'
|
||||
|
||||
# Migrate legacy <lora:name:strength> format
|
||||
raw = str(seq.get(name_key, ''))
|
||||
# Parse combined name:strength value
|
||||
raw = str(seq.get(lora_key, ''))
|
||||
# Handle legacy <lora:> wrapper
|
||||
if raw.startswith('<lora:'):
|
||||
inner = raw.replace('<lora:', '').replace('>', '')
|
||||
if ':' in inner:
|
||||
parts = inner.rsplit(':', 1)
|
||||
seq[name_key] = parts[0]
|
||||
try:
|
||||
seq[str_key] = float(parts[1])
|
||||
except ValueError:
|
||||
seq[str_key] = 1.0
|
||||
else:
|
||||
seq[name_key] = inner
|
||||
seq.setdefault(str_key, 1.0)
|
||||
else:
|
||||
seq.setdefault(str_key, 1.0)
|
||||
raw = raw.replace('<lora:', '').replace('>', '')
|
||||
# Also remove stale separate strength key if present
|
||||
seq.pop(f'lora {lora_idx} {tier} strength', None)
|
||||
|
||||
lora_name = seq.get(name_key, '')
|
||||
lora_strength = seq.get(str_key, 1.0)
|
||||
if ':' in raw and raw:
|
||||
parts = raw.rsplit(':', 1)
|
||||
lora_name = parts[0]
|
||||
try:
|
||||
lora_strength = float(parts[1])
|
||||
except ValueError:
|
||||
lora_strength = 1.0
|
||||
else:
|
||||
lora_name = raw
|
||||
lora_strength = 1.0
|
||||
|
||||
with ui.row().classes('w-full items-center q-gutter-sm'):
|
||||
ui.label(f'L{lora_idx} {tier_label}').classes(
|
||||
@@ -598,9 +596,10 @@ def _render_sequence_card(i, seq, batch_list, data, file_path, state,
|
||||
format='%.1f',
|
||||
).props('outlined dense').style('max-width: 80px')
|
||||
|
||||
def _lora_sync(nk=name_key, sk=str_key, n_inp=name_input, s_inp=strength_input):
|
||||
seq[nk] = n_inp.value or ''
|
||||
seq[sk] = s_inp.value if s_inp.value is not None else 1.0
|
||||
def _lora_sync(k=lora_key, n_inp=name_input, s_inp=strength_input):
|
||||
name = n_inp.value or ''
|
||||
strength = s_inp.value if s_inp.value is not None else 1.0
|
||||
seq[k] = f'{name}:{strength}' if name else ''
|
||||
|
||||
name_input.on('blur', lambda _, s=_lora_sync: s())
|
||||
name_input.on('update:model-value', lambda _, s=_lora_sync: s())
|
||||
|
||||
Reference in New Issue
Block a user