""" @author: initials AMA @title: Ardenius @nickname: Ardenius @description: ARD Basic Load Image: adds width and height to the output of the default load image """ # licensed under General Public License v3.0 all rights reserved © 2024 # Owner initials: AMAA # nickname: Ardenius # email: ardenius7@gmail.com # website: https://ko-fi.com/ardenius # ➡️ follow me at https://ko-fi.com/ardenius in the top right corner (follow) # 📸 Change the mood ! by Visiting my AI Image Gallery # 🏆 Support me by getting Premium Members only Perks (Premium SD Models, ComfyUI custom nodes, and more to come) # below code is based upon ComfyUI code licensed under General Public License v3.0 https://www.gnu.org/licenses/gpl-3.0.txt by # contributers found here https://github.com/comfyanonymous/ComfyUI # thus all code here is released to the user as per the GPL V3.0 terms. import os import json import numpy as np from PIL import Image, ImageOps, ImageSequence import torch import folder_paths import node_helpers class ARD_BASIC_LOAD_IMAGE: @classmethod def INPUT_TYPES(s): input_dir = folder_paths.get_input_directory() files = [f for f in os.listdir(input_dir) if os.path.isfile(os.path.join(input_dir, f))] return {"required": {"image": (sorted(files), {"image_upload": True})}, } CATEGORY = "image" RETURN_NAMES = ("image", "mask", "width", "height") RETURN_TYPES = ("IMAGE", "MASK", "INT", "INT") FUNCTION = "ard_basic_load_image" DESCRIPTION = "ARD Basic Load Image: adds width and height to the output of the default load image" def ard_basic_load_image(self, image): image_path = folder_paths.get_annotated_filepath(image) img = node_helpers.pillow(Image.open, image_path) output_images = [] output_masks = [] w, h = None, None width = None height = None excluded_formats = ['MPO'] for i in ImageSequence.Iterator(img): i = node_helpers.pillow(ImageOps.exif_transpose, i) if i.mode == 'I': i = i.point(lambda i: i * (1 / 255)) image = i.convert("RGB") if len(output_images) == 0: w = image.size[0] h = image.size[1] width = w height = h if image.size[0] != w or image.size[1] != h: continue image = np.array(image).astype(np.float32) / 255.0 image = torch.from_numpy(image)[None,] if 'A' in i.getbands(): mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 mask = 1. - torch.from_numpy(mask) else: mask = torch.zeros((64,64), dtype=torch.float32, device="cpu") output_images.append(image) output_masks.append(mask.unsqueeze(0)) if len(output_images) > 1 and img.format not in excluded_formats: output_image = torch.cat(output_images, dim=0) output_mask = torch.cat(output_masks, dim=0) else: output_image = output_images[0] output_mask = output_masks[0] return (output_image, output_mask, width, height)