| | import json
|
| | from os import path, mkdir
|
| | from typing import Any
|
| | from uuid import uuid4
|
| | from backend.models.lcmdiffusion_setting import LCMDiffusionSetting
|
| | from utils import get_image_file_extension
|
| |
|
| |
|
| | def get_exclude_keys():
|
| | exclude_keys = {
|
| | "init_image": True,
|
| | "generated_images": True,
|
| | "lora": {
|
| | "models_dir": True,
|
| | "path": True,
|
| | },
|
| | "dirs": True,
|
| | "controlnet": {
|
| | "adapter_path": True,
|
| | },
|
| | }
|
| | return exclude_keys
|
| |
|
| |
|
| | class ImageSaver:
|
| | @staticmethod
|
| | def save_images(
|
| | output_path: str,
|
| | images: Any,
|
| | folder_name: str = "",
|
| | format: str = "PNG",
|
| | jpeg_quality: int = 90,
|
| | lcm_diffusion_setting: LCMDiffusionSetting = None,
|
| | ) -> list[str]:
|
| | gen_id = uuid4()
|
| | image_ids = []
|
| |
|
| | if images:
|
| | image_seeds = []
|
| |
|
| | for index, image in enumerate(images):
|
| |
|
| | image_seed = image.info.get('image_seed')
|
| | if image_seed is not None:
|
| | image_seeds.append(image_seed)
|
| |
|
| | if not path.exists(output_path):
|
| | mkdir(output_path)
|
| |
|
| | if folder_name:
|
| | out_path = path.join(
|
| | output_path,
|
| | folder_name,
|
| | )
|
| | else:
|
| | out_path = output_path
|
| |
|
| | if not path.exists(out_path):
|
| | mkdir(out_path)
|
| | image_extension = get_image_file_extension(format)
|
| | image_file_name = f"{gen_id}-{index+1}{image_extension}"
|
| | image_ids.append(image_file_name)
|
| | image.save(path.join(out_path, image_file_name), quality = jpeg_quality)
|
| | if lcm_diffusion_setting:
|
| | data = lcm_diffusion_setting.model_dump(exclude=get_exclude_keys())
|
| | if image_seeds:
|
| | data['image_seeds'] = image_seeds
|
| | with open(path.join(out_path, f"{gen_id}.json"), "w") as json_file:
|
| | json.dump(
|
| | data,
|
| | json_file,
|
| | indent=4,
|
| | )
|
| | return image_ids
|
| |
|
| |
|