ComfyUIでControlNetを使う:OpenPose・Canny・Depthで構図とポーズを制御

"ComfyUI公式のApply ControlNet文書には、ノード入力、strengthの範囲、start_percentとend_percentの挙動が記載されています。"
参照画像に合わせて生成したいのに、ポーズが崩れ、線がぼやけ、構図まで変わることがあります。プロンプトだけでは、身体の位置や輪郭、奥行きを細かく固定できません。
このような構造の制御にはControlNetを使います。OpenPoseでポーズ、Cannyでエッジ、Depthで空間関係を指定できます。次に問題になるのが、strengthの値、start_percentとend_percentの意味、複数ControlNetの競合です。
まず制御したい対象から前処理とモデルを選びます。その後に強度と適用区間を調整します。参照から外れる場合は、ノード接続、ベースモデルとの互換性、制御信号の競合を順番に確認します。
制御したい対象から選ぶ早見表
最初に決めるのは強度ではなく、残したい構造の種類です。
| 目的 | 制御の種類 | 前処理 | SD1.5でよく使われるモデル |
|---|---|---|---|
| 人物を指定したポーズで生成する | ポーズ制御 | OpenPose / DWPose | control_v11p_sd15_openpose |
| 参照画像の線に沿わせる | エッジ制御 | Canny | control_v11p_sd15_canny |
| 空間の階層と構図を維持する | 深度制御 | Depth(MiDaS / LeReS) | control_v11f1p_sd15_depth |
| 手描きスケッチをガイドにする | スケッチ制御 | Scribble | control_v11p_sd15_scribble |
| 柔らかな輪郭を維持する | ソフトエッジ制御 | SoftEdge(HED / PiDiNet) | control_v11p_sd15_softedge |
前処理を選ぶときは、次の2点を確認します。
-
OpenPoseとDWPoseはいずれもポーズのキーポイントを出力します。手や顔まで制御したい場合は、より多くのキーポイントを得やすいDWPoseを先に試せます。
-
前処理の出力はControlNetモデルが想定する形式と一致させます。OpenPoseのマップにはポーズ対応モデルが必要です。制御マップ、モデル、ベースモデル構成が合わないと、変化がほとんど出ないか、エラーになります。
モデルファイルは通常ComfyUI/models/controlnetへ置きます。ComfyUIを再起動するかモデル一覧を更新し、Load ControlNet Modelで選択します。
ControlNetパラメータ早見表
モデルを読み込んだ後は、strength、start_percent、end_percentで制御の強さと有効区間を決めます。公式の範囲と、比較しやすい開始値を使います。
| パラメータ | 範囲 | 開始値 | 効果 | 試し方 |
|---|---|---|---|---|
strength | 0〜10 | 1.0 | 制御マップの影響度 | seedを固定して1.0から少しずつ上下する。公式文書では0.5〜1.5が一般的な試行範囲 |
start_percent | 0〜1 | 0 | ControlNetが作用を始める位置 | ポーズや構図は通常0から始め、基準が動いてから遅らせる |
end_percent | 0〜1 | 1 | ControlNetが作用を終える位置 | 硬すぎる場合は0.8以下にして後半の細部を自由にする |
start_percentとend_percentの考え方
この2つは待ち時間ではなく、有効区間を表します。start_percent=0.2、end_percent=0.8なら、拡散過程の20%〜80%だけControlNetが作用します。最初と最後の20%にはこの制御がかかりません。
ポーズや構図などの大きな構造は早い段階で形成されます。ポーズを安定させるなら0から開始します。制約が強すぎる場合はstart_percent=0を保ち、end_percentを1から0.8へ下げ、後半で細部を整える余地を作ります。
全区間(start_percent=0、end_percent=1)は基準として分かりやすい設定です。まず効果を確認し、その後は一度に一つの値だけを変えます。
strengthの決め方
strengthはControlNetの影響度です。0では制御が無効になり、値を上げるほど一般には制御マップへ強く寄ります。ただし、ベースモデルやControlNetの実装によって反応は異なります。
1.0付近から始め、効果が弱ければ少しずつ上げます。人物や線が硬くなったり歪んだりしたら下げます。公式文書の0.5〜1.5は目安であり、異なる構成へそのまま適用できる固定値ではありません。
ワークフローを組む手順
基本の流れは、ベースモデルとControlNetを読み込み、参照画像を前処理し、positiveとnegativeのconditioningへ制御を加えてKSamplerへ送る形です。
手順1:ベースモデルを読み込む
ノード:Load Checkpoint
- Stable Diffusionのcheckpointを選びます。
- SD1.5、SDXL、その他のどの構成かを確認し、互換性のあるControlNetを選びます。
MODEL、CLIP、VAEの出力で基本のtext-to-imageグラフを続けます。
手順2:ControlNetモデルを読み込む
ノード:Load ControlNet Model
- ベースモデル構成と制御マップの両方に対応するモデルを選びます。
- 出力される
CONTROL_NETをApply ControlNetへ接続します。
手順3:参照画像を読み込み前処理する
ノード:Load Imageと、OpenPose Preprocessorなどの前処理ノード。
Load Image:参照画像をアップロードします。- 前処理:ポーズ骨格、エッジ、深度マップへ変換します。
- Comfy Coreにはすべての前処理が含まれません。必要ならComfyUI Managerから
comfyui_controlnet_auxを導入します。
ControlNetが読むのは前処理済みの構造マップです。先にプレビューし、手足、エッジ、深度情報が欠けていないか確認します。
手順4:Apply ControlNetを接続する
ノード:Apply ControlNet
control_net:Load ControlNet Modelから接続します。image:元画像ではなく前処理の出力を接続します。positive:positiveプロンプトのconditioningです。negative:negativeプロンプトのconditioningです。strength:最初は1.0です。start_percent:最初は0です。end_percent:最初は1です。
Apply ControlNetは新しいpositiveとnegativeのconditioningを出力します。両方をKSamplerへ接続します。KSamplerが元のconditioningを受け取っている場合、ControlNetはサンプリング経路に入っていません。
手順5:生成して比較する
ノード:KSampler
model:Load Checkpointから接続します。positive/negative:Apply ControlNetの出力を接続します。latent_image:Empty Latent Imageなどから接続します。- ControlNetの有無や値を比較するときはseedを固定します。seedが変わると制御の差が見えにくくなります。
調整前に3点を確認します。
- positiveとnegativeの両方がApply ControlNetを通って次のノードへ届いています。
image入力には前処理済みマップが入っています。- 古いワークフローの
Apply ControlNet(Old)は非推奨です。現在の標準Apply ControlNetを使います。
ベースモデルとの互換性を確認する
SD1.5、SDXL、FLUX向けのControlNet実装とモデルは相互に交換できません。ベースモデルを確認し、その構成とワークフローへの対応が明記されたモデルを選びます。
前処理とモデルの対応
| 前処理 | SD1.5でよく使われるモデル | SDXLの選び方 | FLUXの選び方 |
|---|---|---|---|
| Canny | control_v11p_sd15_canny | SDXL対応とCanny入力が明記されたモデル | 対象FLUXベースモデルとCanny対応が明記されたモデル |
| OpenPose / DWPose | control_v11p_sd15_openpose | SDXL対応とポーズ入力が明記されたモデル | 対象FLUXベースモデルとPose対応が明記されたモデル |
| Depth(MiDaS / LeReS) | control_v11f1p_sd15_depth | SDXL対応とDepth入力が明記されたモデル | 対象FLUXベースモデルとDepth対応が明記されたモデル |
| Scribble | control_v11p_sd15_scribble | SDXL対応とScribble入力が明記されたモデル | モデルカードでScribble対応を確認し、すべてのUnionが対応すると仮定しない |
| SoftEdge(HED / PiDiNet) | control_v11p_sd15_softedge | SDXL対応とSoftEdge入力が明記されたモデル | モデルカードとワークフローで対応入力を確認する |
Union系モデルは複数の制御モードを一つのモデルへまとめたもので、FLUXワークフローの選択肢の一つです。対応モード、必要ノード、適切なstrengthはモデルとワークフローの版によって異なります。
ベースモデル対応表
| ベースモデル | ControlNetの選び方 | 配置先 | 注意点 |
|---|---|---|---|
| SD1.5 | control_v11*_sd15_*は一般的な系列 | ComfyUI/models/controlnet | sd15はSD1.5向けで、SDXL向けではない |
| SDXL | SDXL対応が明記されたモデルを使う | ComfyUI/models/controlnet | 同じ制御にも複数実装があるためモデルカードに従う |
| FLUX | 対象FLUXベースモデル対応のControlNetまたはUnionモデル | ComfyUI/models/controlnet | ノード、モード、strength範囲はモデル固有で、SD1.5の設定を流用しない |
ベースモデルを選ぶ場合
まだベースモデルを決めていない場合は、Stable Diffusionモデル選択ガイドを先に確認してください。そちらではモデルの特徴と必要なリソースを比較し、ここではControlNetの互換性だけを扱います。
モデルファイルの配置先
ControlNetモデルは通常ComfyUI/models/controlnetへ置きます。ダウンロード後にComfyUIを再起動するか一覧を更新し、Load ControlNet Modelで選びます。
ファイルが増えたら、環境が対応している場合はサブディレクトリで整理できます。それ以上に重要なのは、配布元とモデルカードのリンクを残すことです。自分で付けたファイル名だけでは互換性を判断できません。
複数のControlNetを調整する
ポーズと構図を同時に制御するときはApply ControlNetを連結できます。先に各制御を単独で確認してください。動かない制御を二つ重ねると、原因の切り分けが難しくなります。
Apply ControlNetを連結する手順
最初のApply ControlNetのpositiveとnegative出力を、次の同名入力へ接続します。
-
1つ目のControlNet:
- OpenPoseモデルとポーズ制御マップを読み込みます。
strength=1.0、start_percent=0、end_percent=0.7を試します。
-
2つ目のControlNet:
- Depthモデルと深度制御マップを読み込みます。
- 低めの
strength=0.6、start_percent=0、end_percent=0.6から始めます。
-
接続順:
- プロンプトconditioning → 1つ目のApply ControlNet → 2つ目のApply ControlNet → KSamplerです。
- positiveとnegativeは同じ順序にします。
これらは排障用の開始値であり、最適値ではありません。ポーズと深度はいずれも早い段階で形成される構造なので、開始を0にし、強度と終了位置で主従を分けます。
調整の要点
最初に主従と適用区間を決めます。
主従を明確にします。
- 主制御は1.0付近から試します。
- 補助制御は0.5〜0.7など低めから始めます。
- 画像が異なる方向へ引かれる場合は、両方を上げずに補助側を下げます。
適用区間を設定します。
- 構図とポーズは早い段階で影響させるため、最初は
start_percentを0にします。 - 主制御0.7、補助制御0.6のように
end_percentを分けます。 - 後半の細部を自由にしたい場合は、制御を後半へずらすのではなく終了を早めます。
続いて次を確認します。
- 同じ種類の制御を二つ使うことは禁止ではありませんが、同じ構造を示すマップは競合と調整コストを増やしがちです。
- OpenPose + Depth、OpenPose + Cannyなど、補完関係にある信号を優先します。
- seedを固定し、単独制御と複数制御を比較します。
- 最初から両方のstrengthを高くしません。
- 一度に一つの値だけを変え、再現可能なワークフローを保存します。
- 1つ目の効果が見えるまで2つ目を追加しません。
トラブルシューティング一覧
| 症状 | 主な原因 | 確認手順 |
|---|---|---|
| ControlNetなしと同じ結果になる | マップ未接続、strengthが0付近、KSamplerが元のconditioningを使用、モデル構成の不一致 | マップをプレビューし、imageとconditioning経路を確認し、固定seedで比較し、互換性を確認する |
| ポーズや線が参照と合わない | 前処理が不適切、マップに構造がない、影響が弱い | 骨格やエッジを確認し、DWPoseやCanny設定を試し、strengthを少しずつ上げる |
| 画像が硬い、または歪む | strengthが高い、マップにノイズが多い、最後まで制御している | strengthを下げ、マップを整え、end_percentを1から0.8以下へ下げる |
| 前処理ノードが見つからない | custom node未導入、依存関係の読み込み失敗 | ComfyUI Managerでcomfyui_controlnet_auxを導入し、再起動後にログのimport errorを確認する |
| SDXLやFLUXモデルが読み込めない、効かない | モデルが構成または必要ノードに非対応 | モデルカードでベースモデル、ノード、サンプルを確認し、ファイル名だけで判断しない |
| Apply ControlNet(Old)が見つからない | 非推奨ノードが標準で非表示 | 標準Apply ControlNetへ置き換え、旧ワークフロー保守時だけ非推奨ノードを表示する |
| 複数ControlNetが競合する | マップが矛盾、補助側が強い、複数値を同時変更 | 単独で確認し、seedを固定し、補助側を下げ、適用区間を短くし、一つずつ変更する |
| 値を変えても差が見えない | seedが変化、マップの情報不足、経路がControlNetを迂回 | seedとサンプラー設定を固定し、マップを確認し、KSamplerのpositiveとnegativeの接続元を確認する |
次に確認する内容
ControlNetはプロンプトだけでは指定しにくい構造を制御します。基本ワークフローが動いたら、次の内容へ進めます。
- ComfyUIのインストールと画面操作:未導入の場合や画面に慣れていない場合の開始点です。
- ComfyUIワークフローの再利用と排障:毎回組み直さず、保存、読み込み、欠落ノードの確認を行います。
- Stable Diffusionプロンプトテンプレート:ControlNetで構造を、プロンプトで主題、スタイル、細部を指定します。
ComfyUIで基本的なControlNetワークフローを組む
ベースモデルと参照画像から始め、構造信号を前処理してサンプリング経路へ加えます。
- 1
ステップ 1: ベースモデルの構成を確認する
checkpointがSD1.5、SDXL、FLUXのどれかを確認し、明示的に互換性のあるControlNetを選びます。 - 2
ステップ 2: 参照画像を読み込み前処理する
OpenPose、Canny、Depthでポーズ、エッジ、深度の制御マップを作ります。 - 3
ステップ 3: ControlNetモデルを読み込む
モデルをComfyUI/models/controlnetへ置き、前処理と合うものをLoad ControlNet Modelで選びます。 - 4
ステップ 4: Apply ControlNetを接続する
positive、negative、control_net、前処理済みimageをつなぎ、出力conditioningをKSamplerへ送ります。 - 5
ステップ 5: 固定seedで調整する
最初にstrength 1.0、start_percent 0、end_percent 1を試し、値を一つずつ変えます。 - 6
ステップ 6: 連結前に単独動作を確認する
各ControlNetを単独で確認し、主制御と補助制御を決めて補助側の強度または適用区間を下げます。
FAQ
OpenPoseとDWPoseの違いは何ですか?
ControlNetのstrengthはいくつにすればよいですか?
start_percentとend_percentは何を表しますか?
複数のControlNetを同時に使えますか?
FLUXではどのControlNetを使いますか?
6分で読めます · 公開日: 2026年7月19日 · 更新日: 2026年7月19日
ComfyUI と Stable Diffusion シリーズ: 入門、workflow、モデル選び、prompt
検索からこのページに来た場合は、前後の記事もあわせて読むと同じテーマの理解がかなり早く深まります。



コメント
GitHubアカウントでログインしてコメントできます