Files
CavinHuang-comfyui-nodes-docs/docs/AV_ControlNetEfficientLoaderAdvanced.md
2024-07-04 11:34:32 +08:00

5.1 KiB

Documentation

  • Class name: AV_ControlNetEfficientLoaderAdvanced
  • Category: Art Venture/Loaders
  • Output node: False

AV_ControlNetEfficientLoaderAdvanced节点是ControlNet加载器的高级版本,旨在高效加载和应用ControlNet配置,用于增强图像处理和生成任务。它扩展了基础加载器的功能,提供了更复杂的控制和优化选项,以处理和应用ControlNet模型。

Input types

Required

  • control_net_name
    • 指定要加载的ControlNet的名称。此参数对于识别要应用的ControlNet模型至关重要,直接影响图像处理或生成过程的结果。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str
  • positive
    • ControlNet的正面条件输入,表示要在图像中增强或保持的所需属性或特征。
    • Comfy dtype: CONDITIONING
    • Python dtype: List[Tuple[str, Dict]]
  • negative
    • ControlNet的负面条件输入,表示要在图像中减弱或移除的属性或特征。
    • Comfy dtype: CONDITIONING
    • Python dtype: List[Tuple[str, Dict]]
  • image
    • 要由ControlNet处理的图像,作为应用条件效果的基础。
    • Comfy dtype: IMAGE
    • Python dtype: Any
  • strength
    • 决定ControlNet对图像影响的强度,允许对处理进行精细调节。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • start_percent
    • 指定效果应用的起始百分比,实现ControlNet的分阶段或渐进应用。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • end_percent
    • 指定效果应用的结束百分比,允许对ControlNet影响进行受控结束。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • preprocessor
    • 选择在应用ControlNet之前对图像进行预处理的处理器,影响最终结果。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str

Optional

  • control_net_override
    • 允许覆盖选定的ControlNet模型。此参数提供了动态选择不同ControlNet模型的灵活性,可能增强节点适应各种场景的能力。
    • Comfy dtype: STRING
    • Python dtype: str
  • timestep_keyframe
    • 定义ControlNet应用的特定时间步或关键帧。此参数能够精确控制ControlNet效果的时机,允许更有针对性和有效的图像处理。
    • Comfy dtype: TIMESTEP_KEYFRAME
    • Python dtype: Optional[str]
  • resolution
    • 定义要处理的图像的分辨率,影响ControlNet应用的细节和质量。
    • Comfy dtype: INT
    • Python dtype: int
  • enabled
    • 启用或禁用ControlNet的应用,提供了在必要时绕过处理的机制。
    • Comfy dtype: BOOLEAN
    • Python dtype: bool

Output types

  • positive
    • ControlNet应用后修改的正面条件,反映了增强或保持的属性。
    • Comfy dtype: CONDITIONING
    • Python dtype: List[Tuple[str, Dict]]
  • negative
    • ControlNet应用后修改的负面条件,反映了减弱或移除的属性。
    • Comfy dtype: CONDITIONING
    • Python dtype: List[Tuple[str, Dict]]

Usage tips

  • Infra type: CPU
  • Common nodes: unknown

Source code

class AVControlNetEfficientLoaderAdvanced(ControlNetApplyAdvanced):
    controlnets = folder_paths.get_filename_list("controlnet")
    preprocessors = list(control_net_preprocessors.keys())

    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "control_net_name": (["None"] + s.controlnets,),
                "positive": ("CONDITIONING",),
                "negative": ("CONDITIONING",),
                "image": ("IMAGE",),
                "strength": (
                    "FLOAT",
                    {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01},
                ),
                "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}),
                "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}),
                "preprocessor": (["None"] + s.preprocessors,),
            },
            "optional": {
                "control_net_override": ("STRING", {"default": "None"}),
                "timestep_keyframe": ("TIMESTEP_KEYFRAME",),
                "resolution": ("INT", {"default": 512, "min": 64, "max": 2048, "step": 64}),
                "enabled": ("BOOLEAN", {"default": True}),
            },
        }

    RETURN_TYPES = ("CONDITIONING", "CONDITIONING")
    RETURN_NAMES = ("positive", "negative")
    FUNCTION = "load_controlnet"
    CATEGORY = "Art Venture/Loaders"

    def load_controlnet(
        self,
        control_net_name,
        positive,
        negative,
        image,
        strength,
        start_percent,
        end_percent,
        preprocessor,
        control_net_override="None",
        timestep_keyframe=None,
        resolution=512,
        enabled=True,
    ):
        if not enabled:
            return (positive, negative)

        control_net = load_controlnet(control_net_name, control_net_override, timestep_keyframe=timestep_keyframe)
        if control_net is None:
            return (positive, negative)

        image = apply_preprocessor(image, preprocessor, resolution=resolution)

        return super().apply_controlnet(positive, negative, control_net, image, strength, start_percent, end_percent)