code: def ui(self):
      selected_tab = gr.State(value=0)
  
      with gr.Column():
          with FormRow():
              with gr.Tabs(elem_id="extras_resize_mode"):
                  with gr.TabItem(
                      "Scale by", elem_id="extras_scale_by_tab"
                  ) as tab_scale_by:
                      upscaling_resize = gr.Slider(
                          minimum=1.0,
                          maximum=8.0,
                          step=0.05,
                          label="Resize",
                          value=4,
                          elem_id="extras_upscaling_resize",
                      )
  
                  with gr.TabItem(
                      "Scale to", elem_id="extras_scale_to_tab"
                  ) as tab_scale_to:
                      with FormRow():
                          with gr.Column(
                              elem_id="upscaling_column_size", scale=4
                          ):
                              upscaling_resize_w = gr.Slider(
                                  minimum=64,
                                  maximum=2048,
                                  step=8,
                                  label="Width",
                                  value=512,
                                  elem_id="extras_upscaling_resize_w",
                              )
                              upscaling_resize_h = gr.Slider(
                                  minimum=64,
                                  maximum=2048,
                                  step=8,
                                  label="Height",
                                  value=512,
                                  elem_id="extras_upscaling_resize_h",
                              )
                          with gr.Column(
                              elem_id="upscaling_dimensions_row",
                              scale=1,
                              elem_classes="dimensions-tools",
                          ):
                              upscaling_res_switch_btn = ToolButton(
                                  value=switch_values_symbol,
                                  elem_id="upscaling_res_switch_btn",
                                  tooltip="Switch width/height",
                              )
                              upscaling_crop = gr.Checkbox(
                                  label="Crop to fit",
                                  value=True,
                                  elem_id="extras_upscaling_crop",
                              )
  
          with FormRow():
              extras_upscaler_1 = gr.Dropdown(
                  label="Upscaler 1",
                  elem_id="extras_upscaler_1",
                  choices=[x.name for x in shared.sd_upscalers],
                  value=shared.sd_upscalers[0].name,
              )
  
          with FormRow():
              extras_upscaler_2 = gr.Dropdown(
                  label="Upscaler 2",
                  elem_id="extras_upscaler_2",
                  choices=[x.name for x in shared.sd_upscalers],
                  value=shared.sd_upscalers[0].name,
              )
              extras_upscaler_2_visibility = gr.Slider(
                  minimum=0.0,
                  maximum=1.0,
                  step=0.001,
                  label="Upscaler 2 visibility",
                  value=0.0,
                  elem_id="extras_upscaler_2_visibility",
              )
  
      upscaling_res_switch_btn.click(
          lambda w, h: (h, w),
          inputs=[upscaling_resize_w, upscaling_resize_h],
          outputs=[upscaling_resize_w, upscaling_resize_h],
          show_progress=False,
      )
      tab_scale_by.select(
          fn=lambda: 0, inputs=[], outputs=[selected_tab]
      )
      tab_scale_to.select(
          fn=lambda: 1, inputs=[], outputs=[selected_tab]
      )
  
      return {
          "upscale_mode": selected_tab,
          "upscale_by": upscaling_resize,
          "upscale_to_width": upscaling_resize_w,
          "upscale_to_height": upscaling_resize_h,
          "upscale_crop": upscaling_crop,
          "upscaler_1_name": extras_upscaler_1,
          "upscaler_2_name": extras_upscaler_2,
          "upscaler_2_visibility": extras_upscaler_2_visibility,
      }
  
file_path: stable-diffusion-webui/scripts/postprocessing_upscale.py
imports: from PIL import Image
  import numpy
  from modules import scripts_postprocessing, shared
  import gradio
  from modules.ui_components import FormRow, ToolButton
  from modules.ui import switch_values_symbol
label_desc: Use image node_id 1 for calling the ScriptPostprocessingUpscale obj's underlying member method code with example usage: obj.ui() and returns: dict