今回は、AIイラストが生成できる ComfyUI というツールのセットアップ手順を書き残しておきます。
準備:gitのセットアップ
ComfyUI の使用に当たり、git と言うバージョン管理ツールが必須級で必要となるため、まずはこれをサクッとインストールします。
gitの入手
git の入手は公式サイトから可能。本体をダウンロードしインストールする。
まずは下記サイトにアクセス。
私の環境に合ったものは Windows 64bit なので、これのポータブル版をダウンロード。(動作環境・用途に合ったものを選択)

gitのインストール
本体は圧縮されているので都合の良い適当な位置で解凍・配置する。
ダウンロードされたファイルは自己解凍形式の圧縮ファイルになってたのでそのまま実行。

展開先を聞かれるので指定。(どこでもよい)

指定した位置にフォルダが作成される。

作成されたフォルダの中に “bin” フォルダがあるので右クリックのメニューからパスをコピーしておく。

gitのパス設定
続いてはパスの設定。パスの設定を行うことでgit関連のコマンドを呼び出しやすくする。
タスクバーのウィンドウズアイコンを右クリックしメニューからシステム設定を開く。

システムの詳細設定を開く。

環境変数を開く。

システム環境変数の “Path” をダブルクリック。(選択状態で編集でもよい)

新規を押すと新たなパスを追加できるので、先ほどコピーしたパスを貼り付けOK。

gitの起動確認
gitコマンドを実行してみて正しくパス設定が出来ているかを確認。
スタートメニューで “cmd” とタイプし、コマンドプロンプトを起動。

下記のコマンドを叩き、バージョン情報が返ればOK。
git -v

ComfyUIのセットアップ
本命、ComfyUI をセットアップする。
本体は公式サイトや github からダウンロードできる。

ComfyUIの入手
ポータブル版がほしいのでgithubから最新のバージョンをダウンロード。

ComfyUIのインストール
7-Zip形式(.7z)で圧縮されているのでどうにかして解凍し、好きな位置に展開・配置する(どこでもよい)

ComfyUIのアップデート
ComfyUI のフォルダの中(ComfyUI_windows_portable\update
)にアップデート用バッチ(update_comfyui_and_python_dependencies.bat
)があるので実行し ComfyUI を最新化する。

ComfyUIの起動
ComfyUI フォルダ(ComfyUI_windows_portable
)から起動バッチ(run_nvidia_gpu.bat
)を実行する。

バッチ実行後、コマンドプロンプトが立ち上がり、暫く待つと ComfyUI のワークフローがブラウザに表示される。また、このコマンドプロンプトを終了してしまうと ComfyUI (のプロセス)が終了してしまうので注意。

ComfyUIの停止(終了)
コマンドプロンプトで Ctrl+c
を押すと終了するか聞かれるので y
とタイプし Enter
で停止する。(ぶっちゃけコマンドプロンプトを “x” で終了させても問題ないかも…?)

これでインストールは一旦完了。
但し、初期状態だとイラスト生成に必要なモデル等が無いため動かすことが出来ない。なので以降でイラスト生成に最低限必要なコンポーネント類を追加で突っ込んでいく。
カスタムノードとモデルのインストール
ということで、カスタムノードとモデルを追加インストールする。
カスタムノード ComfyUI Manager のインストール
まずカスタムノードの ComfyUI Manager をインストールする。
ComfyUI Manager は、ComfuUIで利用するカスタムノードやモデルを管理してくれる機能があるため必須級のカスタムノードとなる。
ComfyUI Manager は github で管理されているリポジトリをローカル環境に clone する事でインストールができる。
エクスプローラーで ComfyUI_windows_portable\ComfyUI\custom_nodes
フォルダを開き、右クリックから「ターミナルを開く」を選択。

ターミナル上で git clone
コマンドを実行する。
git clone https://github.com/ltdrdata/ComfyUI-Manager

git clone
の結果にエラーがなければ ComfyUI へのインストールは完了。


インストールした ComfyUI Manager を有効化するため ComfyUI を再起動する。(ComfyUI再起動後にブラウザ側のリロードを忘れずに)
起動後、”Manager” のボタンが追加されていればOK。

以降、新たな拡張機能の追加は Manager から行うことができる。(ただし、Managerに未登録の拡張機能などはManagerのとき同様に git clone でのインストールが手順となる)
Modelのインストール
続いては Manager のメニューから「Model Manager」を選択。

「sdxl」で検索し「sd_xl_base_1.0_0.9vae.safetensors」にチェックを入れ Install。(7GB弱のファイルがダウンロードされるので注意)

インストールが完了したら ComfyUI を再起動すると Model が利用可能となる。
イラスト生成
Model まで準備が出来たので実際にイラスト生成をしてみる。
SDXLモデルを使ったイラスト生成
イラスト生成するためのシンプルなワークフローを作成した。

生成に使うプロンプトは下記。
Prompt+: best quality, ultra detailed, high resolution, 4k, 8k, extremely detailed CG, super fine illustration, Realistic, 1girl, cute face, Thin eyebrows, Clear skin, red hair, short bob, wavy hair, Blue eyes, Glossy lips, close-up portrait
Prompt-: nsfw, worst quality, bad quality, low quality, watermark
生成されたイラスト。

ワークフローの保存と形式
ComfyUI で作成したワークフローは Ctrl+s
キーを押すと(もしくはメニューから)保存しておける。保存形式はJSONで、同様の情報が生成したイラスト(PNG等の画像ファイル)にも埋め込まれる仕様になっている。つまり生成したイラストを ComfuUI にドラッグ&ドロップすれば、そのイラストが生成された時のワークフローを再現することができる。これは色々と便利。
また、保存されたJSON形式のファイル内容をコピーした状態で、ComfyUI でペースト(Ctrl+v
)することでもワークフローとして読み込むことができる。例えば、↑で生成したときのワークフローデータ↓をコピーし、ComfyUI 上でペーストすればワークフローが再現できる。
{
"last_node_id": 10,
"last_link_id": 9,
"nodes": [
{
"id": 2,
"type": "CheckpointLoaderSimple",
"pos": [
17623.00390625,
1585.1480712890625
],
"size": [
315,
98
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
9
],
"slot_index": 0
},
{
"name": "CLIP",
"type": "CLIP",
"links": [
1,
2
],
"slot_index": 1
},
{
"name": "VAE",
"type": "VAE",
"links": [
7
],
"slot_index": 2
}
],
"properties": {
"Node name for S&R": "CheckpointLoaderSimple",
"cnr_id": "comfy-core",
"ver": "0.3.15"
},
"widgets_values": [
"SDXL\\sd_xl_base_1.0_0.9vae.safetensors"
]
},
{
"id": 8,
"type": "VAEDecode",
"pos": [
18675.01953125,
1586.6004638671875
],
"size": [
210,
46
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 6
},
{
"name": "vae",
"type": "VAE",
"link": 7
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
8
],
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "VAEDecode",
"cnr_id": "comfy-core",
"ver": "0.3.15"
},
"widgets_values": []
},
{
"id": 9,
"type": "PreviewImage",
"pos": [
18889.265625,
1586.760498046875
],
"size": [
443.43865966796875,
309.67230224609375
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 8
}
],
"outputs": [],
"properties": {
"Node name for S&R": "PreviewImage",
"cnr_id": "comfy-core",
"ver": "0.3.15"
},
"widgets_values": []
},
{
"id": 5,
"type": "KSampler",
"pos": [
18355.78515625,
1586.6934814453125
],
"size": [
315,
262
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 9
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 3
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 4
},
{
"name": "latent_image",
"type": "LATENT",
"link": 5
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
6
],
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "KSampler",
"cnr_id": "comfy-core",
"ver": "0.3.15"
},
"widgets_values": [
103799754013350,
"randomize",
35,
8,
"dpmpp_3m_sde",
"karras",
1
]
},
{
"id": 7,
"type": "EmptyLatentImage",
"pos": [
18030.736328125,
2057.83837890625
],
"size": [
315,
106
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
5
]
}
],
"properties": {
"Node name for S&R": "EmptyLatentImage",
"cnr_id": "comfy-core",
"ver": "0.3.15"
},
"widgets_values": [
896,
1152,
1
]
},
{
"id": 4,
"type": "CLIPTextEncode",
"pos": [
17945.962890625,
1821.0897216796875
],
"size": [
400,
200
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
4
],
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode",
"cnr_id": "comfy-core",
"ver": "0.3.15"
},
"widgets_values": [
"nsfw, worst quality, bad quality, low quality, watermark, "
]
},
{
"id": 3,
"type": "CLIPTextEncode",
"pos": [
17947.11328125,
1585.9263916015625
],
"size": [
400,
200
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 1
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
3
],
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode",
"cnr_id": "comfy-core",
"ver": "0.3.15"
},
"widgets_values": [
"best quality, ultra detailed, high resolution, 4k, 8k, extremely detailed CG, super fine illustration, Realistic, \n\n1girl, cute face, Thin eyebrows, Clear skin, red hair, short bob, wavy hair, Blue eyes, Glossy lips, close-up portrait, "
]
}
],
"links": [
[
1,
2,
1,
3,
0,
"CLIP"
],
[
2,
2,
1,
4,
0,
"CLIP"
],
[
3,
3,
0,
5,
1,
"CONDITIONING"
],
[
4,
4,
0,
5,
2,
"CONDITIONING"
],
[
5,
7,
0,
5,
3,
"LATENT"
],
[
6,
5,
0,
8,
0,
"LATENT"
],
[
7,
2,
2,
8,
1,
"VAE"
],
[
8,
8,
0,
9,
0,
"IMAGE"
],
[
9,
2,
0,
5,
0,
"MODEL"
]
],
"groups": [],
"config": {},
"extra": {
"ds": {
"scale": 1.5845483859093314,
"offset": [
-17617.34655477108,
-1390.8832411951546
]
},
"node_versions": {
"comfy-core": "0.3.14"
},
"ue_links": []
},
"version": 0.4
}
他のモデルを使ったイラスト生成
生成するイラストのテイストは使用する Checkpoint(Model)で左右される。Checkpoint には得手不得手的な物があり、リアル、アニメ、3D、フィギュア、動物、背景や紳士向け等、生成したいイラスト合った Checkpoint を選択する必要がある。
例えば、先程イラスト生成に使用したプロンプト使い、先程とは異なる3種類の Checkpoint を使用すると下記のようになる。

モデルの入手
モデルを入手できる主要なサイトは下記。下記以外にも同様のサイトはあるので必要なら検索してみると良い。
CIVITAI
使いやすい探しやすい。各種モデルを入手できるほか、ComfyUIのワークフローやプロンプト付きのイラストが投稿・公開されているので参考になる。
CIVITAI (GREEN)
CIVITAIと同様だが、こちらは紳士向けのコンテンツが含まれない。
Hugging face
AI系のモデルや関連するライブラリなどが投稿されているサイト。CIVITA同様にモデルなどを入手できるがやや探しにくい。

さいごに
以上で ComfyUI のセットアップは完了。あとはノードの組み方やモデルの特徴だったりを覚えていく感じになるかと思う。
他にも色々と書き残しておきたい事が山とあるが、、、まぁ、気が向いたらということで。
用語について
用語の説明を書き残しますが、私の認識なので的を射ているかは怪しい…
- Qコンフィーユーアイ (ComfyUI)とは?
- A
ノードベースのワークフローの作成機能を提供してくれるツール。AIイラストを生成するためには様々な手続き(処理)が必要だが、これらを目で見て理解しやすいワークフロータイプのUI上で組み立てる事ができる。つまり、これ単体でAIイラスト生成ができるわけではない。
- Qカスタムノード(Custom node)とは?
- A
ComfyUIの様々な拡張機能。(マイクラで言うと”Mod”)
- Qモデル(Model)とは?
- A
いわゆるAIに該当するもの。イラストを生成するための指示(プロンプト)の解釈やそれに基づいたイラストの生成(描画)等をしてくれる。(Checkpoint, VAE, Lora 等)
- Qチェックポイント(Checkpoint)とは?
- A
Model の一種。もう少し書くと Stable Diffusion というモデルをベースに追加学習を施した Model のこと。この追加学習によってアニメ系のイラスト等が綺麗に出力できたりする。
- Qプロンプト(Prompt)とは?
- A
AIに対する指示というか要求と言うか、そういったもの。イラスト生成においては生成したいイラストの特徴を単語化や文章化したもので、生成したい特徴に応じてつらつらと書き綴ることになる。具体的には「1girl, blue hair, green eyes(1人の女の子、青い髪、緑の目)」といった感じ。
コメント