テーマを切り替える

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

Easton editorial illustration: central orange ControlNet node with visible input and output sockets, three compact reference tiles showing a pose skeleton, Canny edges, and depth contours, one framed output portrait whose pose and composition match the reference tiles

"ComfyUI公式のApply ControlNet文書には、ノード入力、strengthの範囲、start_percentとend_percentの挙動が記載されています。"

参照画像に合わせて生成したいのに、ポーズが崩れ、線がぼやけ、構図まで変わることがあります。プロンプトだけでは、身体の位置や輪郭、奥行きを細かく固定できません。

このような構造の制御にはControlNetを使います。OpenPoseでポーズ、Cannyでエッジ、Depthで空間関係を指定できます。次に問題になるのが、strengthの値、start_percentend_percentの意味、複数ControlNetの競合です。

まず制御したい対象から前処理とモデルを選びます。その後に強度と適用区間を調整します。参照から外れる場合は、ノード接続、ベースモデルとの互換性、制御信号の競合を順番に確認します。

制御したい対象から選ぶ早見表

最初に決めるのは強度ではなく、残したい構造の種類です。

目的制御の種類前処理SD1.5でよく使われるモデル
人物を指定したポーズで生成するポーズ制御OpenPose / DWPosecontrol_v11p_sd15_openpose
参照画像の線に沿わせるエッジ制御Cannycontrol_v11p_sd15_canny
空間の階層と構図を維持する深度制御Depth(MiDaS / LeReS)control_v11f1p_sd15_depth
手描きスケッチをガイドにするスケッチ制御Scribblecontrol_v11p_sd15_scribble
柔らかな輪郭を維持するソフトエッジ制御SoftEdge(HED / PiDiNet)control_v11p_sd15_softedge

前処理を選ぶときは、次の2点を確認します。

  1. OpenPoseとDWPoseはいずれもポーズのキーポイントを出力します。手や顔まで制御したい場合は、より多くのキーポイントを得やすいDWPoseを先に試せます。

  2. 前処理の出力はControlNetモデルが想定する形式と一致させます。OpenPoseのマップにはポーズ対応モデルが必要です。制御マップ、モデル、ベースモデル構成が合わないと、変化がほとんど出ないか、エラーになります。

モデルファイルは通常ComfyUI/models/controlnetへ置きます。ComfyUIを再起動するかモデル一覧を更新し、Load ControlNet Modelで選択します。

ControlNetパラメータ早見表

モデルを読み込んだ後は、strengthstart_percentend_percentで制御の強さと有効区間を決めます。公式の範囲と、比較しやすい開始値を使います。

パラメータ範囲開始値効果試し方
strength0〜101.0制御マップの影響度seedを固定して1.0から少しずつ上下する。公式文書では0.5〜1.5が一般的な試行範囲
start_percent0〜10ControlNetが作用を始める位置ポーズや構図は通常0から始め、基準が動いてから遅らせる
end_percent0〜11ControlNetが作用を終える位置硬すぎる場合は0.8以下にして後半の細部を自由にする

start_percentとend_percentの考え方

この2つは待ち時間ではなく、有効区間を表します。start_percent=0.2end_percent=0.8なら、拡散過程の20%〜80%だけControlNetが作用します。最初と最後の20%にはこの制御がかかりません。

ポーズや構図などの大きな構造は早い段階で形成されます。ポーズを安定させるなら0から開始します。制約が強すぎる場合はstart_percent=0を保ち、end_percentを1から0.8へ下げ、後半で細部を整える余地を作ります。

全区間(start_percent=0end_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を選びます。
  • MODELCLIPVAEの出力で基本の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点を確認します。

  1. positiveとnegativeの両方がApply ControlNetを通って次のノードへ届いています。
  2. image入力には前処理済みマップが入っています。
  3. 古いワークフローのApply ControlNet(Old)は非推奨です。現在の標準Apply ControlNetを使います。

ベースモデルとの互換性を確認する

SD1.5、SDXL、FLUX向けのControlNet実装とモデルは相互に交換できません。ベースモデルを確認し、その構成とワークフローへの対応が明記されたモデルを選びます。

前処理とモデルの対応

前処理SD1.5でよく使われるモデルSDXLの選び方FLUXの選び方
Cannycontrol_v11p_sd15_cannySDXL対応とCanny入力が明記されたモデル対象FLUXベースモデルとCanny対応が明記されたモデル
OpenPose / DWPosecontrol_v11p_sd15_openposeSDXL対応とポーズ入力が明記されたモデル対象FLUXベースモデルとPose対応が明記されたモデル
Depth(MiDaS / LeReS)control_v11f1p_sd15_depthSDXL対応とDepth入力が明記されたモデル対象FLUXベースモデルとDepth対応が明記されたモデル
Scribblecontrol_v11p_sd15_scribbleSDXL対応とScribble入力が明記されたモデルモデルカードでScribble対応を確認し、すべてのUnionが対応すると仮定しない
SoftEdge(HED / PiDiNet)control_v11p_sd15_softedgeSDXL対応とSoftEdge入力が明記されたモデルモデルカードとワークフローで対応入力を確認する

Union系モデルは複数の制御モードを一つのモデルへまとめたもので、FLUXワークフローの選択肢の一つです。対応モード、必要ノード、適切なstrengthはモデルとワークフローの版によって異なります。

ベースモデル対応表

ベースモデルControlNetの選び方配置先注意点
SD1.5control_v11*_sd15_*は一般的な系列ComfyUI/models/controlnetsd15はSD1.5向けで、SDXL向けではない
SDXLSDXL対応が明記されたモデルを使う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. 1つ目のControlNet:

    • OpenPoseモデルとポーズ制御マップを読み込みます。
    • strength=1.0start_percent=0end_percent=0.7を試します。
  2. 2つ目のControlNet:

    • Depthモデルと深度制御マップを読み込みます。
    • 低めのstrength=0.6start_percent=0end_percent=0.6から始めます。
  3. 接続順:

    • プロンプト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を分けます。
  • 後半の細部を自由にしたい場合は、制御を後半へずらすのではなく終了を早めます。

続いて次を確認します。

  1. 同じ種類の制御を二つ使うことは禁止ではありませんが、同じ構造を示すマップは競合と調整コストを増やしがちです。
  2. OpenPose + Depth、OpenPose + Cannyなど、補完関係にある信号を優先します。
  3. seedを固定し、単独制御と複数制御を比較します。
  4. 最初から両方のstrengthを高くしません。
  5. 一度に一つの値だけを変え、再現可能なワークフローを保存します。
  6. 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で基本的なControlNetワークフローを組む

ベースモデルと参照画像から始め、構造信号を前処理してサンプリング経路へ加えます。

  1. 1

    ステップ 1: ベースモデルの構成を確認する

    checkpointがSD1.5、SDXL、FLUXのどれかを確認し、明示的に互換性のあるControlNetを選びます。
  2. 2

    ステップ 2: 参照画像を読み込み前処理する

    OpenPose、Canny、Depthでポーズ、エッジ、深度の制御マップを作ります。
  3. 3

    ステップ 3: ControlNetモデルを読み込む

    モデルをComfyUI/models/controlnetへ置き、前処理と合うものをLoad ControlNet Modelで選びます。
  4. 4

    ステップ 4: Apply ControlNetを接続する

    positive、negative、control_net、前処理済みimageをつなぎ、出力conditioningをKSamplerへ送ります。
  5. 5

    ステップ 5: 固定seedで調整する

    最初にstrength 1.0、start_percent 0、end_percent 1を試し、値を一つずつ変えます。
  6. 6

    ステップ 6: 連結前に単独動作を確認する

    各ControlNetを単独で確認し、主制御と補助制御を決めて補助側の強度または適用区間を下げます。

FAQ

OpenPoseとDWPoseの違いは何ですか?
どちらも人物をキーポイントの制御マップへ変換します。DWPoseは身体に加えて手や顔のキーポイントも詳しく得られることが多く、全身の大まかなポーズだけならOpenPoseでも対応できます。モデルが求める入力形式は必ずモデル説明で確認してください。
ControlNetのstrengthはいくつにすればよいですか?
同じseedで1.0付近から比較します。制約が弱ければ少しずつ上げ、硬さや歪みが出れば下げます。公式ノード文書の0.5〜1.5は一般的な試行範囲であり、すべてのモデルに共通する安全値ではありません。
start_percentとend_percentは何を表しますか?
ControlNetが拡散過程で有効になる区間です。0.0〜0.8なら最初から80%まで作用します。ポーズや構図は通常0から開始し、終了を早めると後半の細部に自由度を残せます。
複数のControlNetを同時に使えますか?
使えます。前のApply ControlNetのpositiveとnegative出力を次の同名入力へつなぎ、最後の出力をサンプラーへ送ります。各制御を単独で確認してから、補助側のstrengthや適用区間を下げます。
FLUXではどのControlNetを使いますか?
対象のFLUXベースモデルと現在のComfyUIワークフローへの互換性が明記されたモデルを使います。Union系は選択肢の一つですが、対応する制御、ノード、strength範囲はモデルカードごとに異なります。

6分で読めます · 公開日: 2026年7月19日 · 更新日: 2026年7月19日

コメント

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

Easton BlogEaston Blog