From c0ef02abbaa35435a6aff0be2b3a0ea723c9658b Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 22 Oct 2023 12:27:33 -0400 Subject: [PATCH] update scripts --- CHANGELOG.md | 7 ++++-- modules/upscaler.py | 2 +- scripts/poor_mans_outpainting.py | 4 ++-- scripts/prompt_matrix.py | 4 ++-- scripts/prompts_from_file.py | 41 ++++++++------------------------ scripts/sd_upscale.py | 4 ++-- scripts/xyz_grid.py | 2 -- 7 files changed, 22 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e702c246c..7b7bc7898 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ Service release addressing all zero-day issues reported so far... - fix chainner upscalers color clipping - fix for base+refiner workflow in diffusers mode: number of steps, diffuser pipe mode - fix for prompt encoder with refiner in diffusers mode +- fix prompts-from-file saving incorrect metadata +- directml and ipex updates - force second requirements check on startup - remove lyco, multiple_tqdm - enhance extension compatibility for exensions directly importing codeformers @@ -33,8 +35,9 @@ Service release addressing all zero-day issues reported so far... ### Dev branch -- Remove external clone of items in `/repositories` -- Implement Lora OFT, thanks @antis0007 and @ai-casanova +- remove external clone of items in `/repositories` +- add **lora oft** support, thanks @antis0007 and @ai-casanova +- **upscalers compile** option, thanks @disty0 **Themes** diff --git a/modules/upscaler.py b/modules/upscaler.py index 8d82688f2..6497a7cb9 100644 --- a/modules/upscaler.py +++ b/modules/upscaler.py @@ -110,7 +110,7 @@ class Upscaler: return modelloader.load_models(model_path=self.model_path, model_url=self.model_url, command_path=self.user_path) def update_status(self, prompt): - print(f"\nextras: {prompt}", file=modules.shared.progress_print_out) + modules.shared.log.info(f'Upscaler: type={self.name} model="{prompt}"') def find_model(self, path): info = None diff --git a/scripts/poor_mans_outpainting.py b/scripts/poor_mans_outpainting.py index c14fca6a6..f52b2b615 100644 --- a/scripts/poor_mans_outpainting.py +++ b/scripts/poor_mans_outpainting.py @@ -4,7 +4,7 @@ from PIL import Image, ImageDraw import modules.scripts as scripts from modules import images, devices from modules.processing import Processed, process_images -from modules.shared import opts, state +from modules.shared import opts, state, log class Script(scripts.Script): @@ -102,7 +102,7 @@ class Script(scripts.Script): work_latent_mask.append(tiledata_latent_mask[2]) batch_count = len(work) - print(f"Poor man's outpainting will process a total of {len(work)} images tiled as {len(grid.tiles[0][2])}x{len(grid.tiles)}.") + log.info(f"Poor-man-outpainting: images={len(work)} tiles={len(grid.tiles[0][2])}x{len(grid.tiles)}.") state.job_count = batch_count diff --git a/scripts/prompt_matrix.py b/scripts/prompt_matrix.py index 77ce207a7..a5f388feb 100644 --- a/scripts/prompt_matrix.py +++ b/scripts/prompt_matrix.py @@ -3,7 +3,7 @@ import gradio as gr import modules.scripts as scripts from modules import images from modules.processing import process_images -from modules.shared import opts, state +from modules.shared import opts, state, log import modules.sd_samplers @@ -86,7 +86,7 @@ class Script(scripts.Script): p.n_iter = math.ceil(len(all_prompts) / p.batch_size) p.do_not_save_grid = True - print(f"Prompt matrix will create {len(all_prompts)} images using a total of {p.n_iter} batches.") + log.info(f"Prompt-matrix: images={len(all_prompts)} batches={p.n_iter}") if prompt_type == "positive": p.prompt = all_prompts diff --git a/scripts/prompts_from_file.py b/scripts/prompts_from_file.py index 3fda928ed..ffd351356 100644 --- a/scripts/prompts_from_file.py +++ b/scripts/prompts_from_file.py @@ -5,7 +5,7 @@ import gradio as gr import modules.scripts as scripts from modules import sd_samplers, errors from modules.processing import Processed, process_images -from modules.shared import state +from modules.shared import state, log def process_string_tag(tag): @@ -56,15 +56,11 @@ def cmdargs(line): args = shlex.split(line) pos = 0 res = {} - while pos < len(args): arg = args[pos] - assert arg.startswith("--"), f'must start with "--": {arg}' assert pos+1 < len(args), f'missing argument for command line option {arg}' - tag = arg[2:] - if tag == "prompt" or tag == "negative_prompt": pos += 1 prompt = args[pos] @@ -76,18 +72,13 @@ def cmdargs(line): res[tag] = prompt continue - func = prompt_tags.get(tag, None) assert func, f'unknown commandline option: {arg}' - val = args[pos+1] if tag == "sampler_name": val = sd_samplers.samplers_map.get(val.lower(), None) - res[tag] = func(val) - pos += 2 - return res @@ -104,27 +95,21 @@ class Script(scripts.Script): return "Prompts from File" def ui(self, is_img2img): - checkbox_iterate = gr.Checkbox(label="Iterate seed every line", value=False, elem_id=self.elem_id("checkbox_iterate")) - checkbox_iterate_batch = gr.Checkbox(label="Use same random seed for all lines", value=False, elem_id=self.elem_id("checkbox_iterate_batch")) - - prompt_txt = gr.Textbox(label="List of prompt inputs", lines=1, elem_id=self.elem_id("prompt_txt")) - file = gr.File(label="Upload prompt inputs", type='binary', elem_id=self.elem_id("file")) - + with gr.Row(): + checkbox_iterate = gr.Checkbox(label="Iterate seed per line", value=False, elem_id=self.elem_id("checkbox_iterate")) + checkbox_iterate_batch = gr.Checkbox(label="Use same seed", value=False, elem_id=self.elem_id("checkbox_iterate_batch")) + prompt_txt = gr.Textbox(label="Prompts", lines=1, elem_id=self.elem_id("prompt_txt")) + file = gr.File(label="Upload prompts", type='binary', elem_id=self.elem_id("file")) file.change(fn=load_prompt_file, inputs=[file], outputs=[file, prompt_txt, prompt_txt], show_progress=False) - # We start at one line. When the text changes, we jump to seven lines, or two lines if no \n. - # 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], show_progress=False) return [checkbox_iterate, checkbox_iterate_batch, prompt_txt] def run(self, p, checkbox_iterate, checkbox_iterate_batch, prompt_txt: str): # pylint: disable=arguments-differ lines = [x.strip() for x in prompt_txt.splitlines()] lines = [x for x in lines if len(x) > 0] - job_count = 0 jobs = [] - for line in lines: if "--" in line: try: @@ -134,33 +119,27 @@ class Script(scripts.Script): args = {"prompt": line} else: args = {"prompt": line} - job_count += args.get("n_iter", p.n_iter) - jobs.append(args) - print(f"Will process {len(lines)} lines in {job_count} jobs.") + log.info(f"Prompts-from-file: lines={len(lines)} jobs={job_count}") if (checkbox_iterate or checkbox_iterate_batch) and p.seed == -1: p.seed = int(random.randrange(4294967294)) - state.job_count = job_count - images = [] all_prompts = [] + all_seeds = [] infotexts = [] for args in jobs: state.job = f"{state.job_no + 1} out of {state.job_count}" - copy_p = copy.copy(p) for k, v in args.items(): setattr(copy_p, k, v) - proc = process_images(copy_p) + all_seeds.append(proc.seed) images += proc.images - if checkbox_iterate: p.seed = p.seed + (p.batch_size * p.n_iter) all_prompts += proc.all_prompts infotexts += proc.infotexts - - return Processed(p, images, p.seed, "", all_prompts=all_prompts, infotexts=infotexts) + return Processed(p, images, p.seed, "", all_prompts=all_prompts, all_seeds=all_seeds, infotexts=infotexts) diff --git a/scripts/sd_upscale.py b/scripts/sd_upscale.py index 4b594177b..8500ead07 100644 --- a/scripts/sd_upscale.py +++ b/scripts/sd_upscale.py @@ -4,7 +4,7 @@ from PIL import Image import modules.scripts as scripts from modules import processing, shared, images, devices from modules.processing import Processed -from modules.shared import opts, state +from modules.shared import opts, state, log class Script(scripts.Script): @@ -61,7 +61,7 @@ class Script(scripts.Script): batch_count = math.ceil(len(work) / batch_size) state.job_count = batch_count * upscale_count - print(f"SD upscaling will process a total of {len(work)} images tiled as {len(grid.tiles[0][2])}x{len(grid.tiles)} per upscale in a total of {state.job_count} batches.") + log.info(f"SD upscale: images={len(work)} tile={len(grid.tiles[0][2])}x{len(grid.tiles)} batches={state.job_count}") result_images = [] for n in range(upscale_count): diff --git a/scripts/xyz_grid.py b/scripts/xyz_grid.py index 22eb5699c..3dbe72baf 100644 --- a/scripts/xyz_grid.py +++ b/scripts/xyz_grid.py @@ -700,5 +700,3 @@ class Script(scripts.Script): del processed.all_seeds[1] del processed.infotexts[1] return processed - -print('HERE', [x.name for x in sd_samplers.samplers])