私的AI研究会 > ComfyUI3
画像生成AI「ComfyUI」3(応用編)†
「ComfyUI」を使ってローカル環境でのAI画像生成を検証する
▼ 目 次
▲ 目 次
※ 最終更新:2026/03/04
「ComfyUI」『ControlNet』†
「ComfyUI」で『ControlNet』を使用する
ControlNet とは何か?
・ControlNet は、既存の画像生成モデルに「制御」の要素を加える技術
これまでの画像生成 AI は、プロンプト(テキストによる指示)のみで画像を生成していた
そのため、言語で表現しきれない要素はランダム性が強く、ユーザーの意図通りにならないことも多くあり ControlNet は、この問題を解決するために開発された
・ControlNet を使用すると、プロンプトに加えて追加の情報を AI に与えることができる
この追加情報には、画像の輪郭線、深度情報、ポーズ、セグメンテーションマップなど、様々な種類がある
AI はこれらの情報をもとに、よりユーザーの意図に合致した画像を生成することができるようになる。
画像引用:→ https://note.com/aicu/n/n151f019bcc92
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. MLSD
MLSD (Multi-Level Line Segment Detector) は、画像から直線を検出することに特化した ControlNet。建物や道路、家具など、直線的な要素が多い画像から、正確な直線情報を抽出することができる。
MLSD 目的 用途
建築物や都市景観の画像生成 建物の輪郭や道路のラインなどを正確に捉え、リアルな都市景観を生成できる
幾何学模様のデザイン 直線や多角形を組み合わせた幾何学模様のデザインを作成する際に役立つ
パースペクティブの修正 写真の歪みを修正したり、パースペクティブを強調したりする際に利用できる
プロジェクトで作成するワークフロー†
ワークフローと動作環境による生成時間(分:秒)
ワークフロー 機 能 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」モデルに対応したプリプロセッサ ノード名称†
更新履歴†
2025/10/28 初版
2025/10/31 ページ構成変更
参考資料†