Merge pull request #15244 from Haoming02/auto-scale-by

Automatically Set the Scale by value when user selects an Upscale Model
This commit is contained in:
AUTOMATIC1111 2024-03-16 08:49:32 +03:00 committed by GitHub
commit afb9296e0d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 0 deletions

View File

@ -101,6 +101,7 @@ options_templates.update(options_section(('upscaling', "Upscaling", "postprocess
"DAT_tile": OptionInfo(192, "Tile size for DAT upscalers.", gr.Slider, {"minimum": 0, "maximum": 512, "step": 16}).info("0 = no tiling"), "DAT_tile": OptionInfo(192, "Tile size for DAT upscalers.", gr.Slider, {"minimum": 0, "maximum": 512, "step": 16}).info("0 = no tiling"),
"DAT_tile_overlap": OptionInfo(8, "Tile overlap for DAT upscalers.", gr.Slider, {"minimum": 0, "maximum": 48, "step": 1}).info("Low values = visible seam"), "DAT_tile_overlap": OptionInfo(8, "Tile overlap for DAT upscalers.", gr.Slider, {"minimum": 0, "maximum": 48, "step": 1}).info("Low values = visible seam"),
"upscaler_for_img2img": OptionInfo(None, "Upscaler for img2img", gr.Dropdown, lambda: {"choices": [x.name for x in shared.sd_upscalers]}), "upscaler_for_img2img": OptionInfo(None, "Upscaler for img2img", gr.Dropdown, lambda: {"choices": [x.name for x in shared.sd_upscalers]}),
"scaleBy_from_upscaler": OptionInfo(False, "Automatically set the Scale by factor based on the name of the selected Upscaler.").info("Will not change the value when no matching pattern is found."),
})) }))
options_templates.update(options_section(('face-restoration', "Face restoration", "postprocessing"), { options_templates.update(options_section(('face-restoration', "Face restoration", "postprocessing"), {

View File

@ -4,6 +4,36 @@ import modules.infotext_utils as parameters_copypaste
from modules.ui_components import ResizeHandleRow from modules.ui_components import ResizeHandleRow
def hook_scale_update(inputs):
import re
pattern = r'(\d)[xX]|[xX](\d)'
resize = upscaler = None
for script in inputs:
if script.label == "Resize":
resize = script
elif script.label == "Upscaler 1":
upscaler = script
elif resize and upscaler:
break
def update_scale(upscaler: str, slider: float):
match = re.search(pattern, upscaler)
if match:
if match.group(1):
return gr.update(value=int(match.group(1)))
else:
return gr.update(value=int(match.group(2)))
else:
return gr.update(value=slider)
if resize and upscaler:
upscaler.input(update_scale, inputs=[upscaler, resize], outputs=[resize])
def create_ui(): def create_ui():
dummy_component = gr.Label(visible=False) dummy_component = gr.Label(visible=False)
tab_index = gr.Number(value=0, visible=False) tab_index = gr.Number(value=0, visible=False)
@ -23,6 +53,8 @@ def create_ui():
show_extras_results = gr.Checkbox(label='Show result images', value=True, elem_id="extras_show_extras_results") show_extras_results = gr.Checkbox(label='Show result images', value=True, elem_id="extras_show_extras_results")
script_inputs = scripts.scripts_postproc.setup_ui() script_inputs = scripts.scripts_postproc.setup_ui()
if getattr(shared.opts, 'scaleBy_from_upscaler', False):
hook_scale_update(script_inputs)
with gr.Column(): with gr.Column():
toprow = ui_toprow.Toprow(is_compact=True, is_img2img=False, id_part="extras") toprow = ui_toprow.Toprow(is_compact=True, is_img2img=False, id_part="extras")