Commit 4dd898b8 authored by AUTOMATIC's avatar AUTOMATIC
Browse files

do not mess with components' visibility for scripts; instead create group...

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
parent 59a21a67
Loading
Loading
Loading
Loading
+18 −16
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ class Script:
    args_to = None
    alwayson = False

    """A gr.Group component that has all script's UI inside it"""
    group = None

    infotext_fields = None
    """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
@@ -218,8 +221,6 @@ class ScriptRunner:

            for control in controls:
                control.custom_script_source = os.path.basename(script.filename)
                if not script.alwayson:
                    control.visible = False

            if script.infotext_fields is not None:
                self.infotext_fields += script.infotext_fields
@@ -229,40 +230,41 @@ class ScriptRunner:
            script.args_to = len(inputs)

        for script in self.alwayson_scripts:
            with gr.Group():
            with gr.Group() as group:
                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.save_to_config = True
        inputs[0] = dropdown

        for script in self.selectable_scripts:
            with gr.Group(visible=False) as group:
                create_script_ui(script, inputs, inputs_alwayson)

            script.group = group

        def select_script(script_index):
            if 0 < script_index <= len(self.selectable_scripts):
                script = self.selectable_scripts[script_index-1]
                args_from = script.args_from
                args_to = script.args_to
            else:
                args_from = 0
                args_to = 0
            selected_script = self.selectable_scripts[script_index - 1] if script_index>0 else None

            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):
            """called when an initial value is set from ui-config.json to show script's UI components"""

            if title == 'None':
                return

            script_index = self.titles.index(title)
            script = self.selectable_scripts[script_index]
            for i in range(script.args_from, script.args_to):
                inputs[i].visible = True
            self.selectable_scripts[script_index].group.visible = True

        dropdown.init_field = init_field

        dropdown.change(
            fn=select_script,
            inputs=[dropdown],
            outputs=inputs
            outputs=[script.group for script in self.selectable_scripts]
        )

        return inputs
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ class Script(scripts.Script):
        return cmd_opts.allow_code

    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]

+1 −1
Original line number Diff line number Diff line
@@ -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>")

        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'])
        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)
+2 −2
Original line number Diff line number Diff line
@@ -22,8 +22,8 @@ class Script(scripts.Script):
            return None

        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)
        inpainting_fill = gr.Radio(label='Masked content', choices=['fill', 'original', 'latent noise', 'latent nothing'], value='fill', type="index", 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")
        direction = gr.CheckboxGroup(label="Outpainting direction", choices=['left', 'right', 'up', 'down'], value=['left', 'right', 'up', 'down'])

        return [pixels, mask_blur, inpainting_fill, direction]
+5 −5
Original line number Diff line number Diff line
@@ -83,13 +83,14 @@ def cmdargs(line):


def load_prompt_file(file):
    if (file is None):
    if file is None:
        lines = []
    else:
        lines = [x.strip() for x in file.decode('utf8', errors='ignore').split("\n")]

    return None, "\n".join(lines), gr.update(lines=7)


class Script(scripts.Script):
    def title(self):
        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
        # 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])
        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 for x in lines if len(x) > 0]

@@ -157,5 +158,4 @@ class Script(scripts.Script):
            if checkbox_iterate:
                p.seed = p.seed + (p.batch_size * p.n_iter)


        return Processed(p, images, p.seed, "")
Loading