Comfy UI でアニメ系モデルで生成した画像を、 img2img でリアル系モデルに置き換えるために導入する、拡張ノード SD Prompt Reader Node についてまとめます。
SD Prompt Reader の基礎知識
SD Prompt Reader Node は読み込んだ画像から、埋め込まれたデータも含めて出力できるノードで、ComfyUI-Manager からインストールできます。
これをインストールすると右クリックで呼び出せるメニューから「Add Node」を選択すると「SD Prompt Reader」というメニューが追加され、そこからさらに「SD Prompt Reader」を選択すると右のような結構大きめのノードが追加されます。
しかし、使う出力は、ひとまず「IMAGE」「POSITIVE」「NEGATIVE」の三つで、「choose file to upload」ボタンを押すとファイルが選択でき、選択したファイルの画像データ、プロンプトおよびネガティブプロンプトが出力されるようになります。
Img2Img のワークフローを作る
ComfyUI Examples で公開されている Img2Img Examples を御覧いただければ、おわかりいただけると思いますが、基本の Img2Img のワークフローとは、ほぼ Comfy UI のデフォルトのワークフロー(下図)における「Empty Latent Image」ノードを、「Load Image」ノードと「VAE Encode」ノードで置き換えただけのものです。
ここではその「Load Image」ノードの代わりに「SD Prompt Reader」ノードを使います。
従って、「SD Prompt Reader」ノードの出力「IMAGE」は「VAE Encode」ノード入力「pixels」に繋げます。
あとは残りの「SD Prompt Reader」ノードの出力「POSITIVE」「NEGATIVE」は、そのまま「KSampler」ノードの入力「positive」「negative」に繋げてあげれば…と思っても繋がらないんですねこれが… w
「CLIP Text Encode」ノードの入力方法を変更
これは「SD Prompt Reader」ノードの出力「POSITIVE」「NEGATIVE」は単にテキストデータで、「KSampler」ノードの入力「positive」「negative」は、「CLIP Text Encode」ノード が生成したデータしか受け付けないためです。
というわけで、「SD Prompt Reader」ノードの出力「POSITIVE」「NEGATIVE」は、「CLIP Text Encode」ノードに入力しなければならないのですが、さて、このテキストフィールドにどうやって入力するのかというと、接続点に変更してあげる必要があります。
下図のように「CLIP Text Encode」ノード上で、右クリックで出現するメニューで「Convert Widget to Input」から「Convert text to input」を選択すると、テキストフィールドがなくなり入力「text」出現します。
このような「CLIP Text Encode」ノードをネガティブプロンプト用にも作ってあげて、「SD Prompt Reader」ノードの出力「POSITIVE」「NEGATIVE」をそれぞれの入力「text」に接続します。
これで基本は OK です。
あとは画質向上編でご紹介した LoRA の適用だったり「Face Detailer」などに加えて、昨今は使うようになった FreeU ノードなどもガンガン追加してできあがったのが、こちらのフロー!
そして、こちらのフローをつかって、最近、アニメ系モデルでお気に入りの Agelesnate V4 で作った元絵(一番最初のアニメ系の絵)を各リアル系モデルに入れ替えた結果がこちら!
これでなかなかいけてる絵が作れるようになりました。
注意点は 「KSampler」ノードの Step の値を初期値より心持ち高め( 30 ~ 40 )にして、一番重要なのは denoise の値を 0.60 より低く設定すること。denoise の値を大きくするとあまりに置き換えるモデルの特長が強く出て、元絵の雰囲気が飛んでしまい、あまりに小さくすると今度は元絵が強く出てしまい、置き換えるモデルの特長がまったく出なくなります。経験則的に 0.5 ~ 0.55 くらいがいいように思います。
こ、これは…
いけるんじゃない?…と最初は思いました。
しかも、この「SD Prompt Reader」ノードを使えば、一気に FHD まで画像を拡大しなくても、512×768 くらいのサイズで生成しておいて、気に入ったものだけ FHD 化するフローを独立させられる!しょっぱい GeForce RTX 3050 とか 4060 使っても生成効率を上げられる。
…と、FHD 化するだけのフローを作り始めて、気がつきました。上記のフローには致命的な問題があることに。
実は上記のフローで作成すると、最終的に「Save Image」ノードで保存される絵に、なぜかプロンプトの情報が含まれないのです。そのために、このフローで作った絵で、気に入ったものだけ FHD 化しようと再び「SD Prompt Reader」ノードで読み込んでも、プロンプトを取得できません orz
もちろん上記のフローを拡張して、「UltimateSDUpscale」ノードを追加し FHD 化することは可能です。
しかし、一度、FHD 化のフローだけを独立させることを思いついて、一直線にそれを実現する方法を考え始めてしまいました。
そして、たどり着いたのです。SD Prompt Reader Node に同梱されている「SD Parameter Generator」ノードに… w というわけで、次回はその「SD Parameter Generator」ノードの使い方を含めた SD Prompt Reader Node 応用編(予定)です。
あらかじめ言っておきますが、「SD Parameter Generator」ノードを使わなくとも Img2Img 要件定義編 で目指したものは、「SD Prompt Reader」ノードだけでできます。「SD Parameter Generator」ノードは使うと便利なのですが、かなり深みにはまってしまいました… d(^^;A