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

4.4 KiB

Documentation

NewLayer节点旨在根据特定的位置和缩放属性操作和组合图像层。它允许创建一个分层结构,其中每个层可以单独定位并根据提供的参数进行缩放。节点的功能集中在通过精确控制它们的外观和排列,增强视觉展示,从而实现多个图像的叠加。

Input types

Required

  • x
    • 参数'x'指定了画布内层的水平位置。它至关重要,因为它决定了层从画布左侧的确切放置位置,影响整体构图。
    • Comfy dtype: INT
    • Python dtype: int
  • y
    • 参数'y'定义了画布内层的垂直位置。它是决定层从画布顶部如何对齐的关键因素,影响最终的视觉效果。
    • Comfy dtype: INT
    • Python dtype: int
  • width
    • 参数'width'设置层的宽度。它在层的缩放中起着重要作用,允许控制视觉内容的水平尺寸。
    • Comfy dtype: INT
    • Python dtype: int
  • height
    • 参数'height'决定了层的垂直尺寸。它对于控制层在垂直轴上的缩放至关重要,影响层的视觉突出程度。
    • Comfy dtype: INT
    • Python dtype: int
  • z_index
    • 参数'z_index'建立层相对于其他层的堆叠顺序。值越高,表示该层将放置在其他层的前面,这对于管理层的可见性和深度至关重要。
    • Comfy dtype: INT
    • Python dtype: int
  • scale_option
    • 参数'scale_option'决定如何缩放层。它对于保持纵横比或均匀调整层的大小很重要,这可以显著改变视觉输出。
    • Comfy dtype: COMBO['width', 'height', 'overall']
    • Python dtype: str
  • image
    • 参数'image'是层的视觉内容来源。它是基本的,因为它提供了将在画布内操作和显示的实际像素。
    • Comfy dtype: IMAGE
    • Python dtype: PIL.Image.Image
  • mask
    • 可选参数'mask'可以用来定义图像中应该可见或被修改的特定区域。它为图像操作过程增加了复杂性,允许对最终输出进行创造性控制。
    • Comfy dtype: MASK
    • Python dtype: torch.Tensor
  • layers
    • 可选参数'layers'允许将额外的现有层包含到组合中。这对于在现有视觉结构上构建或整合多个视觉元素非常有用。
    • Comfy dtype: LAYER
    • Python dtype: List[Dict[str, Union[int, str, torch.Tensor, PIL.Image.Image]]]
  • canvas
    • 可选参数'canvas'提供了一个基础图像,层将被放置在该图像上。它对于设置新层将被整合的初始视觉环境很重要。
    • Comfy dtype: IMAGE
    • Python dtype: PIL.Image.Image

Output types

  • layers
    • 输出'layers'是代表视觉元素最终组合的层对象集合。它封装了节点操作的结果,详细说明了分层图像的结构和外观。
    • Comfy dtype: LAYER
    • Python dtype: Tuple[List[Dict[str, Union[int, str, torch.Tensor, PIL.Image.Image]]], ...]

Usage tips

  • Infra type: CPU

Source code

class NewLayer:

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'x': ('INT', {'default': 0, 'min': -1024, 'max': 8192, 'step': 1, 'display': 'number'}), 'y': ('INT', {'default': 0, 'min': -1024, 'max': 8192, 'step': 1, 'display': 'number'}), 'width': ('INT', {'default': 512, 'min': 1, 'max': 8192, 'step': 1, 'display': 'number'}), 'height': ('INT', {'default': 512, 'min': 1, 'max': 8192, 'step': 1, 'display': 'number'}), 'z_index': ('INT', {'default': 0, 'min': 0, 'max': 100, 'step': 1, 'display': 'number'}), 'scale_option': (['width', 'height', 'overall'],), 'image': ('IMAGE',)}, 'optional': {'mask': ('MASK', {'default': None}), 'layers': ('LAYER', {'default': None}), 'canvas': ('IMAGE', {'default': None})}}
    RETURN_TYPES = ('LAYER',)
    RETURN_NAMES = ('layers',)
    FUNCTION = 'run'
    CATEGORY = '♾️Mixlab/Layer'
    INPUT_IS_LIST = True
    OUTPUT_IS_LIST = (True,)

    def run(self, x, y, width, height, z_index, scale_option, image, mask=None, layers=None, canvas=None):
        if mask == None:
            im = tensor2pil(image[0])
            mask = im.convert('L')
            mask = pil2tensor(mask)
        else:
            mask = mask[0]
        layer_n = [{'x': x[0], 'y': y[0], 'width': width[0], 'height': height[0], 'z_index': z_index[0], 'scale_option': scale_option[0], 'image': image[0], 'mask': mask}]
        if layers != None:
            layer_n = layer_n + layers
        return (layer_n,)