From 21a3656c2753b50ea83f9d002edbd1bb1eda5f80 Mon Sep 17 00:00:00 2001 From: Albert Trott Date: Mon, 29 Jul 2024 09:29:36 +0200 Subject: [PATCH] feat: add opacity feature --- __init__.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/__init__.py b/__init__.py index e730431..cd70fe7 100644 --- a/__init__.py +++ b/__init__.py @@ -12,6 +12,11 @@ class ImageBlender: "required": { "base_image": ("IMAGE",), "blend_image": ("IMAGE",), + "opacity": ("FLOAT", { + "default": 1, + "min": 0.0, + "max": 1.0 + }), "blend_mode": ( [mode.value for mode in BlendModes], {"default": BlendModes.NORMAL.value} @@ -26,12 +31,10 @@ class ImageBlender: FUNCTION = "blend" CATEGORY = "ImageBlender" - def blend(self, base_image: torch.Tensor, blend_image: torch.Tensor, blend_mode: str, mask: torch.Tensor = None) -> tuple: + def blend(self, base_image: torch.Tensor, blend_image: torch.Tensor, opacity: float, blend_mode: str, mask: torch.Tensor = None) -> tuple: blend_function = self.blend_functions.get(BlendModes(blend_mode), lambda x, y: x) result = blend_function(base_image, blend_image) - print(mask.shape) - if mask is not None: # Ensure mask has the same number of channels as the images if mask.dim() == 3: @@ -42,6 +45,9 @@ class ImageBlender: else: result = result * mask + base_image * (1 - mask) + # Apply opacity + result = base_image * opacity + result * (1 - opacity) + # Normalize the result result = torch.clamp(result, 0, 1) return (result,)