From 09c6229b1ce41e49d519285cc7ac0912a3d40680 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Tue, 26 May 2026 00:05:54 +0100 Subject: [PATCH] fix(ui): refresh UNET dropdown after cross-arch model swap When reload_model_weights resets shared.opts.sd_unet to Default on a cross-arch swap, the backend value changed but the dropdown component kept showing the previous selection because sd_unet was not in the change_checkpoint button's outputs. Add the sd_unet component to the outputs and return its post-reload value via gr.update. --- modules/ui_settings.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/modules/ui_settings.py b/modules/ui_settings.py index 6441c2e90..09d2e83a4 100644 --- a/modules/ui_settings.py +++ b/modules/ui_settings.py @@ -391,6 +391,10 @@ def create_quicksettings(interfaces): if shared.opts.notification_audio_enable and os.path.exists(os.path.join(paths.script_path, shared.opts.notification_audio_path)): gr.Audio(interactive=False, value=os.path.join(paths.script_path, shared.opts.notification_audio_path), elem_id="audio_notification", visible=False) + def change_checkpoint_with_unet_sync(value, progress=False, force=False): + checkpoint_update, settings_text = run_settings_single(value, key='sd_model_checkpoint', progress=progress, force=force) + return checkpoint_update, get_value_for_setting('sd_unet'), settings_text + for k, _item in quicksettings_list: component = shared.settings_components[k] info = shared.opts.data_labels[k] @@ -405,20 +409,32 @@ def create_quicksettings(interfaces): change_handlers = [component.blur] else: change_handlers = [component.release if hasattr(component, 'release') else component.change] + progress_flag = info.refresh is not None + if k == 'sd_model_checkpoint': + def fn(value, progress=progress_flag): + return change_checkpoint_with_unet_sync(value, progress=progress) + outputs = [component, shared.settings_components['sd_unet'], text_settings] + else: + def fn(value, k=k, progress=progress_flag): + return run_settings_single(value, key=k, progress=progress) + outputs = [component, text_settings] for change_handler in change_handlers: change_handler( - fn=lambda value, k=k, progress=info.refresh is not None: run_settings_single(value, key=k, progress=progress), + fn=fn, inputs=[component], - outputs=[component, text_settings], + outputs=outputs, show_progress='full' if info.refresh is not None else 'hidden', ) + def set_checkpoint_sync_unet(value, _dummy): + return change_checkpoint_with_unet_sync(value, force=True) + button_set_checkpoint = gr.Button('Change model', elem_id='change_checkpoint', visible=False) button_set_checkpoint.click( - fn=lambda value, _: run_settings_single(value, key='sd_model_checkpoint', force=True), + fn=set_checkpoint_sync_unet, _js="consumeDesiredCheckpointName", inputs=[shared.settings_components['sd_model_checkpoint'], dummy_component], - outputs=[shared.settings_components['sd_model_checkpoint'], text_settings], + outputs=[shared.settings_components['sd_model_checkpoint'], shared.settings_components['sd_unet'], text_settings], ) button_set_refiner = gr.Button('Change refiner', elem_id='change_refiner', visible=False) button_set_refiner.click(