【ComfyUI】ControlNetノードの設定手順と「Load failed」等の主要エラー解決法

問題の概要:ComfyUI ControlNetノードの設定エラーと一般的な課題

ComfyUIは、Stable Diffusionのワークフローをノードベースで構築できる強力なツールです。その中でも、画像のポーズ、構図、線画などを厳密に制御できる「ControlNet」は、創作において重要な役割を果たします。しかし、ControlNetノードの導入と設定にはいくつかの落とし穴があり、特に初心者から中級者のユーザーが以下のようなエラーに遭遇することが頻繁に報告されています。

  • 「Load failed」エラー: ControlNetモデルファイル(.pth, .safetensors)の読み込みに失敗する。
  • ノードが見つからない: ワークフローを読み込んだ際に、「ControlNetLoader」や「Apply ControlNet」などのノードが赤く表示され、機能しない。
  • 画像サイズの不一致エラー: 入力画像と生成画像、または複数のControlNet入力間で解像度が合わずに処理が止まる。
  • 効果が反映されない: ControlNetを適用しても、入力画像(例: ポーズ画像や線画)が生成結果に全く影響を与えない。

これらの問題は、ComfyUIとControlNetの依存関係や設定の複雑さに起因しています。本記事では、これらのエラーの原因と、ステップバイステップでの解決方法を具体的に解説します。

原因の解説

上記のエラーが発生する主な原因は、以下の3つに大別できます。

1. モデルファイルのパスまたは形式の問題

「Load failed」エラーは最も一般的です。ComfyUIが指定されたパスにControlNetモデルファイルを見つけられない、またはファイル形式が認識できない場合に発生します。ComfyUIは通常、ComfyUI/models/controlnet/ディレクトリをモデルの探索パスとします。ここにファイルが存在しない、またはファイルが破損していると読み込みに失敗します。

2. カスタムノードの未インストールまたはバージョン不一致

ComfyUIの基本インストールには、最新のControlNetノードが含まれていない場合があります。多くのユーザーは、ComfyUI Manager を通じて、または手動でカスタムノード(例: `comfyui_controlnet_aux` ノード群)をインストールする必要があります。これらがインストールされていないと、ワークフロー内の専用ノードは「見つからない」状態になります。

3. ワークフロー内のノード接続とパラメータ設定ミス

ComfyUIはノード間のデータの流れ(画像、テンソル、条件付け)を非常に厳密に扱います。ControlNetを適用する「Apply ControlNet」ノードへの入力(元のモデル、正しい条件付け、画像)が適切でない場合、効果が反映されなかったり、実行時エラーが発生したりします。また、プリプロセッサ(例: OpenPose検出器、Cannyエッジ検出器)とControlNetモデルの種類(例: control_v11p_sd15_openpose, control_v11p_sd15_canny)が一致していないことも原因となります。

解決方法:ステップバイステップガイド

ステップ1: ControlNetモデルファイルの正しい配置

まず、必要なControlNetモデルファイルをHugging FaceやCivitAIなどの信頼できるソースからダウンロードします。ファイル形式は`.safetensors`が推奨されます。ダウンロード後、ComfyUIのモデルディレクトリ内の正しい場所に配置してください。

# ComfyUIのディレクトリ構造例
ComfyUI/
├── models/
│   ├── checkpoints/          # Stable Diffusion 本体モデル
│   ├── vae/                  # VAEモデル
│   ├── loras/                # LoRAモデル
│   └── controlnet/           # ★ControlNetモデルをここに配置★
│       ├── control_v11p_sd15_canny.safetensors
│       ├── control_v11p_sd15_openpose.safetensors
│       └── control_v11p_sd15_scribble.safetensors

配置後、ComfyUIを再起動(ターミナルで実行中の場合はCtrl+Cで停止し、再起動)すれば、`ControlNetLoader`ノードのモデルリストに追加されたファイル名が表示されるはずです。

ステップ2: カスタムノードのインストールと更新

ComfyUI Managerがインストールされていない場合は、まずそれを導入します。ComfyUIのルートディレクトリで以下のコマンドを実行します。

cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

ComfyUIを再起動すると、UIに「Manager」ボタンが出現します。そこから「ControlNet Preprocessors」や「ComfyUI-Impact-Pack」などのよく使われるパッケージを検索・インストールできます。あるいは、必要なノード(例: `comfyui_controlnet_aux`)を直接インストールすることも可能です。

cd ComfyUI/custom_nodes
git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git

インストール後、必ずComfyUIを再起動してください。

ステップ3: 基本的なControlNetワークフローの構築と検証

シンプルなワークフローを構築し、各接続が正しいか確認しましょう。典型的な流れは以下の通りです。

  1. ControlNetLoader: `controlnet/`ディレクトリからモデルを選択・読み込み。
  2. プリプロセッサノード (例: `DWPreprocessor` または `OpenPose_Preprocessor`): 入力画像からコントロール条件(線画、ポーズマップ等)を抽出。
  3. Apply ControlNet: メインの画像生成モデル(`CLIP Text Encode` & `KSampler`への入力)にControlNetの条件を適用。

重要な接続: 「Apply ControlNet」ノードのcontrol_net入力には`ControlNetLoader`の出力を、image入力にはプリプロセッサで生成されたコントロールマップを接続します。そして、「Apply ControlNet」の出力(`CONDITIONING`)を`KSampler`のpositive(およびnegative)入力に接続します。

ステップ4: 画像サイズ不一致エラーの解決

「Tensor size mismatch」などのエラーは、入力画像と生成設定の幅・高さが異なる場合に発生します。解決策は2つあります。

方法A: プリプロセッサでリサイズする
多くのプリプロセッサノードには`resolution`パラメータがあります。ここで生成したい画像サイズ(例: 512×768)を指定し、コントロールマップをそのサイズで生成させます。

方法B: 画像リサイズノードを使用する
元の入力画像と、プリプロセッサを通した後のコントロールマップの両方を、`Image Scale`や`Image Scale By`ノードを使用して同一サイズにリサイズしてから後続のノードに接続します。

コード例・コマンド例

エラーメッセージ例とその意味

# エラー例1: モデル読み込み失敗
"Load failed: models\controlnet\control_v11p_sd15_openpose.pth is not a .safetensors file or a supported checkpoint file."
→ ファイル形式が古い(.pth)か破損しています。.safetensors形式のファイルを再度ダウンロードして置き換えてください。

# エラー例2: ノード不足
"Node 'DWPreprocessor' was not found"
→ `comfyui_controlnet_aux` カスタムノードがインストールされていません。上記のステップ2を実行してください。

ワークフローのJSONスニペット(Apply ControlNet部分)

ワークフローを保存したJSONファイルの一部を確認することで、接続関係を理解できます。

{
  "4": {
    "class_type": "ControlNetLoader",
    "inputs": {
      "control_net_name": "control_v11p_sd15_canny.safetensors" // モデル名
    }
  },
  "5": {
    "class_type": "CannyEdgePreprocessor", // プリプロセッサ
    "inputs": {
      "image": ["3", 0], // 入力画像ノードID
      "low_threshold": 100,
      "high_threshold": 200
    }
  },
  "6": {
    "class_type": "ApplyControlNet", // 適用ノード
    "inputs": {
      "positive": ["2", 0], // 元のPositive Conditioning
      "negative": ["2", 1], // 元のNegative Conditioning
      "control_net": ["4", 0], // ControlNetLoaderからの入力
      "image": ["5", 0], // プリプロセッサからのコントロールマップ
      "strength": 1.0 // 制御の強度
    }
  }
  // "6"の出力はKSamplerのpositive/negativeに接続される
}

まとめ・補足情報

ComfyUIのControlNetノードに関する問題は、「モデルファイルの配置」「カスタムノードのインストール」「ノード間の正確な接続」の3点を体系的に確認することで、ほとんどが解決できます。最初はシンプルなワークフロー(単一のControlNet)から始め、動作を確認してから複雑な構成に進むことを強くお勧めします。

補足情報:

  • 複数ControlNetの使用: 複数のControlNet(例: ポーズ+深度)を適用するには、`Apply ControlNet`ノードを直列に接続していきます。最初の`Apply ControlNet`の出力を、次の`Apply ControlNet`の`positive`/`negative`入力に接続します。
  • 強度(strength)パラメータ: `Apply ControlNet`ノードの`strength`値は、ControlNetの影響度を調整します(0.0〜2.0程度)。強すぎると画像が崩壊し、弱すぎると効果がなくなります。0.5〜1.0の間で調整することが多いです。
  • コミュニティの活用: 問題が解決しない場合は、ComfyUIの公式DiscordやGitHubのIssue、日本のAI創作コミュニティなどで、自身のワークフローJSONやエラーメッセージを提示して質問すると、効率的に助けを得られるでしょう。

ControlNetを自在に操れるようになれば、ComfyUIによる画像生成の可能性は大きく広がります。本記事がその確実な第一歩となることを願っています。

この記事は役に立ちましたか?