fix: compatibility patch for VAEEncodeTiled's overlap

https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/863#issuecomment-2560861500
This commit is contained in:
Dr.Lt.Data
2024-12-25 16:14:51 +09:00
parent 21eecb0c03
commit cdb7b4d3b0
5 changed files with 27 additions and 9 deletions
+1 -1
View File
@@ -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
+2 -1
View File
@@ -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:
+9 -3
View File
@@ -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]
+14 -3
View File
@@ -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)