SDXL RefinerをComfyUIで使おう
間違いのお知らせ
申し訳ありません、Ksamplerの設定を間違っていたので記事とワークフローを修正しました
はじめに
SDXLの目玉機能であるRefiner…
正直、あまり使われていない機能ですが、使い方によってはモデルの持つ特性を越えた生成が実現出来たりします
SDXLのRefinerをComfyUIで使う時、Refinerがどのようなタイミングで作用しているのか理解していないと、潜在空間内で収束しきったデータに対してRefinerを使っても効果は薄く、Refinerを適用する意味があまりありません
Refinerがどのようなタイミングで作用するのかを理解し、ワークフローを見ながら正しくRefinerを使ってみましょう
ComfyUIの操作方法に関しては、以前の記事を読んでね
仕組み
基本的なt2iはSampler一つで完結します
次のワークフローを見て見ましょう
基本的なt2iはこれに色んな機能を追加していく事になります。
Refinerの簡単な解説
本来SDXLは二つのモデルから構成されています
それはBaseモデルとRefinerモデルです
潜在空間内でBaseとRefinerを切り替えて生成を行います
Step20で生成して、step10まではBase、step11からはRefinerで仕上げをする…といった事が可能となっています。
仕組みを簡単に言ってしまうとBaseで全体像を生成しRefinerで詳細な生成を行う…仕上げ工程のようなイメージでしょうか
どうやるの?
潜在空間内でBaseとRefinerを切り替えるってKSamplerの動作中に切替なんてできませんよね
そこでKSamler(Advance)ノードを二つ使用しLatentを接続します
このままだと、Baseで収束したデータを元にRefinerで生成を行うのであまり効果がありません
Base側のKSamplerの処理を途中で中断しRefiner側に受け渡す必要があります
Ksampler(Advance)ノードのBase側stepsとend_at_step、Refinerはstepsとstart_at_stepを外部入力に切り替えます
ここで、Ksampler(Advance)における各値の役割と値は以下の通りとなります
steps
総steps数
いつものstepsを指定しているものと同じもの
end_at_step
Baseのstep数
Refinerを利用する場合はstepsの8割くらいの値を推奨(モデルによって違います)
ここではsteps25,end_at_step20にしました
start_at_step
steps - start_at_step = Refinerのstep数
end_at_stepから1足した値を指定(end_at_stepと同じ値でも構いません)
add_noise
当該ノードでノイズを追加するかどうか
Baseではenable
Refinerではdisable
return_with_leftover_noise: enable
潜在空間内のノイズをそのまま次のKSamplerノードに送るかどうか
この値をdisableのまま次のKsamplerに渡すとt2i2iの処理となります
Baseではenable
Refinerではdisable
肝心のstepsやend_at_stepと繋ぐノードですが、Primitiveノードと接続することになります
Add Node>Utils>Primitiveで追加し接続すると動作に必要な値を入力するためのノードに変化します
同じ要領でend_at_stepとstart_at_stepにも接続しましょう
あとはRefiner側にもmodelとpromptを入力すれば完了です
カスタムノードは使用していないのでそのまま使用できると思います
作例
さいごに
Base側のendとRefinerのstartの値をスライドさせながら、モデル同士の相性を見ていくと面白いと思います
ちなみにSDXLモデルであればBaseとRefinerどちらとも好きなモデルを使用できますよ
Baseをリアル系モデル、Refinerをイラスト系モデルなんて事も可能です(プロンプトでどう制御するか悩みどころになるかも?)
ちなみに、身も蓋もない事を言ってしまうと、Ksampler同士をLatentでつなぐ際にノイズを引き渡さずそれぞれのSamplerで収束させるi2i形式の方が結果がいいパターンが多いのは内緒です(return_with_leftover_noise: disableということ)
便利なカスタムノードのご紹介
この記事を書いてる最中にDiscordでやり取りさせて頂いている、だにえる氏がstep、end_at_step、start_at_stepを一元管理できるカスタムノードを公開されました
Refinerを使われる方はは是非使ってみてね
おまけ
現在私が使っているt2iワークフローを載せておきます
カスタムノードマシマシなので、ご注意ください