Update WAS_Node_Suite.py

This commit is contained in:
Jordan Thompson
2023-06-26 18:03:46 -07:00
parent 91088ee1bd
commit f2f7c64cbf
+187 -93
View File
@@ -6702,6 +6702,7 @@ class WAS_Image_Save:
"show_history": (["false", "true"],),
"show_history_by_prefix": (["true", "false"],),
"embed_workflow": (["true", "false"],),
"show_previews": (["true", "false"],),
},
"hidden": {
"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"
@@ -6718,7 +6719,7 @@ class WAS_Image_Save:
def was_save_images(self, images, output_path='', filename_prefix="ComfyUI", filename_delimiter='_',
extension='png', quality=100, lossless_webp="false", prompt=None, extra_pnginfo=None,
overwrite_mode='false', filename_number_padding=4, show_history='false',
show_history_by_prefix="true", embed_workflow="true"):
show_history_by_prefix="true", embed_workflow="true", show_previews="true"):
delimiter = filename_delimiter
number_padding = filename_number_padding
@@ -6812,7 +6813,7 @@ class WAS_Image_Save:
cstr(f"Image file saved to: {output_file}").msg.print()
if show_history != 'true':
if show_history != 'true' and show_previews == 'true':
results.append({
"filename": file,
"subfolder": base_output,
@@ -6831,17 +6832,8 @@ class WAS_Image_Save:
if overwrite_mode == 'false':
counter += 1
if show_history == 'true':
HDB = WASDatabase(WAS_HISTORY_DATABASE)
conf = getSuiteConfig()
if HDB.catExists("History") and HDB.keyExists("History", "Output_Images"):
history_paths = HDB.get("History", "Output_Images")
else:
history_paths = None
if show_history == 'true':
if show_history == 'true' and show_previews == 'true':
HDB = WASDatabase(WAS_HISTORY_DATABASE)
conf = getSuiteConfig()
if HDB.catExists("History") and HDB.keyExists("History", "Output_Images"):
@@ -6874,7 +6866,10 @@ class WAS_Image_Save:
}
results.append(image_data)
return {"ui": {"images": results}}
if show_previews == 'true':
return {"ui": {"images": results}}
else:
return {"ui": {"images": []}}
# LOAD IMAGE NODE
@@ -8427,8 +8422,9 @@ class WAS_KSampler_Cycle:
"negative": ("CONDITIONING", ),
"latent_image": ("LATENT", ),
"tiled_vae": (["disable", "enable"], ),
"latent_upscale": (["disable","nearest-exact", "bilinear", "area", "bicubic", "bislerp"],),
"upscale_factor": ("FLOAT", {"default":2.0, "min": 0.1, "max": 8.0, "step": 0.1}),
"upscale_steps": ("INT", {"default": 2, "min": 2, "max": 12, "step": 1}),
"upscale_cycles": ("INT", {"default": 2, "min": 2, "max": 12, "step": 1}),
"starting_denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}),
"cycle_denoise": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}),
"scale_denoise": (["enable", "disable"],),
@@ -8436,17 +8432,26 @@ class WAS_KSampler_Cycle:
"vae": ("VAE",),
},
"optional": {
"secondary_model": ("MODEL",),
"secondary_start_cycle": ("INT", {"default": 2, "min": 2, "max": 16, "step": 1}),
"upscale_model": ("UPSCALE_MODEL",),
"processor_model": ("UPSCALE_MODEL",),
"pos_additive": ("CONDITIONING",),
"neg_additive": ("CONDITIONING",),
"pos_add_mode": (["increment", "decrement"],),
"pos_add_strength": ("FLOAT", {"default": 0.25, "min": 0.01, "max": 1.0, "step": 0.01}),
"pos_add_strength_scaling": (["enable", "disable"],),
"pos_add_strength_cutoff": ("FLOAT", {"default": 2.0, "min": 0.01, "max": 10.0, "step": 0.01}),
"neg_add_mode": (["increment", "decrement"],),
"neg_add_strength": ("FLOAT", {"default": 0.25, "min": 0.01, "max": 1.0, "step": 0.01}),
"neg_add_strength_scaling": (["enable", "disable"],),
"neg_add_strength_cutoff": ("FLOAT", {"default": 2.0, "min": 0.01, "max": 10.0, "step": 0.01}),
"sharpen_strength": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}),
"sharpen_radius": ("INT", {"default": 2, "min": 1, "max": 12, "step": 1}),
"steps_scaling": (["enable", "disable"],),
"steps_control": (["decrement", "increment"],),
"steps_scaling_value": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}),
"steps_cutoff": ("INT", {"default": 20, "min": 4, "max": 1000, "step": 1}),
}
}
@@ -8456,17 +8461,22 @@ class WAS_KSampler_Cycle:
CATEGORY = "WAS Suite/Sampling"
def sample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, tiled_vae, upscale_factor,
upscale_steps, starting_denoise, cycle_denoise, scale_denoise, scale_sampling, vae, pos_additive=None, pos_add_strength=None,
pos_add_strength_scaling=None, pos_add_strength_cutoff=None, neg_additive=None, neg_add_strength=None,
neg_add_strength_scaling=None, neg_add_strength_cutoff=None, upscale_model=None, sharpen_strength=0, sharpen_radius=2):
def sample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, tiled_vae, latent_upscale, upscale_factor,
upscale_cycles, starting_denoise, cycle_denoise, scale_denoise, scale_sampling, vae, secondary_model=None, secondary_start_cycle=None,
pos_additive=None, pos_add_mode=None, pos_add_strength=None, pos_add_strength_scaling=None, pos_add_strength_cutoff=None,
neg_additive=None, neg_add_mode=None, neg_add_strength=None, neg_add_strength_scaling=None, neg_add_strength_cutoff=None,
upscale_model=None, processor_model=None, sharpen_strength=0, sharpen_radius=2, steps_scaling=None, steps_control=None,
steps_scaling_value=None, steps_cutoff=None):
upscale_steps = upscale_cycles
division_factor = upscale_steps if steps >= upscale_steps else steps
current_upscale_factor = upscale_factor ** (1 / (division_factor - 1))
tiled_vae = (tiled_vae == "enable")
scale_denoise = (scale_denoise == "enable")
pos_add_strength_scaling = (pos_add_strength_scaling == "enable")
neg_add_strength_scaling = (neg_add_strength_scaling == "enable")
steps_scaling = (steps_scaling == "enable")
run_model = model
WTools = WAS_Tools_Class()
@@ -8478,46 +8488,106 @@ class WAS_KSampler_Cycle:
( round(cycle_denoise * (2 ** (-(i-1))), 2) if i > 0 else cycle_denoise )
if i > 0 else starting_denoise
)
if i > (secondary_start_cycle - 1):
run_model = secondary_model
denoise = cycle_denoise
model = None
if steps_scaling and i > 0:
steps = (
steps + steps_scaling_value
if steps_control == 'increment'
else steps - steps_scaling_value
)
steps = (
( steps
if steps <= steps_cutoff
else steps_cutoff )
if steps_control == 'increment'
else ( steps
if steps >= steps_cutoff
else steps_cutoff )
)
print("Steps:", steps)
print("Denoise:", denoise)
if pos_additive:
pos_strength = (
( round(pos_add_strength * (2 ** (i-1)), 2)
if i > 0
else pos_add_strength )
if pos_add_strength_scaling
else pos_add_strength
)
pos_strength = (
pos_add_strength_cutoff
if pos_strength > pos_add_strength_cutoff
else pos_strength
)
pos_strength = 0. if i == 0 else pos_add_strength
if pos_add_mode == 'increment':
pos_strength = (
( round(pos_add_strength * (2 ** (i-1)), 2)
if i > 0
else pos_add_strength )
if pos_add_strength_scaling
else pos_add_strength
)
pos_strength = (
pos_add_strength_cutoff
if pos_strength > pos_add_strength_cutoff
else pos_strength
)
else:
pos_strength = (
( round(pos_add_strength / (2 ** (i-1)), 2)
if i > 0
else pos_add_strength )
if pos_add_strength_scaling
else pos_add_strength
)
pos_strength = (
pos_add_strength_cutoff
if pos_strength < pos_add_strength_cutoff
else pos_strength
)
comb = nodes.ConditioningAverage()
positive = comb.addWeighted(pos_additive, positive, pos_strength)[0]
print("Positive Additive Strength:", pos_strength)
if neg_additive:
neg_strength = 0. if i == 0 else pos_add_strength
neg_strength = (
( round(neg_add_strength * (2 ** (i-1)), 2)
if i > 0
else neg_add_strength )
if neg_add_strength_scaling
else neg_add_strength
)
neg_strength = (
neg_add_strength_cutoff
if neg_strength > neg_add_strength_cutoff
else neg_strength
)
if neg_add_mode == 'increment':
neg_strength = (
( round(neg_add_strength * (2 ** (i-1)), 2)
if i > 0
else neg_add_strength )
if neg_add_strength_scaling
else neg_add_strength
)
neg_strength = (
neg_add_strength_cutoff
if neg_strength > neg_add_strength_cutoff
else neg_strength
)
else:
neg_strength = (
( round(neg_add_strength / (2 ** (i-1)), 2)
if i > 0
else neg_add_strength )
if neg_add_strength_scaling
else neg_add_strength
)
neg_strength = (
neg_add_strength_cutoff
if neg_strength < neg_add_strength_cutoff
else neg_strength
)
comb = nodes.ConditioningAverage()
negative = comb.addWeighted(neg_additive, negative, neg_strength)[0]
print("Negative Additive Strength:", neg_strength)
if i != 0:
latent_image = latent_image_result
samples = nodes.common_ksampler(
model,
run_model,
seed,
steps,
cfg,
@@ -8531,66 +8601,90 @@ class WAS_KSampler_Cycle:
# Upscale
if i < division_factor - 1:
if upscale_model:
resample_filters = {
'nearest': 0,
'bilinear': 2,
'bicubic': 3,
'lanczos': 1
}
import comfy_extras.nodes_upscale_model
upscaler = comfy_extras.nodes_upscale_model.ImageUpscaleWithModel()
tensors = None
upscaler = None
resample_filters = {
'nearest': 0,
'bilinear': 2,
'bicubic': 3,
'lanczos': 1
}
if latent_upscale == 'disable':
if tiled_vae:
tensors = vae.decode_tiled(samples[0]['samples'])
else:
tensors = vae.decode(samples[0]['samples'])
original_size = tensor2pil(tensors[0]).size
new_width = round(original_size[0] * current_upscale_factor)
new_height = round(original_size[1] * current_upscale_factor)
new_width = int(round(new_width / 8) * 8)
new_height = int(round(new_height / 8) * 8)
upscaled_tensors = upscaler.upscale(upscale_model, tensors)
tensor_images = []
for tensor in upscaled_tensors[0]:
tensor = pil2tensor(tensor2pil(tensor).resize((new_width, new_height), Image.Resampling(resample_filters[scale_sampling])))
size = max(tensor2pil(tensor).size)
if sharpen_strength != 0.0:
if size > 1024:
sharpen_radius *= 2
tensor = pil2tensor(self.unsharp_filter(tensor2pil(tensor), sharpen_radius, sharpen_strength))
tensor_images.append(tensor)
tensors = vae.decode(samples[0]['samples'])
tensor_images = torch.cat(tensor_images, dim=0)
if processor_model or upscale_model:
import comfy_extras.nodes_upscale_model
upscaler = comfy_extras.nodes_upscale_model.ImageUpscaleWithModel()
if processor_model:
original_size = tensor2pil(tensors[0]).size
upscaled_tensors = upscaler.upscale(upscale_model, tensors)
tensor_images = []
for tensor in upscaled_tensors[0]:
pil = tensor2pil(tensor)
if pil.size[0] != original_size[0] or pil.size[1] != original_size[1]:
pil = pil.resize((original_size[0], original_size[1]), Image.Resampling(resample_filters[scale_sampling]))
if sharpen_strength != 0.0:
pil = self.unsharp_filter(pil, sharpen_radius, sharpen_strength)
tensor_images.append(pil2tensor(pil))
tensor_images = torch.cat(tensor_images, dim=0)
if upscale_model:
if processor_model:
tensors = tensor_images
del tensor_images
original_size = tensor2pil(tensors[0]).size
new_width = round(original_size[0] * current_upscale_factor)
new_height = round(original_size[1] * current_upscale_factor)
new_width = int(round(new_width / 32) * 32)
new_height = int(round(new_height / 32) * 32)
upscaled_tensors = upscaler.upscale(upscale_model, tensors)
tensor_images = []
for tensor in upscaled_tensors[0]:
tensor = pil2tensor(tensor2pil(tensor).resize((new_width, new_height), Image.Resampling(resample_filters[scale_sampling])))
size = max(tensor2pil(tensor).size)
if sharpen_strength != 0.0:
tensor = pil2tensor(self.unsharp_filter(tensor2pil(tensor), sharpen_radius, sharpen_strength))
tensor_images.append(tensor)
tensor_images = torch.cat(tensor_images, dim=0)
else:
tensor_images = []
scale = WAS_Image_Rescale()
for tensor in tensors:
tensor = scale.image_rescale(tensor.unsqueeze(0), "rescale", "true", scale_sampling, current_upscale_factor, 0, 0)[0]
size = max(tensor2pil(tensor).size)
if sharpen_strength > 0.0:
tensor = pil2tensor(self.unsharp_filter(tensor2pil(tensor), sharpen_radius, sharpen_strength))
tensor_images.append(tensor)
tensor_images = torch.cat(tensor_images, dim=0)
if tiled_vae:
latent_image_result = {"samples": vae.encode_tiled(self.vae_encode_crop_pixels(tensor_images)[:,:,:,:3])}
else:
latent_image_result = {"samples": vae.encode(self.vae_encode_crop_pixels(tensor_images)[:,:,:,:3])}
else:
if tiled_vae:
tensors = vae.decode_tiled(samples[0]['samples'])
else:
tensors = vae.decode(samples[0]['samples'])
tensor_images = []
scale = WAS_Image_Rescale()
for tensor in tensors:
tensor = scale.image_rescale(tensor.unsqueeze(0), "rescale", "true", scale_sampling, current_upscale_factor, 0, 0)[0]
size = max(tensor2pil(tensor).size)
if sharpen_strength > 0.0:
if size > 1024:
sharpen_radius *= 2
tensor = pil2tensor(self.unsharp_filter(tensor2pil(tensor), sharpen_radius, sharpen_strength))
tensor_images.append(tensor)
tensor_images = torch.cat(tensor_images, dim=0)
if tiled_vae:
latent_image_result = {"samples": vae.encode_tiled(self.vae_encode_crop_pixels(tensor_images)[:,:,:,:3])}
else:
latent_image_result = {"samples": vae.encode(self.vae_encode_crop_pixels(tensor_images)[:,:,:,:3])}
else:
upscaler = nodes.LatentUpscaleBy()
latent_image_result = upscaler.upscale(samples[0], latent_upscale, current_upscale_factor)
else:
latent_image_result = samples[0]
return (latent_image_result, )