見出し画像

【Stable Diffusion】「ComfyUI」って?を入れて確認してみた【ComfyUI】

■記事の対象ユーザ

1.Stable Diffusion WebUIをローカルに構築して、イラスト生成している
2.最近「なんか枠が線で繋がってる画面」でStable Diffusionできるツールの記事やポストを見かける
3.WebUIと何が違うのか、何が嬉しいとかが分からない

この記事を書くまでの

■ようするに?

・LoRAとかEasyNegativeとかControlNetとか → 使える
・設定が保存・共有できる
・はやい


あぁ、まずはインストールだ・・・

(インストールは)全然難しくなかったから、WebUI構築できた皆は気楽にはじめようね。

まずはDL先(GitHub)に飛んでね

真ん中くらいにWindows用のDownloadリンクがあるよ。
ポチればすぐダウンロードがはじまるよ。1GB以上あるから気長にね。

LinuxとかMacの人はごめんね

ちなみに
WebUIの拡張機能をインストールする感じで
GithubからDLしちゃうと目的のファイルが落ちてこないから注意してね

まぬけは私です
これじゃないからね

ダウンロードできたら解凍してね。
でも「.7z」形式だから解凍できない時は7-Zipとってこようね

解凍出来たら中にある「run_nvidia_gpu.bat」を実行すると
見かけたことがある黒い画面がブラウザで立ち上がってくるよ

run_cpuはクソ重らしいからダメだよ
あっ!真剣ゼミでみたやつだ!


基本的な使い方

1.モデルの準備

早速使ってみよう、の前にWebUIと同じく
何か1つはモデルを用意しておく必要があるよ。

インストール先のmodels->checkpointsの下に置いとこうね

2.とりあえず動かしてみる

わー、なんか枠がいっぱいあるねー(白目
ここで狼狽えてはいけない。
どこかのドイツ軍人もそう言っている気がする。

初期設定。理解しようとするとカロリーを消費するね。

左から順番にいこうじゃないのさ

■モデルを選ぶところ

WebUIでいうところの一番上のやつだよ

■ポジティブ・ネガティブプロンプトを書くところ

どっちがポジティブでネガティブなのかは後述のサンプラー次第だよ

■出力サイズとバッチサイズ

バッチ回数はここにはないよ

■サンプラー設定

数が多いから補足するね

seedとかstepとかcfgはそのまんまだから割愛するけど

その下にある「control_after_generate」は
1回生成した次のシード値の値をどうするか設定できるよ。
fixed(固定)、increment(加算)、decrement(減算)、randomize(ランダム)が選べるから、WebUIの「-1」相当にしたかったら「randomize」選ぼうね。

「scheduler」は私もあんまりわかって無いけど「karras」とか選べるから
WebUIで選べるサンプラーの「DPM2 Karras」とかの関係だと思うよ。

「denoize」は恐らくアップスケーラ使う時のノイズ除去強度の事だとおもうけどWebUIだと通常は選ぶところない気がするよ。
今回は動かしてみること優先だからデフォルトの1にしとこね。

■プロンプトとサンプラーの接続
2つあるプロンプトのどっちがポジティブでネガティブなのかの答えだけど
サンプラーの「positive」と繋がっている方がポジティブプロンプトで
「negative」と繋がっているのがネガティブプロンプトだよ

幾つかプロンプト作っておいて線を繋ぎ変えるだけで実験とかできそうよね

プロンプトのCONDITIONINGから伸びてるオレンジ線の先が対応するプロンプトだよ

■VAE

モデルがVAE同梱のものならデフォルトでいいらしいよ

「VAE Decode」は左側のインプットと右側のアウトプットを繋ぐだけなので枠自体に設定する項目はないよ。

もしモデルと別にVAEを選択する場合は右クリックで出てくるメニューから
「Load VAE」を選んで枠を作り、右側のVAE〇を「VAE Decode」の左側に繋げればOKだよ。

右クリックメニュー
こんな枠が追加されるのでVAEを選ぶ

■出力先

生成した画像の頭につく文字列だよ
インストール先のoutput以下に保存されるよ

■いざ生成
お疲れさまでした。ここまで出来たらデフォルトで右下の方ある
「Queue Prompt」を実行すると生成が開始されるよ。
生成された画像はoutputフォルダに出るほか、
「Save Image」の枠にも表示されるよ。

これね
なんかでた!

WebUIで出来ることを試してみる

1.LoRA

とりあえずLCM-LoRAとかキャラLoRAとか適用したいよね。
まず最初に使いたいLoRAを所定の位置に配置してね。

ここね

配置したらComfyUIに戻って

右クリックメニューからLoad LoRAを選ぶよ

ん・・・、Load LoRA・・・?

Load Road Roller LoRA DAAAAA!!!!

Load LoRAを選ぶとこんなウィンドウが出てくるよ。
一番上に適用したいLoRA、下二つはLoRAの強度を設定するよ。

今回はLCM_LoRA_Weights_SD15.safetensors
StableDiffusionのこの状態だね

次に繋ぎ方だね。
デフォルトでは「Load Checkpoint」の出力(MODEL)が「KSampler」の入力(MODEL)に繋がっていたけど、これを追加した「Load LoRA」の入力に繋ぐよ。複数LoRAを適用する場合は下図の様に直列にMODELとCLIPをリレーするように繋いでね。
最後に出力をポジティブ・ネガティブ両方のプロンプトに繋げるよ。

モデル→LoRAと繋ぎ最後のLoRAの出力をプロンプトへ

そしてプロンプトを受けるサンプラー側だけど

LCM-LoRA向けの設定を入れておこうね

これらの設定を入れてQueurPromptすると

早くなっているね
画像もちゃんと出来てるよ

2.embeddings(EasyNegativeとか)

WebUIと使い方がさほど変わらないみたいなのでサラッと流すね。

インストールフォルダのembeddingsフォルダに配置
embeddining:「embedding名」と書く

WebUIと違うのは頭に「embedding:」を付ける必要があるくらいかな。

←適用なし、適用あり→

EasyNegative適用で、こころなしか指がきれいに描画されている気がするね

3.Hires.Fix(高画質化)

StreamDiffusion Web-UIにも標準で搭載されているアップスケーラだよ。
「KSampler」の出力を「Upscale Latent」を通して、もう1回別の「KSampler」に繋げることで実現できるよ。

上段が通常の画像生成で、下段がアップスケール
(参考)左側のインプットエリア
[Add Node]->[latent]->[Upscale Latent]を追加するよ
widthとheightにアップスケール後の解像度を指定するよ
denoiseがデフォルトだと1.0だから気をつけてね
WebUIでもデフォルトは0.7だよね

こんな感じにアップスケールできてるのが分かるね(512x512)→(1024x1024)

さてはオメー、似非インテリだな

4.ControlNet

とりあえず一番分かりやすそうなOpenPoseを例に紹介するね。

もうControlNetなしでは生きていけない・・・

■ControlNetモデルの配置
まずはWebUIと同様にControlNetのモデルをダウンロードしてこようね。
StableDiffusion WebUIを使っていてそちらにモデルがあるならコピーしてきてもOKだよ。

ダウンロードしたら以下に配置するよ。

インストール先のmodelsの下にあるよ

■ノードの追加
ComfyUIに戻ってノードを配置していくよ。
今回は次の3つのノードを追加する必要があるよ。

1.Load ControlNet Model
[Add Node] -> [loaders] -> [Load ControlNet Model]

その名の通り使うControlNetのモデルを読み込むよ
こんな感じでモデルを選ぶだけのシンプルなノードだよ

2.Load Image
[Add Node] -> [loaders] -> [Load Image]

ControlNetで参照する画像を選択できるよ
今回はOpenPoseだから棒人間を読み込ませるよ

3.Apply ControlNet
[Add Node] -> [conditioning] -> [Apply ControlNet]

これだけconditioningにあるから見つけにくいよ
設定はControlNet設定する強さだけだよ

■Nodeの接続
追加した3つのノードを繋げるよ。

こんな感じになるよ

繋ぎ方としては、「ControlNet Model」と「Load Image」の出力を
「Apply ControlNet」の入力に入れるだけだよ。
それぞれ対応している部分に接続してあげてね。

この部分ね

1つだけ余っている黄色(conditioning)はどう繋ぐのかというと、
入力:「CLIP Text Encode (Prompt)」の出力に繋ぐ
出力:「KSampler」の「positive」部分に繋ぐ
プロンプトとサンプラーの間に差し込む感じになるね。

整理するとこんな感じね

■出力してみる
出力結果を入力画像と並べてみるよ

ちゃんとOpenPose効いてるね!

5.その他

実際に手を動かすほどでもない情報なので有志の記事だけ置いておくね。

■ Clip Skip
WebUIだと設定の方に書いてあるパラメータだよ。
ComfyUIだと専用ノードがあるからそれを使う必要があるみたい。

【参考URL】Clip Skipについて(なんで2とか4とかがいいのか)

【参考URL】ComfyUIでの使い方

コメント欄にこんな感じで使うんだよとスクリーンショットがあったよ

■ プロンプトの仕様
WebUIも癖があったと思うけど、ComfyUIにも地味に癖があるから仕様は確認しようね。以下がすごい参考になったから一度目を通しておくと良いよ。

75トークン超えの方法とか、あとコメントアウトできるのは有益だったよ。

ComfyUIの何がうれしい?

まだ触り始めたばかりだからこれだ!っていう答えには至っていないけど
いくつか思いつくものとしては

1.設定を保存・共有できる

メニューに「Save」「Load」があるんだけど、ここで「Save」するとjson形式でこの設定を保存できるよ。
ローカルPCに保存しておいたjsonをComfyUIの画面に放り込むと同じノード設定を復元することができるよ。

そして驚きの機能だけど、出力したが画像ファイルでも同じことが出来るよ。出力画像をComfyUIにドラッグ&ドロップするだけでワークフローが復元できちゃう。すごい。

これによって、自分で作っておいたワークフローや他の人が配布しているワークフローを簡単に復元出来る様になるから、スクリーンショット見ながら設定コピペする手間とおさらばできるね。

メニューにあるセーブとロード
セーブで名前を決めるポップアップ表示

有志のワークフローを探せるサイトもあるので
個人のNote探すのもいいけど参考にしてみてね。

なにこれ、かっこいい

ダウンロードしたpngファイルをComfyUIにドラッグ&ドロップすると

ぐえー

このエラーは赤くなっているノードが定義されてないよって意味。
ComfyUIは有志が作ったカスタムノードで拡張ができるものなので
最近はカスタムノードありきで組まれることが多いみたいだね。

カスタムノードは「ComfyUI Manager」という拡張を入れておくと
git clone しなくても導入できるようになるから、最初にこれだけは入れておくと良いよ。

Readmeにやり方が書いてあるからこの通りで出来るよ


2.ワークフローの組み合わせ

このワークフローという形式だと、様々な組み合わせを同時に実行できるから、プロンプト1つに対してLoRAやVAEやの組み合わせを変えて別々に出力させたりとか、サンプラーの設定を変えたものを複数用意して違いを検証したりとか、WebUIだと生成毎に変更していた部分が一度に組めたりするね。

プロンプトを複数用意して接続を切り替える!・・・これは別に嬉しくないか

3.負荷が低い

地味これが一番大事な可能性あるけど
起動が早く、使うVRAMもStableDiffusion WebUIより少ないので
低負荷かつ高速に動作するので、低スペックPCとか
アニメーションとかの速度を求める作業をする人に向いてる気がするね。

おわりに

有志が半年前くらいに記事にしているような内容だったけど、自分の整理もかねて記事にしたよ。本当はAnimateDiffとかStreamDiffusionとか色々な拡張にも対応しているらしいけど、記事が膨大な量になりそうだったから今回はこの辺で切り上げるよ。

この記事をベースにComfyUIについて色々調べようと思うから、記事上がってたらよろしくね。

「また次回ね!」


この記事が気に入ったらサポートをしてみませんか?