text2imageとは?
テキストプロンプトを入力して、画像を生成します。
より本質的にいえば、テキストプロンプトという条件 で拡散モデルを制御します。
これから作るworkflow全ての基礎となるものです。ゆっくり見ていきましょう。
画像生成AIの仕組み
本当に簡単にですが、こちらで解説しています。
全く画像生成AIの仕組みを知らない方は、軽く目を通してみてください。パラメータの意味が少し分かるようになると思います。
モデルのダウンロード
全ての始まりである、Stable Diffusion 1.5 を使い、解説していきます。
📂ComfyUI/
└── 📂models/
└── 📂checkpoints/
└── v1-5-pruned-emaonly-fp16.safetensors
workflow

各ノードについて

Load Checkpoint ノード
古い形式の Checkpoint モデルを読み込みます。
- Checkpointは 拡散モデル / テキストエンコーダ / VAE が一つのパッケージにまとめられたものです。
- 初期はこの形式で配布されることが多かったのですが、現在は別々に配布されることがほとんどです。
- そのため、Load Diffusion Model / Load CLIP / Load VAE など、別々のノードを使うことになります。

Empty Latent Image ノード
画像生成の「出発点」となる、空の潜在画像(latent)を作ります。
- 作成したい画像のサイズを指定します。

CLIP Text Encode ノード
テキストプロンプトを、モデルが理解できるConditioningに変換します。
- 生成したいものを「positive プロンプト」、避けたいものを「negative プロンプト」として、別々のノードで用意します。
- ただ、このノード自体に
positive/negativeの概念があるわけではありません。 - 次のKSamplerの
positiveスロットに入力すればpositiveとして、negativeスロットに入力すればnegativeとして扱われます。

KSampler ノード
Sampling(ノイズ除去)を行う、画像生成の中核となるノードです。
- 上記のノード(Model / Positive / Negative / Latent)をすべて接続して使います。
seed: ノイズの形を決める値。同じ設定なら同じ画像を再現できます。control_after_generate: 画像生成ごとに seed をどう変化させるかを決めます。fixedはそのまま、randomizeは毎回ランダム。steps: ノイズを消すステップ数です。ほとんどのモデルでは20あれば十分です。cfg: プロンプトの効き具合を決めます。sampler_name: どのサンプリングアルゴリズムを使うかを選びます。基本Eulerで良いです。scheduler: 各ステップでノイズをどの順番・強さで減らしていくかの種類です。denoise: 詳しくは[KSamplerAdvanced]で解説します。text2image では1.0にします。

VAE Decode ノード
latentをピクセル画像に変換します。
VAEを変更する
Stable Diffusion1.5のVAEは、正直あまり性能がよくありません。ファインチューニングモデルを使うと、変な色の画像が生成されることもあります。
その後、改良されたVAEが発表されました。他にも色々なVAEが発表されていますが、Stable Diffusion 1.5のVAEは、これを使えば問題が出ることはほぼありません。
VAEのダウンロード
📂ComfyUI/
└── 📂models/
└── 📂vae/
└── vae-ft-mse-840000-ema-pruned.safetensors
workflow

- 🟥
Load VAEノードを追加し、先程ダウンロードしたVAEを選択。- VAE Decodeに繋ぎます。
今後のworkflowはこれをベースにします。
初心者がコケそうな疑問
当然のように扱われていますが、よく考えれば画像生成特有で不思議なもの、というのはいくつかあります。
それらについて別ページで簡単に解説しています。
- 同じパラメータを使ってもStable Diffusion web UIとComfyUIで同じ画像は生成できない
- 512px × 512pxで生成するのはなぜ?
- 8の倍数の解像度しか生成できないのはなぜ?
- Seed値"1234"と"1235"は全く別物
プロンプトの書き方
Stable Diffuision 1.5 / SDXLで使われている、テキストエンコーダのCLIP は、お世辞にも性能が良いものではありません。そのため、望んだ画像を生成するために、プロンプトエンジニアリングや呪文と言われるようなテクニックがありました。
タグ列挙
CLIPは文章を読めるわけでは無いので、文章としてプロンプトを書いてもあまり意味はありません。
1girl, solo, upper body, looking at viewer, smile, outdoors, sunset
そのため、このように単なるタグ列挙という形でプロンプトを書くことが多かったです。
また、アニメ系モデルは、Danbooruというサイトの画像・その画像を整理するためのタグをそのまま使っていました。それゆえ、Danbooruで使われてるタグを調べてそのまま使う、ということをしていましたね。
品質呪文
(best quality, masterpiece, ultra detailed, 8k, HDR, sharp focus, highly detailed)
このように、品質を高めそうなワードをひたすら最初に書く、ということをしていました。
今思うと意味があるんだかわかりませんが、どのワードがどれくらい効いているかわからなかったので、ひたすら書いていったのです。
Negative Prompt
bad anatomy, extra fingers, extra limbs, blurry, lowres, jpeg artifacts, ...
先ほどとは逆に、品質を下げそうなワードをネガティブプロンプトにひたすら書いていました。これらもどれほど効果があったのやら……
注目度記法
プロンプトの各ワードに(red:1.05) / (blue:0.9)のように数値を設定することで、そのワードの重要度を変更できます。
CLIP はプロンプトの前にあるテキストを重視する傾向があり、後半に書いたものほど効きづらくなります。また、ワードによっても、よく効くものとあまり効かないものがあります。
それを手動で調整するために、この注目度記法を使用します。
ただし、これがうまくいくのはあくまでCLIPがその言葉を理解しているときです。
知らないであろう言葉に(Ghoti:999)などとつけても意味はありません。
- 注目度を変えたいワードにカーソルを置き、
Ctrl + 矢印↑/↓をすると、0.05ずつ調整できます。