5.2 KiB
5.2 KiB
Documentation
- Class name: AV_ControlNetEfficientStacker
- Category: Art Venture/Loaders
- Output node: False
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
AV_ControlNetEfficientStacker节点旨在简化图像处理流程中控制网络的整合和管理。它通过允许基于预定义标准进行动态选择、应用预处理步骤以及调整控制网络强度和分辨率,实现了控制网络的高效堆叠,从而增强了图像处理任务的灵活性和有效性。
Input types
Required
- control_net_name
- 指定要使用的控制网络名称,包括基于模型版本自动选择的选项。该参数对于确定适当的控制网络和图像预处理要求至关重要。
- Comfy dtype: COMBO[STRING]
- Python dtype: str
- image
- 待处理的输入图像。此参数至关重要,因为它作为应用控制网络转换的基础。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
- strength
- 定义控制网络对图像影响的强度,允许对图像属性进行精细调整。
- Comfy dtype: FLOAT
- Python dtype: float
- start_percent
- 指定控制网络效果的起始百分比,允许逐步应用于图像。
- Comfy dtype: FLOAT
- Python dtype: float
- end_percent
- 指定控制网络效果的结束百分比,实现对网络影响衰减的精确控制。
- Comfy dtype: FLOAT
- Python dtype: float
- preprocessor
- 指定在应用控制网络之前对图像进行预处理的方法,确保图像处于最佳格式以便进行操作。
- Comfy dtype: COMBO[STRING]
- Python dtype: str
Optional
- cnet_stack
- 可选的控制网络堆栈。这允许叠加多个控制网络以实现复杂的图像转换。
- Comfy dtype: CONTROL_NET_STACK
- Python dtype: Optional[List[Tuple[Any]]]
- control_net_override
- 允许手动覆盖选定的控制网络,提供控制网络选择的灵活性。
- Comfy dtype: STRING
- Python dtype: str
- timestep_keyframe
- 可选地指定控制网络的关键帧,实现对图像处理过程的时间控制。
- Comfy dtype: TIMESTEP_KEYFRAME
- Python dtype: Optional[str]
- resolution
- 设置图像处理的分辨率,允许控制输出图像的细节级别。
- Comfy dtype: INT
- Python dtype: int
- enabled
- 用于启用或禁用控制网络处理的标志,提供了一种简单的方法来绕过控制网络应用。
- Comfy dtype: BOOLEAN
- Python dtype: bool
Output types
- CNET_STACK
- Comfy dtype: CONTROL_NET_STACK
- 该输出代表处理后的控制网络堆栈,可用于后续的图像处理步骤。
- Python dtype: unknown
Usage tips
- Infra type:
CPU - Common nodes: unknown
Source code
class AVControlNetEfficientStacker:
controlnets = folder_paths.get_filename_list("controlnet")
preprocessors = list(control_net_preprocessors.keys())
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"control_net_name": (["None", "Auto: sd15", "Auto: sdxl", "Auto: sdxl_t2i"] + s.controlnets,),
"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": {
"cnet_stack": ("CONTROL_NET_STACK",),
"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 = ("CONTROL_NET_STACK",)
RETURN_NAMES = ("CNET_STACK",)
FUNCTION = "control_net_stacker"
CATEGORY = "Art Venture/Loaders"
def control_net_stacker(
self,
control_net_name: str,
image,
strength,
start_percent,
end_percent,
preprocessor,
cnet_stack=None,
control_net_override="None",
timestep_keyframe=None,
resolution=512,
enabled=True,
):
if not enabled:
return (cnet_stack,)
# If control_net_stack is None, initialize as an empty list
if cnet_stack is None:
cnet_stack = []
if control_net_name.startswith("Auto: "):
assert preprocessor != "None", "preprocessor must be set when using Auto mode"
sd_version = control_net_name[len("Auto: ") :]
control_net_name = detect_controlnet(preprocessor, sd_version)
control_net = load_controlnet(control_net_name, control_net_override, timestep_keyframe=timestep_keyframe)
# Extend the control_net_stack with the new tuple
if control_net is not None:
image = apply_preprocessor(image, preprocessor, resolution=resolution)
cnet_stack.extend([(control_net, image, strength, start_percent, end_percent)])
return (cnet_stack,)