required
和 optional
输入都会被求值。然而,有时某些输入可能不会被使用,对其进行求值会导致不必要的处理。以下是一些可能从延迟求值中受益的节点示例:
ModelMergeSimple
节点,其中比例要么是 0.0
(这种情况下不需要加载第一个模型)
要么是 1.0
(这种情况下不需要加载第二个模型)。0.0
要么完全是 1.0
。INPUT_TYPES
返回的字典中将输入标记为延迟check_lazy_status
的方法(注意:不是类方法),该方法将在求值之前被调用来确定是否需要更多输入。0.0
,我们不需要对第二个图像之前的任何部分进行求值。如果整个蒙版都是 1.0
,我们可以跳过对第一个图像的求值。
INPUT_TYPES
lazy: True
键值对即可。
image1
和 image2
都被标记为延迟输入,但 mask
总是会被求值。
check_lazy_status
check_lazy_status
方法在存在一个或多个尚未可用的延迟输入时被调用。这个方法接收与标准执行函数相同的参数。所有可用的输入都会以其最终值传递,而不可用的延迟输入则会有一个 None
值。
check_lazy_status
方法的责任是返回一个列表,其中包含任何需要继续执行的延迟输入的名称。如果所有延迟输入都可用,该方法应返回一个空列表。
注意,check_lazy_status
方法可能会被多次调用。例如,你可能在评估一个延迟输入后发现需要评估另一个延迟输入。
OUTPUT
节点。如果是你开发的节点,你应该按照以下方式添加延迟求值:
enabled
的必需(如果这是一个新节点)或可选(如果你关心向后兼容性)输入,默认值为 True
enabled
为 True
时评估其他输入comfy_execution.graph.ExecutionBlocker
。这个特殊对象可以作为任何输出端口的返回值。任何接收到 ExecutionBlocker
作为输入的节点都会跳过执行,并将该 ExecutionBlocker
作为其所有输出返回。
ExecutionBlocker
:
None
来静默阻止执行。这在阻止执行是成功运行的一部分时很有用——比如禁用某个输出。VAE
输出。