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

3.2 KiB

Documentation

AV_ControlNetPreprocessor节点旨在为ControlNet框架内的进一步处理或分析准备图像。它允许对图像应用各种预处理技术,包括分辨率调整和特定预处理器的选择,以优化它们以满足ControlNet的要求。

Input types

Required

  • image
    • 需要预处理的输入图像。这是进行预处理操作的主要数据。
    • Comfy dtype: IMAGE
    • Python dtype: ImageType
  • preprocessor
    • 指定要应用于输入图像的预处理技术。它可以是几个预定义的预处理器之一或自定义预处理器,影响预处理结果。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str
  • sd_version
    • 指示要使用的Stable Diffusion的具体版本,影响预处理如何与模型的要求保持一致。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str

Optional

  • resolution
    • 输出图像的所需分辨率,可以根据特定的质量或性能标准进行调整。
    • Comfy dtype: INT
    • Python dtype: int
  • preprocessor_override
    • 允许用替代预处理器覆盖最初选择的预处理器,为预处理选择提供灵活性。
    • Comfy dtype: STRING
    • Python dtype: str

Output types

  • IMAGE
    • 预处理后的图像,准备在ControlNet框架内进行进一步处理或分析。
    • Comfy dtype: IMAGE
    • Python dtype: ImageType
  • CNET_NAME
    • 在预处理过程中使用或识别的ControlNet的名称,为后续处理步骤提供上下文。
    • Comfy dtype: STRING
    • Python dtype: str

Usage tips

  • Infra type: CPU
  • Common nodes:
    • [CR Multi-ControlNet Stack](../../ComfyUI_Comfyroll_CustomNodes/Nodes/CR Multi-ControlNet Stack.md)

Source code

class AV_ControlNetPreprocessor:
    preprocessors = list(control_net_preprocessors.keys())

    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "image": ("IMAGE",),
                "preprocessor": (["None", "tile"] + s.preprocessors,),
                "sd_version": (["sd15", "sd15++", "sdxl", "sdxl_t2i", "sdxl_lllite"],),
            },
            "optional": {
                "resolution": ("INT", {"default": 512, "min": 64, "max": 2048, "step": 64}),
                "preprocessor_override": ("STRING", {"default": "None"}),
            },
        }

    RETURN_TYPES = ("IMAGE", "STRING")
    RETURN_NAMES = ("IMAGE", "CNET_NAME")
    FUNCTION = "detect_controlnet"
    CATEGORY = "Art Venture/Loaders"

    def detect_controlnet(self, image, preprocessor, sd_version, resolution=512, preprocessor_override="None"):
        if preprocessor_override != "None":
            if preprocessor_override not in control_net_preprocessors:
                print(
                    f"Warning: Not found ControlNet preprocessor {preprocessor_override}. Use {preprocessor} instead."
                )
            else:
                preprocessor = preprocessor_override

        image = apply_preprocessor(image, preprocessor, resolution=resolution)
        control_net_name = detect_controlnet(preprocessor, sd_version)

        return (image, control_net_name)