From 561837524c86917d28046a47cea3696e50cea9f1 Mon Sep 17 00:00:00 2001 From: Level Pixel Dev Date: Fri, 30 May 2025 21:31:59 +0600 Subject: [PATCH] Changed the logic of Preview Image Bridge to speed up the display of images on the ui --- nodes/io/image_outputs_LP.py | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/nodes/io/image_outputs_LP.py b/nodes/io/image_outputs_LP.py index 0bedf28..0d735b9 100644 --- a/nodes/io/image_outputs_LP.py +++ b/nodes/io/image_outputs_LP.py @@ -15,13 +15,20 @@ class SaveImage: self.type = "output" self.prefix_append = "" self.compress_level = 4 + self.downscale_preview = False + self.size = 512 + self.downscale_mode = True @classmethod def INPUT_TYPES(s): return { "required": { "images": ("IMAGE", {"tooltip": "The images to save."}), - "filename_prefix": ("STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}) + "filename_prefix": ("STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}), + "downscale_preview": ("BOOLEAN", {"default": True, "label_on": "On", "label_off": "Off"}), + "size": ("INT", {"default": 512, "min": 1, "max": 8192, "step": 1}), + "downscale_mode": ("BOOLEAN", {"default": True, "label_on": "max", "label_off": "min"}), + "compress_level": ("INT", {"default": 1, "min": 0, "max": 9, "step": 1}), }, "hidden": { "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO" @@ -29,6 +36,7 @@ class SaveImage: } RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("original IMAGE",) FUNCTION = "save_images" OUTPUT_NODE = False @@ -36,13 +44,26 @@ class SaveImage: CATEGORY = "LevelPixel/IO" DESCRIPTION = "Saves the input images to your ComfyUI output directory." - def save_images(self, images, filename_prefix="ComfyUI", prompt=None, extra_pnginfo=None): + def save_images(self, images, filename_prefix="ComfyUI", downscale_preview=False, size=512, downscale_mode=True, compress_level=1, prompt=None, extra_pnginfo=None): + self.downscale_preview = downscale_preview + self.size = size + self.downscale_mode = downscale_mode + self.compress_level = compress_level 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. * image.cpu().numpy() img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + + if self.downscale_preview == True: + w, h = img.size + target = max(w, h) if self.downscale_mode else min(w, h) + if target > self.size: + scale = self.size / target + new_size = (round(w * scale), round(h * scale)) + img = img.resize(new_size, Image.Resampling.LANCZOS) + metadata = None if not args.disable_metadata: metadata = PngInfo() @@ -69,20 +90,27 @@ class PreviewImageForConditions(SaveImage): self.output_dir = folder_paths.get_temp_directory() self.type = "temp" self.prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5)) - self.compress_level = 1 + self.compress_level = 0 + self.downscale_preview = True @classmethod def INPUT_TYPES(s): - return {"required": - {"images": ("IMAGE", ), }, + return {"required":{ + "images": ("IMAGE", ), + "size": ("INT", {"default": 512, "min": 1, "max": 8192, "step": 1}), + "downscale_preview": ("BOOLEAN", {"default": True, "label_on": "On", "label_off": "Off"}), + "size": ("INT", {"default": 512, "min": 1, "max": 8192, "step": 1}), + "downscale_mode": ("BOOLEAN", {"default": True, "label_on": "max", "label_off": "min"}), + "compress_level": ("INT", {"default": 0, "min": 0, "max": 9, "step": 1}), + }, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, } NODE_CLASS_MAPPINGS = { - "PreviewImageForConditions|LP": PreviewImageForConditions, + "PreviewImageForConditions|LP": PreviewImageForConditions } NODE_DISPLAY_NAME_MAPPINGS = { - "PreviewImageForConditions|LP": "Preview Image Bridge [LP]", + "PreviewImageForConditions|LP": "Preview Image Bridge [LP]" }