問題の概要: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ワークフローの構築と検証
シンプルなワークフローを構築し、各接続が正しいか確認しましょう。典型的な流れは以下の通りです。
- ControlNetLoader: `controlnet/`ディレクトリからモデルを選択・読み込み。
- プリプロセッサノード (例: `DWPreprocessor` または `OpenPose_Preprocessor`): 入力画像からコントロール条件(線画、ポーズマップ等)を抽出。
- 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による画像生成の可能性は大きく広がります。本記事がその確実な第一歩となることを願っています。