Files
2024-05-15 08:09:49 +08:00

2.7 KiB
Raw Permalink Blame History

Documentation

ControlNetApply 类中的 'apply_controlnet' 方法旨在将控制信号集成到神经网络的处理流程中。它接收条件数据、控制网络、图像和一个强度参数,以调节控制网络对图像的影响。该方法的目的是使用控制网络的指导增强图像,确保输出的条件反映了基于指定强度的预期调整。

Input types

Required

  • conditioning
    • ‘conditioning’参数对于节点的操作至关重要,因为它为控制网络提供了应用其修改的初始状态或上下文。这是一个关键的输入,它直接影响图像处理的结果。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor
  • control_net
    • ‘control_net’参数定义了将用于指导对图像进行修改的网络。它是一个必需的输入,在形成节点处理的最终输出中起着核心作用。
    • Comfy dtype: CONTROL_NET
    • Python dtype: torch.nn.Module
  • image
    • ‘image’参数是控制网络修改的对象。它代表了将根据提供的控制信号进行增强或更改的数据。
    • Comfy dtype: IMAGE
    • Python dtype: torch.Tensor

Optional

  • strength
    • ‘strength’参数调整控制网络对图像影响的强度。它是一个可选输入,允许微调应用于图像的修改程度。
    • Comfy dtype: FLOAT
    • Python dtype: float

Output types

  • conditioning
    • 输出 'conditioning' 表示在应用控制网络的影响后的修改状态。它很重要,因为它携带了对原始图像数据所做的最终调整。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor

Usage tips

  • Infra type: GPU

Source code

class ControlNetApply:

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'conditioning': ('CONDITIONING',), 'control_net': ('CONTROL_NET',), 'image': ('IMAGE',), 'strength': ('FLOAT', {'default': 1.0, 'min': 0.0, 'max': 10.0, 'step': 0.01})}}
    RETURN_TYPES = ('CONDITIONING',)
    FUNCTION = 'apply_controlnet'
    CATEGORY = 'conditioning'

    def apply_controlnet(self, conditioning, control_net, image, strength):
        if strength == 0:
            return (conditioning,)
        c = []
        control_hint = image.movedim(-1, 1)
        for t in conditioning:
            n = [t[0], t[1].copy()]
            c_net = control_net.copy().set_cond_hint(control_hint, strength)
            if 'control' in t[1]:
                c_net.set_previous_controlnet(t[1]['control'])
            n[1]['control'] = c_net
            n[1]['control_apply_to_uncond'] = True
            c.append(n)
        return (c,)