diff --git a/CHANGELOG.md b/CHANGELOG.md index f03eb2b54..6faf5448d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ - add video support to gallery, thanks @CalamitousFelicitousness - additional artwork for reference models in networks, thanks @liutyi - improve ui hints display + - restyled all toolbuttons to be modernui native - configurable horizontal vs vertical panel layout in settings -> user interface -> panel min width *example*: if panel width is less than specified value, layout switches to verical diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 36a3c9be2..25594f476 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 36a3c9be2074990d2684f830f64aa2545b28e7bd +Subproject commit 25594f476668a106b8c305876ca918b524931c59 diff --git a/installer.py b/installer.py index fb52ffc64..d59908bf0 100644 --- a/installer.py +++ b/installer.py @@ -447,6 +447,8 @@ def git(arg: str, folder: str = None, ignore: bool = False, optional: bool = Fal stdout += ('\n' if len(stdout) > 0 else '') + result.stderr.decode(encoding="utf8", errors="ignore") stdout = stdout.strip() if result.returncode != 0 and not ignore: + if folder is None: + folder = 'root' if "couldn't find remote ref" in stdout: # not a git repo log.error(f'Git: folder="{folder}" could not identify repository') elif "no submodule mapping found" in stdout: diff --git a/modules/framepack/framepack_ui.py b/modules/framepack/framepack_ui.py index 3cc124c12..305fddc38 100644 --- a/modules/framepack/framepack_ui.py +++ b/modules/framepack/framepack_ui.py @@ -40,7 +40,7 @@ def create_ui(prompt, negative, styles, _overrides): with gr.Accordion(label="Video", open=False): with gr.Row(): mp4_codec = gr.Dropdown(label="FP codec", choices=['none', 'libx264'], value='libx264', type='value') - ui_common.create_refresh_button(mp4_codec, get_codecs) + ui_common.create_refresh_button(mp4_codec, get_codecs, elem_id="framepack_mp4_codec_refresh") mp4_ext = gr.Textbox(label="FP format", value='mp4', elem_id="framepack_mp4_ext") mp4_opt = gr.Textbox(label="FP options", value='crf:16', elem_id="framepack_mp4_ext") with gr.Row(): diff --git a/modules/lora/lora_extract.py b/modules/lora/lora_extract.py index 97b8be08a..18682804b 100644 --- a/modules/lora/lora_extract.py +++ b/modules/lora/lora_extract.py @@ -253,7 +253,7 @@ def create_ui(): gr.HTML('

 Extract currently loaded LoRA(s)

') with gr.Row(): loaded = gr.Textbox(placeholder="Press refresh to query loaded LoRA", label="Loaded LoRA", interactive=False) - create_refresh_button(loaded, lambda: None, lambda: {'value': loaded_lora_str()}, "testid") + create_refresh_button(loaded, lambda: None, lambda: {'value': loaded_lora_str()}, "lora_extract_refresh") with gr.Group(): with gr.Row(): modules = gr.CheckboxGroup(label="Modules to extract", value=['unet'], choices=['te', 'unet']) diff --git a/modules/ltx/ltx_ui.py b/modules/ltx/ltx_ui.py index a3c537b69..27b033af5 100644 --- a/modules/ltx/ltx_ui.py +++ b/modules/ltx/ltx_ui.py @@ -20,7 +20,7 @@ def create_ui(prompt, negative, styles, overrides): with gr.Row(): frames = gr.Slider(label='LTX frames', minimum=1, maximum=513, step=1, value=17, elem_id="ltx_frames") seed = gr.Number(label='LTX seed', value=-1, elem_id="ltx_seed", container=True) - random_seed = ToolButton(ui_symbols.random, elem_id="ltx_random_seed") + random_seed = ToolButton(ui_symbols.random, elem_id="ltx_seed_random") with gr.Accordion(open=False, label="Condition", elem_id='ltx_condition_accordion'): condition_strength = gr.Slider(label='LTX condition strength', minimum=0.1, maximum=1.0, step=0.05, value=0.8, elem_id="ltx_condition_image_strength") with gr.Tabs(): @@ -47,7 +47,7 @@ def create_ui(prompt, negative, styles, overrides): mp4_interpolate = gr.Slider(label="LTX interpolation", minimum=0, maximum=10, value=0, step=1) with gr.Row(): mp4_codec = gr.Dropdown(label="LTX codec", choices=['none', 'libx264'], value='libx264', type='value') - ui_common.create_refresh_button(mp4_codec, get_codecs) + ui_common.create_refresh_button(mp4_codec, get_codecs, elem_id="framepack_mp4_codec_refresh") mp4_ext = gr.Textbox(label="LTX format", value='mp4', elem_id="framepack_mp4_ext") mp4_opt = gr.Textbox(label="LTX options", value='crf:16', elem_id="framepack_mp4_ext") with gr.Row(): diff --git a/modules/masking.py b/modules/masking.py index f9af9106a..5b3319df0 100644 --- a/modules/masking.py +++ b/modules/masking.py @@ -534,7 +534,7 @@ def create_segment_ui(): with gr.Row(): controls.append(gr.Checkbox(label="Live update", value=True, elem_id="control_mask_live_update")) btn_mask = ui_components.ToolButton(value=ui_symbols.refresh, visible=True, elem_id="control_mask_refresh", ) - btn_lama = ui_components.ToolButton(value=ui_symbols.image, visible=True, elem_id="control_mask_lama") + btn_lama = ui_components.ToolButton(value=ui_symbols.image, visible=True, elem_id="control_mask_remove") with gr.Row(): controls.append(gr.Checkbox(label="Inpaint masked only", value=False, elem_id="control_mask_only", )) controls.append(gr.Checkbox(label="Invert mask", value=False, elem_id="control_mask_invert")) diff --git a/modules/onnx_impl/ui.py b/modules/onnx_impl/ui.py index 85481e621..0af6ba345 100644 --- a/modules/onnx_impl/ui.py +++ b/modules/onnx_impl/ui.py @@ -47,7 +47,7 @@ def create_ui(): cache_state_dirname = gr.Textbox(value=None, visible=False) with gr.Row(): model_dropdown = gr.Dropdown(label="Model", value="Please select model", choices=checkpoint_titles()) - create_refresh_button(model_dropdown, refresh_checkpoints, {}, "onnx_cache_refresh_diffusers_model") + create_refresh_button(model_dropdown, refresh_checkpoints, {}, "onnx_cache_diffusers_model_refresh") with gr.Row(): def remove_cache_onnx_converted(dirname: str): shutil.rmtree(os.path.join(opts.onnx_cached_models_path, dirname)) diff --git a/modules/postprocess/yolo.py b/modules/postprocess/yolo.py index 1cd7f552b..dc7479443 100644 --- a/modules/postprocess/yolo.py +++ b/modules/postprocess/yolo.py @@ -414,8 +414,8 @@ class YoloRestorer(Detailer): with gr.Row(): detailers = gr.Dropdown(label="Detailer models", elem_id=f"{tab}_detailers", choices=list(self.list), value=shared.opts.detailer_models, multiselect=True, visible=True) detailers_text = gr.Textbox(label="Detailer list", elem_id=f"{tab}_detailers_text", placeholder="Comma separated list of detailer models", lines=2, visible=False, interactive=True) - refresh_btn = ui_common.create_refresh_button(detailers, self.enumerate, lambda: {"choices": self.enumerate()}, 'yolo_refresh_models') - ui_mode = ui_components.ToolButton(value=ui_symbols.view) + refresh_btn = ui_common.create_refresh_button(detailers, self.enumerate, lambda: {"choices": self.enumerate()}, 'yolo_models_refresh') + ui_mode = ui_components.ToolButton(value=ui_symbols.view, elem_id=f'{tab}_yolo_models_list') ui_mode.click(fn=self.change_mode, inputs=[detailers, detailers_text], outputs=[detailers, detailers_text, refresh_btn]) with gr.Row(): classes = gr.Textbox(label="Detailer classes", placeholder="Classes", elem_id=f"{tab}_detailer_classes") diff --git a/modules/ui_caption.py b/modules/ui_caption.py index a4da339d3..32c549bdc 100644 --- a/modules/ui_caption.py +++ b/modules/ui_caption.py @@ -77,7 +77,7 @@ def create_ui(): with gr.Tab("CLiP Interrogate", elem_id='tab_clip_interrogate'): with gr.Row(): clip_model = gr.Dropdown([], value=shared.opts.interrogate_clip_model, label='CLiP model', elem_id='clip_clip_model') - ui_common.create_refresh_button(clip_model, openclip.refresh_clip_models, lambda: {"choices": openclip.refresh_clip_models()}, 'clip_refresh_models') + ui_common.create_refresh_button(clip_model, openclip.refresh_clip_models, lambda: {"choices": openclip.refresh_clip_models()}, 'clip_models_refresh') blip_model = gr.Dropdown(list(openclip.caption_models), value=shared.opts.interrogate_blip_model, label='Caption model', elem_id='btN_clip_blip_model') clip_mode = gr.Dropdown(openclip.caption_types, label='Mode', value='fast', elem_id='clip_clip_mode') with gr.Accordion(label='Advanced options', open=False, visible=True): diff --git a/modules/ui_control.py b/modules/ui_control.py index cfcd191ed..dfa90f54f 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -244,17 +244,17 @@ def create_ui(_blocks: gr.Blocks=None): enabled_cb = gr.Checkbox(enabled, label='Active', container=False, show_label=True, elem_id=f'control_unit-{i}-enabled') process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None', elem_id=f'control_unit-{i}-process_name') model_id = gr.Dropdown(label="ControlNet", choices=controlnet.list_models(), value='None', elem_id=f'control_unit-{i}-model_name') - ui_common.create_refresh_button(model_id, controlnet.list_models, lambda: {"choices": controlnet.list_models(refresh=True)}, f'refresh_controlnet_models_{i}') + ui_common.create_refresh_button(model_id, controlnet.list_models, lambda: {"choices": controlnet.list_models(refresh=True)}, f'controlnet_models_{i}_refresh') control_mode = gr.Dropdown(label="CN Mode", choices=['default'], value='default', visible=False, elem_id=f'control_unit-{i}-mode') model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=2.0, step=0.01, value=1.0, elem_id=f'control_unit-{i}-strength') control_start = gr.Slider(label="CN Start", minimum=0.0, maximum=1.0, step=0.05, value=0, elem_id=f'control_unit-{i}-start') control_end = gr.Slider(label="CN End", minimum=0.0, maximum=1.0, step=0.05, value=1.0, elem_id=f'control_unit-{i}-end') control_tile = gr.Dropdown(label="CN Tiles", choices=[x.strip() for x in shared.opts.control_tiles.split(',') if 'x' in x], value='1x1', visible=False, elem_id=f'control_unit-{i}-tile') - reset_btn = ui_components.ToolButton(value=ui_symbols.reset) - image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) - image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - btn_preview= ui_components.ToolButton(value=ui_symbols.preview) - image_preview = gr.Image(label="Input", type="pil", height=128, width=128, visible=False, interactive=True, show_label=False, show_download_button=False, container=False, elem_id=f'control_unit-{i}-override') + reset_btn = ui_components.ToolButton(value=ui_symbols.reset, elem_id=f'controlnet_unit-{i}-reset') + image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool'], elem_id=f'controlnet_unit-{i}-upload') + image_reuse= ui_components.ToolButton(value=ui_symbols.reuse, elem_id=f'controlnet_unit-{i}-reuse') + btn_preview= ui_components.ToolButton(value=ui_symbols.preview, elem_id=f'controlnet_unit-{i}-preview') + image_preview = gr.Image(label="Input", type="pil", height=128, width=128, visible=False, interactive=True, show_label=False, show_download_button=False, container=False, elem_id=f'controlnet_unit-{i}-override') controlnet_ui_units.append(unit_ui) units.append(unit.Unit( unit_type = 'controlnet', @@ -297,13 +297,13 @@ def create_ui(_blocks: gr.Blocks=None): enabled_cb = gr.Checkbox(enabled, label='Active', container=False, show_label=True, elem_id=f'control_unit-{i}-enabled') process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None', elem_id=f'control_unit-{i}-process_name') model_id = gr.Dropdown(label="Adapter", choices=t2iadapter.list_models(), value='None', elem_id=f'control_unit-{i}-model_name') - ui_common.create_refresh_button(model_id, t2iadapter.list_models, lambda: {"choices": t2iadapter.list_models(refresh=True)}, f'refresh_adapter_models_{i}') + ui_common.create_refresh_button(model_id, t2iadapter.list_models, lambda: {"choices": t2iadapter.list_models(refresh=True)}, f'adapter_models_{i}_refresh') model_strength = gr.Slider(label="T2I Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0, elem_id=f'control_unit-{i}-strength') - reset_btn = ui_components.ToolButton(value=ui_symbols.reset) - image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) - image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - btn_preview= ui_components.ToolButton(value=ui_symbols.preview) - image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') + reset_btn = ui_components.ToolButton(value=ui_symbols.reset, elem_id=f'adapter_unit-{i}-reset') + image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool'], elem_id=f'adapter_unit-{i}-upload') + image_reuse= ui_components.ToolButton(value=ui_symbols.reuse, elem_id=f'adapter_unit-{i}-reuse') + btn_preview= ui_components.ToolButton(value=ui_symbols.preview, elem_id=f'adapter_unit-{i}-preview') + image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'adapter_unit-{i}-override') adapter_ui_units.append(unit_ui) units.append(unit.Unit( unit_type = 't2i adapter', @@ -342,15 +342,15 @@ def create_ui(_blocks: gr.Blocks=None): enabled_cb = gr.Checkbox(enabled, label='Active', container=False, show_label=True, elem_id=f'control_unit-{i}-enabled') process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None', elem_id=f'control_unit-{i}-process_name') model_id = gr.Dropdown(label="ControlNet-XS", choices=xs.list_models(), value='None', elem_id=f'control_unit-{i}-model_name') - ui_common.create_refresh_button(model_id, xs.list_models, lambda: {"choices": xs.list_models(refresh=True)}, f'refresh_xs_models_{i}') + ui_common.create_refresh_button(model_id, xs.list_models, lambda: {"choices": xs.list_models(refresh=True)}, f'xs_models_{i}_refresh') model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0, elem_id=f'control_unit-{i}-strength') control_start = gr.Slider(label="Start", minimum=0.0, maximum=1.0, step=0.05, value=0, elem_id=f'control_unit-{i}-start') control_end = gr.Slider(label="End", minimum=0.0, maximum=1.0, step=0.05, value=1.0, elem_id=f'control_unit-{i}-end') - reset_btn = ui_components.ToolButton(value=ui_symbols.reset) - image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) - image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - btn_preview= ui_components.ToolButton(value=ui_symbols.preview) - image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') + reset_btn = ui_components.ToolButton(value=ui_symbols.reset, elem_id=f'controlnetxs_unit-{i}-reset') + image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool'], elem_id=f'controlnetxs_unit-{i}-upload') + image_reuse= ui_components.ToolButton(value=ui_symbols.reuse, elem_id=f'controlnetxs_unit-{i}-reuse') + btn_preview= ui_components.ToolButton(value=ui_symbols.preview, elem_id=f'controlnetxs_unit-{i}-preview') + image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'controlnetxs_unit-{i}-override') controlnetxs_ui_units.append(unit_ui) units.append(unit.Unit( unit_type = 'xs', @@ -390,13 +390,13 @@ def create_ui(_blocks: gr.Blocks=None): enabled_cb = gr.Checkbox(enabled, label='Active', container=False, show_label=True, elem_id=f'control_unit-{i}-enabled') process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None', elem_id=f'control_unit-{i}-process_name') model_id = gr.Dropdown(label="Model", choices=lite.list_models(), value='None', elem_id=f'control_unit-{i}-model_name') - ui_common.create_refresh_button(model_id, lite.list_models, lambda: {"choices": lite.list_models(refresh=True)}, f'refresh_lite_models_{i}') + ui_common.create_refresh_button(model_id, lite.list_models, lambda: {"choices": lite.list_models(refresh=True)}, f'lite_models_{i}_refresh') model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0, elem_id=f'control_unit-{i}-strength') - reset_btn = ui_components.ToolButton(value=ui_symbols.reset) - image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) - image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') - btn_preview= ui_components.ToolButton(value=ui_symbols.preview) + reset_btn = ui_components.ToolButton(value=ui_symbols.reset, elem_id=f'lite_unit-{i}-reset') + image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool'], elem_id=f'lite_unit-{i}-upload') + image_reuse= ui_components.ToolButton(value=ui_symbols.reuse, elem_id=f'lite_unit-{i}-reuse') + image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'lite_unit-{i}-override') + btn_preview= ui_components.ToolButton(value=ui_symbols.preview, elem_id=f'lite_unit-{i}-preview') lite_ui_units.append(unit_ui) units.append(unit.Unit( unit_type = 'lite', @@ -436,11 +436,11 @@ def create_ui(_blocks: gr.Blocks=None): enabled_cb = gr.Checkbox(enabled, label='Active', container=False, show_label=True, elem_id=f'control_unit-{i}-enabled') model_id = gr.Dropdown(label="Reference", choices=reference.list_models(), value='Reference', visible=False, elem_id=f'control_unit-{i}-model_name') model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0, visible=False, elem_id=f'control_unit-{i}-strength') - reset_btn = ui_components.ToolButton(value=ui_symbols.reset) - image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) - image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') - btn_preview= ui_components.ToolButton(value=ui_symbols.preview) + reset_btn = ui_components.ToolButton(value=ui_symbols.reset, elem_id=f'reference_unit-{i}-reset') + image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool'], elem_id=f'reference_unit-{i}-upload') + image_reuse= ui_components.ToolButton(value=ui_symbols.reuse, elem_id=f'reference_unit-{i}-reuse') + image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'reference_unit-{i}-override') + btn_preview= ui_components.ToolButton(value=ui_symbols.preview, elem_id=f'reference_unit-{i}-preview') units.append(unit.Unit( unit_type = 'reference', index = i, diff --git a/modules/ui_docs.py b/modules/ui_docs.py index 1b64f946c..d8b4e3dce 100644 --- a/modules/ui_docs.py +++ b/modules/ui_docs.py @@ -248,7 +248,7 @@ def create_ui_logs(): def create_ui_github(): with gr.Row(): github_search = gr.Textbox(label="Search GitHub Wiki Pages", elem_id="github_search", elem_classes="docs-search") - github_search_btn = ui_components.ToolButton(value=ui_symbols.search, elem_id="github_search_btn") + github_search_btn = ui_components.ToolButton(value=ui_symbols.search, elem_id="github_btn_search") with gr.Row(): github_result = gr.HTML(elem_id="github_result", value='', elem_classes="github-result") with gr.Row(): @@ -262,7 +262,7 @@ def create_ui_github(): def create_ui_docs(): with gr.Row(): docs_search = gr.Textbox(label="Search Docs", elem_id="github_search", elem_classes="docs-search") - docs_search_btn = ui_components.ToolButton(value=ui_symbols.search, elem_id="github_search_btn") + docs_search_btn = ui_components.ToolButton(value=ui_symbols.search, elem_id="docs_btn_search") with gr.Row(): docs_result = gr.HTML(elem_id="docs_result", value='', elem_classes="docs-result") with gr.Row(): diff --git a/modules/ui_models.py b/modules/ui_models.py index 71b96ba93..bfb876372 100644 --- a/modules/ui_models.py +++ b/modules/ui_models.py @@ -169,11 +169,11 @@ def create_ui(): merge_mode_docs = gr.HTML(value=getattr(merge_methods, "weighted_sum", "").__doc__.replace("\n", "
")) with gr.Row(): primary_model_name = gr.Dropdown(sd_model_choices(), label="Primary model", value="None") - create_refresh_button(primary_model_name, sd_models.list_models, lambda: {"choices": sd_model_choices()}, "refresh_checkpoint_A") + create_refresh_button(primary_model_name, sd_models.list_models, lambda: {"choices": sd_model_choices()}, "checkpoint_A_refresh") secondary_model_name = gr.Dropdown(sd_model_choices(), label="Secondary model", value="None") - create_refresh_button(secondary_model_name, sd_models.list_models, lambda: {"choices": sd_model_choices()}, "refresh_checkpoint_B") + create_refresh_button(secondary_model_name, sd_models.list_models, lambda: {"choices": sd_model_choices()}, "checkpoint_B_refresh") tertiary_model_name = gr.Dropdown(sd_model_choices(), label="Tertiary model", value="None", visible=False) - tertiary_refresh = create_refresh_button(tertiary_model_name, sd_models.list_models, lambda: {"choices": sd_model_choices()}, "refresh_checkpoint_C", visible=False) + tertiary_refresh = create_refresh_button(tertiary_model_name, sd_models.list_models, lambda: {"choices": sd_model_choices()}, "checkpoint_C_refresh", visible=False) with gr.Row(): with gr.Tabs() as tabs: with gr.TabItem(label="Simple Merge", id=0): @@ -229,7 +229,7 @@ def create_ui(): bake_in_vae = gr.Dropdown(choices=["None"] + list(sd_vae.vae_dict), value="None", interactive=True, label="Replace VAE") create_refresh_button(bake_in_vae, sd_vae.refresh_vae_list, lambda: {"choices": ["None"] + list(sd_vae.vae_dict)}, - "modelmerger_refresh_bake_in_vae") + "modelmerger_bake_in_vae_refresh") with gr.Row(): modelmerger_merge = gr.Button(value="Merge", variant='primary') @@ -403,7 +403,7 @@ def create_ui(): with gr.Column(scale=5): with gr.Row(): model_name = gr.Dropdown(sd_models.checkpoint_titles(), label="Input model") - create_refresh_button(model_name, sd_models.list_models, lambda: {"choices": sd_models.checkpoint_titles()}, "refresh_checkpoint_Z") + create_refresh_button(model_name, sd_models.list_models, lambda: {"choices": sd_models.checkpoint_titles()}, "checkpoint_Z_refresh") with gr.Column(scale=5): custom_name = gr.Textbox(label="Output model", placeholder="Output model path") with gr.Row(): @@ -492,7 +492,7 @@ def create_ui(): with gr.Row(elem_id='civitai_search_row'): civit_search_text = gr.Textbox(label='', placeholder='keyword', elem_id="civit_search_text") civit_search_tag = gr.Textbox(label='', placeholder='tag', elem_id="civit_search_text") - civit_search_text_btn = ToolButton(value=ui_symbols.search, interactive=True) + civit_search_text_btn = ToolButton(value=ui_symbols.search, interactive=True, elem_id="civit_text_search") with gr.Accordion(label='Advanced', open=False, elem_id="civitai_search_options"): civit_download_btn = gr.Button(value="Download model", variant='primary', elem_id="civitai_download_btn", visible=False) with gr.Row(): @@ -530,7 +530,7 @@ def create_ui(): gr.HTML('

 Download model from huggingface

') with gr.Row(): hf_search_text = gr.Textbox('', label='Search models', placeholder='search huggingface models') - hf_search_btn = ToolButton(value=ui_symbols.search) + hf_search_btn = ToolButton(value=ui_symbols.search, interactive=True, elem_id="hf_text_search") with gr.Row(): hf_selected = gr.Textbox('', label='Select model', placeholder='select model from search results or enter model name manually') with gr.Accordion(label='Advanced', open=False, elem_id="hf_search_options"): diff --git a/modules/ui_sections.py b/modules/ui_sections.py index 4f72783bb..2042f896d 100644 --- a/modules/ui_sections.py +++ b/modules/ui_sections.py @@ -87,7 +87,7 @@ def create_resolution_inputs(tab, default_width=1024, default_height=1024): ar_dropdown = gr.Dropdown(show_label=False, interactive=True, choices=ar_list, value=ar_list[0], elem_id=f"{tab}_ar", elem_classes=["ar-dropdown"]) for c in [ar_dropdown, width, height]: c.change(fn=ar_change, inputs=[ar_dropdown, width, height], outputs=[width, height], show_progress=False) - res_switch_btn = ToolButton(value=ui_symbols.switch, elem_id=f"{tab}_res_switch_btn") + res_switch_btn = ToolButton(value=ui_symbols.switch, elem_id=f"{tab}_res_btn_swap") res_switch_btn.click(lambda w, h: (h, w), inputs=[width, height], outputs=[width, height], show_progress=False) return width, height @@ -111,12 +111,12 @@ def create_seed_inputs(tab, reuse_visible=True, accordion=True, subseed_visible= with gr.Accordion(open=False, label="Seed", elem_id=f"{tab}_seed_group", elem_classes=["small-accordion"]) if accordion else gr.Group(): with gr.Row(elem_id=f"{tab}_seed_row", variant="compact"): seed = gr.Number(label='Initial seed', value=-1, elem_id=f"{tab}_seed", container=True) - random_seed = ToolButton(ui_symbols.random, elem_id=f"{tab}_random_seed") - reuse_seed = ToolButton(ui_symbols.reuse, elem_id=f"{tab}_reuse_seed", visible=reuse_visible) + random_seed = ToolButton(ui_symbols.random, elem_id=f"{tab}_seed_random") + reuse_seed = ToolButton(ui_symbols.reuse, elem_id=f"{tab}_seed_reuse", visible=reuse_visible) with gr.Row(elem_id=f"{tab}_subseed_row", variant="compact", visible=subseed_visible): subseed = gr.Number(label='Variation', value=-1, elem_id=f"{tab}_subseed", container=True) - random_subseed = ToolButton(ui_symbols.random, elem_id=f"{tab}_random_subseed") - reuse_subseed = ToolButton(ui_symbols.reuse, elem_id=f"{tab}_reuse_subseed", visible=reuse_visible) + random_subseed = ToolButton(ui_symbols.random, elem_id=f"{tab}_subseed_random") + reuse_subseed = ToolButton(ui_symbols.reuse, elem_id=f"{tab}_subseed_reuse", visible=reuse_visible) subseed_strength = gr.Slider(label='Variation strength', value=0.0, minimum=0, maximum=1, step=0.01, elem_id=f"{tab}_subseed_strength", elem_classes=["subseed-strength"]) with gr.Row(visible=seed_resize_visible): seed_resize_from_w = gr.Slider(minimum=0, maximum=4096, step=8, label="Resize seed from width", value=0, elem_id=f"{tab}_seed_resize_from_w") @@ -342,7 +342,7 @@ def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=Tru resize_name = gr.Dropdown(label=f"Method{prefix}" if non_zero else "Resize method", elem_id=f"{tab}_resize_name", choices=available_upscalers, value=available_upscalers[0], visible=True) resize_context_choices = ["Add with forward", "Remove with forward", "Add with backward", "Remove with backward"] resize_context = gr.Dropdown(label=f"Context{prefix}", elem_id=f"{tab}_resize_context", choices=resize_context_choices, value=resize_context_choices[0], visible=False) - resize_refresh_btn = ui_common.create_refresh_button(resize_name, modelloader.load_upscalers, lambda: {"choices": modelloader.load_upscalers()}, 'refresh_upscalers') + resize_refresh_btn = ui_common.create_refresh_button(resize_name, modelloader.load_upscalers, lambda: {"choices": modelloader.load_upscalers()}, f'{tab}_upscalers_refresh') def resize_mode_change(mode): if mode is None or mode == 0: @@ -365,9 +365,9 @@ def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=Tru ar_dropdown = gr.Dropdown(show_label=False, interactive=True, choices=ar_list, value=ar_list[0], elem_id=f"{tab}_resize_ar", elem_classes=["ar-dropdown"]) for c in [ar_dropdown, width, height]: c.change(fn=ar_change, inputs=[ar_dropdown, width, height], outputs=[width, height], show_progress=False) - res_switch_btn = ToolButton(value=ui_symbols.switch, elem_id=f"{tab}_resize_switch_size_btn") + res_switch_btn = ToolButton(value=ui_symbols.switch, elem_id=f"{tab}_resize_size_swap") res_switch_btn.click(lambda w, h: (h, w), inputs=[width, height], outputs=[width, height], show_progress=False) - detect_image_size_btn = ToolButton(value=ui_symbols.detect, elem_id=f"{tab}_resize_detect_size_btn") + detect_image_size_btn = ToolButton(value=ui_symbols.detect, elem_id=f"{tab}_resize_detect_size") el = tab.split('_')[0] detect_image_size_btn.click(fn=lambda w, h, _: (w or gr.update(), h or gr.update()), _js=f'currentImageResolution{el}', inputs=[dummy_component, dummy_component, dummy_component], outputs=[width, height], show_progress=False) with gr.Tab(label="Scale", id=1, elem_id=f"{tab}_scale_tab_scale") as tab_scale_by: diff --git a/modules/ui_settings.py b/modules/ui_settings.py index f1def3d89..546d28547 100644 --- a/modules/ui_settings.py +++ b/modules/ui_settings.py @@ -77,11 +77,11 @@ def create_setting_component(key, is_quicksettings=False): if info.refresh is not None: if is_quicksettings: res = comp(label=info.label, value=fun(), elem_id=elem_id, **args) - ui_common.create_refresh_button(res, info.refresh, info.component_args, f"refresh_{key}") + ui_common.create_refresh_button(res, info.refresh, info.component_args, f"settings_{key}_refresh") else: with gr.Row(): res = comp(label=info.label, value=fun(), elem_id=elem_id, **args) - ui_common.create_refresh_button(res, info.refresh, info.component_args, f"refresh_{key}") + ui_common.create_refresh_button(res, info.refresh, info.component_args, f"settings_{key}_refresh") elif info.folder is not None: with gr.Row(): res = comp(label=info.label, value=fun(), elem_id=elem_id, elem_classes="folder-selector", **args) @@ -323,7 +323,7 @@ def create_quicksettings(interfaces): quicksetting_keys.append(k) shared.settings_components[k] = component quicksetting_keys = gr.State(value=','.join(quicksetting_keys), elem_id="quicksettings_keys") - btn_reset = ui_components.ToolButton(value=ui_symbols.clear, visible=True, elem_id="quicksettings_reset") + btn_reset = ui_components.ToolButton(value=ui_symbols.clear, visible=True, elem_id="quicksettings_clear") btn_reset.click(fn=reset_quicksettings, inputs=[quicksetting_keys], outputs=quicksetting_components) generation_parameters_copypaste.connect_paste_params_buttons() diff --git a/modules/ui_symbols.py b/modules/ui_symbols.py index 975cd4e69..6a77c0e40 100644 --- a/modules/ui_symbols.py +++ b/modules/ui_symbols.py @@ -27,8 +27,6 @@ preview = '🖼️' image = '🖌️' resize = '⁜' interrogate = '♻' -int_clip = '✎' -int_blip = '✐' bullet = '⃝' sort_alpha_asc = '\uf15d' sort_alpha_dsc = '\uf15e' diff --git a/modules/video_models/video_ui.py b/modules/video_models/video_ui.py index 46b48a2d6..5b103d023 100644 --- a/modules/video_models/video_ui.py +++ b/modules/video_models/video_ui.py @@ -92,8 +92,8 @@ def create_ui(prompt, negative, styles, overrides): with gr.Row(): frames = gr.Slider(label='Frames', minimum=1, maximum=1024, step=1, value=17, elem_id="video_frames") seed = gr.Number(label='Initial seed', value=-1, elem_id="video_seed", container=True) - random_seed = ToolButton(ui_symbols.random, elem_id="video_random_seed") - reuse_seed = ToolButton(ui_symbols.reuse, elem_id="video_reuse_seed") + random_seed = ToolButton(ui_symbols.random, elem_id="video_seed_random") + reuse_seed = ToolButton(ui_symbols.reuse, elem_id="video_seed_reuse") with gr.Accordion(open=False, label="Parameters", elem_id='video_parameters_accordion'): steps, sampler_index = ui_sections.create_sampler_and_steps_selection(None, "video", default_steps=50) with gr.Row(): diff --git a/scripts/ipadapter.py b/scripts/ipadapter.py index 9de53111d..7f1e04a48 100644 --- a/scripts/ipadapter.py +++ b/scripts/ipadapter.py @@ -63,7 +63,7 @@ class Script(scripts_manager.Script): with gr.Row(): adapter = gr.Dropdown(label='Adapter', choices=list(ipadapter.get_adapters()), value='None') adapters.append(adapter) - ui_common.create_refresh_button(adapter, ipadapter.get_adapters) + ui_common.create_refresh_button(adapter, ipadapter.get_adapters, elem_id=f"ipadapter_adapter_{i}_refresh") with gr.Row(): scales.append(gr.Slider(label='Strength', minimum=0.0, maximum=1.0, step=0.01, value=0.5)) crops.append(gr.Checkbox(label='Crop to portrait', value=False, interactive=True)) diff --git a/scripts/postprocessing_upscale.py b/scripts/postprocessing_upscale.py index b33cd9888..bf9456c2b 100644 --- a/scripts/postprocessing_upscale.py +++ b/scripts/postprocessing_upscale.py @@ -23,7 +23,7 @@ class ScriptPostprocessingUpscale(scripts_postprocessing.ScriptPostprocessing): with gr.Row(elem_id="upscaling_column_size"): upscaling_resize_w = gr.Slider(minimum=64, maximum=4096, step=8, label="Width", value=1024, elem_id="extras_upscaling_resize_w") upscaling_resize_h = gr.Slider(minimum=64, maximum=4096, step=8, label="Height", value=1024, elem_id="extras_upscaling_resize_h") - upscaling_res_switch_btn = ToolButton(value=symbols.switch, elem_id="upscaling_res_switch_btn") + upscaling_res_switch_btn = ToolButton(value=symbols.switch, elem_id="upscaling_res_swap") upscaling_crop = gr.Checkbox(label='Crop to fit', value=True, elem_id="extras_upscaling_crop") with gr.Row(): diff --git a/scripts/xyz_grid.py b/scripts/xyz_grid.py index 051f9c766..9c7671353 100644 --- a/scripts/xyz_grid.py +++ b/scripts/xyz_grid.py @@ -40,17 +40,17 @@ class Script(scripts_manager.Script): x_type = gr.Dropdown(label="X type", container=True, choices=[x.label for x in self.current_axis_options], value=self.current_axis_options[0].label, type="index", elem_id=self.elem_id("x_type")) x_values = gr.Textbox(label="X values", container=True, lines=1, elem_id=self.elem_id("x_values")) x_values_dropdown = gr.Dropdown(label="X values", container=True, visible=False, multiselect=True, interactive=True) - fill_x_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_fill_x_tool_button", visible=False) + fill_x_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_x_list", visible=False) with gr.Row(variant='compact'): y_type = gr.Dropdown(label="Y type", container=True, choices=[x.label for x in self.current_axis_options], value=self.current_axis_options[0].label, type="index", elem_id=self.elem_id("y_type")) y_values = gr.Textbox(label="Y values", container=True, lines=1, elem_id=self.elem_id("y_values")) y_values_dropdown = gr.Dropdown(label="Y values", container=True, visible=False, multiselect=True, interactive=True) - fill_y_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_fill_y_tool_button", visible=False) + fill_y_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_y_list", visible=False) with gr.Row(variant='compact'): z_type = gr.Dropdown(label="Z type", container=True, choices=[x.label for x in self.current_axis_options], value=self.current_axis_options[0].label, type="index", elem_id=self.elem_id("z_type")) z_values = gr.Textbox(label="Z values", container=True, lines=1, elem_id=self.elem_id("z_values")) z_values_dropdown = gr.Dropdown(label="Z values", container=True, visible=False, multiselect=True, interactive=True) - fill_z_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_fill_z_tool_button", visible=False) + fill_z_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_z_list", visible=False) with gr.Row(): with gr.Column(): diff --git a/scripts/xyz_grid_on.py b/scripts/xyz_grid_on.py index b0dea5ead..bfa0ca662 100644 --- a/scripts/xyz_grid_on.py +++ b/scripts/xyz_grid_on.py @@ -46,17 +46,17 @@ class Script(scripts_manager.Script): x_type = gr.Dropdown(label="X type", container=True, choices=[x.label for x in self.current_axis_options], value=self.current_axis_options[0].label, type="index", elem_id=self.elem_id("x_type")) x_values = gr.Textbox(label="X values", container=True, lines=1, elem_id=self.elem_id("x_values")) x_values_dropdown = gr.Dropdown(label="X values", container=True, visible=False, multiselect=True, interactive=True) - fill_x_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_fill_x_tool_button", visible=False) + fill_x_button = ToolButton(value=symbols.fill, elem_id="xyz_gridon_x_list", visible=False) with gr.Row(variant='compact'): y_type = gr.Dropdown(label="Y type", container=True, choices=[x.label for x in self.current_axis_options], value=self.current_axis_options[0].label, type="index", elem_id=self.elem_id("y_type")) y_values = gr.Textbox(label="Y values", container=True, lines=1, elem_id=self.elem_id("y_values")) y_values_dropdown = gr.Dropdown(label="Y values", container=True, visible=False, multiselect=True, interactive=True) - fill_y_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_fill_y_tool_button", visible=False) + fill_y_button = ToolButton(value=symbols.fill, elem_id="xyz_gridon_y_list", visible=False) with gr.Row(variant='compact'): z_type = gr.Dropdown(label="Z type", container=True, choices=[x.label for x in self.current_axis_options], value=self.current_axis_options[0].label, type="index", elem_id=self.elem_id("z_type")) z_values = gr.Textbox(label="Z values", container=True, lines=1, elem_id=self.elem_id("z_values")) z_values_dropdown = gr.Dropdown(label="Z values", container=True, visible=False, multiselect=True, interactive=True) - fill_z_button = ToolButton(value=symbols.fill, elem_id="xyz_grid_fill_z_tool_button", visible=False) + fill_z_button = ToolButton(value=symbols.fill, elem_id="xyz_gridon_z_list", visible=False) with gr.Row(): with gr.Column():