mirror of
https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
synced 2024-12-29 19:05:05 +08:00
do not mess with components' visibility for scripts; instead create group components and show/hide those; this will break scripts that create invisible components and rely on UI but the earlier i make this change the better
This commit is contained in:
parent
59a21a67d2
commit
4dd898b8c1
@ -18,6 +18,9 @@ class Script:
|
|||||||
args_to = None
|
args_to = None
|
||||||
alwayson = False
|
alwayson = False
|
||||||
|
|
||||||
|
"""A gr.Group component that has all script's UI inside it"""
|
||||||
|
group = None
|
||||||
|
|
||||||
infotext_fields = None
|
infotext_fields = None
|
||||||
"""if set in ui(), this is a list of pairs of gradio component + text; the text will be used when
|
"""if set in ui(), this is a list of pairs of gradio component + text; the text will be used when
|
||||||
parsing infotext to set the value for the component; see ui.py's txt2img_paste_fields for an example
|
parsing infotext to set the value for the component; see ui.py's txt2img_paste_fields for an example
|
||||||
@ -218,8 +221,6 @@ class ScriptRunner:
|
|||||||
|
|
||||||
for control in controls:
|
for control in controls:
|
||||||
control.custom_script_source = os.path.basename(script.filename)
|
control.custom_script_source = os.path.basename(script.filename)
|
||||||
if not script.alwayson:
|
|
||||||
control.visible = False
|
|
||||||
|
|
||||||
if script.infotext_fields is not None:
|
if script.infotext_fields is not None:
|
||||||
self.infotext_fields += script.infotext_fields
|
self.infotext_fields += script.infotext_fields
|
||||||
@ -229,40 +230,41 @@ class ScriptRunner:
|
|||||||
script.args_to = len(inputs)
|
script.args_to = len(inputs)
|
||||||
|
|
||||||
for script in self.alwayson_scripts:
|
for script in self.alwayson_scripts:
|
||||||
with gr.Group():
|
with gr.Group() as group:
|
||||||
create_script_ui(script, inputs, inputs_alwayson)
|
create_script_ui(script, inputs, inputs_alwayson)
|
||||||
|
|
||||||
|
script.group = group
|
||||||
|
|
||||||
dropdown = gr.Dropdown(label="Script", elem_id="script_list", choices=["None"] + self.titles, value="None", type="index")
|
dropdown = gr.Dropdown(label="Script", elem_id="script_list", choices=["None"] + self.titles, value="None", type="index")
|
||||||
dropdown.save_to_config = True
|
dropdown.save_to_config = True
|
||||||
inputs[0] = dropdown
|
inputs[0] = dropdown
|
||||||
|
|
||||||
for script in self.selectable_scripts:
|
for script in self.selectable_scripts:
|
||||||
create_script_ui(script, inputs, inputs_alwayson)
|
with gr.Group(visible=False) as group:
|
||||||
|
create_script_ui(script, inputs, inputs_alwayson)
|
||||||
|
|
||||||
|
script.group = group
|
||||||
|
|
||||||
def select_script(script_index):
|
def select_script(script_index):
|
||||||
if 0 < script_index <= len(self.selectable_scripts):
|
selected_script = self.selectable_scripts[script_index - 1] if script_index>0 else None
|
||||||
script = self.selectable_scripts[script_index-1]
|
|
||||||
args_from = script.args_from
|
|
||||||
args_to = script.args_to
|
|
||||||
else:
|
|
||||||
args_from = 0
|
|
||||||
args_to = 0
|
|
||||||
|
|
||||||
return [ui.gr_show(True if i == 0 else args_from <= i < args_to or is_alwayson) for i, is_alwayson in enumerate(inputs_alwayson)]
|
return [gr.update(visible=selected_script == s) for s in self.selectable_scripts]
|
||||||
|
|
||||||
def init_field(title):
|
def init_field(title):
|
||||||
|
"""called when an initial value is set from ui-config.json to show script's UI components"""
|
||||||
|
|
||||||
if title == 'None':
|
if title == 'None':
|
||||||
return
|
return
|
||||||
|
|
||||||
script_index = self.titles.index(title)
|
script_index = self.titles.index(title)
|
||||||
script = self.selectable_scripts[script_index]
|
self.selectable_scripts[script_index].group.visible = True
|
||||||
for i in range(script.args_from, script.args_to):
|
|
||||||
inputs[i].visible = True
|
|
||||||
|
|
||||||
dropdown.init_field = init_field
|
dropdown.init_field = init_field
|
||||||
|
|
||||||
dropdown.change(
|
dropdown.change(
|
||||||
fn=select_script,
|
fn=select_script,
|
||||||
inputs=[dropdown],
|
inputs=[dropdown],
|
||||||
outputs=inputs
|
outputs=[script.group for script in self.selectable_scripts]
|
||||||
)
|
)
|
||||||
|
|
||||||
return inputs
|
return inputs
|
||||||
|
@ -14,7 +14,7 @@ class Script(scripts.Script):
|
|||||||
return cmd_opts.allow_code
|
return cmd_opts.allow_code
|
||||||
|
|
||||||
def ui(self, is_img2img):
|
def ui(self, is_img2img):
|
||||||
code = gr.Textbox(label="Python code", visible=False, lines=1)
|
code = gr.Textbox(label="Python code", lines=1)
|
||||||
|
|
||||||
return [code]
|
return [code]
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ class Script(scripts.Script):
|
|||||||
info = gr.HTML("<p style=\"margin-bottom:0.75em\">Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8</p>")
|
info = gr.HTML("<p style=\"margin-bottom:0.75em\">Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8</p>")
|
||||||
|
|
||||||
pixels = gr.Slider(label="Pixels to expand", minimum=8, maximum=256, step=8, value=128)
|
pixels = gr.Slider(label="Pixels to expand", minimum=8, maximum=256, step=8, value=128)
|
||||||
mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=8, visible=False)
|
mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=8)
|
||||||
direction = gr.CheckboxGroup(label="Outpainting direction", choices=['left', 'right', 'up', 'down'], value=['left', 'right', 'up', 'down'])
|
direction = gr.CheckboxGroup(label="Outpainting direction", choices=['left', 'right', 'up', 'down'], value=['left', 'right', 'up', 'down'])
|
||||||
noise_q = gr.Slider(label="Fall-off exponent (lower=higher detail)", minimum=0.0, maximum=4.0, step=0.01, value=1.0)
|
noise_q = gr.Slider(label="Fall-off exponent (lower=higher detail)", minimum=0.0, maximum=4.0, step=0.01, value=1.0)
|
||||||
color_variation = gr.Slider(label="Color variation", minimum=0.0, maximum=1.0, step=0.01, value=0.05)
|
color_variation = gr.Slider(label="Color variation", minimum=0.0, maximum=1.0, step=0.01, value=0.05)
|
||||||
|
@ -22,8 +22,8 @@ class Script(scripts.Script):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
pixels = gr.Slider(label="Pixels to expand", minimum=8, maximum=256, step=8, value=128)
|
pixels = gr.Slider(label="Pixels to expand", minimum=8, maximum=256, step=8, value=128)
|
||||||
mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=4, visible=False)
|
mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=4)
|
||||||
inpainting_fill = gr.Radio(label='Masked content', choices=['fill', 'original', 'latent noise', 'latent nothing'], value='fill', type="index", visible=False)
|
inpainting_fill = gr.Radio(label='Masked content', choices=['fill', 'original', 'latent noise', 'latent nothing'], value='fill', type="index")
|
||||||
direction = gr.CheckboxGroup(label="Outpainting direction", choices=['left', 'right', 'up', 'down'], value=['left', 'right', 'up', 'down'])
|
direction = gr.CheckboxGroup(label="Outpainting direction", choices=['left', 'right', 'up', 'down'], value=['left', 'right', 'up', 'down'])
|
||||||
|
|
||||||
return [pixels, mask_blur, inpainting_fill, direction]
|
return [pixels, mask_blur, inpainting_fill, direction]
|
||||||
|
@ -83,13 +83,14 @@ def cmdargs(line):
|
|||||||
|
|
||||||
|
|
||||||
def load_prompt_file(file):
|
def load_prompt_file(file):
|
||||||
if (file is None):
|
if file is None:
|
||||||
lines = []
|
lines = []
|
||||||
else:
|
else:
|
||||||
lines = [x.strip() for x in file.decode('utf8', errors='ignore').split("\n")]
|
lines = [x.strip() for x in file.decode('utf8', errors='ignore').split("\n")]
|
||||||
|
|
||||||
return None, "\n".join(lines), gr.update(lines=7)
|
return None, "\n".join(lines), gr.update(lines=7)
|
||||||
|
|
||||||
|
|
||||||
class Script(scripts.Script):
|
class Script(scripts.Script):
|
||||||
def title(self):
|
def title(self):
|
||||||
return "Prompts from file or textbox"
|
return "Prompts from file or textbox"
|
||||||
@ -107,9 +108,9 @@ class Script(scripts.Script):
|
|||||||
# We don't shrink back to 1, because that causes the control to ignore [enter], and it may
|
# We don't shrink back to 1, because that causes the control to ignore [enter], and it may
|
||||||
# be unclear to the user that shift-enter is needed.
|
# be unclear to the user that shift-enter is needed.
|
||||||
prompt_txt.change(lambda tb: gr.update(lines=7) if ("\n" in tb) else gr.update(lines=2), inputs=[prompt_txt], outputs=[prompt_txt])
|
prompt_txt.change(lambda tb: gr.update(lines=7) if ("\n" in tb) else gr.update(lines=2), inputs=[prompt_txt], outputs=[prompt_txt])
|
||||||
return [checkbox_iterate, checkbox_iterate_batch, file, prompt_txt]
|
return [checkbox_iterate, checkbox_iterate_batch, prompt_txt]
|
||||||
|
|
||||||
def run(self, p, checkbox_iterate, checkbox_iterate_batch, file, prompt_txt: str):
|
def run(self, p, checkbox_iterate, checkbox_iterate_batch, prompt_txt: str):
|
||||||
lines = [x.strip() for x in prompt_txt.splitlines()]
|
lines = [x.strip() for x in prompt_txt.splitlines()]
|
||||||
lines = [x for x in lines if len(x) > 0]
|
lines = [x for x in lines if len(x) > 0]
|
||||||
|
|
||||||
@ -157,5 +158,4 @@ class Script(scripts.Script):
|
|||||||
if checkbox_iterate:
|
if checkbox_iterate:
|
||||||
p.seed = p.seed + (p.batch_size * p.n_iter)
|
p.seed = p.seed + (p.batch_size * p.n_iter)
|
||||||
|
|
||||||
|
return Processed(p, images, p.seed, "")
|
||||||
return Processed(p, images, p.seed, "")
|
|
||||||
|
@ -18,8 +18,8 @@ class Script(scripts.Script):
|
|||||||
|
|
||||||
def ui(self, is_img2img):
|
def ui(self, is_img2img):
|
||||||
info = gr.HTML("<p style=\"margin-bottom:0.75em\">Will upscale the image to twice the dimensions; use width and height sliders to set tile size</p>")
|
info = gr.HTML("<p style=\"margin-bottom:0.75em\">Will upscale the image to twice the dimensions; use width and height sliders to set tile size</p>")
|
||||||
overlap = gr.Slider(minimum=0, maximum=256, step=16, label='Tile overlap', value=64, visible=False)
|
overlap = gr.Slider(minimum=0, maximum=256, step=16, label='Tile overlap', value=64)
|
||||||
upscaler_index = gr.Radio(label='Upscaler', choices=[x.name for x in shared.sd_upscalers], value=shared.sd_upscalers[0].name, type="index", visible=False)
|
upscaler_index = gr.Radio(label='Upscaler', choices=[x.name for x in shared.sd_upscalers], value=shared.sd_upscalers[0].name, type="index")
|
||||||
|
|
||||||
return [info, overlap, upscaler_index]
|
return [info, overlap, upscaler_index]
|
||||||
|
|
||||||
|
@ -263,12 +263,12 @@ class Script(scripts.Script):
|
|||||||
current_axis_options = [x for x in axis_options if type(x) == AxisOption or type(x) == AxisOptionImg2Img and is_img2img]
|
current_axis_options = [x for x in axis_options if type(x) == AxisOption or type(x) == AxisOptionImg2Img and is_img2img]
|
||||||
|
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
x_type = gr.Dropdown(label="X type", choices=[x.label for x in current_axis_options], value=current_axis_options[1].label, visible=False, type="index", elem_id="x_type")
|
x_type = gr.Dropdown(label="X type", choices=[x.label for x in current_axis_options], value=current_axis_options[1].label, type="index", elem_id="x_type")
|
||||||
x_values = gr.Textbox(label="X values", visible=False, lines=1)
|
x_values = gr.Textbox(label="X values", lines=1)
|
||||||
|
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
y_type = gr.Dropdown(label="Y type", choices=[x.label for x in current_axis_options], value=current_axis_options[0].label, visible=False, type="index", elem_id="y_type")
|
y_type = gr.Dropdown(label="Y type", choices=[x.label for x in current_axis_options], value=current_axis_options[0].label, type="index", elem_id="y_type")
|
||||||
y_values = gr.Textbox(label="Y values", visible=False, lines=1)
|
y_values = gr.Textbox(label="Y values", lines=1)
|
||||||
|
|
||||||
draw_legend = gr.Checkbox(label='Draw legend', value=True)
|
draw_legend = gr.Checkbox(label='Draw legend', value=True)
|
||||||
include_lone_images = gr.Checkbox(label='Include Separate Images', value=False)
|
include_lone_images = gr.Checkbox(label='Include Separate Images', value=False)
|
||||||
|
Loading…
Reference in New Issue
Block a user