Files
CavinHuang-comfyui-nodes-docs/docs/CR Apply Multi-ControlNet.md
2024-05-26 20:35:16 +08:00

3.9 KiB

Documentation

CR_ApplyControlNetStack节点旨在将一系列ControlNet应用于一对基础图像,增强生成过程的控制。它根据用户定义的参数管理多个ControlNet的集成,确保对最终输出进行细粒度控制。

Input types

Required

  • base_positive
    • base_positive参数是一个关键输入,代表正面条件图像。它被用作参考,以指导ControlNet的应用,显著影响生成输出的方向和质量。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor
  • base_negative
    • base_negative参数作为负面条件图像,通过与base_positive图像形成对比,帮助细化生成过程。它在引导输出远离不希望的特征方面起着至关重要的作用。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor
  • switch
    • switch参数是一个开关,决定是否激活ControlNet堆栈应用。它对于启用或禁用ControlNet对生成过程的影响至关重要。
    • Comfy dtype: COMBO['Off', 'On']
    • Python dtype: str

Optional

  • controlnet_stack
    • controlnet_stack参数是一个可选输入,一旦提供,允许将预定义的ControlNet集合应用于基础图像。堆栈中的每个ControlNet都有助于整体条件化,增强了生成的特异性和精确度。
    • Comfy dtype: CONTROL_NET_STACK
    • Python dtype: List[Tuple[str, torch.Tensor, float, float, float]]

Output types

  • base_pos
    • base_pos输出是在应用ControlNet堆栈后修改的正面条件图像。它包含了所有应用的ControlNet的集体效应,代表了生成过程的精细指南。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor
  • base_neg
    • base_neg输出对应于在应用ControlNet堆栈期间修改的负面条件图像。它在塑造最终输出方面起着工具性作用,通过引导它避免不希望的特性。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor
  • show_help
    • show_help输出提供了一个URL,链接到CR_ApplyControlNetStack节点的文档,以获得更多帮助和使用指导。对于寻求有关节点功能和用法的更多信息的用户来说,这是一个有用的资源。
    • Comfy dtype: STRING
    • Python dtype: str

Usage tips

  • Infra type: GPU

Source code

class CR_ApplyControlNetStack:

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'base_positive': ('CONDITIONING',), 'base_negative': ('CONDITIONING',), 'switch': (['Off', 'On'],), 'controlnet_stack': ('CONTROL_NET_STACK',)}}
    RETURN_TYPES = ('CONDITIONING', 'CONDITIONING', 'STRING')
    RETURN_NAMES = ('base_pos', 'base_neg', 'show_help')
    FUNCTION = 'apply_controlnet_stack'
    CATEGORY = icons.get('Comfyroll/ControlNet')

    def apply_controlnet_stack(self, base_positive, base_negative, switch, controlnet_stack=None):
        show_help = 'https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes/wiki/ControlNet-Nodes#cr-apply-multi-controlnet-stack'
        if switch == 'Off':
            return (base_positive, base_negative, show_help)
        if controlnet_stack is not None:
            for controlnet_tuple in controlnet_stack:
                (controlnet_name, image, strength, start_percent, end_percent) = controlnet_tuple
                if type(controlnet_name) == str:
                    controlnet_path = folder_paths.get_full_path('controlnet', controlnet_name)
                    controlnet = comfy.sd.load_controlnet(controlnet_path)
                else:
                    controlnet = controlnet_name
                controlnet_conditioning = ControlNetApplyAdvanced().apply_controlnet(base_positive, base_negative, controlnet, image, strength, start_percent, end_percent)
                (base_positive, base_negative) = (controlnet_conditioning[0], controlnet_conditioning[1])
        return (base_positive, base_negative, show_help)