| from PIL import Image |
| from PIL.PngImagePlugin import PngInfo |
| import numpy as np |
| import json |
| import re |
|
|
| import time |
|
|
| import os |
| if __name__ == os.path.splitext(os.path.basename(__file__))[0] : |
| from ConsoleColor import print, console |
| from mypath import * |
| else: |
| from .ConsoleColor import print, console |
| from .mypath import * |
| |
| |
|
|
|
|
| class SaveImageSimple: |
| def __init__(self): |
| self.type = "output" |
| |
| @classmethod |
| def INPUT_TYPES(s): |
| return { |
| "required": { |
| "images": ("IMAGE", ), |
| "filename_prefix": ("STRING", {"default": ""}) |
| }, |
| "hidden": { |
| "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO" |
| }, |
| } |
| RETURN_TYPES = () |
| FUNCTION = "save_images" |
|
|
| OUTPUT_NODE = True |
|
|
| CATEGORY = "image" |
|
|
| def save_images(self, images, filename_prefix="", prompt=None, extra_pnginfo=None): |
|
|
| outputdir=os.path.join(mainfolder, "output") |
| |
|
|
| |
| filename_prefix=re.sub(r"[*]", "",filename_prefix) |
| filename_prefix+=time.strftime('_%Y%m%d_%H%M%S') |
| results = list() |
| cnt=1 |
| for image in images : |
| i = 255. * image.cpu().numpy() |
| img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) |
| metadata = PngInfo() |
| if prompt is not None: |
| metadata.add_text("prompt", json.dumps(prompt)) |
| if extra_pnginfo is not None: |
| |
| for x in extra_pnginfo: |
| metadata.add_text(x, json.dumps(extra_pnginfo[x])) |
| if not os.path.exists(outputdir): |
| print("makedirs : " + outputdir ) |
| os.makedirs(outputdir) |
| filename=filename_prefix+f"_{cnt:05}_.png" |
| filename=os.path.join(outputdir, filename) |
| img.save(filename, pnginfo=metadata, optimize=True) |
| results.append({ |
| "filename": filename, |
| "subfolder": subfolder, |
| "type": self.type |
| }); |
| cnt+=1 |
| |
| return { "ui": { "images": results } } |