extra_options_section.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import math
  2. import gradio as gr
  3. from modules import scripts, shared, ui_components, ui_settings, generation_parameters_copypaste
  4. from modules.ui_components import FormColumn
  5. class ExtraOptionsSection(scripts.Script):
  6. section = "extra_options"
  7. def __init__(self):
  8. self.comps = None
  9. self.setting_names = None
  10. def title(self):
  11. return "Extra options"
  12. def show(self, is_img2img):
  13. return scripts.AlwaysVisible
  14. def ui(self, is_img2img):
  15. self.comps = []
  16. self.setting_names = []
  17. self.infotext_fields = []
  18. mapping = {k: v for v, k in generation_parameters_copypaste.infotext_to_setting_name_mapping}
  19. with gr.Blocks() as interface:
  20. with gr.Accordion("Options", open=False) if shared.opts.extra_options_accordion and shared.opts.extra_options else gr.Group():
  21. row_count = math.ceil(len(shared.opts.extra_options) / shared.opts.extra_options_cols)
  22. for row in range(row_count):
  23. with gr.Row():
  24. for col in range(shared.opts.extra_options_cols):
  25. index = row * shared.opts.extra_options_cols + col
  26. if index >= len(shared.opts.extra_options):
  27. break
  28. setting_name = shared.opts.extra_options[index]
  29. with FormColumn():
  30. comp = ui_settings.create_setting_component(setting_name)
  31. self.comps.append(comp)
  32. self.setting_names.append(setting_name)
  33. setting_infotext_name = mapping.get(setting_name)
  34. if setting_infotext_name is not None:
  35. self.infotext_fields.append((comp, setting_infotext_name))
  36. def get_settings_values():
  37. res = [ui_settings.get_value_for_setting(key) for key in self.setting_names]
  38. return res[0] if len(res) == 1 else res
  39. interface.load(fn=get_settings_values, inputs=[], outputs=self.comps, queue=False, show_progress=False)
  40. return self.comps
  41. def before_process(self, p, *args):
  42. for name, value in zip(self.setting_names, args):
  43. if name not in p.override_settings:
  44. p.override_settings[name] = value
  45. shared.options_templates.update(shared.options_section(('ui', "User interface"), {
  46. "extra_options": shared.OptionInfo([], "Options in main UI", ui_components.DropdownMulti, lambda: {"choices": list(shared.opts.data_labels.keys())}).js("info", "settingsHintsShowQuicksettings").info("setting entries that also appear in txt2img/img2img interfaces").needs_reload_ui(),
  47. "extra_options_cols": shared.OptionInfo(1, "Options in main UI - number of columns", gr.Number, {"precision": 0}).needs_reload_ui(),
  48. "extra_options_accordion": shared.OptionInfo(False, "Options in main UI - place into an accordion").needs_reload_ui()
  49. }))