概要
サブグラフを使用すると、ユーザーはノードを再利用可能でネスト可能なコンポーネントとしてグループ化できます。各サブグラフは UUID を持つ独自のLGraph です。ユーザー向けガイドについては、Subgraphs を参照してください。
ノード識別子
ComfyUI では 3 種類の異なるノード識別子タイプを使用します。誤ったものを使用すると、サイレント失敗(エラーなしで失敗すること)の原因となります。| タイプ | 形式 | 用途 |
|---|---|---|
node.id | 42 (数値) | 直下のグラフレベルローカル。graph.getNodeById(id) |
| 実行 ID | "1:2:3" (コロン区切り文字列) | バックエンドの進捗メッセージ、UNIQUE_ID |
| ロケーター ID | "<uuid>:<localId>" または "<localId>" | UI 状態:バッジ、エラー、画像 |
ノードのトラバース
現在のレイヤーのみ
すべてノードを再帰的に
ネストされたサブグラフに入るには、すべてのノードでコールバックを呼び出す再帰ヘルパーを使用します:ルート vs アクティブグラフ
| 目的… | 使用対象 |
|---|---|
| ワークフロー内のすべてのノードを操作する | app.graph (ルート) |
| 表示されているレイヤーのみを操作する | app.canvas?.graph |
| 特定のサブグラフにアクセスする | someNode.subgraph |
イベント
サブグレープレベルのイベント
subgraph.events でディスパッチされます:
| イベント | ペイロード | 発生時期 |
|---|---|---|
widget-promoted | { widget, subgraphNode } | ウィジェットが親ノードにプロモートされた場合 |
widget-demoted | { widget, subgraphNode } | ウィジェットが親ノードから削除された場合 |
input-added | { input } | 入力スロットが追加された場合 |
removing-input | { input, index } | 入力スロットが削除されている場合 |
output-added | { output } | 出力スロットが追加された場合 |
removing-output | { output, index } | 出力スロットが削除されている場合 |
renaming-input | { input, index, oldName, newName } | 入力スロットの名前が変更された場合 |
renaming-output | { output, index, oldName, newName } | 出力スロットの名前が変更された場合 |
キャンバスレベルのイベント
app.canvas.canvas (HTML キャンバス要素) でディスパッチされます:
| イベント | ペイロード | 発生時期 |
|---|---|---|
subgraph-opened | { subgraph, closingGraph, fromNode } | ユーザーがサブグラフに移動した場合 |
subgraph-converted | { subgraphNode } | 選択範囲がサブグラフに変換された場合 |
リスニングパターン
ウィジェットのプロモート
SubgraphInput がサブグラフ内のウィジェットに接続されると、そのウィジェットのコピーが親サブグラフノードに表示されます。これにより widget-promoted が発生します。接続を削除すると widget-demoted が発生します。
クリーンアップ
ノードが削除されたときにすべてのイベントリスナーをクリーンアップするには、AbortController を使用します。