FramerComfy_Simple_Image2Image_9268381027
/
custom_nodes
/ComfyUI-FramerComfy
/nodes
/OutputImage.py
import os | |
import json | |
import folder_paths | |
from PIL import Image | |
from comfy.cli_args import args | |
from PIL.PngImagePlugin import PngInfo | |
class FramerComfySaveImageNode: | |
def __init__(self): | |
self.output_dir = folder_paths.get_output_directory() | |
self.type = "output" | |
self.prefix_append = "" | |
self.compress_level = 4 | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"images": ("IMAGE",), | |
"filename_prefix": ("STRING", {"default": "ComfyUI"}), | |
"output_name": ( | |
"STRING", | |
{"default": "output_input"}, | |
), | |
}, | |
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, | |
} | |
RETURN_TYPES = () | |
FUNCTION = "save_images" | |
OUTPUT_NODE = True | |
CATEGORY = "FramerComfy" | |
def save_images( | |
self, images, output_name, filename_prefix="ComfyUI", prompt=None, extra_pnginfo=None | |
): | |
import numpy as np | |
if not output_name: | |
raise ValueError("Output name is required") | |
filename_prefix += self.prefix_append | |
( | |
full_output_folder, | |
filename, | |
counter, | |
subfolder, | |
filename_prefix, | |
) = folder_paths.get_save_image_path( | |
filename_prefix, self.output_dir, images[0].shape[1], images[0].shape[0] | |
) | |
results = list() | |
for batch_number, image in enumerate(images): | |
i = 255.0 * image.cpu().numpy() | |
img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) | |
metadata = None | |
if not args.disable_metadata: | |
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])) | |
filename_with_batch_num = filename.replace("%batch_num%", str(batch_number)) | |
file = f"{filename_with_batch_num}_{counter:05}_.png" | |
img.save( | |
os.path.join(full_output_folder, file), | |
pnginfo=metadata, | |
compress_level=self.compress_level, | |
) | |
results.append( | |
{"filename": file, "subfolder": subfolder, "type": self.type} | |
) | |
counter += 1 | |
return {"ui": {"images": results}} | |