diff --git a/nodes.py b/nodes.py index 9fb0991..62a7de1 100644 --- a/nodes.py +++ b/nodes.py @@ -783,6 +783,40 @@ class AdainFilterLatent: latents_copy["samples"] = torch.lerp(latents["samples"], t, factor) return (latents_copy,) +class SharpenFilterLatent: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "latents": ("LATENT", ), + "filter_size": ("INT", {"default": 1, "min": 1, "max": 128}), + "factor": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "round": 0.01}), + }, + } + + RETURN_TYPES = ("LATENT",) + FUNCTION = "filter_latent" + + CATEGORY = "latent/filters" + + def filter_latent(self, latents, filter_size, factor): + latents_copy = copy.deepcopy(latents) + t = latents_copy["samples"].movedim(1, -1) # [B x C x H x W] -> [B x H x W x C] + + d = filter_size * 2 + 1 + t_blurred = cv_blur_tensor(t, d, d) + + t = t - t_blurred + t = t * factor + t = t + t_blurred + + t = t.movedim(-1, 1) # [B x H x W x C] -> [B x C x H x W] + latents_copy["samples"] = t + return (latents_copy,) + class AdainImage: def __init__(self): pass @@ -1673,6 +1707,7 @@ NODE_CLASS_MAPPINGS = { "InstructPixToPixConditioningAdvanced": InstructPixToPixConditioningAdvanced, "LatentNormalizeShuffle": LatentNormalizeShuffle, "PrintSigmas": PrintSigmas, + "SharpenFilterLatent": SharpenFilterLatent, } NODE_DISPLAY_NAME_MAPPINGS = { @@ -1714,4 +1749,5 @@ NODE_DISPLAY_NAME_MAPPINGS = { "InstructPixToPixConditioningAdvanced": "InstructPixToPixConditioningAdvanced", "LatentNormalizeShuffle": "LatentNormalizeShuffle", "PrintSigmas": "PrintSigmas", + "SharpenFilterLatent": "Sharpen Filter (Latent)", } \ No newline at end of file