diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-03-11 13:45:35 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-11 13:45:35 +0000 |
commit | d3dd6cc01c70516b0b3406d87cd0f6a682c78b86 (patch) | |
tree | cb29d89dcf14d7cd057796bf87f4acae5b9a26e9 | |
parent | 76bc72116e2576b887e3ec8619c9c0f54a151f7a (diff) | |
parent | a47c18297e1611568c732e6e6922d5be9def7c47 (diff) | |
download | stable-diffusion-webui-gfx803-d3dd6cc01c70516b0b3406d87cd0f6a682c78b86.tar.gz stable-diffusion-webui-gfx803-d3dd6cc01c70516b0b3406d87cd0f6a682c78b86.tar.bz2 stable-diffusion-webui-gfx803-d3dd6cc01c70516b0b3406d87cd0f6a682c78b86.zip |
Merge pull request #8175 from vladmandic/image_size
adds checks for resulting image size to avoid memory issues
-rw-r--r-- | modules/shared.py | 1 | ||||
-rw-r--r-- | scripts/xyz_grid.py | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/modules/shared.py b/modules/shared.py index aafe31de..4e229353 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -334,6 +334,7 @@ options_templates.update(options_section(('saving-images', "Saving images/grids" "export_for_4chan": OptionInfo(True, "If the saved image file size is above the limit, or its either width or height are above the limit, save a downscaled copy as JPG"),
"img_downscale_threshold": OptionInfo(4.0, "File size limit for the above option, MB", gr.Number),
"target_side_length": OptionInfo(4000, "Width/height limit for the above option, in pixels", gr.Number),
+ "img_max_size_mp": OptionInfo(200, "Maximum image size, in megapixels", gr.Number),
"use_original_name_batch": OptionInfo(True, "Use original name for output filename during batch process in extras tab"),
"use_upscaler_name_as_suffix": OptionInfo(False, "Use upscaler name as filename suffix in the extras tab"),
diff --git a/scripts/xyz_grid.py b/scripts/xyz_grid.py index 87e33d79..84c73e28 100644 --- a/scripts/xyz_grid.py +++ b/scripts/xyz_grid.py @@ -499,6 +499,11 @@ class Script(scripts.Script): z_opt = self.current_axis_options[z_type]
zs = process_axis(z_opt, z_values)
+ # this could be moved to common code, but unlikely to be ever triggered anywhere else
+ Image.MAX_IMAGE_PIXELS = opts.img_max_size_mp * 1.1 # allow 10% overhead for margins and legend
+ grid_mp = round(len(xs) * len(ys) * len(zs) * p.width * p.height / 1000000)
+ assert grid_mp < opts.img_max_size_mp, f'Error: Resulting grid would be too large ({grid_mp} MPixels) (max configured size is {opts.img_max_size_mp} MPixels)'
+
def fix_axis_seeds(axis_opt, axis_list):
if axis_opt.label in ['Seed', 'Var. seed']:
return [int(random.randrange(4294967294)) if val is None or val == '' or val == -1 else val for val in axis_list]
|