問題の概要:ComfyUI ControlNetノードの設定エラーと一般的な課題
ComfyUIは、Stable Diffusionのワークフローをノードベースで構築できる強力なツールです。中でもControlNetは、画像のポーズ、輪郭、深度などを制御して生成結果を精密にコントロールできる必須の拡張機能です。しかし、多くのユーザー、特に初心者から中級者の方が、ControlNetノードの導入と設定において以下のような問題に直面します。
- カスタムノードをインストールしてもワークフローにControlNetノードが表示されない
- プリプロセッサ(例:OpenPose, Canny)を適用した際に「Load failed」や「RuntimeError」が発生する
- ControlNetモデルを読み込もうとすると「KeyError: ‘controlnet’」などのエラーが表示される
- 複数のControlNetを組み合わせた際に意図した効果が得られない、または処理が停止する
これらのエラーは、モデルファイルの配置ミス、依存関係の不足、ノードの接続順序の誤りなど、いくつかの共通した原因に起因しています。本記事では、これらの問題を体系的に解決する方法を解説します。
原因の解説:なぜControlNetノードでエラーが発生するのか?
ComfyUIにおけるControlNet関連のエラーは、主に以下の4つのカテゴリに分類できます。
1. モデルファイルと設定の不整合
ComfyUIのControlNetノードは、`ComfyUI-Manager`を通じて簡単にインストールできますが、肝心のControlNetモデルファイル(.pthまたは.safetensors)と、それに対応する設定ファイル(.yaml)が正しい場所に配置されていないことが最も多い原因です。ComfyUIはStable Diffusion WebUI (AUTOMATIC1111) とは異なるディレクトリ構造を持っています。
2. プリプロセッサの依存関係不足
OpenPoseやDepth(MiDaS)などのプリプロセッサを動作させるには、背後でOpenCVや特定のPythonライブラリ、さらには学習済みモデルファイルが必要です。これらが環境にインストールされていない、またはパスが通っていない場合、「Load failed」エラーが発生します。
3. ノードの入力/出力タイプの不一致
ComfyUIは厳格なデータフローに基づいています。ControlNetノードの「control_net」出力は、「ControlNetLoader」ノードからの入力である必要があり、単なる「CheckpointLoader」から読み込んだモデルを接続することはできません。この型の不一致が「KeyError」を引き起こします。
4. 複数ControlNet適用時のリソース競合
メモリ容量が限られている環境で、高解像度の画像に対して複数のControlNetモデルを同時に適用しようとすると、VRAM不足により処理がクラッシュしたり、予期せぬ結果を生じたりします。
解決方法:ステップバイステップでの完全セットアップとトラブルシューティング
ステップ1:ComfyUI-Managerによるノードのインストール
まず、ComfyUIの拡張機能管理ツールであるComfyUI-Managerをインストールしていない場合は、以下のコマンドでインストールします。
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
ComfyUIを再起動後、Managerを介して「ComfyUI-Impact-Pack」や「ComfyUI-ControlNet-Preprocessors」などのパッケージを検索・インストールします。これにより、主要なControlNet関連ノードが利用可能になります。
ステップ2:ControlNetモデルファイルの正しい配置
ダウンロードしたControlNetモデルファイル(例:control_v11p_sd15_openpose.pth)は、Stable Diffusion WebUI用のフォルダではなく、ComfyUI専用のパスに配置する必要があります。正しい配置場所は以下の通りです。
ComfyUI/models/controlnet/
対応する.yaml設定ファイルも同じディレクトリに配置されていることを確認してください。多くのモデルファイルには設定が内蔵されていますが、古いモデルでは別ファイルが必要な場合があります。
ステップ3:プリプロセッサエラー「Load failed」の解決
「Load failed for preprocessor: openpose」のようなエラーが発生した場合、必要なPythonパッケージが不足しています。ComfyUIの環境で以下のコマンドを実行して依存関係をインストールします。
# ComfyUIのPython環境がアクティブな状態で
pip install opencv-python
pip install matplotlib
# Impact Packのプリプロセッサ用
pip install onnxruntime onnxruntime-gpu
また、一部のプリプロセッサ(例:DWPreprocessor)は、追加のアノテータモデルファイルを`ComfyUI/models/annotators/`フォルダにダウンロードする必要があります。エラーメッセージに特定のファイル名が記載されている場合は、それを手動でダウンロードして配置します。
ステップ4:ノードの正しい接続方法
基本的なControlNet適用ワークフローは以下の順序でノードを接続します。
- Load Image: 制御に使う元画像を読み込む。
- Preprocessor Node (例: OpenPose Preprocessor): 画像を処理し、ポーズマップなどを出力。
- ControlNet Loader: 使用するControlNetモデル(例:openpose)を読み込み、「control_net」と「clip_vision」を出力。
- Apply ControlNet: 「positive」と「negative」の条件(CLIP Text Encodeから)、「control_net」(Loaderから)、「image」(Preprocessorから)を接続。処理後の条件を出力。
- KSampler: 「positive」と「negative」の入力に、Apply ControlNetからの出力を接続する。
よくある間違いは、「Checkpoint Loader」で読み込んだメインモデルを「Apply ControlNet」に直接接続しようとすることです。必ず「ControlNet Loader」ノードを使用してください。
ステップ5:複数ControlNet使用時のメモリ管理
VRAMが不足する場合は、以下の対策を講じてください。
- 生成解像度を下げる(512×512など)。
- KSamplerの「steps」を減らす。
- 「ComfyUIの設定」から「VRAM保存モード」を有効化する。
- 複数のControlNetを適用する場合は、必須ではないものを外す。
コード例・コマンド例
典型的なエラーメッセージとその意味
# エラー例1: モデル読み込み失敗
KeyError: 'controlnet'
# 原因: ControlNet Loaderノードを使わず、間違ったモデルが接続されている。
# エラー例2: プリプロセッサ失敗
RuntimeError: Load failed for preprocessor: dw_openpose_full
# 原因: annotatorモデルファイルが`models/annotators/`にないか、onnxruntimeがインストールされていない。
# エラー例3: 型不一致
AttributeError: 'Tensor' object has no attribute 'image'
# 原因: Preprocessorノードの出力を「image」入力ポートに接続していない。
ワークフロー確認用の簡単なスクリプト
カスタムノードのインストール状態を確認するには、ComfyUIのルートディレクトリで以下のPythonスクリプトを実行できます。
import sys
sys.path.append('.')
from nodes import NODE_CLASS_MAPPINGS
# インストール済みノードをリスト表示
print("利用可能なノードタイプ:")
for node_name in NODE_CLASS_MAPPINGS:
if 'control' in node_name.lower():
print(f" - {node_name}")
# "ControlNetLoader", "ApplyControlNet", "Preprocessor_Openpose" などが見つかれば成功。
まとめ・補足情報
ComfyUIのControlNetは、一度正しく設定すれば、画像生成の制御力を飛躍的に高めることができる究極のツールです。トラブルのほとんどは、①モデルファイルの配置ミス、②依存ライブラリの不足、③ノード接続の論理的誤りの3点に集約されます。本記事で解説したステップに従って環境を整備すれば、これらの問題は確実に解決できるでしょう。
補足として、ComfyUIのコミュニティは非常に活発で、新しいプリプロセッサやノードが日々開発されています。問題が解決しない場合は、ComfyUIのGitHubリポジトリのIssuesや、Discordコミュニティで「controlnet」や「preprocessor」といったキーワードで検索すると、同様の問題とその解決策が見つかる可能性が高いです。エラーメッセージをそのままコピーして検索するのが、最も早く解決に至る近道となることを覚えておいてください。
最後に、安定したワークフローが構築できたら、`Save (JSON)`機能でワークフローを保存し、バックアップを取ることを強くお勧めします。これにより、環境を再構築する際や、同じ効果を再現したい時に大きな助けとなります。