跳转到主要内容

LiteGraph

Comfy UI 构建于 LiteGraph 之上。 Comfy 的许多功能都由 LiteGraph 提供,因此如果你要开发更复杂的节点,建议克隆该仓库并查阅文档,文档位于 doc/index.html

ComfyApp

app 对象(始终可通过 import { app } from "../../scripts/app.js"; 获取)代表在浏览器中运行的 Comfy 应用,包含许多有用的属性和函数,部分如下所示。
已弃用: 劫持/猴子补丁 app 上的函数或原型方法已被弃用,可能在不久的将来随时更改。请改用官方的 扩展钩子右键菜单 API
不建议劫持 app 上的函数,因为 Comfy 正在持续开发,核心行为可能会变化。

属性

app 的重要属性包括(非完整列表): canvas(用于图形元素)和 graph(用于逻辑连接)大概率是你最常用的。

函数

同样,函数也有很多。以下是一些重要的:

LGraph

LGraph 对象是 LiteGraph 框架的一部分,代表当前图的逻辑状态(节点和连线)。 如果你想操作图,LiteGraph 文档(克隆 https://github.com/jagenjo/litegraph.js 后在 doc/index.html)描述了你需要的函数。 你可以用 graph 获取节点和连线的详细信息,例如:
LLink 对象可通过 graph.links 访问,代表图中一条从节点 link.origin_id 的输出槽 link.origin_slot 到节点 link.target_id 的输入槽 link.target_slot 的连线。它还有一个字符串类型 link.typelink.id LLink 是在 LGraphNodeComfyNode 是其子类)的 connect 方法中创建的。
避免自己创建 LLink 对象——请使用 LiteGraph 的相关函数。

ComfyNode

ComfyNodeLGraphNode 的子类,因此 LiteGraph 文档对于通用操作也很有帮助。不过,Comfy 对 LiteGraph 的核心行为做了大量扩展,也没有用到 LiteGraph 的全部功能。
以下描述适用于普通节点。 分组节点、原始节点、注释节点和重定向节点有不同的属性。
ComfyNode 对象代表当前工作流中的一个节点。它有许多重要属性和大量可用或可劫持的函数,用于修改行为。
已弃用: 劫持 ComfyNodeLGraphNode 上的原型方法已被弃用,可能在不久的将来随时更改。请尽可能使用官方的 扩展钩子,例如使用 getNodeMenuItems 处理右键菜单。参见 右键菜单迁移指南 获取示例。
为了更全面地了解节点对象,你可以在扩展中插入如下代码,并在 console.log 处打断点。创建新节点时即可用调试器查看节点。

属性

函数

函数非常多(上次统计有 85 个)。以下是部分常用函数。 大多数函数未被 Comfy 修改,仍为 LiteGraph 核心代码。

输入、输出、小部件

连接

显示

collapse 命名不准确;它实际上是切换折叠状态。 它接受一个布尔参数,可用于覆盖 node.collapsable === false

其他

输入与小部件

输入和小部件是向节点输入数据的两种方式。一般来说,小部件可以转为输入,但并非所有输入都能转为小部件(许多数据类型无法通过 UI 元素输入)。 node.inputs 是当前所有输入的列表(节点左侧的彩色圆点),包含 .name.type.link(指向 app.graph.links 中的 LLink)。 如果输入是已转换的小部件,还会在 .widget 中保存对该小部件(现已失效)的引用。 node.widgets 是所有小部件的列表,无论是否已转为输入。小部件有:

小部件类型

app.widgets 是当前已注册小部件类型的字典,键为类型名的大写。 Comfy 内置小部件类型包括直观的 BOOLEANINTFLOAT, 还有 STRING(分单行和多行)、 COMBO(下拉列表选择)、IMAGEUPLOAD(用于加载图片节点)。 可通过在扩展中提供 getCustomWidgets 方法添加自定义小部件类型。

关联小部件

小部件也可以关联——如内置的 seedcontrol_after_generate。 关联小部件的 .type = 'base_widget_type:base_widget_name';如 control_after_generate 可能有类型 int:seed

Prompt

当你在 Comfy 中点击”Queue Prompt”按钮时,会调用 app.graphToPrompt() 方法,将当前图转换为可发送到服务器的 prompt。 app.graphToPrompt 返回一个对象(下称 prompt),包含 outputworkflow 两个属性。

output

prompt.output 将图中每个节点的 node_id 映射为一个对象,包含两个属性:
  • prompt.output[node_id].class_type,自定义节点类的唯一名称(在 Python 代码中定义)
  • prompt.output[node_id].inputs,包含每个输入(或小部件)的值,是一个从输入名到以下内容的映射:
    • 如果是小部件,则为选中的值
    • 如果有连线,则为一个数组,内容为(upstream_node_id, upstream_node_output_slot
    • 如果是已转为输入但未连接的小部件,则为 undefined
    • 其他未连接的输入不会出现在 .inputs
注意,描述已连接输入的数组中的 upstream_node_id 是字符串而不是整数。

workflow

prompt.workflow 包含以下属性:
  • config - 额外配置项字典(默认空)
  • extra - 包含工作流额外信息的字典。默认有:
    • extra.ds - 描述当前图视图(scaleoffset
  • groups - 工作流中的所有分组
  • last_link_id - 最后添加的连线 id
  • last_node_id - 最后添加的节点 id
  • links - 图中所有连线的列表。每项为五个整数和一个字符串的数组:
    • (link_id, upstream_node_id, upstream_node_output_slot, downstream_node_id, downstream_node_input_slot, data type)
  • nodes - 图中所有节点的列表。每项为节点部分属性的映射,见上文
    • 包含属性:flagsidinputsmodeorderpospropertiessizetypewidgets_values
    • 另外,除非节点没有输出,还会有 outputs 属性,为该节点所有输出的列表,每项包含:
      • name - 输出名称
      • type - 输出数据类型
      • links - 从该输出出发的所有连线的 link_id 列表(无连接时为空数组或 null)
      • shape - 绘制输出时的形状(默认 3,表示圆点)
      • slot_index - 输出的槽编号
  • version - LiteGraph 版本号(当前为 0.4
无输出的节点没有 nodes.output 属性,而不是空列表。