#invokeExtensionsAsync
或 #invokeExtensions
,并传入钩子的名称。
这些方法会在所有已注册的扩展上调用同名方法(如果存在),比如上面例子中的 setup
。
Comfy 提供了多种钩子,供自定义扩展代码使用,以修改客户端行为。
apiUpdateHandlers
处理。app.js
中搜索 #invokeExtensions
以查找所有可用钩子。
另请参阅钩子的调用顺序。
beforeRegisterNodeDef
开始,大多数扩展都会用到它,通常也是唯一需要的钩子。
AddNode
菜单中可用的节点列表)调用一次,用于修改节点的行为。
nodeType
参数本质上是该类型所有节点的模板,因此对 nodeType.prototype
的修改会应用到所有该类型节点上。nodeData
封装了 Python 代码中定义的节点相关信息,如类别、输入和输出。app
是主 Comfy app 对象的引用(你应该已经导入了它!)
nodeType.ComfyClass
,它保存了该节点对应的 Python 类名,以判断是否需要修改该节点。通常这意味着只修改你自己添加的自定义节点,但有时也可能需要修改其他节点(或其他自定义节点也可能修改你的节点!),此时要注意兼容性。
beforeRegisterNodeDef
中非常常见的做法是”劫持”已有方法:
?.apply
保证即使没有原方法也不会出错),然后执行额外操作。根据你的代码逻辑,可能需要在新方法的其他位置调用 apply
,甚至有条件地调用。
以这种方式劫持方法时,建议查看核心 comfy 代码(断点调试很有用),以确保方法签名一致。
nodeType
上的 ComfyNode()
构造函数结束时)。在这个钩子里你可以修改节点的具体实例。
beforeRegisterNodeDef
里加到 prototype 上。LiteGraph
对象)的方法,从而修改核心 Comfy 行为。详见Comfy 对象与劫持。
afterConfigureGraph
,不要用 setup
。app.js
文件中插入日志代码获得的。你也可以用类似方法帮助理解执行流程。