私的AI研究会 > ComfyUI3
画像生成AI「ComfyUI」3(応用編)†
「ComfyUI」を使ってローカル環境でのAI画像生成を検証する
▼ 目 次
▲ 目 次
※ 最終更新:2026/03/09
「ComfyUI」『ControlNet』†
「ComfyUI」で『ControlNet』を使用する
ControlNet とは何か?
・ControlNet は、既存の画像生成モデルに「制御」の要素を加える技術
これまでの画像生成 AI は、プロンプト(テキストによる指示)のみで画像を生成していた
そのため、言語で表現しきれない要素はランダム性が強く、ユーザーの意図通りにならないことも多くあり ControlNet は、この問題を解決するために開発された
・ControlNet を使用すると、プロンプトに加えて追加の情報を AI に与えることができる
この追加情報には、画像の輪郭線、深度情報、ポーズ、セグメンテーションマップなど、様々な種類がある
AI はこれらの情報をもとに、よりユーザーの意図に合致した画像を生成することができるようになる。
引用:→ https://note.com/aicu/n/n151f019bcc92
ControlNet サイト内過去の検証ページ(参考)
ControlNet の種類と特徴
1. Pose Estimation(ポーズ推定)
入力画像から人間の骨格情報(ポーズ)を推定し、そのポーズを元に画像を生成する。ポーズ推定には、OpenPoseなどのAIモデルが用いられる。OpenPoseは、画像から人間の関節の位置を検出し、骨格を推定することができる。
OpenPose 目的 用途
キャラクターデザインやイラスト制作で、特定のポーズを表現 人物の写真からポーズを推定し、そのポーズを元に、アニメキャラクターや漫画キャラクターを生成することができる
ダンスやスポーツの動きを分析 ビデオからポーズを推定することで、ダンスやスポーツの動きを分析することができる
モーションキャプチャ 人間の動きを計測し、その動きを3DCGキャラクターに反映させることができる
2. Canny Edge(キャニーエッジ)
入力画像からエッジ(輪郭線)を検出し、そのエッジを元に画像を生成する。エッジ検出には、Cannyアルゴリズムと呼ばれる手法が用いられる。Cannyアルゴリズムは、ノイズの影響を受けにくく、正確なエッジを検出することができるため、ControlNetで広く利用されている。
Canny 目的 用途
特定の形状を維持したまま、スタイルやテクスチャを変更 建物の写真からエッジを検出し、そのエッジを元に、建物のスタイルを和風や洋風に変更することができる
スケッチや線画を元に、リアルな画像を生成 手描きのスケッチや線画からエッジを検出し、そのエッジを元に、写真のようなリアルな画像を生成することができる
ロゴやイラストのトレース ロゴやイラストをスキャンしてエッジを検出し、そのエッジを元に、ベクター画像を作成することができる
3. Depth Map(深度マップ)
入力画像の奥行き情報を利用して、立体感のある画像を生成する。奥行き情報は、画像中の各ピクセルがカメラからどれだけ離れているかを表す情報。深度マップは、白黒画像で表現され、白い部分が近く、黒い部分が遠くを表す。
Depth 目的 用途
3D的な表現や、奥行きを強調 風景写真から深度マップを生成し、その深度マップを元に、より奥行き感のある風景画を生成することができる
ミニチュア風写真 通常の写真から深度マップを生成し、その深度マップを元に、ミニチュア模型のような写真を作成することができる
背景のぼかし 深度マップを利用して、被写体以外をぼかした写真を作成することができる
4. Lineart
Lineartは、画像から線画を抽出する ControlNet。Canny Edge や HED boundary も線画を検出できるが、Lineart は特にアニメや漫画のような線画スタイルの画像に特化している。
Lineart 目的 用途
アニメ・漫画風画像の生成・編集 新しい製品のアイデアをスケッチし、そのスケッチを元に、製品の完成イメージを生成することができる
ラフ画からイラストを生成 簡単なラフ画を元に、詳細なイラストを生成することができる
ストーリーボード作成 映画やアニメのストーリーボードを作成する際に、Scribble ControlNetを利用して、各シーンのイメージを生成することができる
5. Scribble(落書き)
簡単な手描きの線画から、詳細な画像を生成する。Scribble ControlNet は、線画を元に、画像の内容を推定し、その内容に沿った画像を生成する。
Scribble 目的 用途
アイデアのスケッチを元に、具体的なビジュアルを得る 線画を強調したイラストを作成したり、既存の画像を線画化したりすることができる
イラストの着色 線画を抽出後、ControlNetと組み合わせて自動的に着色したり、手動で着色したりすることができる
線画のクリーンアップ スキャンした線画のノイズ除去や線の補正など、線画の編集作業に利用できる
6. Segmentation Map(セグメンテーションマップ)
入力画像を複数の領域に分割し、各領域にラベルを付けたもの。セグメンテーションマップは、画像中のどの部分がどのオブジェクトに対応するかをAIに教えるために使用される。
Segmentation 目的 用途
シーン全体の構成をコントロール 風景写真をセグメンテーションマップで分割し、「空」・「海」・「山」などのラベルを付けることで、それぞれの領域の色やテクスチャを個別に制御することができる
画像編集 セグメンテーションマップを利用して、特定のオブジェクトだけを切り抜いたり、色を変更したりすることができる
自動運転 自動運転システムでは、セグメンテーションマップを利用して、道路、歩行者、信号機などを認識している
7. Shuffle
入力された画像を分解し、その色合いやスタイルを活用して新たな画像を生成する。元画像そのものがプロンプトの役割を果たす
Shuffle 目的 用途
元の画像が持つスタイルや色を継承した新しいバリエーション 夕焼けの風景画像を元画像として使用すると、生成される新しい画像も夕焼けの色合いや雰囲気を自然に反映したものになる
8. MLSD
MLSD (Multi-Level Line Segment Detector) は、画像から直線を検出することに特化した ControlNet。建物や道路、家具など、直線的な要素が多い画像から、正確な直線情報を抽出することができる。
MLSD 目的 用途
建築物や都市景観の画像生成 建物の輪郭や道路のラインなどを正確に捉え、リアルな都市景観を生成できる
幾何学模様のデザイン 直線や多角形を組み合わせた幾何学模様のデザインを作成する際に役立つ
パースペクティブの修正 写真の歪みを修正したり、パースペクティブを強調したりする際に利用できる
9. Normal map (法線マップ)
Normal map(法線マップ)は、画像の表面の向きを表す情報です。各ピクセルに、その地点における表面の法線ベクトル(表面に対して垂直なベクトル)の情報が格納されている。法線マップは、3Dグラフィックスで物体の表面の陰影や反射を表現するために広く使われている。
Normal map 目的 用途
3Dモデルのような立体的な画像生成 法線マップの情報を利用することで、光源の位置や強さを考慮した、リアルな陰影表現が可能になる
金属やガラスなどの質感表現 法線マップは、金属の光沢やガラスの透明感など、材質感を表現するのにも役立つ
彫刻やレリーフのような表現 法線マップを利用することで、画像に彫刻やレリーフのような凹凸感を表現することもできる
10. Pidi (Softedge)
Pidi (Softedge) は、画像からソフトなエッジを検出する ControlNet。Canny Edge やH ED boundary のようなシャープなエッジではなく、ぼかしのかかったような滑らかなエッジを抽出する。Pidi は、softedge という別名でも知られている。
Softedge 目的 用途
水彩画やパステル画のような、柔らかいタッチの画像生成 ソフトなエッジは、水彩画やパステル画など、境界線がぼやけた表現に適している
被写体の輪郭を強調しながら、自然な雰囲気を保つ シャープなエッジでは硬すぎる印象になる場合に、Pidiを用いることで、より自然で優しい雰囲気の画像を生成できる
写真から絵画風に変換 写真のエッジを Pidi でソフトにすることで、絵画のような風合いを出すことができる
11. Tile
Tile は、入力画像をタイル状に繰り返し配置して、シームレスなパターンを生成する ControlNet。元絵の構図や特徴を維持した状態で画像生成が可能。
Tile 目的 用途
画像のアップスケール 低解像度の画像を高解像度に変換する際に使用されます。Tileモデルは、画像の細部を補正し、テクスチャを改善することで、より高品質な画像を生成する
細部の補正 生成された画像の細部を修正する際に使用されます。Stable Diffusionが細部の調整に苦手な場合、ControlNet Tileを使用して、画像の細部を微調整することができる
質感やテクスチャの変更 画像の質感やテクスチャを変更する際に使用される。ControlNet Tile は、肌の質感を調整したり、アニメ風にしたり、自由度の高い変更が可能
プロジェクトで作成するワークフロー†
ワークフローと動作環境による生成時間(分:秒)
ワークフロー 機 能 CPU CPU
RTX 4070 RTX 4060 RTX 4060L RTX 3050 GTX 1050 i7-1260P i7-1185G7
t2i_controlnet_openpose.json bs_text2img_controlnet.json Open Pose 画像からポーズ抽出 00:12.27 00:15.70 00:35.19 00:27.38 01:16.45 08:56.46 07:37.76
t2i_controlnet_openpose_s.json 00:02.68 00:04.79 00:05.72 00:10.35 00:58.57 08:28.84 07:00.77
t2i_controlnet_canny.json Canny 画像から輪郭抽出 00:04.74 00:07.29 00:05.96 00:15.18 01:00.93 08:33.17 07:04.70
t2i_controlnet_depth.json Depth 画像から震度抽出 00:07.53 00:11.41 00:07.85 00:21.14 01:20.50 08:39.65 08:19.09
t2i_controlnet_lineart.json LineArt 画像から輪郭抽出 00:06.88 00:09.43 00:13.49 00:16.48 01:04.09 08:41.58 07:07.72
t2i_controlnet_Scribble.json Scribble 画像から輪郭抽出 00:05.07 00:08.06 00:08.04 00:13.77 01:01.03 08:10.12 07:00.35
t2i_controlnet_Segment.json Segmentation セグメント分け 00:08.54 00:11.59 00:15.29 00:21.14 01:12.83 17:03.79 07:50.29
t2i_controlnet_Shuffle.json Shuffle シャッフル 00:04.90 00:07.07 00:07.62 00:14.63 01:00.89 08:06.06 07:04.18
t2i_controlnet_MLSD.json MLSD 画像から直線抽出 00:06.99 00:10.03 00:14.20 00:16.77 01:04.49 07:24.77 07:02.57
t2i_controlnet_Normalmap.json Normalmaps 法線マップ 00:07.11 00:09.91 00:12.33 00:18.34 01:10.01 19:34.86 07:41.75
t2i_controlnet_SoftEdge.json Soft Edge 画像から輪郭抽出 00:05.14 00:07.84 00:09.05 00:15.08 01:02.06 09:03.51 07:03.79
t2i_controlnet_tile.json Tile 画像4倍拡大 00:04.07 00:07.58 00:07.77 00:14.92 01:01.13 08:58.65 06:58.09
カスタムノードのインストール †
『ComfyUI's ControlNet Auxiliary Preprocessors』 のインストール
1.「Manager」ボタンを押し「ComfyUI Manager」から「Custom Nodes Manager」を選択
2. 希望するノードが表示されていない場合は「ControlNet」を検索。インストールするノードの「Install」を押す
Title:
comfyui_controlnet_aux
3. バージョン番号を選択(基本「latest」を選択)
4. インストールが完了すると、ComfyUI の再起動を求められるので、下部の「Restart」ボタンを押す
5.「Confirm」(確認)ボタンを押すとインストール開始する
6. インストール完了すると再度確認ウインドウが開く(別のウインドウがオープンするので閉じる)
7.「ComfyUI Manager」でインストール完了となっていることを確認してブラウザと「Stability Matrix」を終了する
← インストール完了後の状態
『ControlNet』で使用する基本ノード†
3つのノードを組み合わせて使う
①「Load Controlnet Model」ノード
・ControlNet のモデルを読み込む
② ①に対応した preprocessor ノード(ここでは「OpenPose Pose」)
・モデルごとの対応 → https://github.com/Fannovel16/comfyui_controlnet_aux
③「Apply ControlNet」ノード
・ControlNet を適用して positive,negative のプロンプトに注入して送り出すノード
④「Load Image」ノード
・ControlNet に入力する画像を指定するノード
⑤「Preview Image」ノード
・ControlNet の処理画像を表示する(なくてもよい)
⑦ 各ノードを左図のように接続する
Open Pose 『text2img』で『ControlNet』を使用する基本ワークフロー†
画像からポーズを抽出して生成できる「OpenPose」を例にする
text2img 生成画像 Checkpoint (Model) Seed Sampler Steps Clip skip
beautifulRealistic _brav5 584105828 DPM++ 2M Karras 20 1
Prompt
best quality,masterpiece,ultra high res,photorealistic,RAW photo,a beautiful japanese woman,20yo,portrait,standing,looking at viewer,smile,t-shirt,in garden
最高品質、傑作、超高解像度、フォトリアリスティック、RAW写真、美しい日本人女性、20歳、ポートレート、立っている、見る者を見て、笑顔、Tシャツ、庭で
Negative prompt
illustration, 3d, sepia, painting, cartoons, sketch, worst quality, backlight, bad anatomy, bad hands, double navel, collapsed eyeshadow, multiple eyebrows, freckles, signature, logo, 2faces,
イラスト、3D、セピア、絵画、漫画、スケッチ、最悪の品質、バックライト、悪い解剖学、悪い手、二重のおへそ、崩れたアイシャドウ、複数の眉毛、そばかす、署名、ロゴ、2つの顔、
「_base/」 bs_text2img.json 『text-to-image』基本ワークフローを読み出す
①「bs_text2img.json」ワークフローをキャンバス上にドラッグ&ドロップする
② 前項『ControlNet』で使用する基本ノード ① ~ ⑤ を配置する
・ ① ~ ⑤ ノードを接続する
③「Ksampler」の positive, negative の接続を外し「Apply ControlNet」に接続する
④「Apply ControlNet」の positive, negative 出力を「Ksampler」の入力に接続する
⑤「Load Checkpoint」の VAE を 「Apply ControlNet」vae 入力に繋ぐ
⑥「Load Image」ノードに入力画像をドラッグ&ドロップする
『text-to-image』+『ControlNet』OpenPose 基本ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_openpose.json ,「_base/」 bs_text2img_controlnet.json
姿勢推定画像(棒人間の画像)を入力する場合
・「Load Image」のノードに棒人間の画像を入力している場合は「Openpose Pose」のノードは不要
・予め作られているポーズをダウンロードできるサイト → OpenPoses
・「Openpose Pose」 ノードを右クリックで bypass を選択する
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_openpose_s.json
Canny 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「bs_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで canny を選択する
③ プリプロセッサとして「Canny Edge」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』Canny ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_canny.json
Depth 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで depth を選択する
③ プリプロセッサとして「Depth Anything」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』Depth ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_depth.json
LineArt 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで lineart を選択する
③ プリプロセッサとして「AnyLine Lineart」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』LineArt ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_lineart.json
Scribble 『text2img』+『ControlNet』†
「_base」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで scribble を選択する
③ プリプロセッサとして「Scribble Lines」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』Scribble ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_Scribble.json
Segmentation 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで segmentation を選択する
③ プリプロセッサとして「SAM Segmentor」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』Segmentation ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_Segment.json
Shuffle 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで shuffle を選択する
③ プリプロセッサとして「Content Shuttle」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』Shuffle ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_Shuffle.json
MLSD 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで MLSD を選択する
③ プリプロセッサとして「M-LSD Lines」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』MLSD ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_MLSD.json
Normalmaps 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで nornmalbase を選択する
③ プリプロセッサとして「MDaS Normal Map」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』Normalmaps ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_Normalmap.json
Soft Edge 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで softedge を選択する
③ プリプロセッサとして「PiDiNet Soft-Edge LLines」 ノードに入れ替える
④ 基本ワークフローと同じように接続しなおす
『image-to-image』Soft Edge ワークフローの完成
①「Run」を押して画像を生成する
※ ワークフロー:「_base_t2i/」 t2i_controlnet_SoftEdge.json
Tile 『text2img』+『ControlNet』†
「_base/」 bs_text2img_controlnet.json 『text-to-image』ControlNet 基本ワークフローを読み出す
①「test_text2img_controlnet.json」ワークフローをキャンバス上にドラッグ&ドロップする
②「Load Controlnet Model」ノードのモデルで tile を選択する
③ プリプロセッサとして「Tile」 ノードに入れ替える
④「Upscale Image By」ノードを「Load Image」「Tile」の間に入れて scale_by を 4倍にする
⑤ 基本ワークフローと同じように接続しなおす
『image-to-image』Tile ワークフローの完成
①「Run」を押して画像を生成する(入力画像を4倍に拡大)
※ ワークフロー:「_base_t2i/」 t2i_controlnet_tile.json
「ControlNet」モデルに対応したプリプロセッサ ノード名称†
モデルごとの対応表 → 詳細:公式 GitHub
・モデルの設置場所:「StabilityMatrix/Data/models/ControlNet/」
更新履歴†
2025/10/28 初版
2025/10/31 ページ構成変更
2026/03/05 概要 追加
参考資料†