ComfyUIで複数のControlNetを使うには、Apply ControlNetノードを直列につなぎ、前のpositive・negativeを次のノードへ渡します。ただし、接続できることと狙いどおりに効くことは別です。単独で成功した条件だけを一つずつ足し、強度と適用範囲を片方ずつ動かし、追加のたびにVRAMと時間を記録するのが遠回りに見えて最短です。
情報確認日:2026年8月22日(日本時間)
結論:直列につなぎ、単独で効いた条件から一つずつ足す
責任範囲
- Apply ControlNetを2段つなぐときの配線と、現行ノードの項目名を整理する
- strength・start_percent・end_percentを複数系統でどう配分するかを決める手順を示す
- PoseとDepthが同じ構造を取り合って破綻する典型例と、その見つけ方を説明する
- IP-Adapter・LoRAを重ねるときの順番と、制御を一度に全部強くしない理由を述べる
- 単独ControlNetの導入・preprocessorの基礎はComfyUIでControlNetを使う方法に任せる
複数ControlNetを使う意味はどこにあるか
ControlNetを2系統使う理由は、1種類の条件では渡せない情報を分担させるためです。OpenPoseは関節の位置を伝えますが、体の厚みや背景との前後関係は持ちません。Depthは前後関係を伝えますが、手の向きや指の形は曖昧なままです。人物のポーズを固定しつつ、背景の奥行きも参照画像どおりにしたい場面では、この二つを同時に与えると目的に近づきます。
逆に言えば、伝えたい情報が1種類で足りるなら、2系統にする理由はありません。Cannyで輪郭を固定すれば済む線画の着色に、Depthまで足すと、輪郭と奥行きの両方が同じ場所を主張して硬い絵になります。「足りない情報は何か」を先に言葉にし、それを補う種類だけを追加します。
| 組み合わせ | 分担 | 向く場面 |
|---|---|---|
| OpenPose+Depth | 関節の位置+前後関係 | 人物のポーズと背景の奥行きを両方そろえたい |
| Canny+Depth | 輪郭+前後関係 | 建物や室内の線を保ちつつ立体感を残したい |
| OpenPose+Canny | 関節+輪郭 | 衣装の形まで参照画像に寄せたい(競合しやすい) |
表の3行目のように、二つの条件が同じ領域の同じ構造を指定する組み合わせほど競合が起きやすくなります。この点は後の「条件が競合する場面」で扱います。
2系統をどの順で追加するか
最初から2系統をつないで調整を始めると、結果が悪いときに「配線が間違っているのか」「片方が強すぎるのか」「そもそも単独でも効いていないのか」を切り分けられません。次の順で、各条件を単独で成功させてから併用します。
- 1
ControlNetなしの基準画像を作る
checkpoint・prompt・seed・size・steps・samplerを固定し、この後すべての比較で同じ値を使う
- 2
Poseだけを足して成功させる
preprocessorのpreviewで関節が検出できているかを確かめ、strengthを決める
- 3
Poseを外し、Depthだけを足して成功させる
同じseedでDepth単独の強さを決める
- 4
両方をつないで同じseedで生成する
単独で決めた値のまま重ね、どちらが負けているかを見る
配線は、1段目のApply ControlNetが出すpositiveとnegativeを、2段目のApply ControlNetのpositiveとnegativeに入れます。2段目の出力をKSamplerへつなぎます。Load ControlNet Modelと参照画像は系統ごとに別のものを用意します。
CLIP Text Encode (positive) ─┐
CLIP Text Encode (negative) ─┤
▼
Apply ControlNet ① control_net: OpenPose model / image: pose map
positive ─→ Apply ControlNet ② control_net: Depth model / image: depth map
negative ─→ positive ─→ KSampler
negative ─→ KSampler
現行のApply ControlNet(2026年8月時点、内部名ControlNetApplyAdvanced)は、positive・negative・control_net・image・strength・start_percent・end_percentを持ち、任意でvaeを受け取ります。表示名が「Apply ControlNet (DEPRECATED)」になっている旧ノードはconditioningが1本しかなく、2段構成には向きません。配布workflowに旧ノードが残っていたら、現行ノードへ置き換えてから進めてください。
順番は固定しない:Pose→Depthの順でもDepth→Poseの順でも、どちらの条件もconditioningに加算されます。ただし、内部の処理順や実装の更新で結果が変わる可能性はあるため、順番を入れ替えたら同じseedで比較し、採用した順番を記録に残します。
strengthと適用範囲をどう配分するか
2系統になったら、動かす項目は一度に一つだけにします。Poseのstrengthを動かしている間はDepth側を固定し、決まってからDepth側を動かします。両方を同時に動かすと、どちらの変更が効いたのか結果から読み取れません。
公式のチュートリアルは、領域が異なる複数ControlNetを混ぜる際、一方の強さが極端に高いと、その領域の制御が他方を抑え込むと説明しています。出発点は両方を同程度の値にし、問題が出た側だけを下げるのが筋です。
| 項目 | 役割 | 2系統での考え方 |
|---|---|---|
| strength | 条件をどれだけ強く効かせるか(既定1.0) | 両方同程度から始め、勝ちすぎている側を下げる |
| start_percent | denoisingのどこから効かせ始めるか(既定0.0) | 構図担当は0から。細部担当は少し遅らせる選択肢がある |
| end_percent | どこまで効かせるか(既定1.0) | 構図担当は早めに外すと自然さが戻りやすい |
strengthを両方下げても絵が硬いときは、適用範囲で分担を作ります。Poseは全体の配置を決める役割なので早い段階だけ効かせ、Depthは最後まで効かせる、といった分け方です。どの値が良いかはmodelとsamplerで変わるため、ここでは数値を推奨せず、次の比較表で自分の環境の値を決めてください。
同一seedの比較表
固定する条件と、動かした項目、見た結果を同じ行に書きます。5段階の採点は主観で構いません。目的は「どの変更で何が変わったか」を後から追えることです。
| case | Pose strength / start-end | Depth strength / start-end | ポーズ一致 | 奥行き一致 | 自然さ | 破綻 | 判断 |
|---|---|---|---|---|---|---|---|
| A 基準 | なし | なし | |||||
| B Poseのみ | / | なし | |||||
| C Depthのみ | なし | / | |||||
| D 併用 | / | / | |||||
| E 併用・片方下げ | / | / |
Dの行で「ポーズ一致は高いが奥行き一致が低い」なら、Poseが勝ちすぎています。このときDepthを上げるのではなく、Poseを下げるか、Poseのend_percentを早めます。負けている側を上げると、両方が強くなって次の節の破綻に近づくためです。
条件が競合する場面をどう見つけるか
競合とは、二つのControlNetが同じ領域に異なる構造を要求し、modelがどちらにも寄せきれずに破綻する状態です。典型例は、別々の写真から作ったpose mapとdepth mapを組み合わせた場合です。pose mapでは腕が前に出ているのに、depth mapでは腕の位置が体と同じ奥行きにあると、腕が二重になる、関節が増える、体が途中で途切れるといった結果になります。
同じ写真から両方のmapを作っても競合は起きます。OpenPoseとCannyを両方強くすると、関節位置と輪郭線が同じ場所を固定しようとし、衣装のしわや髪が輪郭に張り付いた硬い絵になりやすくなります。条件側の要求が強すぎるため、promptで和らげようとしても直りません。
競合のサイン
- 単独では出なかった手足の増減・関節の折れが、併用で初めて出る
- strengthを両方下げても、片方を外すまで破綻が消えない
- 参照画像と違う場所に、輪郭だけが残像のように残る
- 同じseedで、併用時だけ背景と人物の境界が溶ける
サインが出たら、まず二つのmapを並べて、同じ場所を違う形で指定していないか目で確認します。mapの不一致が原因なら、片方のmapを作り直すか、そのmapの該当部分を黒く塗って条件から外します。mapは一致しているのに破綻するなら、強度と適用範囲の配分に戻ります。
2系統で直らないときに3系統目を足さない:条件を増やすほど競合の組み合わせが増え、原因の切り分けが難しくなります。破綻しているなら、まず1系統に戻して、単独で成功する状態を確かめ直します。
IP-Adapter・LoRAと併用するときの順番
ControlNetを2系統入れたworkflowに、IP-Adapterで画風を、LoRAでキャラクターを足したくなる場面があります。ここで守る原則は一つで、制御系を一度に全部強くしないことです。ControlNet×2、IP-Adapter、LoRAを全部既定値のまま重ねると、modelに与える要求が多すぎて、どれも中途半端に効いた平均的な絵になるか、破綻します。
IP-Adapterはmodel側、ControlNetはconditioning側に入るため、配線上は同じ線を取り合いません。それでも結果の上では競合します。IP-Adapterが参照画像の構図まで寄せようとする一方で、ControlNetが別の構図を要求する、という形です。IP-Adapterの仕組みとweightの決め方はComfyUIでIP-Adapterを使う方法で扱っているので、ここでは重ねる順番だけを示します。
- promptだけで基準画像を作り、seedを固定する
- LoRAを足し、strengthを決める(キャラクターや画風の土台)
- ControlNetを1系統ずつ足し、前の節の手順で配分を決める
- 最後にIP-Adapterを足し、weightは低めから上げる
- 破綻したら、最後に足したものを外して再確認する
LoRAを先に入れるのは、LoRAがmodelの出力傾向そのものを変えるため、後から入れると決めたControlNetの配分が崩れるからです。IP-Adapterを最後にするのは、影響範囲が広く、他の制御と競合したときに弱める判断をしやすい位置だからです。目的によって順番を入れ替えて構いませんが、理由と結果は記録します。
VRAMと時間をどう測るか
ControlNetを1系統足すと、ControlNet modelの読み込み分と、samplingの各stepで条件を計算する分だけVRAMと時間が増えます。2系統なら、その増分がもう一度乗ります。増える理屈は単純ですが、増え幅はmodelの種類・解像度・stepsで変わるため、自分の環境で記録しておかないと、あとで「なぜ遅くなったのか」「どこでOOMが出たのか」を説明できません。
記録の手順
- ComfyUIを起動した直後に
http://127.0.0.1:8188/system_statsを開き、デバイスのVRAM総量と空き容量を控える - 基準(ControlNetなし)を1回生成し、完了直後の
/system_statsと、ターミナルに出る実行時間を控える - Poseのみ、Depthのみ、併用の順に同じseedで生成し、同じ項目を控える
- 各段階で、初回(model読み込みを含む)と2回目(読み込み済み)を分けて記録する
| 構成 | 読み込んだmodel | 解像度 / steps | 初回の時間 | 2回目の時間 | 完了後のVRAM使用量 | 備考(OOM・警告) |
|---|---|---|---|---|---|---|
| ControlNetなし | checkpointのみ | |||||
| Poseのみ | +OpenPose | |||||
| Depthのみ | +Depth | |||||
| 併用 | +OpenPose+Depth |
初回と2回目を分けるのは、初回にはmodelの読み込み時間が含まれ、2回目との差がそのまま「読み込みにかかる時間」になるからです。併用でだけ2回目も遅いなら、条件の計算そのものが重くなっています。VRAMが足りずに落ちるときの切り分けはComfyUIのVRAM不足を直すで扱っています。生成速度を条件をそろえて比較する方法全般は別記事で扱います。
よくある質問
3系統以上つないでも動きますか?
配線上は同じ形で何段でもつなげます。ただし、条件が増えるほど競合とVRAM増加の切り分けが難しくなります。2系統で目的を達成できないときは、3系統目を足す前に、参照画像の作り直しやpromptの見直しで解決できないかを先に確かめてください。
二つのControlNetに同じ参照画像を使えますか?
使えます。同じ写真からpose mapとdepth mapを作れば、関節位置と奥行きが矛盾しにくくなります。別々の写真から作るより競合は減りますが、OpenPoseとCannyのように同じ構造を取り合う種類の組み合わせでは、同じ写真でも硬さが出ます。
strengthを両方1.0にすると強すぎませんか?
強すぎる場合もあります。1.0は既定値であって推奨値ではありません。公式のチュートリアルは領域が異なる場合に両方を同程度にする例を示しているので、まず同程度で始め、結果を見て勝ちすぎている側だけを下げてください。
まとめ
複数ControlNetは、Apply ControlNetを直列につなぐだけで動きますが、狙いどおりに効かせるには「単独で成功させてから足す」「動かす項目は一つずつ」「負けている側を上げず、勝っている側を下げる」の三つを守る必要があります。破綻したら3系統目を足さず、1系統に戻して確かめ直します。
IP-Adapter・LoRAを重ねるときは、LoRA→ControlNet→IP-Adapterの順で一つずつ足し、追加のたびにVRAMと時間を記録してください。その記録が、あとでworkflowを共有したり、環境を変えたりするときの説明書になります。