diff --git a/py/services/recipes/persistence_service.py b/py/services/recipes/persistence_service.py index 078ac906..175f046c 100644 --- a/py/services/recipes/persistence_service.py +++ b/py/services/recipes/persistence_service.py @@ -279,10 +279,17 @@ class RecipePersistenceService: os.makedirs(recipes_dir, exist_ok=True) recipe_id = str(uuid.uuid4()) - image_filename = f"{recipe_id}.png" + optimized_image, extension = self._exif_utils.optimize_image( + image_data=image_bytes, + target_width=self._card_preview_width, + format="webp", + quality=85, + preserve_metadata=True, + ) + image_filename = f"{recipe_id}{extension}" image_path = os.path.join(recipes_dir, image_filename) with open(image_path, "wb") as file_obj: - file_obj.write(image_bytes) + file_obj.write(optimized_image) lora_stack = metadata.get("loras", "") lora_matches = re.findall(r"]+)>", lora_stack) diff --git a/py/utils/exif_utils.py b/py/utils/exif_utils.py index 1c5a9f80..ff96703c 100644 --- a/py/utils/exif_utils.py +++ b/py/utils/exif_utils.py @@ -4,7 +4,7 @@ import logging from typing import Optional from io import BytesIO import os -from PIL import Image +from PIL import Image, PngImagePlugin logger = logging.getLogger(__name__) @@ -86,9 +86,10 @@ class ExifUtils: # For PNG, try to update parameters directly if img_format == 'PNG': - # We'll save with parameters in the PNG info - info_dict = {'parameters': metadata} - img.save(image_path, format='PNG', pnginfo=info_dict) + # Use PngInfo instead of plain dictionary + png_info = PngImagePlugin.PngInfo() + png_info.add_text("parameters", metadata) + img.save(image_path, format='PNG', pnginfo=png_info) return image_path # For WebP format, use PIL's exif parameter directly