diff options
author | AUTOMATIC <16777216c@gmail.com> | 2022-09-14 11:47:54 +0000 |
---|---|---|
committer | AUTOMATIC <16777216c@gmail.com> | 2022-09-14 11:47:54 +0000 |
commit | c9430e53f6bad9af8adbc35ff72bcf59fbdec0ef (patch) | |
tree | 358633c72f59b3b342c774ca364920b62d43efc9 /scripts | |
parent | c253d6bdab348d453f40ac462e6b8d9bcd86785f (diff) | |
download | stable-diffusion-webui-gfx803-c9430e53f6bad9af8adbc35ff72bcf59fbdec0ef.tar.gz stable-diffusion-webui-gfx803-c9430e53f6bad9af8adbc35ff72bcf59fbdec0ef.tar.bz2 stable-diffusion-webui-gfx803-c9430e53f6bad9af8adbc35ff72bcf59fbdec0ef.zip |
loopback moved to scripts, added support for multiple batches, changed to honor save grids and how grids in web setting
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/loopback.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/scripts/loopback.py b/scripts/loopback.py new file mode 100644 index 00000000..f1102c92 --- /dev/null +++ b/scripts/loopback.py @@ -0,0 +1,78 @@ +import numpy as np
+from tqdm import trange
+
+import modules.scripts as scripts
+import gradio as gr
+
+from modules import processing, shared, sd_samplers, images
+from modules.processing import Processed
+from modules.sd_samplers import samplers
+from modules.shared import opts, cmd_opts, state
+
+class Script(scripts.Script):
+ def title(self):
+ return "Loopback"
+
+ def show(self, is_img2img):
+ return is_img2img
+
+ def ui(self, is_img2img):
+ loops = gr.Slider(minimum=1, maximum=32, step=1, label='Loops', value=4)
+ denoising_strength_change_factor = gr.Slider(minimum=0.9, maximum=1.1, step=0.01, label='Denoising strength change factor', value=1)
+
+ return [loops, denoising_strength_change_factor]
+
+ def run(self, p, loops, denoising_strength_change_factor):
+ processing.fix_seed(p)
+ batch_count = p.n_iter
+ p.extra_generation_params = {
+ "Denoising strength change factor": denoising_strength_change_factor,
+ }
+
+ p.batch_size = 1
+ p.n_iter = 1
+
+ output_images, info = None, None
+ initial_seed = None
+ initial_info = None
+
+ grids = []
+ all_images = []
+ state.job_count = loops * batch_count
+
+ for n in range(batch_count):
+ history = []
+
+ for i in range(loops):
+ p.n_iter = 1
+ p.batch_size = 1
+ p.do_not_save_grid = True
+
+ state.job = f"Iteration {i + 1}/{loops}, batch {n + 1}/{batch_count}"
+
+ processed = processing.process_images(p)
+
+ if initial_seed is None:
+ initial_seed = processed.seed
+ initial_info = processed.info
+
+ init_img = processed.images[0]
+
+ p.init_images = [init_img]
+ p.seed = processed.seed + 1
+ p.denoising_strength = min(max(p.denoising_strength * denoising_strength_change_factor, 0.1), 1)
+ history.append(processed.images[0])
+
+ grid = images.image_grid(history, rows=1)
+ if opts.grid_save:
+ images.save_image(grid, p.outpath_grids, "grid", initial_seed, p.prompt, opts.grid_format, info=info, short_filename=not opts.grid_extended_filename, grid=True, p=p)
+
+ grids.append(grid)
+ all_images += history
+
+ if opts.return_grid:
+ all_images = grids + all_images
+
+ processed = Processed(p, all_images, initial_seed, initial_info)
+
+ return processed
|