From a073b82751ab9826fd9c28384a6912f010c3aade Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Wed, 21 May 2025 19:17:12 +0800 Subject: [PATCH] Enhance WebP image saving: add EXIF data and workflow metadata support. Fixes #193 --- py/nodes/save_image.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/py/nodes/save_image.py b/py/nodes/save_image.py index 69a68847..68b2769a 100644 --- a/py/nodes/save_image.py +++ b/py/nodes/save_image.py @@ -379,14 +379,28 @@ class SaveImage: print(f"Error adding EXIF data: {e}") img.save(file_path, format="JPEG", **save_kwargs) elif file_format == "webp": - # For WebP, also use piexif for metadata - if metadata: - try: - exif_dict = {'Exif': {piexif.ExifIFD.UserComment: b'UNICODE\0' + metadata.encode('utf-16be')}} - exif_bytes = piexif.dump(exif_dict) - save_kwargs["exif"] = exif_bytes - except Exception as e: - print(f"Error adding EXIF data: {e}") + # For WebP, use exif data in a ComfyUI-compatible format + try: + # Get exif from image + exif = img.getexif() + + # Add metadata if available + if metadata: + exif[piexif.ExifIFD.UserComment] = b'UNICODE\0' + metadata.encode('utf-16be') + + # Add workflow if embed_workflow is enabled + if embed_workflow and extra_pnginfo is not None: + # Format the workflow with "Workflow:" prefix for ComfyUI compatibility + workflow_json = json.dumps(extra_pnginfo["workflow"]) + # Store workflow in ImageDescription tag (0x010e) + exif[piexif.ImageIFD.ImageDescription] = "Workflow:" + workflow_json + + # Update save_kwargs with exif data + save_kwargs["exif"] = exif.tobytes() + + except Exception as e: + print(f"Error adding EXIF/workflow data to WebP: {e}") + img.save(file_path, format="WEBP", **save_kwargs) results.append({