Control netの入門として、Img2ImgからControl netを読み込んで適用する形に配線を変更するところまでやってみたいと思います。ちょっとだけややこしいです。
使うのはScribbleというモデルで、線画から画像を生成させることができます。
Control netとは
普通のComfy/Stable diffusionではできないような、深度を意識した表現とか、ポーズとか、輪郭とか、そういう特定部分に対して何かするための追加機能です。
前準備
Comfy基本編はこちら。Comfy Managerもインストールされてるのが望ましいです。
今回はLoad Imageを使用するので、この構成から始めます。
モデルはdreamshaperを使います(他のモデルでエラー出るなら一旦dreamshaperにしてみてください)。
モデルはdreamshaperを使います(他のモデルでエラー出るなら一旦dreamshaperにしてみてください)。
LoRAやモデルと同じで、control netも個別に該当ファイルをDLしておく必要があります。
こちらが公式的なページになるんですが、
こちらが公式的なページになるんですが、

Original Versionからリンク入って(軽量版、SDXL版も飛べますが、説明のため一元化します)、

control_v11p_sd15_lineartのpthとyamlファイルをDLします。
pthが本体、yamlは補助でyamlなくても動くらしいですが、一応。
pthが本体、yamlは補助でyamlなくても動くらしいですが、一応。

DLしたファイルは、保存先/stabilitiymatrix/Packages内のComfyUI/models/controlnetに入れておきます。

テスト用のスケッチも準備しておきます。
Control netの接続

ではつないでいきましょう。Load Imageで使用するスケッチを読み、一回この状態で出力してみます。

さすがにこの線画だとうまくLoad Imageできないのか、あんま関係ない画像が出ました。

そこでControl netの追加です。
Add Node→loaders→Load Controlnet Modelとクリックし、
Add Node→loaders→Load Controlnet Modelとクリックし、

Controlnet loaderを準備します。
control_net_nameで使用するControl netが選択できますが、一個しかなければcontrol_v11p_sd15_lineartが選択されているはずです。
control_net_nameで使用するControl netが選択できますが、一個しかなければcontrol_v11p_sd15_lineartが選択されているはずです。

Scribbleを使用する場合、画像を潜在空間にエンコードする必要はありません(必要なControl netもあるそうです)。
よってLoad Imageから接続されたVAE Encodeは削除します。
よってLoad Imageから接続されたVAE Encodeは削除します。

modelのVAEはVAE Decodeに接続します。

KSamplerにつながるlatent_imageがなくなるので、Empty Latent Imageから接続しておきます。
サイズは読み込む画像と一致させておきます。
サイズは読み込む画像と一致させておきます。

さらにAdd Node→conditioning→controlnet→Apply ControlNetとクリックしてApply ControlNetノードを追加、

Load Imageからimage、Load Controlnet Modelからcontrol_netへ接続します。
残ったconditioningはCLIPから接続できますが、
残ったconditioningはCLIPから接続できますが、

接続するのはポジティブプロンプトだけです。
Apply ControlNetを経由したポジティブプロンプトは、そのままKSamplerにつなぎます。
これで全ての配線が完了しました。
Apply ControlNetを経由したポジティブプロンプトは、そのままKSamplerにつなぎます。
これで全ての配線が完了しました。
まとめると、Apply ControlNetにポジティブプロンプト、線画、Control netを接続してKSamplerのポジティブプロンプトに送っていることになります。
実行結果

上記の設定で実行すると、結構そのまんまな結果が出るんですが、

Apply ControlNetはstrengthで適用する強さを変更することができます(0~1)。
数値を小さくしてやれば、
数値を小さくしてやれば、

このように、

だんだん、

線画を参照する度合いが減っていきます。
公式のワークフローを使ってみる

慣れるために自分で配線何度かしてみるのがおすすめですが、手っ取り早く公式のワークフローを使うこともできます。
冒頭で貼ったサイトのpngをダウンロードし、WebUIにドラッグすることでワークフローをロードできます。
大体ここまでと同じ流れになっていますが、
冒頭で貼ったサイトのpngをダウンロードし、WebUIにドラッグすることでワークフローをロードできます。
大体ここまでと同じ流れになっていますが、

VAEだけ外部から持ってきていて、

実際出してみると、随分いい感じのものが出ました。
Stable Diffusionのモデル(checkpoint)には、通常、VAEが内蔵されています。この内蔵VAEは、そのモデルの学習データに合わせて調整されているため、そのモデルで生成される画像に最適なエンコード・デコードを行うことができます。
しかし、場合によっては、モデルに内蔵されたVAEではなく、外部のVAEを使用する方が良い結果が得られることがあります。
ComfyUIのScribbleサンプルで vae-ft-840000-ema を使用しているのは、より高品質な顔の表現を実現するためです。モデルに内蔵されたVAEを使用するか、外部VAEを使用するかは、生成したい画像に合わせて選択できます。
vae-ft-mse-840000はCivitAIなどでDL可能。

vaeも保存しないと使えません。保管場所はmodels→vaeとなります。

紹介したアプリ、Webサービス、AI一覧
紹介したサービス等のまとめです。有料のサービスでも無料で試せることがほとんどなので、気になったものがあったらどうぞ。
コメント