Add option to strip positive/negative prompt from the jpeg/webp comment

This commit is contained in:
Alexopus
2024-05-27 19:43:39 +02:00
parent 884586c971
commit d3397ec834
+11 -5
View File
@@ -303,6 +303,7 @@ class ImageSaver:
"time_format": ("STRING", {"default": "%Y-%m-%d-%H%M%S", "multiline": False}),
"save_workflow_as_json": ("BOOLEAN", {"default": False}),
"embed_workflow_in_png": ("BOOLEAN", {"default": True}),
"strip_a1111_params": (['nothing', 'positive prompt', 'negative prompt', 'positive and negative prompt'],),
},
"hidden": {
"prompt": "PROMPT",
@@ -341,6 +342,7 @@ class ImageSaver:
denoise,
save_workflow_as_json=False,
embed_workflow_in_png=True,
strip_a1111_params='nothing',
prompt=None,
extra_pnginfo=None,
):
@@ -361,7 +363,11 @@ class ImageSaver:
extension_hashes = json.dumps(embeddings | loras | { "model": modelhash })
basemodelname = parse_checkpoint_name_without_extension(modelname)
comment = f"{handle_whitespace(positive)}\nNegative prompt: {handle_whitespace(negative)}\nSteps: {steps}, Sampler: {civitai_sampler_name}, CFG scale: {cfg}, Seed: {seed_value}, Size: {width}x{height}, Model hash: {modelhash}, Model: {basemodelname}, Hashes: {extension_hashes} Version: ComfyUI"
positive_a111_params = handle_whitespace(positive) if strip_a1111_params not in ["positive prompt", "positive and negative prompt"] else ""
negative_a111_params = f"\nNegative prompt: {handle_whitespace(negative)}" if strip_a1111_params not in ["negative prompt", "positive and negative prompt"] else ""
a111_params = f"{positive_a111_params}{negative_a111_params}\nSteps: {steps}, Sampler: {civitai_sampler_name}, CFG scale: {cfg}, Seed: {seed_value}, Size: {width}x{height}, Model hash: {modelhash}, Model: {basemodelname}, Hashes: {extension_hashes}, Version: ComfyUI"
output_path = os.path.join(self.output_dir, path)
if output_path.strip() != '':
@@ -369,12 +375,12 @@ class ImageSaver:
print(f'The path `{output_path.strip()}` specified doesn\'t exist! Creating directory.')
os.makedirs(output_path, exist_ok=True)
filenames = self.save_images(images, output_path, filename, comment, extension, quality_jpeg_or_webp, lossless_webp, optimize_png, prompt, extra_pnginfo, save_workflow_as_json, embed_workflow_in_png)
filenames = self.save_images(images, output_path, filename, a111_params, extension, quality_jpeg_or_webp, lossless_webp, optimize_png, prompt, extra_pnginfo, save_workflow_as_json, embed_workflow_in_png)
subfolder = os.path.normpath(path)
return {"ui": {"images": map(lambda filename: {"filename": filename, "subfolder": subfolder if subfolder != '.' else '', "type": 'output'}, filenames)}}
def save_images(self, images, output_path, filename_prefix, comment, extension, quality_jpeg_or_webp, lossless_webp, optimize_png, prompt, extra_pnginfo, save_workflow_as_json, embed_workflow_in_png) -> list[str]:
def save_images(self, images, output_path, filename_prefix, a111_params, extension, quality_jpeg_or_webp, lossless_webp, optimize_png, prompt, extra_pnginfo, save_workflow_as_json, embed_workflow_in_png) -> list[str]:
img_count = 1
paths = list()
for image in images:
@@ -388,7 +394,7 @@ class ImageSaver:
if extension == 'png':
metadata = PngInfo()
metadata.add_text("parameters", comment)
metadata.add_text("parameters", a111_params)
# embed workflow and prompt json only if embed_workflow_in_png is true
if embed_workflow_in_png:
@@ -406,7 +412,7 @@ class ImageSaver:
img.save(file, optimize=True, quality=quality_jpeg_or_webp, lossless=lossless_webp)
exif_bytes = piexif.dump({
"Exif": {
piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(comment, encoding="unicode")
piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(a111_params, encoding="unicode")
},
})
piexif.insert(exif_bytes, file)