Commit 1a5b86ad authored by AUTOMATIC's avatar AUTOMATIC
Browse files

rework hires fix preview for #6437: movie it to where it takes less place,...

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
parent de973804
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -711,7 +711,6 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
        self.truncate_x = 0
        self.truncate_y = 0


    def init(self, all_prompts, all_seeds, all_subseeds):
        if self.enable_hr:
            if self.hr_resize_x == 0 and self.hr_resize_y == 0:
+27 −13
Original line number Diff line number Diff line
@@ -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 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.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)]

def calc_resolution_hires(x, y, scale):
    #final res can only be a multiple of 8
    scaled_x = int(x * scale // 8) * 8
    scaled_y = int(y * scale // 8) * 8

    return str(scaled_x)+"x"+str(scaled_y)
def calc_resolution_hires(enable, width, height, hr_scale, hr_resize_x, hr_resize_y):
    from modules import processing, devices

    if not enable:
        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):
    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")
                            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")
                            hr_final_resolution = FormHTML(value="", elem_id="txtimg_hr_finalres", label="Upscaled resolution", interactive=False)

                    elif category == "hires_fix":
                        with FormGroup(visible=False, elem_id="txt2img_hires_fix") as hr_options:
@@ -725,9 +734,6 @@ def create_ui():
                                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")

                            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":
                        if not opts.dimensions_and_batch_together:
                            with FormRow(elem_id="txt2img_column_batch"):
@@ -738,9 +744,16 @@ def create_ui():
                        with FormGroup(elem_id="txt2img_script_container"):
                            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)
            width.change(fn=calc_resolution_hires, inputs=[width, height, hr_scale], outputs=hr_final_resolution, show_progress=False)
            height.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]
            hr_resolution_preview_args = dict(
                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)
            parameters_copypaste.bind_buttons({"txt2img": txt2img_paste}, None, txt2img_prompt)
@@ -803,6 +816,7 @@ def create_ui():
                fn=lambda x: gr_show(x),
                inputs=[enable_hr],
                outputs=[hr_options],
                show_progress = False,
            )

            txt2img_paste_fields = [
+8 −0
Original line number Diff line number Diff line
@@ -23,3 +23,11 @@ class FormGroup(gr.Group, gr.components.FormComponent):

    def get_block_name(self):
        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 −0
Original line number Diff line number Diff line
@@ -642,6 +642,23 @@ footer {
    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 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