LiteGraph
Comfy UI は LiteGraph を基に構築されています。 Comfy の機能の多くは LiteGraph によって提供されているため、より複雑なノードを開発する場合は、そのリポジトリをクローンし、doc/index.html にあるドキュメントを参照することをお勧めします。
ComfyApp
app オブジェクト(import { app } from "../../scripts/app.js"; で常にアクセス可能)は、ブラウザ上で実行されている Comfy アプリケーションを表し、以下にリストするものを含む、多くの有用なプロパティと関数を含んでいます。
非推奨:
app 上の関数やプロトタイプをハイジャック/モンキーパッチすることは非推奨であり、近い将来いつでも変更される可能性があります。代わりに、公式の 拡張フック および コンテキストメニュー API を使用してください。プロパティ
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 オブジェクトは現在のワークフロー内のノードを表します。これには、利用したい多くの重要なプロパティ、および動作を変更するために使用またはハイジャックしたい非常に多くの関数があります。
非推奨:
ComfyNode または LGraphNode 上のプロトタイプメソッドをハイジャックすることは非推奨であり、近い将来いつでも変更される可能性があります。利用可能な場合は、コンテキストメニュー用の getNodeMenuItems などの公式の 拡張フック を使用してください。例については コンテキストメニュー移行ガイド を参照してください。console.log コマンドにブレークポイントを設定することをお勧めします。その後、新しいノードを作成すると、お気に入りのデバッガーを使用してノードを調べることができます。
プロパティ
関数
関数は非常に多数あります(最後に数えたときは 85 個)。以下に一部をリストします。 これらの関数のほとんどは、LiteGraph コアコードから変更されていません。入力、出力、ウィジェット
接続
表示
その他
入力とウィジェット
入力とウィジェットは、ノードにデータを送り込む 2 つの方法を表します。一般的に、ウィジェットは入力に変換できますが、すべての入力をウィジェットに変換できるわけではありません(多くのデータ型は UI 要素を通じて入力できないため)。node.inputs は現在の入力のリスト(ノードの左側にある色の付いたドット)であり、.name、.type、および .link(app.graph.links 内の接続された LLink への参照)を指定します。
入力が変換されたウィジェットである場合、.widget に、現在非アクティブなウィジェットへの参照も保持されます。
node.widgets は、入力に変換されたかどうかにかかわらず、すべてのウィジェットのリストです。ウィジェットには以下があります:
ウィジェットタイプ
app.widgets は現在登録されているウィジェットタイプの辞書であり、タイプ名の大文字バージョンをキーとします。
Comfy 組み込みのウィジェットタイプには、自明な BOOLEAN、INT、FLOAT、
2 種類(単一行と多行)がある STRING、
リストからのドロップダウン選択用の COMBO、および画像読み込みノードで使用される IMAGEUPLOAD が含まれます。
拡張機能で getCustomWidgets メソッドを提供することで、カスタムウィジェットタイプを追加できます。
リンクされたウィジェット
ウィジェットもリンクできます。例えば、seed と control_after_generate の組み込み動作です。
リンクされたウィジェットは .type = 'base_widget_type:base_widget_name' を持ちます。したがって、control_after_generate は int:seed というタイプを持つ可能性があります。
プロンプト
Comfy でQueue Prompt ボタンを押すと、app.graphToPrompt() メソッドが呼び出され、現在のグラフがサーバーに送信できるプロンプトに変換されます。
app.graphToPrompt は、output と workflow の 2 つのプロパティを持つオブジェクト(以下 prompt と呼ぶ)を返します。
output
prompt.output は、グラフ内の各ノードの node_id から、2 つのプロパティを持つオブジェクトへのマップです。
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- グラフ内のすべてのリンクのリスト。各エントリは 5 つの整数と 1 つの文字列の配列です:- (
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)