ComfyUIでControlNetを使うには、ControlNetモデルを読み込むノードと参照画像を、Apply ControlNetノードでプロンプトの条件に重ね、その出力をKSamplerにつなぎます。
参照画像にポーズの骨格を渡せば姿勢を、線画を渡せば輪郭を、深度マップを渡せば奥行きのある構図を指定できます。
この記事は、ComfyUIで1枚目の画像は生成できていて、ポーズや構図を思いどおりにしたい方に向けたものです。
内容は、2026年10月18日に読んだComfyUIの公式ドキュメントと公式リポジトリの記載をもとにしています。
実機での再現は含まないため、生成結果の見え方は、手元の環境で同じ条件のまま比べて確かめてください。
ComfyUIをまだ動かしていない場合は、先にComfyUIで最初の1枚を生成する手順を済ませておくと、原因を切り分けやすくなります。
ControlNetで指定できるもの
公式ドキュメントでは、ControlNetは輪郭・深度・ポーズなどの追加の画像を受け取り、生成を導く仕組みと説明されています(ComfyUI公式:ControlNet)。
参照画像の種類ごとに、対応するControlNetモデルが分かれています。
| 指定したいもの | 渡す参照画像 | 公式チュートリアルで使われているモデル |
|---|---|---|
| ポーズ | OpenPoseの骨格画像 | control_v11p_sd15_openpose_fp16.safetensors |
| 輪郭・線 | 線画や落書き(スクリブル) | control_v11p_sd15_scribble_fp16.safetensors |
| 構図・奥行き | 深度マップ(近いほど明るい白黒画像) | control_v11f1p_sd15_depth_fp16.safetensors |
ポーズの例はPose ControlNet、奥行きの例はDepth ControlNetのページに、ワークフローと入力画像がまとまっています。
用意するものと置き場所
使うファイルは、ベースのチェックポイント、ControlNetモデル、参照画像の3つです。
| ファイル | 置く場所 |
|---|---|
| チェックポイント | ComfyUI/models/checkpoints/ |
| ControlNetモデル | ComfyUI/models/controlnet/ |
| VAE(別に使う場合) | ComfyUI/models/vae/ |
| 参照画像 | Load Imageノードからアップロードする |
ComfyUIのソースでは、ControlNetモデルの読み込み先として models/controlnet と models/t2i_adapter の2つのフォルダーが登録されています。
Desktop版や追加のモデルパスを設定している環境では、実際に参照しているフォルダーを確かめてから置きます。
公式チュートリアルで使われているControlNetモデルは、ファイル名に sd15 が入ったControlNet 1.1のモデルです。
ControlNet 1.1の公式リポジトリでは、Stable Diffusion 1.5のモデルと組み合わせる手順になっています(ControlNet 1.1 公式リポジトリ)。
SDXLなど別の系統のチェックポイントを使う場合は、そのモデルに対応するControlNetを配布元の説明で確かめて選びます。
ノードのつなぎ方
基本の画像生成の構成(Load Checkpoint・CLIP Text Encode・KSampler・VAE Decode・Save Image)に、次の3つのノードを足します。
| 英語のノード名 | 日本語表示 | 役割 |
|---|---|---|
| Load ControlNet Model | ControlNetモデルを読み込む | models/controlnet のモデルを選ぶ |
| Load Image | 画像を読み込む | 参照画像をアップロードする |
| Apply ControlNet | ControlNetを適用 | プロンプトの条件にControlNetを重ねる |
接続は次のとおりです。
| 出力元 | 接続先 |
|---|---|
| ポジティブ用のCLIP Text Encode | Apply ControlNetのpositive |
| ネガティブ用のCLIP Text Encode | Apply ControlNetのnegative |
| Load ControlNet ModelのCONTROL_NET | Apply ControlNetのcontrol_net |
| Load ImageのIMAGE | Apply ControlNetのimage |
| Apply ControlNetのpositive | KSamplerのpositive |
| Apply ControlNetのnegative | KSamplerのnegative |
Apply ControlNetにはvaeの入力もありますが、ComfyUIのソースでは省略できる入力として定義されています。
つなぎ終えたら、Queueボタンか Ctrl(Macは cmd)+Enter で実行します。
公式チュートリアルのワークフロー画像は、ComfyUIの画面にドラッグするか、Workflowsメニューの Open から開くと、ノードとつながりがそのまま読み込まれます。
読み込み方やモデルが足りないときの確認は、ComfyUIでワークフローを読み込む方法で説明しています。
古いApply ControlNetノードについて
以前のワークフローには、条件の入力が1つだけの「Apply ControlNet (Old)」が使われていることがあります。
日本語表示では「ControlNetを適用(旧)」です。
公式ドキュメントでは、このノードは初期設定で検索に出ないようになっており、新しいApply ControlNetを使うよう勧めています。
強度と効かせる区間を決める
Apply ControlNetで調整できる数値は、strength・start_percent・end_percent の3つです。
| 項目 | 日本語表示 | 初期値と範囲 | 意味 |
|---|---|---|---|
| strength | 強度 | 1.0(0〜10) | ControlNetが結果に与える影響の強さ。大きいほど強く効く |
| start_percent | 開始パーセント | 0.0(0〜1) | 生成の工程のどこから効かせ始めるか。0.2なら20%の地点 |
| end_percent | 終了パーセント | 1.0(0〜1) | どこで効かせるのをやめるか。0.8なら80%の地点 |
ComfyUIのソースでは、strengthが0のときはControlNetを使わずに条件をそのまま返す作りになっています。
参照画像に引っ張られすぎて質感や細部が崩れる場合は、strengthを下げるか、end_percentを1より小さくして後半の工程を自由にさせる方法があります。
比べるときは、シード・プロンプト・解像度を固定し、1回に1つの数値だけを変えてください。
参照画像を作る
公式ドキュメントでは、ComfyUI本体にはすべての前処理(参照画像を作る処理)が入っているわけではないと説明されています。
公式チュートリアルの例は、あらかじめ用意した骨格画像・線画・深度マップを読み込む形です。
輪郭は本体のCannyノードで作れる
ComfyUI本体には、写真やイラストから輪郭を取り出すCannyノードがあります。
英語の表示名は「Detect Edges (Canny)」、日本語表示では「キャニー」です。
low_threshold(初期値0.4)とhigh_threshold(初期値0.8)の2つの数値で、拾う線の量を調整します。
Load Imageの出力をCannyに通し、その出力をApply ControlNetのimageにつなぎます。
この場合は、Cannyの輪郭に対応したControlNetモデル(SD1.5系なら control_v11p_sd15_canny)を選びます。
ポーズや深度は前処理用のカスタムノードを使う
写真から骨格や深度マップを取り出すには、公式ドキュメントが紹介しているカスタムノードのComfyUI ControlNet auxなどを使います。
ComfyUI ControlNet auxのリポジトリには、DWPose EstimatorやOpenPose Estimator(骨格)、Depth Anything(深度)、Anime Lineart(アニメ調の線画)などの前処理ノードと、それぞれに合うモデルの一覧が載っています(comfyui_controlnet_aux)。
このリポジトリの説明では、ComfyUI Manager から入れる方法が勧められています。
入れた後にノードが見つからない、ワークフローを開くと赤いノードが出るといった場合は、ComfyUIのMissing Nodesを直す方法で確認できます。
複数のControlNetを重ねる
ポーズと線画のように、複数のControlNetを同時に使うこともできます。
公式ドキュメントでは、Apply ControlNetノードを連結して、複数の条件を順に重ねる方法が紹介されています(ComfyUI公式:Mixing ControlNets)。
Apply ControlNetは入力も出力もpositiveとnegativeなので、1つ目の出力を2つ目の入力に渡し、最後の出力をKSamplerにつなぐ形になります。
同じページでは、画面の別の場所をそれぞれ制御する場合、強度をそろえる(例では両方とも1.0)ことが勧められています。
片方の強度だけが大きいと、その範囲がもう一方を押しのけてしまうためです。
プロンプトには、制御したいそれぞれの対象を書いておくことも勧められています。
1人の人物にポーズと深度を重ねるような使い方では、参照画像どうしが同じ対象の同じ位置にそろっている必要があります。
ControlNetを増やすほど処理は重くなるため、VRAMが足りなくなった場合はComfyUIでVRAM不足になるときの対処法を参考にしてください。
効かないときの確認順
- Apply ControlNetの出力が、KSamplerのpositiveとnegativeにつながっている
- Apply ControlNetがバイパスされていない
- strengthが0になっていない
- ControlNetモデルがチェックポイントと同じ系統(SD1.5系どうしなど)になっている
- 参照画像の種類と、ControlNetモデルの種類が合っている(骨格画像にはポーズ用、線画には線画用)
- 前処理が必要な写真を、そのまま渡していない
エラーが出る場合は、モデルの読み込みで止まっているのか、生成中に止まっているのかを分けて見ます。
採用した画像は、ワークフロー、チェックポイント名、ControlNetモデル名、strengthと開始・終了の値、シードを一緒に残しておくと、後から同じ結果を作り直せます。
画風を足したい場合は、ComfyUIでLoRAを使う方法と組み合わせることもできます。
