1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import math
- import gradio as gr
- from modules import scripts, shared, ui_components, ui_settings, generation_parameters_copypaste
- from modules.ui_components import FormColumn
- class ExtraOptionsSection(scripts.Script):
- section = "extra_options"
- def __init__(self):
- self.comps = None
- self.setting_names = None
- def title(self):
- return "Extra options"
- def show(self, is_img2img):
- return scripts.AlwaysVisible
- def ui(self, is_img2img):
- self.comps = []
- self.setting_names = []
- self.infotext_fields = []
- extra_options = shared.opts.extra_options_img2img if is_img2img else shared.opts.extra_options_txt2img
- mapping = {k: v for v, k in generation_parameters_copypaste.infotext_to_setting_name_mapping}
- with gr.Blocks() as interface:
- with gr.Accordion("Options", open=False) if shared.opts.extra_options_accordion and extra_options else gr.Group():
- row_count = math.ceil(len(extra_options) / shared.opts.extra_options_cols)
- for row in range(row_count):
- with gr.Row():
- for col in range(shared.opts.extra_options_cols):
- index = row * shared.opts.extra_options_cols + col
- if index >= len(extra_options):
- break
- setting_name = extra_options[index]
- with FormColumn():
- comp = ui_settings.create_setting_component(setting_name)
- self.comps.append(comp)
- self.setting_names.append(setting_name)
- setting_infotext_name = mapping.get(setting_name)
- if setting_infotext_name is not None:
- self.infotext_fields.append((comp, setting_infotext_name))
- def get_settings_values():
- res = [ui_settings.get_value_for_setting(key) for key in self.setting_names]
- return res[0] if len(res) == 1 else res
- interface.load(fn=get_settings_values, inputs=[], outputs=self.comps, queue=False, show_progress=False)
- return self.comps
- def before_process(self, p, *args):
- for name, value in zip(self.setting_names, args):
- if name not in p.override_settings:
- p.override_settings[name] = value
- shared.options_templates.update(shared.options_section(('ui', "User interface"), {
- "extra_options_txt2img": shared.OptionInfo([], "Options in main UI - txt2img", ui_components.DropdownMulti, lambda: {"choices": list(shared.opts.data_labels.keys())}).js("info", "settingsHintsShowQuicksettings").info("setting entries that also appear in txt2img interfaces").needs_reload_ui(),
- "extra_options_img2img": shared.OptionInfo([], "Options in main UI - img2img", ui_components.DropdownMulti, lambda: {"choices": list(shared.opts.data_labels.keys())}).js("info", "settingsHintsShowQuicksettings").info("setting entries that also appear in img2img interfaces").needs_reload_ui(),
- "extra_options_cols": shared.OptionInfo(1, "Options in main UI - number of columns", gr.Number, {"precision": 0}).needs_reload_ui(),
- "extra_options_accordion": shared.OptionInfo(False, "Options in main UI - place into an accordion").needs_reload_ui()
- }))
|