aboutsummaryrefslogtreecommitdiffstats
path: root/modules/extras.py
diff options
context:
space:
mode:
authorArrowM <arrowman.6677@gmail.com>2022-09-16 03:23:37 +0000
committerAUTOMATIC1111 <16777216c@gmail.com>2022-09-16 04:42:48 +0000
commit37638370032892c03734f511eb5935be370ba56f (patch)
tree2709c7e9a706e03b65e3c32053a62c999859c77f /modules/extras.py
parentdeea9f4d70e079903a9a871b24d7d2c625ad7428 (diff)
downloadstable-diffusion-webui-gfx803-37638370032892c03734f511eb5935be370ba56f.tar.gz
stable-diffusion-webui-gfx803-37638370032892c03734f511eb5935be370ba56f.tar.bz2
stable-diffusion-webui-gfx803-37638370032892c03734f511eb5935be370ba56f.zip
Add batch processing to Extras tab
Diffstat (limited to 'modules/extras.py')
-rw-r--r--modules/extras.py99
1 files changed, 59 insertions, 40 deletions
diff --git a/modules/extras.py b/modules/extras.py
index e3c7d3e5..ffae7d67 100644
--- a/modules/extras.py
+++ b/modules/extras.py
@@ -13,66 +13,85 @@ import piexif.helper
cached_images = {}
-def run_extras(image, gfpgan_visibility, codeformer_visibility, codeformer_weight, upscaling_resize, extras_upscaler_1, extras_upscaler_2, extras_upscaler_2_visibility):
+def run_extras(image, image_folder, gfpgan_visibility, codeformer_visibility, codeformer_weight, upscaling_resize, extras_upscaler_1, extras_upscaler_2, extras_upscaler_2_visibility):
devices.torch_gc()
- existing_pnginfo = image.info or {}
+ imageArr = []
- image = image.convert("RGB")
- info = ""
+ if image_folder != None:
+ if image != None:
+ print("Batch detected and single image detected, please only use one of the two. Aborting.")
+ return None
+ #convert file to pillow image
+ for img in image_folder:
+ image = Image.fromarray(np.array(Image.open(img)))
+ imageArr.append(image)
+
+ elif image != None:
+ if image_folder != None:
+ print("Batch detected and single image detected, please only use one of the two. Aborting.")
+ return None
+ else:
+ imageArr.append(image)
outpath = opts.outdir_samples or opts.outdir_extras_samples
- if gfpgan_visibility > 0:
- restored_img = modules.gfpgan_model.gfpgan_fix_faces(np.array(image, dtype=np.uint8))
- res = Image.fromarray(restored_img)
+ for image in imageArr:
+ existing_pnginfo = image.info or {}
+
+ image = image.convert("RGB")
+ info = ""
+
+ if gfpgan_visibility > 0:
+ restored_img = modules.gfpgan_model.gfpgan_fix_faces(np.array(image, dtype=np.uint8))
+ res = Image.fromarray(restored_img)
- if gfpgan_visibility < 1.0:
- res = Image.blend(image, res, gfpgan_visibility)
+ if gfpgan_visibility < 1.0:
+ res = Image.blend(image, res, gfpgan_visibility)
- info += f"GFPGAN visibility:{round(gfpgan_visibility, 2)}\n"
- image = res
+ info += f"GFPGAN visibility:{round(gfpgan_visibility, 2)}\n"
+ image = res
- if codeformer_visibility > 0:
- restored_img = modules.codeformer_model.codeformer.restore(np.array(image, dtype=np.uint8), w=codeformer_weight)
- res = Image.fromarray(restored_img)
+ if codeformer_visibility > 0:
+ restored_img = modules.codeformer_model.codeformer.restore(np.array(image, dtype=np.uint8), w=codeformer_weight)
+ res = Image.fromarray(restored_img)
- if codeformer_visibility < 1.0:
- res = Image.blend(image, res, codeformer_visibility)
+ if codeformer_visibility < 1.0:
+ res = Image.blend(image, res, codeformer_visibility)
- info += f"CodeFormer w: {round(codeformer_weight, 2)}, CodeFormer visibility:{round(codeformer_visibility)}\n"
- image = res
+ info += f"CodeFormer w: {round(codeformer_weight, 2)}, CodeFormer visibility:{round(codeformer_visibility)}\n"
+ image = res
- if upscaling_resize != 1.0:
- def upscale(image, scaler_index, resize):
- small = image.crop((image.width // 2, image.height // 2, image.width // 2 + 10, image.height // 2 + 10))
- pixels = tuple(np.array(small).flatten().tolist())
- key = (resize, scaler_index, image.width, image.height, gfpgan_visibility, codeformer_visibility, codeformer_weight) + pixels
+ if upscaling_resize != 1.0:
+ def upscale(image, scaler_index, resize):
+ small = image.crop((image.width // 2, image.height // 2, image.width // 2 + 10, image.height // 2 + 10))
+ pixels = tuple(np.array(small).flatten().tolist())
+ key = (resize, scaler_index, image.width, image.height, gfpgan_visibility, codeformer_visibility, codeformer_weight) + pixels
- c = cached_images.get(key)
- if c is None:
- upscaler = shared.sd_upscalers[scaler_index]
- c = upscaler.upscale(image, image.width * resize, image.height * resize)
- cached_images[key] = c
+ c = cached_images.get(key)
+ if c is None:
+ upscaler = shared.sd_upscalers[scaler_index]
+ c = upscaler.upscale(image, image.width * resize, image.height * resize)
+ cached_images[key] = c
- return c
+ return c
- info += f"Upscale: {round(upscaling_resize, 3)}, model:{shared.sd_upscalers[extras_upscaler_1].name}\n"
- res = upscale(image, extras_upscaler_1, upscaling_resize)
+ info += f"Upscale: {round(upscaling_resize, 3)}, model:{shared.sd_upscalers[extras_upscaler_1].name}\n"
+ res = upscale(image, extras_upscaler_1, upscaling_resize)
- if extras_upscaler_2 != 0 and extras_upscaler_2_visibility > 0:
- res2 = upscale(image, extras_upscaler_2, upscaling_resize)
- info += f"Upscale: {round(upscaling_resize, 3)}, visibility: {round(extras_upscaler_2_visibility, 3)}, model:{shared.sd_upscalers[extras_upscaler_2].name}\n"
- res = Image.blend(res, res2, extras_upscaler_2_visibility)
+ if extras_upscaler_2 != 0 and extras_upscaler_2_visibility > 0:
+ res2 = upscale(image, extras_upscaler_2, upscaling_resize)
+ info += f"Upscale: {round(upscaling_resize, 3)}, visibility: {round(extras_upscaler_2_visibility, 3)}, model:{shared.sd_upscalers[extras_upscaler_2].name}\n"
+ res = Image.blend(res, res2, extras_upscaler_2_visibility)
- image = res
+ image = res
- while len(cached_images) > 2:
- del cached_images[next(iter(cached_images.keys()))]
+ while len(cached_images) > 2:
+ del cached_images[next(iter(cached_images.keys()))]
- images.save_image(image, path=outpath, basename="", seed=None, prompt=None, extension=opts.samples_format, info=info, short_filename=True, no_prompt=True, grid=False, pnginfo_section_name="extras", existing_info=existing_pnginfo)
+ images.save_image(image, path=outpath, basename="", seed=None, prompt=None, extension=opts.samples_format, info=info, short_filename=True, no_prompt=True, grid=False, pnginfo_section_name="extras", existing_info=existing_pnginfo)
- return image, plaintext_to_html(info), ''
+ return imageArr, plaintext_to_html(info), ''
def run_pnginfo(image):