Skip to content

Node Expansion #13

@zhzLuke96

Description

@zhzLuke96

现在的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; 
    }
}

ref: https://docs.comfy.org/custom-nodes/backend/expansion

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions