From cdb7b4d3b08994a983c26c9c6f1b905e1759f2cd Mon Sep 17 00:00:00 2001 From: "Dr.Lt.Data" Date: Wed, 25 Dec 2024 16:14:51 +0900 Subject: [PATCH] fix: compatibility patch for VAEEncodeTiled's overlap https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/863#issuecomment-2560861500 --- modules/impact/config.py | 2 +- modules/impact/core.py | 3 ++- modules/impact/impact_pack.py | 12 +++++++++--- modules/impact/util_nodes.py | 17 ++++++++++++++--- pyproject.toml | 2 +- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/modules/impact/config.py b/modules/impact/config.py index dc1efc5..9da9148 100644 --- a/modules/impact/config.py +++ b/modules/impact/config.py @@ -1,7 +1,7 @@ import configparser import os -version_code = [8, 1, 5] +version_code = [8, 1, 6] version = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '') dependency_version = 24 diff --git a/modules/impact/core.py b/modules/impact/core.py index 33efd7e..654fc23 100644 --- a/modules/impact/core.py +++ b/modules/impact/core.py @@ -1953,7 +1953,7 @@ class PixelTiledKSampleUpscaler: def __init__(self, scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, tile_width, tile_height, tiling_strategy, - upscale_model_opt=None, hook_opt=None, tile_cnet_opt=None, tile_size=512, tile_cnet_strength=1.0): + upscale_model_opt=None, hook_opt=None, tile_cnet_opt=None, tile_size=512, tile_cnet_strength=1.0, overlap=64): self.params = scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise self.vae = vae self.tile_params = tile_width, tile_height, tiling_strategy @@ -1963,6 +1963,7 @@ class PixelTiledKSampleUpscaler: self.tile_size = tile_size self.is_tiled = True self.tile_cnet_strength = tile_cnet_strength + self.overlap = overlap def tiled_ksample(self, latent, images): if "BNK_TiledKSampler" in nodes.NODE_CLASS_MAPPINGS: diff --git a/modules/impact/impact_pack.py b/modules/impact/impact_pack.py index ac18f04..0abcaf7 100644 --- a/modules/impact/impact_pack.py +++ b/modules/impact/impact_pack.py @@ -28,6 +28,7 @@ import base64 import impact.wildcards as wildcards from . import hooks from . import utils +import inspect try: @@ -986,6 +987,7 @@ class PixelTiledKSampleUpscalerProvider: "pk_hook_opt": ("PK_HOOK", ), "tile_cnet_opt": ("CONTROL_NET", ), "tile_cnet_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "overlap": ("INT", {"default": 64, "min": 0, "max": 4096, "step": 32}), } } @@ -995,11 +997,11 @@ class PixelTiledKSampleUpscalerProvider: CATEGORY = "ImpactPack/Upscale" def doit(self, scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, tile_width, tile_height, tiling_strategy, upscale_model_opt=None, - pk_hook_opt=None, tile_cnet_opt=None, tile_cnet_strength=1.0): + pk_hook_opt=None, tile_cnet_opt=None, tile_cnet_strength=1.0, overlap=64): if "BNK_TiledKSampler" in nodes.NODE_CLASS_MAPPINGS: upscaler = core.PixelTiledKSampleUpscaler(scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, tile_width, tile_height, tiling_strategy, upscale_model_opt, pk_hook_opt, tile_cnet_opt, - tile_size=max(tile_width, tile_height), tile_cnet_strength=tile_cnet_strength) + tile_size=max(tile_width, tile_height), tile_cnet_strength=tile_cnet_strength, overlap=overlap) return (upscaler, ) else: utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_TiledKSampler', @@ -1312,7 +1314,11 @@ class IterativeImageUpscale: core.update_node_status(unique_id, "VAEEncode (first)", 0) if upscaler.is_tiled: - latent = nodes.VAEEncodeTiled().encode(vae, pixels, upscaler.tile_size)[0] + encoder = nodes.VAEEncodeTiled() + if 'overlap' in inspect.signature(encoder.encode).parameters: + latent = encoder.encode(vae, pixels, upscaler.tile_size, overlap=upscaler.overlap)[0] + else: + latent = encoder.encode(vae, pixels, upscaler.tile_size)[0] else: latent = nodes.VAEEncode().encode(vae, pixels)[0] diff --git a/modules/impact/util_nodes.py b/modules/impact/util_nodes.py index 2afba50..8cdccfc 100644 --- a/modules/impact/util_nodes.py +++ b/modules/impact/util_nodes.py @@ -526,6 +526,9 @@ class ReencodeLatent: "output_vae": ("VAE", ), "tile_size": ("INT", {"default": 512, "min": 320, "max": 4096, "step": 64}), }, + "optional": { + "overlap": ("INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "tooltip": "This setting applies when 'tile_mode' is enabled."}), + } } CATEGORY = "ImpactPack/Util" @@ -533,14 +536,22 @@ class ReencodeLatent: RETURN_TYPES = ("LATENT", ) FUNCTION = "doit" - def doit(self, samples, tile_mode, input_vae, output_vae, tile_size=512): + def doit(self, samples, tile_mode, input_vae, output_vae, tile_size=512, overlap=64): if tile_mode in ["Both", "Decode(input) only"]: - pixels = nodes.VAEDecodeTiled().decode(input_vae, samples, tile_size)[0] + decoder = nodes.VAEDecodeTiled() + if 'overlap' in inspect.signature(decoder.decode).parameters: + pixels = decoder.decode(input_vae, samples, tile_size, overlap=overlap)[0] + else: + pixels = decoder.decode(input_vae, samples, tile_size, overlap=overlap)[0] else: pixels = nodes.VAEDecode().decode(input_vae, samples)[0] if tile_mode in ["Both", "Encode(output) only"]: - return nodes.VAEEncodeTiled().encode(output_vae, pixels, tile_size) + encoder = nodes.VAEEncodeTiled() + if 'overlap' in inspect.signature(encoder.encode).parameters: + return encoder.encode(output_vae, pixels, tile_size, overlap=overlap) + else: + return encoder.encode(output_vae, pixels, tile_size) else: return nodes.VAEEncode().encode(output_vae, pixels) diff --git a/pyproject.toml b/pyproject.toml index 4d2027a..09382ed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "comfyui-impact-pack" description = "This node pack offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler." -version = "8.1.5" +version = "8.1.6" license = { file = "LICENSE.txt" } dependencies = ["segment-anything", "scikit-image", "piexif", "transformers", "opencv-python-headless", "GitPython", "scipy>=1.11.4"]