forked from space-nuko/litegraph.ts
-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
designdesigndesign
Description
现在的subgraph实现属于原生支持,将subgraph当作一种内部可以流转的状态,这会导致一个问题,核心引擎需要无时无刻关注是否在处理一个subgraph从而增加关注成本导致业务切面非常大。
我们应该引入类似comfyui中的节点扩展能力,任何节点都应该可以成为一个宏节点,在执行时拓展自身,以实现递归、迭代、子图逻辑的透明化。
export class SubgraphNode extends LGraphNode {
/**
* @param context 引擎提供的上下文
* @param params 上游传递过来的实时数据(等同于 onExecute 的输入)
*/
override onExpansion(context: ExpansionContext, params: any[]): void {
// 1. 获取内部图数据
const innerData = this.properties.graph_data;
// 2. 实例化子图(这里是内存操作,不一定反映在 UI 上)
const { nodes, links } = context.createFragment(innerData);
// 3. 缝合边缘 (Stitching)
// 外部 Input 0 的数据,流向内部节点的第一个输入
context.redirectInput(0, nodes[0], 0);
// 内部最后一个节点的输出,流向外部 Output 0
context.redirectOutput(0, nodes[nodes.length - 1], 0);
// 4. 注入执行序列
context.inject(nodes, links);
// 5. 决定当前壳节点的命运
context.isVirtual = true;
}
}Metadata
Metadata
Assignees
Labels
designdesigndesign