2024-01-22(更新)

【ComfyUI基礎シリーズ#6】ControlNetノードの組み方

コントロールネットを使うためのノードの組み方を解説。できるだけシンプルに。

Article Image

2024/01/22:読みやすいよう微調整

ControlNetをComfyUIで使う方法

ControlNetはAI画像生成を使う上で必須と言っても過言ではない拡張機能。

しかしながらComfyUIではそもそもControlNet用のノードを組む方法がややこしいため、これをシンプルに解説する。

前提条件

ComfyUI基礎シリーズでは有るがAI画像生成基礎ではないため、次は理解している前提で可能な限り省略する。

  • ControlNetを使うことによってどんな効果が得られるのか知っている
  • ControlNetの基本的な種類は知っている(lineartやtileなど)

とはいったものの詳しい使い方までは知る必要はなく、使いながら覚えていけば良い。

過去記事にてwebUI版のControlNetについて解説しているので、全く知らなければそちらをザックリ読んでもらえば良いと思う。

ControlNet(v1.1)の詳しい解説!輪郭やポーズから思い通りの絵を書かせる【Stable Diffusion】 | 謎の技術研究部

カスタムノードのインストール

コントロールネットを利用するにはComfyUI標準ノードだけでは不可能なので、これをインストールしていく。

過去の記事でComfyUI Managerを使った記事を書いたので、こちらを使ってControlNetに必要なものを最小限の労力でインストールしていく。

ComfyUI's ControlNet Auxiliary Preprocessors

Preprocessor用のカスタムノードを追加するComfyUI's ControlNet Auxiliary Preprocessorsを検索してインストール

ComfyUI's ControlNet Auxiliary Preprocessors

念のため解説するとPreprocessorとは、例えばLineartであれば次のような画像を生成する前の中間素材(Detectmap)を作るノードだ。

lineartのdetectmap

コントロールネット用のモデルのインストール

コントロールネットの機能それぞれに対応したモデルが必要。

ComfyUI ManagerでモデルをDLできる!

こちらも知らない人が多そうだが、実はコレもComfyUI Managerからインストールできる。

Install Models

Install Modelsのパネルを出して対象のモデルを検索すれば良い。

次はtileを検索した例。

tileのモデル

使いたいコントロールネットに対応したモデルを入れる

コントロールネットは機能一つずつ別々のモデルが必要だ。

ここはこの記事の範疇ではないので省略するが、必要に応じたモデルをダウンロードしよう。

同じ名前のモデルが複数あるんだけど...?

検索すると似通った名前のモデルが複数出てくる。どれをDLすればよいのか。

こちら実はちょっと複雑で次のリンク先から名前からバージョンの内容がわかるようになっている(英語)

GitHub - lllyasviel/ControlNet-v1-1-nightly: Nightly release of ControlNet 1.1

ただ、現時点で頻繁に更新や追加が行われているものではないので、1度名前のリンクに飛んでみて日付の新しい方を入れておけば良い。

モデルリスト

未検証だがComfyUI ManagerのIDが大きい方が日付があたらしい?

また、モデルを手動でインストールしたい場合は次のディレクトリに保存する。

ComfyUI_windows_portable\ComfyUI\models\controlnet

基本の3ノード

基本としては3つのノードを組み合わせて使うものなのでこちらから解説

基本の3ノード

1:Load Controlnet Model

先程DLしたモデルをここで指定し、読み込む。

  • loaders > Load ControlnetModel
  • 検索名:ControlNetLoader

本当にそれだけのノード。使いたい機能に合わせて読み込むものを変えよう。

今回はOpenposeを利用した。

load controlnet model

2:1に対応したpreprocessor

2番は1で読み込んだモデルに対応したものを入れる。

このノードが元画像からDetectmapを生成する。

今回はopenposeで検索しOpenposePrerprocessorを入れる。

これらのノード名はモデルごと別々の名前がついているので、詳しい対応表は公式GitHubを参照する。

GitHub - Fannovel16/comfyui_controlnet_aux: ComfyUI's ControlNet Auxiliary Preprocessors

ほとんど全部同じ名前+Preprocessorがついているはずなので検索もさほど困らないかと思う(tileならtileで検索すれば出る)

これらは右クリック > Add Node > ControlNet Proprocessorsの項目から一覧が見られるので使ってみるのも良い。

Openpose

3:Apply ControlNet

最後にこれらを適用するノードが必要。

このノードを見て分かるのコントロールネットはpositive,negativeのプロンプトに注入されて送り出されるというところ。

ApplyControlnet2種

ここではAdvancedかそうでないかの2種あるが、それほど大きな違いもないのでAdvancedを読み込んで使えば良いと思う。

KSamplerへのつなぎ方

最後に一番重要なのがつなぎ方。画像で分かるなら次だけ見ればOK。

つなぎ方全体像

Preproessorのつなぎ方

Preprocessorは画像をDetectmapに変換するものなので、そもそも元絵がないと意味がない。

したがってLoad Imageなどから出た画像をここに入れた後、Apply ControlNetにつなぐ。

つまりは1度AI生成したものをImageに変換して再度こちらに入れるという手法もある。

preprocessorのつなぎ方

Load Controlet Model

読み込んだらそのままApply Controlnetcontrol_netに繋げば良い。

Load Controlnetのつなぎ方

Apply ControlNet

Clip Txt Encodeから出ているポジティブとネガティブをApply Controlnetにつなぎ、そのまま出たピンをKSamplerに繋げば良い。

Advancedなしの場合は黄色ピンが一つなのでポジティブにだけ繋げば動作する。

Apply ControlNetのつなぎ方

このあとのつなぎ方

このあとはおさらいなので画像だけ

作り方

出来上がった画像サンプル

入力(openpose) 出力
入力 出力

バグ?生成ができないとき

この組み合わせtでQueue Promptを実行しても何も生成されないことがある。

私も原因がわかってないのだがKsamplerpositive,negativeをつなぎ直すと動いたりする。

それでも治らない場合はadvancedなしのApply ControlNetを使ってみると良いと思う。

ノードの組み方までで終わり

コントロールネットは何かと使うことになると思うので先にノードの組み方だけ解説してみた。

内容まで解説していないので、あまりコントロールネット自体に詳しくない場合は一旦スキップしても構わないと思う。

いずれ必要になり次第で良い。



この記事をシェア


謎の技術研究部 (謎技研)