Only add PNG chunks if metadata is enabled

Prevents a hypothetical scenario of a VAE being crafted to inject
undesired data into PNG chunks.
This commit is contained in:
catboxanon 2025-01-31 11:40:28 -05:00
parent a4aba18d29
commit 49aaad7c21

View File

@ -1615,8 +1615,9 @@ class SaveImage:
for (batch_number, image) in enumerate(images): for (batch_number, image) in enumerate(images):
i = 255. * image.cpu().numpy() i = 255. * image.cpu().numpy()
img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
metadata = PngInfo() metadata = None
if not args.disable_metadata: if not args.disable_metadata:
metadata = PngInfo()
if prompt is not None: if prompt is not None:
metadata.add_text("prompt", json.dumps(prompt)) metadata.add_text("prompt", json.dumps(prompt))
if extra_pnginfo is not None: if extra_pnginfo is not None:
@ -1631,7 +1632,6 @@ class SaveImage:
filename_with_batch_num = filename.replace("%batch_num%", str(batch_number)) filename_with_batch_num = filename.replace("%batch_num%", str(batch_number))
file = f"{filename_with_batch_num}_{counter:05}_.png" file = f"{filename_with_batch_num}_{counter:05}_.png"
#TODO: revert to using img.save once Pillow supports cICP chunk #TODO: revert to using img.save once Pillow supports cICP chunk
img.encoderinfo = {"pnginfo": metadata, "compress_level": self.compress_level} img.encoderinfo = {"pnginfo": metadata, "compress_level": self.compress_level}
with open(os.path.join(full_output_folder, file), 'wb') as fp: with open(os.path.join(full_output_folder, file), 'wb') as fp: