拡張機能、カスタムノードについて

ComfyUI の拡張機能やカスタムノードについて、簡単に紹介します。

目次

注意

公式の ComfyUI 本体は、pre alpha でありながらも後方互換性についてかなり慎重に対応を続けているのに対し、第三者による拡張機能やカスタムノードの中にはそうでもないものもあります。 実験的な実装も多いですし、更新でノードの名前が変更されることはそれほど珍しくありません。 古いカスタムノードを使用したワークフローは、読み込めても修正に手間がかかることがあるので、その点は覚悟が必要です。

カスタムノード間でノード名が重複する、などの問題も発生しています。 問題防止のため、ノード名 (Python での実装クラス名) の代わりに UUID を使う、作者名で名前空間を分けるなどの案は出ていますが、将来どうなるかは分かりません。 またこれに関連して、拡張パッケージのメタデータの標準仕様作りの議論が始まっています。

拡張機能、カスタムノードをインストールする

インストールは、それぞれの README に従えば基本的には済みます。 ここでは、インストール作業で何をやるのか理解するのに頭に入れておくと良いポイントを、一つだけ説明しておきます。

ComfyUI の拡張は、主に以下の二種類の組み合わせです。

  • web UI・フロントエンドに関わるもの。 web/extensions/ に置く。
  • サーバ・バックエンドに関わるもの。 custom_nodes/ に置く。

他には本体のコードの変更が必要なものもありますが、多くはありません。

フロントエンド拡張は、Python のコードを含みません。 公式の ComfyUI に含まれる機能やノードも、結構な数がフロントエンド拡張の形で実装されています (web/extensions/core/ の中)。

フロントエンド拡張のインストールは、大抵は、cd web/extensions/ して git clone するか、指定の .js ファイルを web/extensions/ にコピーするだけで完了します。 使用には、ブラウザで UI のリロードが必要です。 サーバの再起動は必要ありません。

バックエンド拡張は、Python のコードを含みます。 公式の ComfyUI に含まれる機能やノードのうちいくつかは、バックエンド拡張と同じ仕組で実装されています (comfy_extras/ の中)。

バックエンド拡張のインストールは、cd custom_nodes/ して git clone するものが多いです。 git を使用せず custom_nodes/ に指定のファイル一個をコピーするものも、数は少ないですが存在します (__init__.py を使用しないタイプ)。 また、フロントエンド側の web/extensions/ にもファイルを置かないといけなかったり、追加の Python パッケージのインストールやモデルのダウンロードが必要なものも多いです。 そのためのスクリプトが install.py などという名前で用意されていることもあります。 いずれの場合も、サーバの再起動が必要です。 UI のリロードも必要になることがあります。

更新する

README に従ってください。 個別のファイルをダウンロードして配置したのであれば、同じことをもう一度やるだけで済む場合が多いでしょう。 git clone したのであれば、中に入って git update で済む場合が多いでしょう。

しかし、Python のパッケージも更新しなければいけなかったりすることもあります。 README を読みましょう。

再起動、リロードに関しては、インストールと同様です。

アンインストールする

web/extensions/custom_nodes/ を確認して、インストールしたファイルやディレクトリを消せば、とりあえず動作は止まります。 その他に追加した Python のパッケージやモデルのファイルが残っていても、まず問題は起きません。

再起動、リロードに関しては、インストールと同様です。

オススメ? かもしれない? カスタムノード、約 10 選くらい?

必ずしもオススメするわけではないけれども、ぜひ確認はしておいて欲しい情報源、拡張機能、カスタムノード、別 UI 等を紹介します。

拡張ノード一覧、拡張パッケージ標準化の動き、等

まだこれらの活動は始まったばかりです。

機能追加

  • ComfyUI-Manager - https://github.com/ltdrdata/ComfyUI-Manager

    ComfyUI の中で、拡張機能やモデルの一覧を見たり、インストールを実行したりできるようにする拡張機能です。 概要説明込みで一覧表示されるので、確認しやすいです。 一覧表示のためだけでも、インストールする価値はあります。 現時点でも拡張機能、モデル、それぞれ 40種類以上がリストされており、メンテナンスもされています。 メタデータ標準化の必要性がよく理解できます。

  • ComfyUI-Saveaswebp - https://github.com/Kaharos94/ComfyUI-Saveaswebp

    ComfyUI 標準の png ではなく webp で画像を保存できるようになります。 lossless と lossy の両方に対応しており、lossy で compression 100 だと、まったく気付かない程度の画質劣化しかないのに、png に比べてファイルサイズは 25% 程度になったりします。 lossless の 80 でも 66% 程度にはなります。 ワークフローは exif として一緒に保存されます。 ワークフローの読み込みもできます。

  • ComfyUI-Custom-Scripts - https://github.com/pythongosssss/ComfyUI-Custom-Scripts

    ワークフローを SVG で保存できる Workflow SVG や、生成画像を一覧表示する Image Feed など、種々雑多な拡張です。 UI の拡張が主で、必要なものを選んでインストールできます。 公式ノードや機能の中にはここ出身のものが多くあります (NotePreviewImage、画像アップロード、など)。

  • Cutoff for ComfyUI - https://github.com/BlenderNeko/ComfyUI_Cutoff

    トークンの影響が及ぶ範囲を限定することができます。 特に、色の個別指定に便利です。

  • Advanced CLIP Text Encode - https://github.com/BlenderNeko/ComfyUI_ADV_CLIP_emb

    AdvancedCLIPTextEncode は、CLIPTextEncode の代わりです。 ウェイト (強調) の原点や正規化の方法を変更して、例えば Automatic1111 版 web UI 風にしたりできます。

  • ComfyUI Noise - https://github.com/BlenderNeko/ComfyUI_Noise

    拡散プロセスのノイズを、直接的に扱えるようにするノード集です。 面倒な標準偏差の手計算をしなくても、KSamplerAdvanced で途中まで進めたプロセスを少し巻き戻す、といったことが出来ます。 他には、単にノイズを加算するのではなくサンプリングの逆動作をする Unsampler は、アニメーションなど画像間の一貫性が欲しい場合に便利そうです。 また、latent 画像同士を混ぜ合わせる LatentSlerp といった面白いノードもあります。

  • comfy-plasma - https://github.com/Jordach/comfy-plasma

    プラズマノイズの pixel 画像を生成する "Plasma Noise" と、KSampler を高機能にした "Plasma KSampler" のセットです。 "Plasma Noise" は img2img 素材として便利です。 "Plasma KSampler" では、正規乱数の代わりに一様乱数を加えたり、通常の denoise に加えてノイズの加算割り合いを指定したりできます。

  • ControlNet Preprocessors for ComfyUI - https://github.com/Fannovel16/comfy_controlnet_preprocessors

    ControlNet や T2I-Adapter 用のプリプロセッサです。 ロードに時間がかかるのは難点です。

  • CushyNodes - https://github.com/rvion/CushyNodes

    SAM を利用して画像の内容毎のセグメンテーションを行ってそれぞれのマスクを出力する Cushy_SAM_Segment_All、CLIPSeg を利用してテキストで指定された対象のマスクを出力する Cushy_CLIP_Segmentation、マスク間で最大のオーバーラップ領域を選ぶ Cushy_Select_Mask_Overlap など、画像とマスク関係のノードを追加します。

  • ComfyUI-Impact-Pack - https://github.com/ltdrdata/ComfyUI-Impact-Pack

    顔の再構成など、大きな機能ブロックのようなノードがてんこ盛りです。 うまく使うことができれば、ワークフローが劇的にすっきりします。

    再構成に関しては、顔検出から修正までを一発で行うノードも用意されています。 分離版としては、顔検出や人体のセグメンテーションをするノードと、その結果を利用して細部を再構成するノードがあります。 SAM、MMDet、CLIPSeg と、様々なマスク作成法に対応しています。

    再構成以外では、latent 画像をいったん VAEDecode してから upscale して latent 画像に戻して出力する Latent Scale (on Pixel Space)、複数回に分けて画像を upscale する Iterative Upscale (Latent)、マスクの内外で別の設定でサンプルする TwoAdvancedSamplersForMask、生成した画像を次の job の入力にできる ImageReceiver などがあります。

    ロードに時間がかかるのは難点です。

  • WAS Node Suite - https://github.com/WASasquatch/was-node-suite-comfyui

    機能てんこ盛りです。 190 個ものノードを追加します (2023-07-12 時点)。 文字列処理、画像フィルター/エフェクト関係、マスク関係の機能は特に充実しています。 他に、数値演算、latent 画像の保存と読み込み、動画エンコードなどもあります。 13000行近い Python スクリプトです。

    ロード時に今日の一言が出力されます。 ロードに時間がかかるのは難点です。

    依存する Python パッケージ等が多く、インストールには手間どるかもしれません。 pip と setuptools は最新にしておいた方が無難です。 また、新しめの C++ コンパイラも必要です。 Visual Studio 2022 にして "Desktop development with C++" を選ぶと良いでしょう (Visual Studio 2019 では dlib のインストールができませんでした)。

別の UI

  • CushyStudio - Generative Art studio - https://github.com/rvion/CushyStudio

    ※また大規模な再構築フェーズに入ったようです。 現時点では使用はお勧めしかねます。 以下の記述は、再構築以前のものです。

    vscode の拡張です。 TypeScript のコードで ComfyUI のワークフローグラフを組み立て、実行できます。 API を直接使うよりもはるかに簡単です。 web UI では面倒な繰り返し (KSamplerAdvanced の多段チェインなど) も簡単な記述で実現できます。 型チェックは有効だし、IDE の補完機能が使えるのも便利です。 カスタムノードも、特に設定等することなく使用可能です。

    alt web frontend から始まり、中間サーバを持つようになり、electron app になり、tauri app になり、と紆余曲折あって、結局 vscode の拡張という現在の形に落ち付いた、と思ったら、更に web 関係のモジュールが追加されるようです。

  • ComfyBox - https://github.com/space-nuko/ComfyBox

    Automatic 1111 版 web UI 風の UI です。 Gradio の見た目を採用しています。 Stable Diffusion の裏側をあまり意識させないようなインターフェイスになっていますが、ComfyUI に渡されるグラフを見ることもできます。 素の ComfyUI ではやりにくい、一つの画像をインタラクティブに洗練させていくような使い方に向いています。

UI の挙動変更

  • 00-tjh-pub - https://github.com/tjhayasaka/ComfyUI
    • (左ボタンではなく) 中ボタンでパン。
    • Shift 無しでも複数ノードの移動。
    • Shift 無しでグリッドにスナップ。有りだと自由移動。
    • 背景ドラッグで (パンではなく) 複数選択。

    コードを直接書き換える形で実現しています。 導入は、インストールではなくパッチ作業になります。