From 146856f66d7e06a762f5ef5bf61a226057de6757 Mon Sep 17 00:00:00 2001 From: Milly Date: Tue, 25 Oct 2022 06:21:31 +0900 Subject: images: allow nested bracket in filename pattern --- modules/images.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'modules/images.py') diff --git a/modules/images.py b/modules/images.py index 286de2ae..ed448a8a 100644 --- a/modules/images.py +++ b/modules/images.py @@ -277,7 +277,7 @@ invalid_filename_chars = '<>:"/\\|?*\n' invalid_filename_prefix = ' ' invalid_filename_postfix = ' .' re_nonletters = re.compile(r'[\s' + string.punctuation + ']+') -re_pattern = re.compile(r"([^\[\]]+|\[([^]]+)]|[\[\]]*)") +re_pattern = re.compile(r"(.*?)(?:\[([^\[\]]+)\]|$)") re_pattern_arg = re.compile(r"(.*)<([^>]*)>$") max_filename_part_length = 128 @@ -362,9 +362,9 @@ class FilenameGenerator: for m in re_pattern.finditer(x): text, pattern = m.groups() + res += text if pattern is None: - res += text continue pattern_args = [] @@ -385,12 +385,9 @@ class FilenameGenerator: print(f"Error adding [{pattern}] to filename", file=sys.stderr) print(traceback.format_exc(), file=sys.stderr) - if replacement is None: - res += f'[{pattern}]' - else: + if replacement is not None: res += str(replacement) - - continue + continue res += f'[{pattern}]' -- cgit v1.2.3 From 757264c453eca533ee1c9ea7e9d9b45a009367d7 Mon Sep 17 00:00:00 2001 From: w-e-w <40751091+w-e-w@users.noreply.github.com> Date: Tue, 25 Oct 2022 23:39:21 +0900 Subject: default_time_format if format is blank --- modules/images.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'modules/images.py') diff --git a/modules/images.py b/modules/images.py index ed448a8a..bfc2ba06 100644 --- a/modules/images.py +++ b/modules/images.py @@ -343,7 +343,7 @@ class FilenameGenerator: def datetime(self, *args): time_datetime = datetime.datetime.now() - time_format = args[0] if len(args) > 0 else self.default_time_format + time_format = args[0] if len(args) > 0 and args[0] != "" else self.default_time_format try: time_zone = pytz.timezone(args[1]) if len(args) > 1 else None except pytz.exceptions.UnknownTimeZoneError as _: -- cgit v1.2.3 From 0cd74602531a40f72d1a75b471a8a9166135d333 Mon Sep 17 00:00:00 2001 From: AUTOMATIC <16777216c@gmail.com> Date: Wed, 26 Oct 2022 13:12:44 +0300 Subject: add script callback for before image save and change callback for after image save to use a class with parameters --- modules/images.py | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) (limited to 'modules/images.py') diff --git a/modules/images.py b/modules/images.py index bfc2ba06..7870b5b7 100644 --- a/modules/images.py +++ b/modules/images.py @@ -451,17 +451,6 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i """ namegen = FilenameGenerator(p, seed, prompt) - if extension == 'png' and opts.enable_pnginfo and info is not None: - pnginfo = PngImagePlugin.PngInfo() - - if existing_info is not None: - for k, v in existing_info.items(): - pnginfo.add_text(k, str(v)) - - pnginfo.add_text(pnginfo_section_name, info) - else: - pnginfo = None - if save_to_dirs is None: save_to_dirs = (grid and opts.grid_save_to_dirs) or (not grid and opts.save_to_dirs and not no_prompt) @@ -489,19 +478,27 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i if add_number: basecount = get_next_sequence_number(path, basename) fullfn = None - fullfn_without_extension = None for i in range(500): fn = f"{basecount + i:05}" if basename == '' else f"{basename}-{basecount + i:04}" fullfn = os.path.join(path, f"{fn}{file_decoration}.{extension}") - fullfn_without_extension = os.path.join(path, f"{fn}{file_decoration}") if not os.path.exists(fullfn): break else: fullfn = os.path.join(path, f"{file_decoration}.{extension}") - fullfn_without_extension = os.path.join(path, file_decoration) else: fullfn = os.path.join(path, f"{forced_filename}.{extension}") - fullfn_without_extension = os.path.join(path, forced_filename) + + pnginfo = existing_info or {} + if info is not None: + pnginfo[pnginfo_section_name] = info + + params = script_callbacks.ImageSaveParams(image, p, fullfn, pnginfo) + script_callbacks.before_image_saved_callback(params) + + image = params.image + fullfn = params.filename + info = params.pnginfo.get(pnginfo_section_name, None) + fullfn_without_extension, extension = os.path.splitext(params.filename) def exif_bytes(): return piexif.dump({ @@ -510,12 +507,20 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i }, }) - if extension.lower() in ("jpg", "jpeg", "webp"): + if extension.lower() == '.png': + pnginfo_data = PngImagePlugin.PngInfo() + for k, v in params.pnginfo.items(): + pnginfo_data.add_text(k, str(v)) + + image.save(fullfn, quality=opts.jpeg_quality, pnginfo=pnginfo_data) + + elif extension.lower() in (".jpg", ".jpeg", ".webp"): image.save(fullfn, quality=opts.jpeg_quality) + if opts.enable_pnginfo and info is not None: piexif.insert(exif_bytes(), fullfn) else: - image.save(fullfn, quality=opts.jpeg_quality, pnginfo=pnginfo) + image.save(fullfn, quality=opts.jpeg_quality) target_side_length = 4000 oversize = image.width > target_side_length or image.height > target_side_length @@ -538,7 +543,8 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i else: txt_fullfn = None - script_callbacks.image_saved_callback(image, p, fullfn, txt_fullfn) + script_callbacks.image_saved_callback(params) + return fullfn, txt_fullfn -- cgit v1.2.3