テキストプロンプトは、何を作るかを記述します。参照画像は、どう見えるべきかを記述できます。IPAdapterは、プロンプトと並べて画像をモデルに入力するので、新しい生成がそのスタイル、素材、ポーズを取り込みます。ここでは、昔の3Dスカルプトの1つを使って、その見た目を犬に転送し、さらに2枚、3枚の画像を1つの結果に組み合わせます。
IPAdapterは、論文IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models(Ye et al., 2023)に由来します。ComfyUIでは、Matteo(cubiq)によるIPAdapter Plusノードパックで実装されています。
ポイント
- インストール: IPAdapter Plus、ComfyUI Essentials、CLIP Visionモデル、SD 1.5のIPAdapterモデルを、すべてComfyUI Managerから。
- 1枚の画像: チェックポイントとKSamplerの間にIPAdapter Advanced、Unified Loader、CLIP Vision、512 × 512にリサイズした画像。
- Weight: 1.0は参照をコピーします。約0.55でプロンプトが入ってきます。Weak inputは、参照が被写体を圧倒するのを防ぎます。
- 複数の画像: 画像ごとにIPAdapter Encoderを1つ、Combine Embedsに入れ、方法はaddにして、エンコーダーのweightでバランスを取ります。3枚までなら制御できます。
ComfyUIが初めてなら、ComfyUIのノードの基本とテキストから画像へから始めてください。完成したワークフローは、私のPatreonで無料でダウンロードできます。読み込んで、足りないノードをManagerからインストールしてください。
ノードとモデルをインストールする
- Manager → Custom Nodes ManagerでIPAdapterを検索し、ComfyUI IPAdapter plus(Matteoのもの、バージョン2)をインストールします。最新バージョンを選んで、再起動します。
- Manager → Model ManagerでCLIP Visionを検索し、CLIP-ViT-H-14モデルをインストールします。その下に表示される2つ目のCLIP Visionモデルも勧める人がいますが、私の環境では動きませんでした。
- Custom Nodes Managerで、**ComfyUI Essentials**をインストールします。標準のComfyUIにないノード(Image Resizeを含む)が追加されます。
- Model ManagerでIPAdapterを検索し、IPAdapter for Stable Diffusion 1.5モデルをインストールします。SDXL版もありますが、重くて遅くなります。学習やテストの間は、SD 1.5のほうがはるかに速く、結果もかなり良好です。
- Update Allをクリックし、ComfyUIも更新してから再起動すると、すべてが最新になります。
IPAdapterのモデルファイルは、手作業でダウンロードしたい場合はHugging Faceにもあります。
基本の1枚画像の構成
基本的な画像生成テンプレートから始めます。SD 1.5のチェックポイントepiCPhotoGasmを使います。
- IPAdapter Advancedを追加します。これがメインのノードです。model入力にはチェックポイントのモデルを入れ、MODEL出力はKSamplerに行きます。
- そのipadapter入力から、IPAdapter Model Loaderを追加し、SD 1.5のモデル(顔のモデルではなく)に設定します。
- そのclip_vision入力から、インストールしたモデルを使ったLoad CLIP Visionを追加します。プロンプトはすでにCLIPエンコーダーを通っているので、少し紛らわしいところです。しかしIPAdapterは、画像を使える形に変換するためにこの追加の手順を必要とし、これがないと動きません。
- そのimage入力から、Load Imageを追加します。私は数年前に作ったスカルプトを使いました。
Ctrl+Enterで実行し、Qでキューのパネルを開くと、左に結果が表示されます。
プロンプトを通す
プロンプト「dog」でweightが1.0のときは、何も起きませんでした。結果は単にスカルプトでした。weightをかなり下げる必要があります。0.5を下回ると犬ができるだけで、約0.55あたりで転送が起きます。それでも数回の実行が必要でした。ネガティブプロンプトにhead, face, male, femaleを入れると、少し役立ちました。
Weight type
- Linearは、参照を均等に適用します。
- Ease inは参照画像に傾きます。ほぼスカルプトの顔になります。
- Ease outはプロンプトに傾きます。参照からは何も取り込まず、ただの犬になります。
- Weak input / weak outputはおおよそ名前のとおりです。私が欲しかったのはweak inputで、顔が犬を圧倒せずに、見た目とスタイルは転送されます。
補助的なノード
3つの追加で、構成が分かりやすくなり、結果も良くなります。
- IPAdapter Unified Loader: チェックポイントのモデルを入れ、その出力をIPAdapter Advancedのmodelとipadapterの入力に接続します。presetのリスト(例:「LIGHT – SD1.5 only (low strength)」)は、モデルファイルを選ぶより分かりやすいです。presetによって結果は変わります。どちらが良いかは言えず、私は低い強度で実行し、調整の大半をAdvancedノードで行う傾向があります。
- Image Resize(Essentialsの):SD 1.5は512 × 512で最もよく機能します。
- Prep Image for ClipVision: リサイズとIPAdapterのimage入力の間に置きます。IPAdapterがより理解しやすい形に、画像を準備します。
よりスタイライズされた結果のために、約10年前に作った画像を使い、プロンプトは「biker」にしました。weak inputでweight 0.55では、かっこいい白黒の3Dスカルプト風になりました。weight 1、linearでは、結果が本当にスタイライズされました。変えられるものが多いので、何度も試せば、IPAdapterがどう振る舞うかの直感が身につきます。
2枚の画像を組み合わせる
これが私のお気に入りのIPAdapterの使い方です。画像の枝をコピー(Ctrl+C、続けてCtrl+Shift+Vで接続付きで貼り付け)し、2枚目の画像を読み込みます。私は自撮りを使いました。その後、次のようにします。
- IPAdapter AdvancedをIPAdapter Embedsに置き換え、モデルとその出力を接続し直します。
- 画像ごとにIPAdapter Encoderを追加します。各エンコーダーのipadapterとclip_vision入力を接続します。忘れやすいところです。
- IPAdapter Combine Embedsを追加します。各エンコーダーのpos_embedをembed1、embed2、というように入れ、結合したEMBEDSをEmbedsノードのpositive入力に接続します。
methodが重要です。 画像を次々に並べるconcatでは、ほぼ猿で、私の要素はわずかでした。Addは平均化し(averageも似た動作です)、猿に人間らしい特徴が増えました。addでは、私のポーズも取り込まれました。私は正面を向き、猿は横を向いていましたが、結果は私のポーズをコピーしつつ、猿のスタイルと髪を適用しました。
エンコーダーのweightでバランスを取ります。 私の顔のエンコーダーを2にすると、それが支配します。猿のエンコーダーを3にすると、猿が強くなり、ポーズも奪って、斜め向きになります。
この段階では、プロンプト(「biker」)は完全に無視され、埋め込まれた画像だけが効きました。IPAdapterのweightを下げると、赤い背景とバイカーの服を着たバイカーが戻りましたが、どちらの画像とも無関係でした。そうなると予測しにくく、制御も難しくなります。私はむしろプロンプトを使わず、画像をガイドレールにするほうを選びます。結果がより予測しやすくなります。
3枚の画像を組み合わせる
3枚の画像でも組み合わせて制御できますが、3枚を超えると難しくなります。3枚目の画像は、私が共同創業者を務めるFotorefのwhite marine cliffs and sand写真パックからの切り抜きでした。
- 参照を正方形の512 × 512に切り抜きます。 長方形の画像はリサイズで潰されて、醜い効果が結果まで引き継がれます。
- そのエンコーダーのpositive embed、ipadapter、clip_visionを接続します。
- エンコーダーのweightは1、1.5、2にしました。
すべての実行が良かったわけではありませんが、通ってきたものは気に入りました。風景の岩、私の眼鏡(今はサングラス)、猿からの斜めの顔の向き、そして薄毛の頭。いくつかの実行は粘土のような見た目になり、これは猿よりも崖から来ていると思います。
DreamShaperモデルも試しましたが、少しスタイライズされた見た目になりました。どちらにしても、気に入るものが得られるまでバリエーションを実行する必要があります。
次のステップ
IPAdapterを画像の一部に集中させるには、マスクと組み合わせます。Florence 2であらゆるものをマスクするをご覧ください。このような結果をシャープにするには、SD 1.5による無料のAIアップスケーリングをご覧ください。モデルが恒久的に学習するスタイルには、LoRAを学習してください。
動画版を見る (9:32)
上の内容はすべて動画でも説明しています。画面を見ながら進めたい方はこちらをどうぞ。 動画は英語です。
よくある質問
IPAdapterがプロンプトを無視するのはなぜですか?
weight 1.0では、参照画像が支配的になります。weightを下げてください。このテストでは、プロンプトが現れ始めたのは約0.55で、0.5を下回ると参照はほぼ消えました。Combine Embedsで複数の画像を組み合わせると、プロンプトはほとんど無視されます。
2枚の画像には、どの結合方法を使うべきですか?
Concatは画像を次々に並べるので、片方が支配的になりがちです。Add(またはaverage)はそれらをブレンドし、私のテストでは2枚目の画像のポーズも取り込みました。その後、エンコーダーのweightでバランスを取ります。
IPAdapterは、何枚の画像を組み合わせられますか?
3枚までなら制御できます。3枚を超えると難しくなります。
SD 1.5とSDXLのどちらのIPAdapterモデルを使うべきですか?
SDXLのモデルもありますが、重くて遅くなります。学習やワークフローのテストには、SD 1.5のほうがはるかに速く、結果も良好です。
