SDXLのモデルを試すのに、執筆時点のAutomatic1111 (v1.5.1) ではネガティブTIが使えなかったりして不便だったので、いい機会だとComfyUIを触ってみました。StableSwarmUIとComfyUIでどちらを試すか悩みましたが、StableSwarmUIはまだα版で利用者が少なく情報もあまりないためComfyUIを選びました。
この記事ではComfyUIの概要を軽く解説し、導入方法 → 使い方という流れで解説していきます。
ComfyUIとは
ComfyUIは、graph/nodes/flowchartベースのUIを使用して、Stable Diffusionの画像生成を行うことができるweb UIです。Stable DiffusionのUIはAutomatic1111やSD.Nextが有名ですが、ComfyUIも独特のUIや、SDXLへの対応が早かったことから(たぶん)注目されています。
ComfyUIの特徴には次のようなものがあります。
- 生成処理の流れが可視化できる。
- ノードやフローを変更することで独自の生成方法を築くこともできる。
- ワークフローが保存されている画像を読み込むことで、自分のComfyUIで他の人のワークフローを使用することができる。
- Automatic1111より起動や動作の面で軽いらしい。
- 見た目はカッコいいが、Automatic1111などに比べて操作感がプログラミングに近いため、自分で解決できない人はお断り感がある。
導入方法
ComfyUIのインストール
ComfyUIのGitHubページInstallingに記載されている「Direct link to download」をクリックして7z
ファイルをダウンロードします。ダウンロードが完了しましたら7-Zipなどを使用して適当な場所に解凍してください。
ComfyUI_windows_portable
の中身はこのようになっています。Automatic1111でいうところのwebui.bat
がrun_cpu.bat
とrun_nvidia_gpu.bat
です。
モデルやVAEの準備
\ComfyUI_windows_portable\ComfyUI
フォルダを開くとAutomatic1111で見慣れた構成が出てきます。
通常はモデルやLoRAなどはmodels
内の該当フォルダに置きますが、これらはAutomatic1111と共有することも可能です。モデルは容量が大きいため、UIごとに分けるのではなく可能な限り共有する方が良いと思います。そのため、この記事では共有する方法について解説します。
まず\ComfyUI_windows_portable\ComfyUI\extra_model_paths.yaml.example
のファイル名末尾.example
を削除して、\ComfyUI_windows_portable\ComfyUI\extra_model_paths.yaml
とします。
その後、このファイルをテキストエディタなどで開きbase_path
にAutomatic1111のフォルダパスを指定します。デフォルトで指定されているpath/to/stable-diffusion-webui/
は#
を付けてコメントアウトしておきます。
checkpoints
やvae
、loras
などのフォルダ階層に変更を加えている場合は併せて調整してください。
以上でモデルの共有は完了です。
SDXL用のComfyUIワークフローを読み込む
ComfyUIにSDXL用のワークフローを読み込みます。
上記ページにアクセスして、2枚ある内の1枚目の画像をダウンロードします。
ダウンロードが完了したらrun_cpu.bat
とrun_nvidia_gpu.bat
のどちらかをクリックしてComfyUIを起動します。NVIDIA製GPUがある場合はrun_nvidia_gpu.bat
を使用してください。
ComfyUIが起動したら、ダウンロードしておいた画像をComfyUIの画面にドラッグ&ドロップします。すると画像が持つワークフローが読み込まれ、ComfyUIの画面が変化します。
後々カスタマイズを行うにせよ、このワークフローはいつでも呼び出せるように保存しておきましょう。
画面右の「Save」をクリックすると保存するワークフローのファイル名を求められますので入力、「OK」を押すと.json
ファイルがダウンロードされます。こちらをわかりやすい任意の場所に保存して、読み込みたい時に「Save」下の「Load」から読み込むことで、いつでもこのワークフローを使用することができます。
ComfyUIの使い方
基本操作
- マウスを左クリックしながらドラッグすることで画面やノードを移動させることができます。
- マウスホイールで画面の拡大縮小ができます。
- 画面やノードの上などで右クリックをするとあらゆるオプションが使用できます。
- 左ダブルクリックをするとノードの検索ができます。ノードはこちらから追加することもできます。
- Shiftキーを押しながらノードをクリックすると複数選択と移動ができます。
公式GitHubのShortcuts一覧も参考になるかも。
試しに画像を生成してみる
画像は画面右の「Queue Prompt」をクリックすると生成されます。SDXLのワークフローを読み込んでいれば、何もせずともダウンロードした画像と同じものが生成されるようになっているため、まずは試しに生成してみてください。ComfyUIの生成の流れの雰囲気が掴めると思います。
なお、生成された画像は\ComfyUI_windows_portable\ComfyUI\output
に保存されます。
データフローグラフの作成
データフローグラフにおけるグラフ (graph) とは、ノード (Node) とノード間の連結を示すフロー (flow) からなる構造のことを指します。ComfyUIでいうとノードは四角い箱、フローは箱から伸びる線、グラフが全体図となります。
ノードを追加するには右クリックから「Add Node」を選択します。その後、checkpointsのノードを追加したいのであれば「Loaders」→「Load Checkpoint」の順にクリックします。
フローを繋ぎたい場合は、片方のノードのポートを左クリックした状態で、もう片方のノードのポートへドラッグ&ドロップしてください。
メモを書きたい場合は「Add Node」→「utils」→「Note」からノードを追加できます。
ノード同士をグループ化したい場合には、右クリック「Add Group」からグループを作成、その中に各ノードを置くことでグループ化できます。グループ化したノードは、グループにマウスカーソルを合わせることで同時に移動させることができます。
ノードの中にはConvert機能を持ち機能を外部に出すことができるものや、他のノードとフローで繋ぐことで機能が変化するものがあります。
例えば「Add Node」→「conditioning」→「CLIP Text Encode (Prompt)」は右クリックから「convert text to input」を選択することでテキストエリアの機能を外部に移譲することができます。
「Add Node」→「utils」→「Primitive」は、「CLIP Text Encode (Prompt)」とポートを繋ぐことでテキストエリアの機能を内蔵することができます。
ノードを右クリックしてノードのタイトルや色、形など見た目を変更することもできます。またノードのプロパティも確認できます。
グループも同様で、右クリック→「Edit Group」から見た目を変更することができます。
ComfyUIではこのような操作を繰り返しデータフロー(ワークフロー)を作成します。
TI系の使い方
ネガティブTIやポジティブTIを使用する場合はAutomatic1111と使い方が異なるため注意が必要です。ComfyUIでTIをテキストエリアに記述する際はembedding:
を付ける必要があります。例えばembedding:negativeXL_A
というような表記になります。
img2img用のデータフローの作り方
img2img用のデータフローはこのような形になります。基本的にはt2iのワークフローに「Load Image」と「VAE Encode」のノードを追加するイメージです。
なお、このワークフローはCheckpoint内蔵のVAEを使用するケースを想定しています。個別に指定したい場合は「Load Checkpoint」のVAEポートから伸びるフローをすべて消し「Load VAE」ノードを「Loading images」グループに追加、「Load VAE」のVAEポートから「VAE Encode」と「VAE Decode」のVAEポートにフローを繋いでください。
実際に使いそうなワークフロー
この記事ではワークフローにComfyUI公式のSDXL用ワークフローを紹介しましたが、実際問題として現在のSDXLモデルはRefinerを使用しないケースが殆どであるため機能が少し過剰かもしれません。
そのため、実際に使用されているワークフローはこのようにシンプルなものかと思います。こちらであれば「Load Checkpoint」の他に「Load VAE」も用意されているためVAEの指定も可能です。
現段階では、SDXLにファイチューニングしたモデルやマージモデルを使用する場合は、Refinerを除いたデータグラフを作成することをおすすめします。なお、Hiers.fixやLoRAのやり方に関してはComfyUI_examplesを見ることをおすすめします。
補足
以下、説明しきれなかった細々したものを雑多に。
- KSampler/seed:生成時に加えるノイズのシード。
- KSampler/control_after_generate:seedを変更する機能。fixで固定される。
- 生成画像を拡大して確認するには「Save Image」ノードで右クリックして「Open Image」。
- 「convert ~」したノードは、右クリックから再度「convert ~」で元に戻る。
ComfyUIのアップデートは\ComfyUI_windows_portable\update
にあるbat
ファイルで行えます。\ComfyUI_windows_portable\REASME_VERY_IMPORTANT.txt
にも記載があるように、通常はupdate_comfyui.bat
を使用します。update_comfyui_and_python_dependencies.bat
はPythonの依存関係に問題がある場合にのみ使用します。
おすすめのカスタムノード
ComfyUIのおすすめカスタムノードはこちらで紹介しています。
役立ちそうなページ
最後にComfyUI関連で役立ちそうなページなどを書いておきます。
- GitHub – comfyanonymous/ComfyUI(公式リポジトリ)
- ComfyUI_examples(公式、一先ず読んだ方が良い系)
- ComfyUI Tutorial(公式)
- ComfyUI Community Manual(有志によるマニュアル)
- ComfyUI 解説 (wiki ではない)(一先ず読んだ方が良い系)
- GitHub:shingo1228/ComfyUI-send-eagle(生成画像をEagleに転送するカスタムノード)
- ComfyUI : ノードベース WebUI 導入&使い方ガイド(teftefさんのnote)
- Stable Diffusionをより理解するため ComfyUIを使ってみる(YouTube、実際の操作が見られる)
- ノードベースで動くComfyUIを使ってみる(カスタムノードEfficiency Nodes for ComfyUIの使い方が書いてある)
コメント