この記事はComfyUIのImpact Pack
に含まれるノードを紹介していくシリーズ。
前回はFace Detailer
に絞って「とりあえず使えれば良い人向け」に書いた。
【Impact Pack #2】顔を再描画!Face Detailerの使い方【ComfyUI】 | 謎の技術研究部
今回はDetailerにどんな種類があるのかを見ていくが、把握しきれていないためメモ書き程度のものも多い
また、相変わらず細かすぎる設定については触れない(そもそも調べても良くわからない)
マスクで塗った箇所を再描画する機能。顔や手をやり直すことが多いが、それ以外も好きな箇所を指定できる。
ComfyUIはカスタムノードを使わずともインペイントの機能が備わっている。
Detailerの動作的には同じことをやっているだけなのだが(恐らく)具体的にどうちがうのか。
私も、詳しく調べているわけではないがInpaintは内部的には「全体」をいちど再描画しながら、実際にはマスクが塗ってある部分だけ再描画していく。
どういうことかというと、マスク以外の範囲も1度書き換えが走っていくが、生成が進むたびマスク外は最終的に元の絵に戻る、といった動きをする。
一方でDetailerは画像を一部切り抜いて「そこだけ再描画」する。
マスク外も1度再描画が走ることがそのままメリットで、AIはマスクの外を見てからマスクの内側を書き込むのでInpaintされた箇所が馴染みやすい感覚がある。
※厳密にアルゴリズムを調査したわけではないので違うかもしれない
大きな絵のインペイントをしようと思うと1度全体に書き換えようとする処理が走るためVRAMも生成時とおなじだけ必要で処理も遅い。
一方でDetailerはマスクが塗られた周辺だけを切り取って処理するため、処理が早く軽い。(Inpaintのように全体は見ていない)
またDetailerのほうがピンポイントでプロンプトを流し込めたり、オプションも豊富。こちらも強いメリット。
Detailerは一部しか絵を見ていないので雰囲気に合わない絵がはめ込まれることが多い印象
ここからは具体的なノードを見ていく。
まずは何もないところダブルクリックで検索 > detailer
で調べると...
既にDetailerForEach
系で4種類もある。
一番上のDetailerForEach
が基本となるのでコレを出す。ノード表記はDetailer (SEGS)
に変わる。
かなり大きいノードで驚くかも知れないが基本はそれほど難しくない。
まずはmodel
~negative
までのピンは言わなくてもわかると思う。
これは通常画像を生成する上で必要なKSampler
に挿すものと同じだ。
厳密にはKSampler
にはVAE
やclip
のピンは無いが、難しく考える必要はなくCheckpointLoader
から出ているものでよい。
こちらも当然ながら部分的に書き換えたい画像を入れるだけ。解説必要なし。
ここが一番重要
まずできればSEGSの理解がほしい。次のページで詳しく書いている。
【Impact Pack #1】SEGSとは何か【ComfyUI】 | 謎の技術研究部
が.... 実は読まなくても全然使える。
segsは極端なことを言うとマスクの上位互換だと思われる(私の見解)
したがって、マスクを変換すれば使える。
MaskToSegs
ノードを検索して繋ぐ。デフォルトで良い。
あとは実行するだけ。
例えばおでこのマークを星マークに変えたい。
※Use Everywhereノードを使用して自明なピンは省略している
Before | After |
---|---|
確かに星になったが、こんな感じで確実ではないのも事実。
より詰める場合は再描画したり設定を変更していく。
基本的にFaceDetailerの記事で書いているものと同じなのでこちらはざっくり
【Impact Pack #2】顔を再描画!Face Detailerの使い方【ComfyUI】 | 謎の技術研究部
KSamplerをいじるときと同じようにSampler, cfg, steps, denoise
の調整は基本
cycle
を増やすと書き換え処理を複数回重ねがけする。1~3ぐらいまでは良くなること多し。
size
系は基本操作しないほうが良いかも。調整が難しく上級者向け。別途調査出来たらと思う。
プロンプトを入れる欄があるので、ここでピンポイントでマスクにだけ入れたいプロンプトを入れる。
次のノード解説に行く前に、segsは自動検出で生成できるので紹介する。
重複になるがこちらも次を先に読んでいただけると理解が深まると思う。
【Impact Pack #1】SEGSとは何か【ComfyUI】 | 謎の技術研究部
例えば洋服を検出して再描画するノードの組み方が次。
UltralyticsDetectorProvider
ノードに洋服検出モデルのdeepfashion2_yolov8s-seg.pt
を入れるSEGM Detector (SEGS)
ノードがこのモデルを利用し実際にsegを生成するこれで実際にDetailerを通すとと次のようになる。
元絵 | 洋服変更後 |
---|---|
更にFaceDetailer
を通して完成
ComfyUI Managerを利用してInstall Models
あとはここでUltralytics
で検索するとずらっと一覧が出てくる
ここでは詳しく解説しないが、命名がそのまま検出対象になっているのでわかりやすい。
今後増えれば更に便利になるだろう。
検索名:DetailerForEachDebug
ノードを出すとこのノードが出る。
基本的にはDetailerForEach
と変わらないが、次のアウトプットだけ違う。
要するにこれは内部処理で使用したマスクでどこが検出されているのかなどを目視で確認するためのピン。
動作自体は同じなので気になったら使う程度で良いのではないだろうか。
念のためサンプルを添付したが、正直わからないアウトプットもあるので要検証。
検索名:DetailerForEachPipe
がこのノードになる。
こちらも機能自体は同じだが入出力のピンが異なる。
ImpactPack
にはPipe
という概念がある。
次で記事を書いているのでよければ参考にしてほしい:【Impact Pack #4】線をまとめて見やすく!Pipeの使い方!【ComfyUI】 | 謎の技術研究部
何をやっているかというと、非常にシンプルで複数のピンを1度ひとまとめにして線のごちゃごちゃをスッキリさせるためのもの。
こちらはImpact Pack
基本でもあるのでまた別途記事が作れたらと思う。
このノードは出力側にもpipe
やseg
がある。
恐らく入力したものと同じものがスルーされてでてくるのだと思うが未検証。これはいつ使うと便利なのだろうか?
detailer_hook
, refiner_basic_pipe_opt
などのインプットは未調査。
顔に特化したDetailer
FaceDetailer
系は次で解説したのでスキップする。
【Impact Pack #2】顔を再描画!Face Detailerの使い方【ComfyUI】 | 謎の技術研究部
しかし、上でも設定を詳しく見ていないためわからないことも多い。
設定項目が通常のDetailer
と比べてかなり違っているためここがFace専用のメリットなのではないだろうか。
コレ以外のDetailerでも顔は直せるが、これがいちばん美しく治る印象。
またFaceDetailer
の他にFaceDetailerPipe
というノードがあり、こちらは上で紹介したものと同じでBasicPipe
を受け取って動作するもの。
このノードは私が調査した範囲では明確な利用方やメリットがわかっておらずスキップでも良い。
おそらく最上級者向けノード。
また、この項は調査が難航しておりメモ書き程度になっている。
検索名もSEGSDetailer
このノードの最大の特徴は出力がsegs
であるという点。
何度も書いているが、こればかりは次の記事の理解がないと利用不可だと思われる。
【Impact Pack #1】SEGSとは何か【ComfyUI】 | 謎の技術研究部
2024/02/07更新:
次のようにSimple Detector (SEGS)
を使用し、BBOXベースのsegを取る。
次にforce_inpaintをenabledにしないとDetailerの処理が走らずスルーされてしまうことが分かっている(デフォルトでオフ)
これがどうしてこういうデフォルトになっているのか不明。
このノードはアップデートが入っており、1回の処理でバッチ処理が可能で1度に複数のパターンが書き出せる。
output
がsegs
になることで、このままのデータを別のノードに渡せる。
が、これの実用例が私にはわからない。
この後さらに顔だけのseg
データを加工する場合にのみ使用か?
私が試した範囲だと、これで顔を修正してもキレイにならない。
素直にFaceDetailer
を使ったほうが良さそう
例えばこれで全身の絵から顔のsegを対象に処理をするとsegs
アウトプットには補正後の顔だけ切り抜かれた状態で保存されている。
したがってこのまま画像を保存しても顔だけのアップが出てきてしまう。
この場合はSEGSPasete
ノードを使って元絵と合成してやる。
逆に顔だけ切り抜いて画像を保存したい場合は、このノードの出番かもしれない。
検索名はImpactSEGSPicker
pick
ボタンを押すと画像を表示して選択できる(複数可)
上では2番目のバッチ結果を取り出す方法。
ただ、1回実行しないとバッチ後の結果が分からず、そのあとPickするためにもまた実行しないとだめなので直接指定する使い方がよくわかっていない。
検索名:SEGSDetailerForAnimateDiff
なんとAnimateDiff
専用のDetailer
恐らく連番動画の一貫性を保つ機能へ調整されたものだと思われる。
単なるSEGSDetailer
は使い所が難しいが、AnimateDiff
前提なら迷わずこれを使えばよいのではないだろうか。
基本的なノードの繋ぎ方は上のSEGSDetailer
と同じなのでかなり簡略化して画像にしておく。
この例では顔を自動判別し、全てのフレームで顔のディティールアップを行っている
ここでもpipeの説明は省略するがKSampler
に繋がっているものをここに繋げれば良い。
SEGSDetailerForAnimateDiff
にはsegsを目視するピンがないので、ここで初めてSEGSPreview
というノードを付けている。
これは差しているだけでsegの中身を見ることが出来るので覚えておきたい。
上では使っていないが、このノードを使えば手書きのマスクをAnimateDiff用のsegへ変換できるので、動きが少ないものならこれは有用かもしれない。
実際のサンプルが次。僅かな違いではあるが、顔が良くなっておりチラツキも少ない。
未加工のAnimateDiff | Detailer後 |
---|---|
Detailer
についてはまだ分かっていないことも多く、メモ書き程度になってしまった。
が、おおよそこれだけあれば結構使えると思う。
segの自動判定のみならずMaskToSegs
ノードで手書きでsegを作るなどもやってみるのも有用。
いろいろ試してほしい。