Skip to content

Node Expansion #13

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

    Fields

    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions