import torch class SwarmLatentBlendMasked: @classmethod def INPUT_TYPES(s): return { "required": { "samples0": ("LATENT",), "samples1": ("LATENT",), "mask": ("MASK",), "blend_factor": ("FLOAT", { "default": 0.5, "min": 0, "max": 1, "step": 0.01, "tooltip": "The blend factor between the two samples. 0 means entirely use sample0, 1 means entirely sample1, 0.5 means 50/50 of each." }), } } RETURN_TYPES = ("LATENT",) FUNCTION = "blend" CATEGORY = "SwarmUI/images" DESCRIPTION = "Blends two latent images together within a masked region." def blend(self, samples0, samples1, blend_factor, mask): samples_out = samples0.copy() samples0 = samples0["samples"] samples1 = samples1["samples"] while mask.ndim < 4: mask = mask.unsqueeze(0) if samples0.shape != samples1.shape: samples1 = torch.nn.functional.interpolate(samples1, size=(samples0.shape[2], samples0.shape[3]), mode="bicubic") if samples0.shape != mask.shape: mask = torch.nn.functional.interpolate(mask, size=(samples0.shape[2], samples0.shape[3]), mode="bicubic") samples_blended = samples0 * (1 - mask * blend_factor) + samples1 * (mask * blend_factor) samples_out["samples"] = samples_blended return (samples_out,) NODE_CLASS_MAPPINGS = { "SwarmLatentBlendMasked": SwarmLatentBlendMasked, }