feat: move resolutions into collapsible expansion above VACE Settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+42
-42
@@ -553,48 +553,6 @@ def _render_sequence_card(i, seq, batch_list, data, file_path, state,
|
|||||||
dict_textarea('Specific Negative', seq, 'negative').classes(
|
dict_textarea('Specific Negative', seq, 'negative').classes(
|
||||||
'w-full q-mt-sm').props('outlined rows=2')
|
'w-full q-mt-sm').props('outlined rows=2')
|
||||||
|
|
||||||
# --- Resolutions (8 fixed slots) ---
|
|
||||||
ui.label('Resolutions').classes('text-caption text-weight-bold q-mt-md')
|
|
||||||
resolutions = seq.setdefault('resolutions', [])
|
|
||||||
while len(resolutions) < 8:
|
|
||||||
resolutions.append([512, 512, 0])
|
|
||||||
# Migrate old [w, h] entries to [w, h, seed] (persisted on next real save)
|
|
||||||
for r_i in range(len(resolutions)):
|
|
||||||
if len(resolutions[r_i]) < 3:
|
|
||||||
resolutions[r_i] = list(resolutions[r_i]) + [0]
|
|
||||||
for idx in range(8):
|
|
||||||
entry = resolutions[idx]
|
|
||||||
with ui.row().classes('items-center w-full q-mt-xs no-wrap'):
|
|
||||||
ui.label(str(idx)).classes('text-caption').style('min-width:16px')
|
|
||||||
w_inp = ui.number(value=int(entry[0]), min=1, step=1, label='W').style(
|
|
||||||
'width:70px').props('outlined dense hide-bottom-space')
|
|
||||||
h_inp = ui.number(value=int(entry[1]), min=1, step=1, label='H').style(
|
|
||||||
'width:70px').props('outlined dense hide-bottom-space')
|
|
||||||
seed_inp = ui.number(value=int(entry[2]), min=0, step=1, label='Seed').style(
|
|
||||||
'flex:1; min-width:60px').props('outlined dense hide-bottom-space')
|
|
||||||
|
|
||||||
async def _sync_entry(r=idx, wi=w_inp, hi=h_inp, si=seed_inp):
|
|
||||||
seq['resolutions'][r] = [
|
|
||||||
int(wi.value) if wi.value else 512,
|
|
||||||
int(hi.value) if hi.value else 512,
|
|
||||||
int(si.value) if si.value else 0,
|
|
||||||
]
|
|
||||||
await commit()
|
|
||||||
|
|
||||||
async def _randomize(si=seed_inp, r=idx):
|
|
||||||
si.value = random.randint(0, 2**32 - 1)
|
|
||||||
seq['resolutions'][r][2] = int(si.value)
|
|
||||||
await commit()
|
|
||||||
|
|
||||||
ui.button(icon='casino', on_click=_randomize).props(
|
|
||||||
'flat dense round').classes('q-ml-xs')
|
|
||||||
|
|
||||||
w_inp.on('blur', lambda _, s=_sync_entry: s())
|
|
||||||
w_inp.on('update:model-value', lambda _, s=_sync_entry: s())
|
|
||||||
h_inp.on('blur', lambda _, s=_sync_entry: s())
|
|
||||||
h_inp.on('update:model-value', lambda _, s=_sync_entry: s())
|
|
||||||
seed_inp.on('blur', lambda _, s=_sync_entry: s())
|
|
||||||
seed_inp.on('update:model-value', lambda _, s=_sync_entry: s())
|
|
||||||
|
|
||||||
with splitter.after:
|
with splitter.after:
|
||||||
# Mode
|
# Mode
|
||||||
@@ -663,6 +621,48 @@ def _render_sequence_card(i, seq, batch_list, data, file_path, state,
|
|||||||
ui.image(str(img_path)).classes('w-full')
|
ui.image(str(img_path)).classes('w-full')
|
||||||
ui.button(icon='visibility', on_click=dlg.open).props('flat dense')
|
ui.button(icon='visibility', on_click=dlg.open).props('flat dense')
|
||||||
|
|
||||||
|
# --- Resolutions (8 fixed slots) ---
|
||||||
|
resolutions = seq.setdefault('resolutions', [])
|
||||||
|
while len(resolutions) < 8:
|
||||||
|
resolutions.append([512, 512, 0])
|
||||||
|
for r_i in range(len(resolutions)):
|
||||||
|
if len(resolutions[r_i]) < 3:
|
||||||
|
resolutions[r_i] = list(resolutions[r_i]) + [0]
|
||||||
|
with ui.expansion('Resolutions', icon='aspect_ratio').classes('w-full'):
|
||||||
|
for idx in range(8):
|
||||||
|
entry = resolutions[idx]
|
||||||
|
with ui.row().classes('items-center w-full q-mt-xs no-wrap'):
|
||||||
|
ui.label(str(idx)).classes('text-caption').style('min-width:16px')
|
||||||
|
w_inp = ui.number(value=int(entry[0]), min=1, step=1, label='W').style(
|
||||||
|
'width:70px').props('outlined dense hide-bottom-space')
|
||||||
|
h_inp = ui.number(value=int(entry[1]), min=1, step=1, label='H').style(
|
||||||
|
'width:70px').props('outlined dense hide-bottom-space')
|
||||||
|
seed_inp = ui.number(value=int(entry[2]), min=0, step=1, label='Seed').style(
|
||||||
|
'flex:1; min-width:60px').props('outlined dense hide-bottom-space')
|
||||||
|
|
||||||
|
async def _sync_entry(r=idx, wi=w_inp, hi=h_inp, si=seed_inp):
|
||||||
|
seq['resolutions'][r] = [
|
||||||
|
int(wi.value) if wi.value else 512,
|
||||||
|
int(hi.value) if hi.value else 512,
|
||||||
|
int(si.value) if si.value else 0,
|
||||||
|
]
|
||||||
|
await commit()
|
||||||
|
|
||||||
|
async def _randomize(si=seed_inp, r=idx):
|
||||||
|
si.value = random.randint(0, 2**32 - 1)
|
||||||
|
seq['resolutions'][r][2] = int(si.value)
|
||||||
|
await commit()
|
||||||
|
|
||||||
|
ui.button(icon='casino', on_click=_randomize).props(
|
||||||
|
'flat dense round').classes('q-ml-xs')
|
||||||
|
|
||||||
|
w_inp.on('blur', lambda _, s=_sync_entry: s())
|
||||||
|
w_inp.on('update:model-value', lambda _, s=_sync_entry: s())
|
||||||
|
h_inp.on('blur', lambda _, s=_sync_entry: s())
|
||||||
|
h_inp.on('update:model-value', lambda _, s=_sync_entry: s())
|
||||||
|
seed_inp.on('blur', lambda _, s=_sync_entry: s())
|
||||||
|
seed_inp.on('update:model-value', lambda _, s=_sync_entry: s())
|
||||||
|
|
||||||
# --- VACE Settings (full width) ---
|
# --- VACE Settings (full width) ---
|
||||||
with ui.expansion('VACE Settings', icon='settings').classes('w-full'):
|
with ui.expansion('VACE Settings', icon='settings').classes('w-full'):
|
||||||
_render_vace_settings(i, seq, batch_list, data, file_path, state, refresh_list)
|
_render_vace_settings(i, seq, batch_list, data, file_path, state, refresh_list)
|
||||||
|
|||||||
Reference in New Issue
Block a user