Files
CavinHuang-comfyui-nodes-docs/docs/CreateFadeMask.md
T
2024-05-26 20:35:16 +08:00

4.9 KiB
Raw Blame History

Documentation

CreateFadeMask 节点旨在生成一系列渐变遮罩,平滑地从一种不透明度过渡到另一种。它利用插值技术创建视觉上吸引人的渐变效果,特别适用于视觉效果和图像处理应用。

Input types

Required

  • invert
    • ‘invert’参数决定是否需要反转渐变遮罩,这对于某些需要反转不透明度过渡的视觉效果至关重要。
    • Comfy dtype: BOOLEAN
    • Python dtype: bool
  • frames
    • ‘frames’参数指定渐变遮罩序列中的帧数,这直接影响渐变效果的持续时间和间隔。
    • Comfy dtype: INT
    • Python dtype: int
  • width
    • ‘width’参数设置渐变遮罩中每个帧的宽度,影响输出的整体尺寸。
    • Comfy dtype: INT
    • Python dtype: int
  • height
    • ‘height’参数定义渐变遮罩中每个帧的高度,这对于保持输出的纵横比和视觉一致性至关重要。
    • Comfy dtype: INT
    • Python dtype: int
  • interpolation
    • ‘interpolation’参数选择用于渐变效果的插值类型,这可以显著改变不透明度级别之间过渡的外观。
    • Comfy dtype: COMBO['linear', 'ease_in', 'ease_out', 'ease_in_out']
    • Python dtype: str
  • start_level
    • ‘start_level’参数设定渐变遮罩的初始不透明度级别,这是确定渐变效果起始点的关键因素。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • midpoint_level
    • ‘midpoint_level’参数指示渐变遮罩序列中点的不透明度级别,有助于控制过渡中心处的渐变速度。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • end_level
    • ‘end_level’参数决定渐变遮罩的最终不透明度级别,这决定了渐变效果如何结束。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • midpoint_frame
    • ‘midpoint_frame’参数指定渐变效果中点发生的帧,允许对过渡的时机进行精确控制。
    • Comfy dtype: INT
    • Python dtype: int

Output types

  • mask
    • 输出‘mask’是一系列渐变遮罩,它们代表了从开始级别到结束级别的不透明度过渡,根据指定的参数创建。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor

Usage tips

  • Infra type: CPU

Source code

class CreateFadeMask:
    RETURN_TYPES = ('MASK',)
    FUNCTION = 'createfademask'
    CATEGORY = 'KJNodes/deprecated'

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'invert': ('BOOLEAN', {'default': False}), 'frames': ('INT', {'default': 2, 'min': 2, 'max': 255, 'step': 1}), 'width': ('INT', {'default': 256, 'min': 16, 'max': 4096, 'step': 1}), 'height': ('INT', {'default': 256, 'min': 16, 'max': 4096, 'step': 1}), 'interpolation': (['linear', 'ease_in', 'ease_out', 'ease_in_out'],), 'start_level': ('FLOAT', {'default': 1.0, 'min': 0.0, 'max': 1.0, 'step': 0.01}), 'midpoint_level': ('FLOAT', {'default': 0.5, 'min': 0.0, 'max': 1.0, 'step': 0.01}), 'end_level': ('FLOAT', {'default': 0.0, 'min': 0.0, 'max': 1.0, 'step': 0.01}), 'midpoint_frame': ('INT', {'default': 0, 'min': 0, 'max': 4096, 'step': 1})}}

    def createfademask(self, frames, width, height, invert, interpolation, start_level, midpoint_level, end_level, midpoint_frame):

        def ease_in(t):
            return t * t

        def ease_out(t):
            return 1 - (1 - t) * (1 - t)

        def ease_in_out(t):
            return 3 * t * t - 2 * t * t * t
        batch_size = frames
        out = []
        image_batch = np.zeros((batch_size, height, width), dtype=np.float32)
        if midpoint_frame == 0:
            midpoint_frame = batch_size // 2
        for i in range(batch_size):
            if i <= midpoint_frame:
                t = i / midpoint_frame
                if interpolation == 'ease_in':
                    t = ease_in(t)
                elif interpolation == 'ease_out':
                    t = ease_out(t)
                elif interpolation == 'ease_in_out':
                    t = ease_in_out(t)
                color = start_level - t * (start_level - midpoint_level)
            else:
                t = (i - midpoint_frame) / (batch_size - midpoint_frame)
                if interpolation == 'ease_in':
                    t = ease_in(t)
                elif interpolation == 'ease_out':
                    t = ease_out(t)
                elif interpolation == 'ease_in_out':
                    t = ease_in_out(t)
                color = midpoint_level - t * (midpoint_level - end_level)
            color = np.clip(color, 0, 255)
            image = np.full((height, width), color, dtype=np.float32)
            image_batch[i] = image
        output = torch.from_numpy(image_batch)
        mask = output
        out.append(mask)
        if invert:
            return (1.0 - torch.cat(out, dim=0),)
        return (torch.cat(out, dim=0),)