LiteGraph
Comfy UI 构建于 LiteGraph 之上。 Comfy 的许多功能都由 LiteGraph 提供,因此如果你要开发更复杂的节点,建议克隆该仓库并查阅文档,文档位于doc/index.html。
ComfyApp
app 对象(始终可通过 import { app } from "../../scripts/app.js"; 获取)代表在浏览器中运行的 Comfy 应用,包含许多有用的属性和函数,部分如下所示。
属性
app 的重要属性包括(非完整列表):
canvas(用于图形元素)和 graph(用于逻辑连接)大概率是你最常用的。
函数
同样,函数也有很多。以下是一些重要的:LGraph
LGraph 对象是 LiteGraph 框架的一部分,代表当前图的逻辑状态(节点和连线)。
如果你想操作图,LiteGraph 文档(克隆 https://github.com/jagenjo/litegraph.js 后在 doc/index.html)描述了你需要的函数。
你可以用 graph 获取节点和连线的详细信息,例如:
LLink
LLink 对象可通过 graph.links 访问,代表图中一条从节点 link.origin_id 的输出槽 link.origin_slot 到节点 link.target_id 的输入槽 link.target_slot 的连线。它还有一个字符串类型 link.type 和 link.id。
LLink 是在 LGraphNode(ComfyNode 是其子类)的 connect 方法中创建的。
ComfyNode
ComfyNode 是 LGraphNode 的子类,因此 LiteGraph 文档对于通用操作也很有帮助。不过,Comfy 对 LiteGraph 的核心行为做了大量扩展,也没有用到 LiteGraph 的全部功能。
ComfyNode 对象代表当前工作流中的一个节点。它有许多重要属性和大量可用或可劫持的函数,用于修改行为。
为了更全面地了解节点对象,你可以在扩展中插入如下代码,并在
console.log 处打断点。创建新节点时即可用调试器查看节点。
属性
函数
函数非常多(上次统计有 85 个)。以下是部分常用函数。 大多数函数未被 Comfy 修改,仍为 LiteGraph 核心代码。输入、输出、小部件
连接
显示
其他
输入与小部件
输入和小部件是向节点输入数据的两种方式。一般来说,小部件可以转为输入,但并非所有输入都能转为小部件(许多数据类型无法通过 UI 元素输入)。node.inputs 是当前所有输入的列表(节点左侧的彩色圆点),包含 .name、.type 和 .link(指向 app.graph.links 中的 LLink)。
如果输入是已转换的小部件,还会在 .widget 中保存对该小部件(现已失效)的引用。
node.widgets 是所有小部件的列表,无论是否已转为输入。小部件有:
小部件类型
app.widgets 是当前已注册小部件类型的字典,键为类型名的大写。
Comfy 内置小部件类型包括直观的 BOOLEAN、INT、FLOAT,
还有 STRING(分单行和多行)、
COMBO(下拉列表选择)、IMAGEUPLOAD(用于加载图片节点)。
可通过在扩展中提供 getCustomWidgets 方法添加自定义小部件类型。
关联小部件
小部件也可以关联——如内置的seed 和 control_after_generate。
关联小部件的 .type = 'base_widget_type:base_widget_name';如 control_after_generate 可能有类型 int:seed。
Prompt
当你在 Comfy 中点击”Queue Prompt”按钮时,会调用app.graphToPrompt() 方法,将当前图转换为可发送到服务器的 prompt。
app.graphToPrompt 返回一个对象(下称 prompt),包含 output 和 workflow 两个属性。
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中
workflow
prompt.workflow 包含以下属性:
config- 额外配置项字典(默认空)extra- 包含工作流额外信息的字典。默认有:extra.ds- 描述当前图视图(scale和offset)
groups- 工作流中的所有分组last_link_id- 最后添加的连线 idlast_node_id- 最后添加的节点 idlinks- 图中所有连线的列表。每项为五个整数和一个字符串的数组:- (
link_id,upstream_node_id,upstream_node_output_slot,downstream_node_id,downstream_node_input_slot,data type)
- (
nodes- 图中所有节点的列表。每项为节点部分属性的映射,见上文- 包含属性:
flags、id、inputs、mode、order、pos、properties、size、type、widgets_values - 另外,除非节点没有输出,还会有
outputs属性,为该节点所有输出的列表,每项包含:name- 输出名称type- 输出数据类型links- 从该输出出发的所有连线的link_id列表(无连接时为空数组或 null)shape- 绘制输出时的形状(默认 3,表示圆点)slot_index- 输出的槽编号
- 包含属性:
version- LiteGraph 版本号(当前为0.4)