メインコンテンツへスキップ

LiteGraph

Comfy UI は LiteGraph を基に構築されています。 Comfy の機能の多くは LiteGraph によって提供されているため、より複雑なノードを開発する場合は、そのリポジトリをクローンし、doc/index.html にあるドキュメントを参照することをお勧めします。

ComfyApp

app オブジェクト(import { app } from "../../scripts/app.js"; で常にアクセス可能)は、ブラウザ上で実行されている Comfy アプリケーションを表し、以下にリストするものを含む、多くの有用なプロパティと関数を含んでいます。
非推奨: app 上の関数やプロトタイプをハイジャック/モンキーパッチすることは非推奨であり、近い将来いつでも変更される可能性があります。代わりに、公式の 拡張フック および コンテキストメニュー API を使用してください。
app 上の関数をハイジャックすることは推奨されません。Comfy は継続的に開発されており、コアの動作が変更される可能性があるためです。

プロパティ

app の重要なプロパティには以下が含まれます(完全なリストではありません): canvas(グラフィカル要素用)と graph(論理接続用)は、おそらく最もアクセスしたいものでしょう。

関数

同様に、関数も多数あります。以下にいくつかの重要なものを示します。

LGraph

LGraph オブジェクトは LiteGraph フレームワークの一部であり、グラフ(ノードとリンク)の現在の論理状態を表します。 グラフを操作したい場合は、LiteGraph ドキュメント(https://github.com/jagenjo/litegraph.js をクローンした場合 doc/index.html にあります)に必要な関数が説明されています。 graph を使用してノードとリンクの詳細を取得できます。例:
LLink オブジェクトは graph.links を通じてアクセスでき、ノード link.origin_id の出力スロット link.origin_slot からノード link.target_id のスロット link.target_slot へのグラフ内の単一のリンクを表します。また、データ型を表す文字列 link.typelink.id も持ちます。 LLinkLGraphNodeComfyNode はそのサブクラスです)の connect メソッドで作成されます。
独自の LLink オブジェクトを作成しないでください。代わりに LiteGraph の関数を使用してください。

ComfyNode

ComfyNodeLGraphNode のサブクラスであり、より一般的な操作については LiteGraph ドキュメントが役立ちます。ただし、Comfy は LiteGraph のコア動作を大幅に拡張しており、LiteGraph の機能のすべてを使用しているわけではありません。
以下の説明は通常のノードに適用されます。 グループノード、プリミティブノード、ノート、リダイレクトノードは異なるプロパティを持ちます。
ComfyNode オブジェクトは現在のワークフロー内のノードを表します。これには、利用したい多くの重要なプロパティ、および動作を変更するために使用またはハイジャックしたい非常に多くの関数があります。
非推奨: ComfyNode または LGraphNode 上のプロトタイプメソッドをハイジャックすることは非推奨であり、近い将来いつでも変更される可能性があります。利用可能な場合は、コンテキストメニュー用の getNodeMenuItems などの公式の 拡張フック を使用してください。例については コンテキストメニュー移行ガイド を参照してください。
ノードオブジェクトをより完全に理解するには、以下のコードを拡張機能に挿入し、console.log コマンドにブレークポイントを設定することをお勧めします。その後、新しいノードを作成すると、お気に入りのデバッガーを使用してノードを調べることができます。

プロパティ

関数

関数は非常に多数あります(最後に数えたときは 85 個)。以下に一部をリストします。 これらの関数のほとんどは、LiteGraph コアコードから変更されていません。

入力、出力、ウィジェット

接続

表示

collapse は命名が不正確です。折りたたみ状態を「切り替え」ます。 node.collapsable === false をオーバーライドするために使用できるブール値パラメータを受け取ります。

その他

入力とウィジェット

入力とウィジェットは、ノードにデータを送り込む 2 つの方法を表します。一般的に、ウィジェットは入力に変換できますが、すべての入力をウィジェットに変換できるわけではありません(多くのデータ型は UI 要素を通じて入力できないため)。 node.inputs は現在の入力のリスト(ノードの左側にある色の付いたドット)であり、.name.type、および .linkapp.graph.links 内の接続された LLink への参照)を指定します。 入力が変換されたウィジェットである場合、.widget に、現在非アクティブなウィジェットへの参照も保持されます。 node.widgets は、入力に変換されたかどうかにかかわらず、すべてのウィジェットのリストです。ウィジェットには以下があります:

ウィジェットタイプ

app.widgets は現在登録されているウィジェットタイプの辞書であり、タイプ名の大文字バージョンをキーとします。 Comfy 組み込みのウィジェットタイプには、自明な BOOLEANINTFLOAT、 2 種類(単一行と多行)がある STRING、 リストからのドロップダウン選択用の COMBO、および画像読み込みノードで使用される IMAGEUPLOAD が含まれます。 拡張機能で getCustomWidgets メソッドを提供することで、カスタムウィジェットタイプを追加できます。

リンクされたウィジェット

ウィジェットもリンクできます。例えば、seedcontrol_after_generate の組み込み動作です。 リンクされたウィジェットは .type = 'base_widget_type:base_widget_name' を持ちます。したがって、control_after_generateint:seed というタイプを持つ可能性があります。

プロンプト

Comfy で Queue Prompt ボタンを押すと、app.graphToPrompt() メソッドが呼び出され、現在のグラフがサーバーに送信できるプロンプトに変換されます。 app.graphToPrompt は、outputworkflow の 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 に含まれません
接続された入力を記述する配列内の upstream_node_id は、整数ではなく文字列として表されることに注意してください。

workflow

prompt.workflow には以下のプロパティが含まれます:
  • config - 追加の設定オプションの辞書(デフォルトでは空)
  • extra - ワークフローに関する追加情報を含む辞書。デフォルトでは以下を含みます:
    • extra.ds - グラフの現在のビューを記述します(scaleoffset
  • groups - ワークフロー内のすべてのグループ
  • last_link_id - 最後に追加されたリンクの ID
  • last_node_id - 最後に追加されたノードの ID
  • links - グラフ内のすべてのリンクのリスト。各エントリは 5 つの整数と 1 つの文字列の配列です:
    • (link_id, upstream_node_id, upstream_node_output_slot, downstream_node_id, downstream_node_input_slot, data type)
  • nodes - グラフ内のすべてのノードのリスト。各エントリは、上記 で説明したノードのプロパティのサブセットのマップです
    • 以下のプロパティが含まれます:flagsidinputsmodeorderpospropertiessizetypewidgets_values
    • さらに、ノードに出力がない場合を除き、outputs プロパティがあります。これはノードの出力のリストであり、それぞれ以下を含みます:
      • name - 出力の名前
      • type - 出力のデータ型
      • links - この出力からのすべてのリンクの link_id のリスト(接続がない場合、空のリストまたは null の可能性があります)
      • shape - 出力を描画するために使用される形状(デフォルトはドットで 3)
      • slot_index - 出力のスロット番号
  • version - LiteGraph のバージョン番号(執筆時点では 0.4
nodes.output は出力のないノードには存在せず、空のリストではありません。