拡張機能フック
Comfy 実行中の様々な時点で、アプリケーションはフック名を引数として#invokeExtensionsAsync または #invokeExtensions を呼び出します。
これらは、すべての登録された拡張機能に対して、上記の例にある setup のように、適切な名前のメソッド(存在する場合)を呼び出します。
Comfy は、クライアントの動作を変更するためにカスタム拡張機能コードが使用できる様々なフックを提供しています。
最も重要なフックのいくつかを以下に説明します。
Comfy は積極的に開発されているため、新しいフックが随時追加されます。利用可能なすべてのフックを見つけるには、app.js 内で #invokeExtensions を検索してください。
フックが呼び出される順序も参照してください。
一般的に使用されるフック
大多数の拡張機能で使用され、しばしば唯一必要となるbeforeRegisterNodeDef から始めましょう。
beforeRegisterNodeDef()
各ノードタイプ(AddNode メニューで利用可能なノードのリスト)に対して一度呼び出され、ノードの動作を変更するために使用されます。
nodeType パラメータとして渡されるオブジェクトは、本質的にこのタイプで作成されるすべてのノードのテンプレートとして機能するため、nodeType.prototype に対して行われた変更は、このタイプのすべてのノードに適用されます。nodeData は、カテゴリ、入力、出力など、Python コードで定義されたノードの側面をカプセル化したものです。app はメインの Comfy アプリオブジェクトへの参照です(いずれにせよ、すでにインポート済みです!)
一般的なパターンは、このノードに対応する Python クラス名を保持する nodeType.ComfyClass をチェックして、ノードを変更する必要があるかどうかを判断することです。これは多くの場合、自分が追加したカスタムノードを変更することを意味しますが、他のノードの動作を変更する必要がある場合もあります(または他のカスタムノードがあなたのノードを変更するかもしれません!)。その場合は、互換性を確保するように注意してください。
beforeRegisterNodeDef において非常に一般的なパターンは、既存のメソッドを「ハイジャック」することです。
非推奨: 以下に示すプロトタイプハイジャックパターンは非推奨であり、��い将来いつでも変更される可能性があります。コンテキストメニューについては、公式の コンテキストメニュー API を使用してください。他のユースケースについては、利用可能な場合は公式の 拡張機能フック を使用することを推奨します。
?.apply により、元々メソッドが存在しない場合でも安全です)、その後追加の操作を実行します。コードのロジックによっては、置き換えコード内の他の場所に apply を配置する必要があったり、呼び出しを条件付きにする必要がある場合があります。
このようにメソッドをハイジャックする場合は、コアの Comfy コードを確認し(ブレークポイントが役に立ちます)、メソッドシグネチャを確認して準拠するようにしてください。
nodeCreated()
nodeType 上の ComfyNode() 関数のちょうど終了時)。このフックでは、ノードの個々のインスタンスに変更を加えることができます。
init()
LiteGraph オブジェクト)のメソッドをハイジャックすることで、Comfy のコア動作を変更するために使用できます。これについては Comfy オブジェクトとハイジャック で詳しく説明します。
setup()
呼び出し順序
これらの順序は、Comfyapp.js ファイルにログコードを挿入することで取得されました。実行フローを理解するために、同様のコードが役立つかもしれません。