diff --git a/CHANGELOG.md b/CHANGELOG.md index 55fc85424..d91500b2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -116,6 +116,8 @@ Plus tons of minor items and fixes - see [changelog](https://github.com/vladmand - **modern-ui** add override field - full **lint** updates - use `diffusers` from main branch, no longer tied to release +- improve diffusers/transformers/huggingface_hub progress reporting +- use unique identifiers for all ui components - fix handling of model configs if offline config is not available - fix vae decode in backend original - fix model path typos diff --git a/modules/face/__init__.py b/modules/face/__init__.py index d1ded8c37..d5d51e647 100644 --- a/modules/face/__init__.py +++ b/modules/face/__init__.py @@ -72,7 +72,7 @@ class Script(scripts.Script): id_strength = gr.Slider(label='Strength', minimum=0.0, maximum=2.0, step=0.01, value=1.0) id_conditioning = gr.Slider(label='Control', minimum=0.0, maximum=2.0, step=0.01, value=0.5) with gr.Row(visible=True): - id_cache = gr.Checkbox(label='Cache model', value=False) + id_cache = gr.Checkbox(label='Cache model', value=True) with gr.Group(visible=False) as cfg_photomaker: with gr.Row(): gr.HTML('  Tenecent ARC Lab PhotoMaker
') diff --git a/modules/loader.py b/modules/loader.py index 52b802eaa..0aad4d76b 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -53,19 +53,33 @@ timer.startup.record("pydantic") import diffusers # pylint: disable=W0611,C0411 import diffusers.loaders.single_file # pylint: disable=W0611,C0411 +import huggingface_hub # pylint: disable=W0611,C0411 logging.getLogger("diffusers.loaders.single_file").setLevel(logging.ERROR) +timer.startup.record("diffusers") + + +# patch different progress bars +import tqdm as tqdm_lib # pylint: disable=C0411 from tqdm.rich import tqdm # pylint: disable=W0611,C0411 diffusers.loaders.single_file.logging.tqdm = partial(tqdm, unit='C') -import tqdm as tqdm_lib -class _tqdm_cls: +class _tqdm_cls(): def __call__(self, *args, **kwargs): bar_format = 'Diffusers {rate_fmt}{postfix} {bar} {percentage:3.0f}% {n_fmt}/{total_fmt} {elapsed} {remaining} ' + '\x1b[38;5;71m' + '{desc}' + '\x1b[0m' return tqdm_lib.tqdm(*args, bar_format=bar_format, ncols=80, colour='#327fba', **kwargs) +class _tqdm_old(tqdm_lib.tqdm): + def __init__(self, *args, **kwargs): + kwargs.pop("name", None) + kwargs['bar_format'] = 'Diffusers {rate_fmt}{postfix} {bar} {percentage:3.0f}% {n_fmt}/{total_fmt} {elapsed} {remaining} ' + '\x1b[38;5;71m' + '{desc}' + '\x1b[0m' + kwargs['ncols'] = 80 + super().__init__(*args, **kwargs) + + transformers.utils.logging.tqdm = _tqdm_cls() diffusers.pipelines.pipeline_utils.logging.tqdm = _tqdm_cls() -timer.startup.record("diffusers") +huggingface_hub._snapshot_download.hf_tqdm = _tqdm_old # pylint: disable=protected-access + def get_packages(): return { diff --git a/modules/ui_control.py b/modules/ui_control.py index eab565b04..dfa81a0c5 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -201,10 +201,10 @@ def create_ui(_blocks: gr.Blocks=None): process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None') model_id = gr.Dropdown(label="ControlNet", choices=controlnet.list_models(), value='None') ui_common.create_refresh_button(model_id, controlnet.list_models, lambda: {"choices": controlnet.list_models(refresh=True)}, f'refresh_controlnet_models_{i}') - model_strength = gr.Slider(label="Strength", minimum=0.01, maximum=2.0, step=0.01, value=1.0-i/10) + model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=2.0, step=0.01, value=1.0) control_start = gr.Slider(label="Start", minimum=0.0, maximum=1.0, step=0.05, value=0) control_end = gr.Slider(label="End", minimum=0.0, maximum=1.0, step=0.05, value=1.0) - control_mode = gr.Dropdown(label="Mode", choices=['', 'Canny', 'Tile', 'Depth', 'Blur', 'Pose', 'Gray', 'LQ'], value=0, type='index', visible=False) + control_mode = gr.Dropdown(label="CN Mode", choices=['', 'Canny', 'Tile', 'Depth', 'Blur', 'Pose', 'Gray', 'LQ'], value=0, type='index', visible=False) 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) @@ -251,7 +251,7 @@ def create_ui(_blocks: gr.Blocks=None): process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None') model_id = gr.Dropdown(label="Adapter", choices=t2iadapter.list_models(), value='None') ui_common.create_refresh_button(model_id, t2iadapter.list_models, lambda: {"choices": t2iadapter.list_models(refresh=True)}, f'refresh_adapter_models_{i}') - model_strength = gr.Slider(label="Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0-i/10) + model_strength = gr.Slider(label="T2I Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0) 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) @@ -295,7 +295,7 @@ def create_ui(_blocks: gr.Blocks=None): process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None') model_id = gr.Dropdown(label="ControlNet-XS", choices=xs.list_models(), value='None') ui_common.create_refresh_button(model_id, xs.list_models, lambda: {"choices": xs.list_models(refresh=True)}, f'refresh_xs_models_{i}') - model_strength = gr.Slider(label="Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0-i/10) + model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0) control_start = gr.Slider(label="Start", minimum=0.0, maximum=1.0, step=0.05, value=0) control_end = gr.Slider(label="End", minimum=0.0, maximum=1.0, step=0.05, value=1.0) reset_btn = ui_components.ToolButton(value=ui_symbols.reset) @@ -342,7 +342,7 @@ def create_ui(_blocks: gr.Blocks=None): process_id = gr.Dropdown(label="Processor", choices=processors.list_models(), value='None') model_id = gr.Dropdown(label="Model", choices=lite.list_models(), value='None') ui_common.create_refresh_button(model_id, lite.list_models, lambda: {"choices": lite.list_models(refresh=True)}, f'refresh_lite_models_{i}') - model_strength = gr.Slider(label="Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0-i/10) + model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0) 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) @@ -385,7 +385,7 @@ def create_ui(_blocks: gr.Blocks=None): with gr.Row(): enabled_cb = gr.Checkbox(enabled, label='', container=False, show_label=False) model_id = gr.Dropdown(label="Reference", choices=reference.list_models(), value='Reference', visible=False) - model_strength = gr.Slider(label="Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0, visible=False) + model_strength = gr.Slider(label="CN Strength", minimum=0.01, maximum=1.0, step=0.01, value=1.0, visible=False) 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) @@ -434,21 +434,21 @@ def create_ui(_blocks: gr.Blocks=None): with gr.Accordion('Leres Depth', open=True, elem_classes=['processor-settings']): settings.append(gr.Checkbox(label="Boost", value=False)) settings.append(gr.Slider(label="Near threshold", minimum=0.0, maximum=1.0, step=0.01, value=0.0)) - settings.append(gr.Slider(label="Background threshold", minimum=0.0, maximum=1.0, step=0.01, value=0.0)) + settings.append(gr.Slider(label="Depth threshold", minimum=0.0, maximum=1.0, step=0.01, value=0.0)) with gr.Accordion('MediaPipe Face', open=True, elem_classes=['processor-settings']): settings.append(gr.Slider(label="Max faces", minimum=1, maximum=10, step=1, value=1)) - settings.append(gr.Slider(label="Min confidence", minimum=0.0, maximum=1.0, step=0.01, value=0.5)) + settings.append(gr.Slider(label="Face confidence", minimum=0.0, maximum=1.0, step=0.01, value=0.5)) with gr.Accordion('Canny', open=True, elem_classes=['processor-settings']): settings.append(gr.Slider(label="Low threshold", minimum=0, maximum=1000, step=1, value=100)) settings.append(gr.Slider(label="High threshold", minimum=0, maximum=1000, step=1, value=200)) with gr.Accordion('DWPose', open=True, elem_classes=['processor-settings']): - settings.append(gr.Radio(label="Model", choices=['Tiny', 'Medium', 'Large'], value='Tiny')) - settings.append(gr.Slider(label="Min confidence", minimum=0.0, maximum=1.0, step=0.01, value=0.3)) + settings.append(gr.Radio(label="Pose Model", choices=['Tiny', 'Medium', 'Large'], value='Tiny')) + settings.append(gr.Slider(label="Pose confidence", minimum=0.0, maximum=1.0, step=0.01, value=0.3)) with gr.Accordion('SegmentAnything', open=True, elem_classes=['processor-settings']): - settings.append(gr.Radio(label="Model", choices=['Base', 'Large'], value='Base')) + settings.append(gr.Radio(label="Segment Model", choices=['Base', 'Large'], value='Base')) with gr.Accordion('Edge', open=True, elem_classes=['processor-settings']): settings.append(gr.Checkbox(label="Parameter free", value=True)) - settings.append(gr.Radio(label="Mode", choices=['edge', 'gradient'], value='edge')) + settings.append(gr.Radio(label="Edge mode", choices=['edge', 'gradient'], value='edge')) with gr.Accordion('Zoe Depth', open=True, elem_classes=['processor-settings']): settings.append(gr.Checkbox(label="Gamma corrected", value=False)) with gr.Accordion('Marigold Depth', open=True, elem_classes=['processor-settings']): @@ -456,7 +456,7 @@ def create_ui(_blocks: gr.Blocks=None): settings.append(gr.Slider(label="Denoising steps", minimum=1, maximum=99, step=1, value=10)) settings.append(gr.Slider(label="Ensemble size", minimum=1, maximum=99, step=1, value=10)) with gr.Accordion('Depth Anything', open=True, elem_classes=['processor-settings']): - settings.append(gr.Dropdown(label="Color map", choices=['none'] + masking.COLORMAP, value='inferno')) + settings.append(gr.Dropdown(label="Depth map", choices=['none'] + masking.COLORMAP, value='inferno')) for setting in settings: setting.change(fn=processors.update_settings, inputs=settings, outputs=[]) diff --git a/modules/ui_img2img.py b/modules/ui_img2img.py index 46a2da06e..5e8aa464e 100644 --- a/modules/ui_img2img.py +++ b/modules/ui_img2img.py @@ -139,7 +139,7 @@ def create_ui(): inpaint_full_res_padding = gr.Slider(label='Padding', minimum=0, maximum=256, step=4, value=32, elem_id="img2img_inpaint_full_res_padding") mask_alpha = gr.Slider(label="Alpha", minimum=0.0, maximum=1.0, step=0.05, value=1.0, elem_id="img2img_mask_alpha") with gr.Row(): - inpainting_mask_invert = gr.Radio(label='Mode', choices=['masked', 'invert'], value='masked', type="index", elem_id="img2img_mask_mode") + inpainting_mask_invert = gr.Radio(label='Inpaint Mode', choices=['masked', 'invert'], value='masked', type="index", elem_id="img2img_mask_mode") inpaint_full_res = gr.Radio(label="Inpaint area", choices=["full", "masked"], type="index", value="full", elem_id="img2img_inpaint_full_res") inpainting_fill = gr.Radio(label='Masked content', choices=['fill', 'original', 'noise', 'nothing'], value='original', type="index", elem_id="img2img_inpainting_fill", visible=not shared.native) diff --git a/modules/ui_loadsave.py b/modules/ui_loadsave.py index 69d79f879..9f2aa4100 100644 --- a/modules/ui_loadsave.py +++ b/modules/ui_loadsave.py @@ -125,6 +125,8 @@ class UiLoadsave: def iter_changes(self, values): for i, name in enumerate(self.component_mapping): + # if '__init__' in name: + # continue component = self.component_mapping[name] choices = getattr(component, 'choices', None) if type(choices) is list and len(choices) > 0: # fix gradio radio button choices being tuples diff --git a/modules/ui_sections.py b/modules/ui_sections.py index 4bd8c0b40..e32752447 100644 --- a/modules/ui_sections.py +++ b/modules/ui_sections.py @@ -179,7 +179,7 @@ def create_correction_inputs(tab): with gr.Accordion(open=False, label="Corrections", elem_id=f"{tab}_corrections", elem_classes=["small-accordion"], visible=shared.native): with gr.Group(visible=shared.native): with gr.Row(elem_id=f"{tab}_hdr_mode_row"): - hdr_mode = gr.Dropdown(label="Mode", choices=["Relative values", "Absolute values"], type="index", value="Relative values", elem_id=f"{tab}_hdr_mode", show_label=False) + hdr_mode = gr.Dropdown(label="Correction mode", choices=["Relative values", "Absolute values"], type="index", value="Relative values", elem_id=f"{tab}_hdr_mode", show_label=False) gr.HTML('
') with gr.Row(elem_id=f"{tab}_correction_row"): hdr_brightness = gr.Slider(minimum=-1.0, maximum=1.0, step=0.1, value=0, label='Brightness', elem_id=f"{tab}_hdr_brightness")