extra_options_section.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import gradio as gr
  2. from modules import scripts, shared, ui_components, ui_settings
  3. from modules.ui_components import FormColumn
  4. class ExtraOptionsSection(scripts.Script):
  5. section = "extra_options"
  6. def __init__(self):
  7. self.comps = None
  8. self.setting_names = None
  9. def title(self):
  10. return "Extra options"
  11. def show(self, is_img2img):
  12. return scripts.AlwaysVisible
  13. def ui(self, is_img2img):
  14. self.comps = []
  15. self.setting_names = []
  16. with gr.Blocks() as interface:
  17. with gr.Accordion("Options", open=False) if shared.opts.extra_options_accordion and shared.opts.extra_options else gr.Group(), gr.Row():
  18. for setting_name in shared.opts.extra_options:
  19. with FormColumn():
  20. comp = ui_settings.create_setting_component(setting_name)
  21. self.comps.append(comp)
  22. self.setting_names.append(setting_name)
  23. def get_settings_values():
  24. return [ui_settings.get_value_for_setting(key) for key in self.setting_names]
  25. interface.load(fn=get_settings_values, inputs=[], outputs=self.comps, queue=False, show_progress=False)
  26. return self.comps
  27. def before_process(self, p, *args):
  28. for name, value in zip(self.setting_names, args):
  29. if name not in p.override_settings:
  30. p.override_settings[name] = value
  31. shared.options_templates.update(shared.options_section(('ui', "User interface"), {
  32. "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_restart(),
  33. "extra_options_accordion": shared.OptionInfo(False, "Place options in main UI into an accordion")
  34. }))