rework hires fix preview for #6437: movie it to where it takes less place, make it actually account for all relevant sliders and calculate dimensions correctly
This commit is contained in:
parent
de97380445
commit
1a5b86ad65
|
@ -711,7 +711,6 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
|
||||||
self.truncate_x = 0
|
self.truncate_x = 0
|
||||||
self.truncate_y = 0
|
self.truncate_y = 0
|
||||||
|
|
||||||
|
|
||||||
def init(self, all_prompts, all_seeds, all_subseeds):
|
def init(self, all_prompts, all_seeds, all_subseeds):
|
||||||
if self.enable_hr:
|
if self.enable_hr:
|
||||||
if self.hr_resize_x == 0 and self.hr_resize_y == 0:
|
if self.hr_resize_x == 0 and self.hr_resize_y == 0:
|
||||||
|
|
|
@ -20,7 +20,7 @@ from PIL import Image, PngImagePlugin
|
||||||
from modules.call_queue import wrap_gradio_gpu_call, wrap_queued_call, wrap_gradio_call
|
from modules.call_queue import wrap_gradio_gpu_call, wrap_queued_call, wrap_gradio_call
|
||||||
|
|
||||||
from modules import sd_hijack, sd_models, localization, script_callbacks, ui_extensions, deepbooru
|
from modules import sd_hijack, sd_models, localization, script_callbacks, ui_extensions, deepbooru
|
||||||
from modules.ui_components import FormRow, FormGroup, ToolButton
|
from modules.ui_components import FormRow, FormGroup, ToolButton, FormHTML
|
||||||
from modules.paths import script_path
|
from modules.paths import script_path
|
||||||
|
|
||||||
from modules.shared import opts, cmd_opts, restricted_opts
|
from modules.shared import opts, cmd_opts, restricted_opts
|
||||||
|
@ -255,12 +255,20 @@ def add_style(name: str, prompt: str, negative_prompt: str):
|
||||||
|
|
||||||
return [gr.Dropdown.update(visible=True, choices=list(shared.prompt_styles.styles)) for _ in range(4)]
|
return [gr.Dropdown.update(visible=True, choices=list(shared.prompt_styles.styles)) for _ in range(4)]
|
||||||
|
|
||||||
def calc_resolution_hires(x, y, scale):
|
|
||||||
#final res can only be a multiple of 8
|
def calc_resolution_hires(enable, width, height, hr_scale, hr_resize_x, hr_resize_y):
|
||||||
scaled_x = int(x * scale // 8) * 8
|
from modules import processing, devices
|
||||||
scaled_y = int(y * scale // 8) * 8
|
|
||||||
|
if not enable:
|
||||||
return str(scaled_x)+"x"+str(scaled_y)
|
return ""
|
||||||
|
|
||||||
|
p = processing.StableDiffusionProcessingTxt2Img(width=width, height=height, enable_hr=True, hr_scale=hr_scale, hr_resize_x=hr_resize_x, hr_resize_y=hr_resize_y)
|
||||||
|
|
||||||
|
with devices.autocast():
|
||||||
|
p.init([""], [0], [0])
|
||||||
|
|
||||||
|
return f"resize to: <span class='resolution'>{p.hr_upscale_to_x}x{p.hr_upscale_to_y}</span>"
|
||||||
|
|
||||||
|
|
||||||
def apply_styles(prompt, prompt_neg, style1_name, style2_name):
|
def apply_styles(prompt, prompt_neg, style1_name, style2_name):
|
||||||
prompt = shared.prompt_styles.apply_styles_to_prompt(prompt, [style1_name, style2_name])
|
prompt = shared.prompt_styles.apply_styles_to_prompt(prompt, [style1_name, style2_name])
|
||||||
|
@ -712,6 +720,7 @@ def create_ui():
|
||||||
restore_faces = gr.Checkbox(label='Restore faces', value=False, visible=len(shared.face_restorers) > 1, elem_id="txt2img_restore_faces")
|
restore_faces = gr.Checkbox(label='Restore faces', value=False, visible=len(shared.face_restorers) > 1, elem_id="txt2img_restore_faces")
|
||||||
tiling = gr.Checkbox(label='Tiling', value=False, elem_id="txt2img_tiling")
|
tiling = gr.Checkbox(label='Tiling', value=False, elem_id="txt2img_tiling")
|
||||||
enable_hr = gr.Checkbox(label='Hires. fix', value=False, elem_id="txt2img_enable_hr")
|
enable_hr = gr.Checkbox(label='Hires. fix', value=False, elem_id="txt2img_enable_hr")
|
||||||
|
hr_final_resolution = FormHTML(value="", elem_id="txtimg_hr_finalres", label="Upscaled resolution", interactive=False)
|
||||||
|
|
||||||
elif category == "hires_fix":
|
elif category == "hires_fix":
|
||||||
with FormGroup(visible=False, elem_id="txt2img_hires_fix") as hr_options:
|
with FormGroup(visible=False, elem_id="txt2img_hires_fix") as hr_options:
|
||||||
|
@ -724,9 +733,6 @@ def create_ui():
|
||||||
hr_scale = gr.Slider(minimum=1.0, maximum=4.0, step=0.05, label="Upscale by", value=2.0, elem_id="txt2img_hr_scale")
|
hr_scale = gr.Slider(minimum=1.0, maximum=4.0, step=0.05, label="Upscale by", value=2.0, elem_id="txt2img_hr_scale")
|
||||||
hr_resize_x = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize width to", value=0, elem_id="txt2img_hr_resize_x")
|
hr_resize_x = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize width to", value=0, elem_id="txt2img_hr_resize_x")
|
||||||
hr_resize_y = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize height to", value=0, elem_id="txt2img_hr_resize_y")
|
hr_resize_y = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize height to", value=0, elem_id="txt2img_hr_resize_y")
|
||||||
|
|
||||||
with FormRow(elem_id="txt2img_hires_fix_row3"):
|
|
||||||
hr_final_resolution = gr.Textbox(value="", elem_id="txtimg_hr_finalres", label="Upscaled resolution", interactive=False)
|
|
||||||
|
|
||||||
elif category == "batch":
|
elif category == "batch":
|
||||||
if not opts.dimensions_and_batch_together:
|
if not opts.dimensions_and_batch_together:
|
||||||
|
@ -738,9 +744,16 @@ def create_ui():
|
||||||
with FormGroup(elem_id="txt2img_script_container"):
|
with FormGroup(elem_id="txt2img_script_container"):
|
||||||
custom_inputs = modules.scripts.scripts_txt2img.setup_ui()
|
custom_inputs = modules.scripts.scripts_txt2img.setup_ui()
|
||||||
|
|
||||||
hr_scale.change(fn=calc_resolution_hires, inputs=[width, height, hr_scale], outputs=hr_final_resolution, show_progress=False)
|
hr_resolution_preview_inputs = [enable_hr, width, height, hr_scale, hr_resize_x, hr_resize_y]
|
||||||
width.change(fn=calc_resolution_hires, inputs=[width, height, hr_scale], outputs=hr_final_resolution, show_progress=False)
|
hr_resolution_preview_args = dict(
|
||||||
height.change(fn=calc_resolution_hires, inputs=[width, height, hr_scale], outputs=hr_final_resolution, show_progress=False)
|
fn=calc_resolution_hires,
|
||||||
|
inputs=hr_resolution_preview_inputs,
|
||||||
|
outputs=[hr_final_resolution],
|
||||||
|
show_progress=False
|
||||||
|
)
|
||||||
|
|
||||||
|
for input in hr_resolution_preview_inputs:
|
||||||
|
input.change(**hr_resolution_preview_args)
|
||||||
|
|
||||||
txt2img_gallery, generation_info, html_info, html_log = create_output_panel("txt2img", opts.outdir_txt2img_samples)
|
txt2img_gallery, generation_info, html_info, html_log = create_output_panel("txt2img", opts.outdir_txt2img_samples)
|
||||||
parameters_copypaste.bind_buttons({"txt2img": txt2img_paste}, None, txt2img_prompt)
|
parameters_copypaste.bind_buttons({"txt2img": txt2img_paste}, None, txt2img_prompt)
|
||||||
|
@ -803,6 +816,7 @@ def create_ui():
|
||||||
fn=lambda x: gr_show(x),
|
fn=lambda x: gr_show(x),
|
||||||
inputs=[enable_hr],
|
inputs=[enable_hr],
|
||||||
outputs=[hr_options],
|
outputs=[hr_options],
|
||||||
|
show_progress = False,
|
||||||
)
|
)
|
||||||
|
|
||||||
txt2img_paste_fields = [
|
txt2img_paste_fields = [
|
||||||
|
|
|
@ -23,3 +23,11 @@ class FormGroup(gr.Group, gr.components.FormComponent):
|
||||||
|
|
||||||
def get_block_name(self):
|
def get_block_name(self):
|
||||||
return "group"
|
return "group"
|
||||||
|
|
||||||
|
|
||||||
|
class FormHTML(gr.HTML, gr.components.FormComponent):
|
||||||
|
"""Same as gr.HTML but fits inside gradio forms"""
|
||||||
|
|
||||||
|
def get_block_name(self):
|
||||||
|
return "html"
|
||||||
|
|
||||||
|
|
17
style.css
17
style.css
|
@ -642,6 +642,23 @@ footer {
|
||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#txtimg_hr_finalres{
|
||||||
|
min-height: 0 !important;
|
||||||
|
padding: .625rem .75rem;
|
||||||
|
margin-left: -0.75em
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#txtimg_hr_finalres .resolution{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#txt2img_checkboxes > div > div{
|
||||||
|
flex: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
min-width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/* The following handles localization for right-to-left (RTL) languages like Arabic.
|
/* The following handles localization for right-to-left (RTL) languages like Arabic.
|
||||||
The rtl media type will only be activated by the logic in javascript/localization.js.
|
The rtl media type will only be activated by the logic in javascript/localization.js.
|
||||||
If you change anything above, you need to make sure it is RTL compliant by just running
|
If you change anything above, you need to make sure it is RTL compliant by just running
|
||||||
|
|
Loading…
Reference in New Issue
Block a user