Skip to main content

概述

ComfyUI V3 架构引入了一种更有序的节点定义方式,今后的节点功能扩展只会在 V3 架构中进行。本指南将帮助你将现有的 V1 节点迁移到新的 V3 架构。

核心概念

V3 架构基于新的版本化 Comfy API,这意味着未来的架构更新都将向后兼容。comfy_api.latest 指向正在开发中的最新版本 API,而 latest 之前的版本可以认为是“稳定版”。目前版本 v0_0_2 是第一个 API 版本,之后可能还会有不兼容的更改。当它稳定后,会创建新的 v0_0_3 版本供 latest 指向。

V1 与 V3 架构

V3 架构的主要变化包括:
  • 输入和输出使用对象定义,而不是字典。
  • 执行方法统一命名为 ‘execute’,并且是类方法。
  • 使用 def comfy_entrypoint() 函数返回 ComfyExtension 对象来定义节点,取代 NODE_CLASS_MAPPINGS/NODE_DISPLAY_NAME_MAPPINGS
  • 节点对象不保存状态 - def __init__(self) 不会影响节点函数的暴露内容,因为所有方法都是类方法。节点类在执行前也会被清理。

V1 (旧版)

V3 (现代版)

迁移步骤

从 V1 迁移到 V3 在大多数情况下都很简单,主要是语法的调整。

步骤 1: 更改基类

所有 V3 节点都必须继承自 ComfyNode。支持多层继承,只要继承链的顶层有 ComfyNode 父类即可。 V1:
V3:

步骤 2: 将 INPUT_TYPES 转换为 define_schema

原来分散在代码不同位置(如字典和类属性)的节点属性(节点 ID、显示名称、类别等)现在都通过 Schema 类统一管理。 define_schema(cls) 函数需要返回一个 Schema 对象,工作方式与 V1 中的 INPUT_TYPES(s) 类似。 支持的核心输入/输出类型存储在 comfy_api/{version}_io.py 文件中,默认以 io 作为命名空间。由于输入/输出现在由类定义而不是字典或字符串,自定义类型可以通过编写自己的类或使用 io 中的 Custom 辅助函数来实现。 自定义类型在下面的章节中有详细说明。 类型类包含以下属性:
  • class Input 用于定义输入(如 Model.Input(...)
  • class Output 用于定义输出(如 Model.Output(...))。注意,不是所有类型都支持作为输出。
  • Type 用于获取类型提示(如 Model.Type)。有些类型提示可能只是 any,未来会进一步完善。这些类型提示不会被强制执行,仅作为文档参考。
V1:
V3:

步骤 3: 更新执行方法

V3 中所有的执行函数都命名为 execute 并且必须是类方法。 V1:
V3:

步骤 4: 转换节点属性

以下是一些属性名称的对照表,更多详细信息请查看 comfy_api.latest._io 中的源代码。

步骤 5: 处理特殊方法

V3 支持与 V1 相同的特殊方法,但方法名改为小写或重新命名以更加清晰。使用方式保持不变。

验证 (V1 → V3)

输入验证函数重命名为 validate_inputs V1:
V3:

惰性求值 (V1 → V3)

check_lazy_status 函数改为类方法,其他部分保持不变。 V1:
V3:

缓存控制 (V1 → V3)

缓存控制的功能与 V1 相同,但原来的函数名容易误导。 V1 的 IS_CHANGED 函数的逗辑是:如果返回值与上次执行时相同,则不重新执行节点。 因此函数 IS_CHANGED 被重命名为 fingerprint_inputs。开发者常见的错误是认为返回 True 就会让节点总是重新执行。但由于总是返回 True,反而会导致节点只执行一次然后重用缓存。 一个常见的使用场景是 LoadImage 节点。它返回所选文件的哈希值,这样文件变化时节点就会重新执行。 V1:
V3:

步骤 6: 创建扩展和入口点

不再使用字典来映射节点 ID 到节点类/显示名称,现在需要定义 ComfyExtension 类和 comfy_entrypoint 函数。 将来可能会在 ComfyExtension 中添加更多函数,通过 get_node_list 注册节点以外的其他内容。 comfy_entrypoint 可以是同步或异步函数,但 get_node_list 必须声明为异步。 V1:
V3:

输入类型参考

虽然在步骤 2 中已经介绍过,但这里再提供一些 V1 与 V3 类型的对照表。完整的类型声明请查看 comfy_api.latest._io

基本类型

ComfyUI 类型

组合类型(下拉框/选择列表)

V3 中的组合类型需要显式定义。 V1:
V3:

高级功能

UI 集成

V3 提供内置的 UI 辅助函数,可以避免保存文件时的常见样板代码。

输出节点

适用于产生副作用的节点(如保存文件)。与 V1 一样,将节点标记为输出节点后,会在节点的上下文菜单中显示 run 播放按钮,允许部分执行流程图。

自定义类型

可以通过编写类或使用 Custom 辅助函数来创建自定义的输入/输出类型。