3.9 KiB
3.9 KiB
Documentation
- Class name: IPAdapterNoise
- Category: ipadapter/utils
- Output node: False
- Repo Ref: https://github.com/cubiq/ComfyUI_IPAdapter_plus.git
IPAdapterNoise节点旨在向图像中引入受控噪声,可用于数据增强或增强模型鲁棒性等多种目的。它提供了多种噪声类型的选择,并允许调整噪声强度,因此为不同用例提供了灵活的解决方案。
Input types
Required
- type
- “type”参数决定了要生成的噪声类型,这显著影响了噪声应用的结果。这是一个关键的决策点,因为不同的噪声类型有不同的功能,并以不同的方式影响图像。
- Comfy dtype: COMBO[fade, dissolve, gaussian, shuffle]
- Python dtype: str
- strength
- “strength”参数调整噪声的强度,直接影响图像的改变程度。这是一个重要的参数,它允许用户调整噪声效果以满足他们的具体需求。
- Comfy dtype: FLOAT
- Python dtype: float
Optional
- blur
- “blur”参数对噪声应用高斯模糊,这可以帮助在某些应用中平滑噪声。它在噪声的最终视觉结果中发挥作用,提供了进一步细化噪声纹理的手段。
- Comfy dtype: INT
- Python dtype: int
- image_optional
- “image_optional”参数允许提供一个可选的图像作为噪声生成的基础。这个参数很重要,因为它使得噪声可以应用于特定图像,而不是默认的空白图像,提供了更大的灵活性和定制化。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
Output types
- noise
- “noise”输出是IPAdapterNoise节点的主要结果,代表了引入噪声的图像。它是一个关键组件,因为它承载了应用的噪声效果,准备在后续过程或分析中使用。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
Usage tips
- Infra type: CPU
Source code
class IPAdapterNoise:
@classmethod
def INPUT_TYPES(s):
return {'required': {'type': (['fade', 'dissolve', 'gaussian', 'shuffle'],), 'strength': ('FLOAT', {'default': 1.0, 'min': 0, 'max': 1, 'step': 0.05}), 'blur': ('INT', {'default': 0, 'min': 0, 'max': 32, 'step': 1})}, 'optional': {'image_optional': ('IMAGE',)}}
RETURN_TYPES = ('IMAGE',)
FUNCTION = 'make_noise'
CATEGORY = 'ipadapter/utils'
def make_noise(self, type, strength, blur, image_optional=None):
if image_optional is None:
image = torch.zeros([1, 224, 224, 3])
else:
transforms = T.Compose([T.CenterCrop(min(image_optional.shape[1], image_optional.shape[2])), T.Resize((224, 224), interpolation=T.InterpolationMode.BICUBIC, antialias=True)])
image = transforms(image_optional.permute([0, 3, 1, 2])).permute([0, 2, 3, 1])
seed = int(torch.sum(image).item()) % 1000000007
torch.manual_seed(seed)
if type == 'fade':
noise = torch.rand_like(image)
noise = image * (1 - strength) + noise * strength
elif type == 'dissolve':
mask = (torch.rand_like(image) < strength).float()
noise = torch.rand_like(image)
noise = image * (1 - mask) + noise * mask
elif type == 'gaussian':
noise = torch.randn_like(image) * strength
noise = image + noise
elif type == 'shuffle':
transforms = T.Compose([T.ElasticTransform(alpha=75.0, sigma=(1 - strength) * 3.5), T.RandomVerticalFlip(p=1.0), T.RandomHorizontalFlip(p=1.0)])
image = transforms(image.permute([0, 3, 1, 2])).permute([0, 2, 3, 1])
noise = torch.randn_like(image) * (strength * 0.75)
noise = image * (1 - noise) + noise
del image
noise = torch.clamp(noise, 0, 1)
if blur > 0:
if blur % 2 == 0:
blur += 1
noise = T.functional.gaussian_blur(noise.permute([0, 3, 1, 2]), blur).permute([0, 2, 3, 1])
return (noise,)