ComfyUI - 隐藏和灵活的输入


隐藏输入 Hidden inputs

除了创建客户端相应输入或小部件的 requiredoptional 输入之外,还有三个 hidden 输入选项,允许自定义节点从服务器请求某些信息。

这些可以通过在 INPUT_TYPES 字典中返回 hidden 的值来访问,该字典具有 dict[str,str] 签名,包含一个或多个以下选项:PROMPTEXTRA_PNGINFOUNIQUE_ID

@classmethod
def INPUT_TYPES(s):
    return {
        "required": {...},
        "optional": {...},
        "hidden": {
            "unique_id": "UNIQUE_ID",
            "prompt": "PROMPT", 
            "extra_pnginfo": "EXTRA_PNGINFO",
        }
    }


UNIQUE_ID

UNIQUE_ID 是节点的唯一标识符,与客户端上节点的 id 属性匹配。
它通常用于客户端-服务器通信(见 消息)。


提示

PROMPT 是客户端发送给服务器的完整提示。
有关完整描述,请参阅 提示对象


EXTRA_PNGINFO

EXTRA_PNGINFO 是一个字典,它将被复制到保存的任何 .png 文件的元数据中。自定义节点可以在该字典中存储额外的信息以供保存(或作为与下游节点通信的一种方式)。

注意,如果使用 disable_metadata 选项启动 Comfy,则这些数据不会被保存。


DYNPROMPT

DYNPROMPTcomfy_execution.graph.DynamicPrompt 的一个实例。它与 PROMPT 不同,因为它可能在执行过程中由于 节点扩展 的响应而发生变化。

DYNPROMPT 应仅用于高级用例(如自定义节点中的循环实现)。


Flexible inputs


自定义数据类型

如果您想在自定义节点之间传递数据,定义一个自定义数据类型可能很有帮助。这(几乎)和为数据类型选择一个名称一样简单,该名称应该是大写字母的唯一字符串,例如 CHEESE

然后您可以在节点的 INPUT_TYPESRETURN_TYPES 中使用 CHEESE,Comfy 客户端将只允许 CHEESE 输出连接到 CHEESE 输入。
CHEESE 可以是任何 Python 对象。

唯一需要注意的一点是,因为 Comfy 客户端不了解 CHEESE(除非您为 CHEESE 定义一个自定义小部件,这是一个留待另一天讨论的话题),您需要(除非您定义一个自定义小部件),强制它成为一个输入而不是小部件。这可以通过输入选项字典中的 forceInput 选项来完成:

@classmethod
def INPUT_TYPES(s):
    return {
        "required": { "my_cheese": ("CHEESE", {"forceInput":True}) }
    }


通配符输入

@classmethod
def INPUT_TYPES(s):
    return {
        "required": { "anything": ("*",{})},
    }

@classmethod
def VALIDATE_INPUTS(s, input_types):
    return True

前端允许使用 * 来表示输入可以连接到任何源。因为后端不正式支持这一点,你可以在你的 VALIDATE_INPUTS 函数中接受一个名为 input_types 的参数来跳过后端类型的验证。(有关更多信息,请参阅 VALIDATE_INPUTS。)节点负责理解传递的数据。


动态创建的输入

如果输入在客户端动态创建,它们就不能在 Python 源代码中定义。
为了访问这些数据,我们需要一个 可选 的字典,它允许 Comfy 使用任意名称传递数据。由于 Comfy 服务器

class ContainsAnyDict(dict):
    def __contains__(self, key):
        return True
...

@classmethod
def INPUT_TYPES(s):
    return {
        "required": {},
        "optional": ContainsAnyDict()
    }
...

def main_method(self, **kwargs):
    # the dynamically created input data will be in the dictionary kwargs

感谢rgthree分享这个Python技巧!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值