🦊inpainting
inpaintingは画像の一部分のみを編集するタスクですが、細かく見ると2種類に分けることができます
1. マスクされた部分のみのimage2image
2. マスクされた部分を周りの情報をもとに埋める
🎨マスクされた部分のみのimage2image
https://gyazo.com/3b4d37c9bb4a46d514f2fc77234718f8
マスクを作る方法はいろいろありますが、まずは以下の方法を
画像上で右クリック → Open in MaskEditor からペンで塗りつぶし → Save to node
https://gyazo.com/f8509abf64985a00066d18daa6c5bbda
🍩マスクされた部分を周りの情報をもとに埋める
さて、上のworkflowのdenoiseを1.00にしてみましょう
https://gyazo.com/51ded9dd3f6c933e4f8b2f35fb37957fhttps://gyazo.com/da4aaecca947510887be73d7e729c3a3
うわぁぉホラー画像
元の画像の情報をほぼまったく持っていないので、マスク部分(右画像)をキャンバスにしただけのtext2imageに近いです
これでは困りますね、全体の雰囲気を見つつ、マスクされた部分を描いてもらう方法はないでしょうか?
🎯inpaintingモデルを使う
モデルのダウンロード
https://gyazo.com/1aae8934d37e87afab7afb8bbf83935c
髪の色を変えるくらいなら上のimage2imageでも対応できますが、なにかものを描き加えるといったimage2imageでは対応できない場面で真価を発揮します
https://gyazo.com/d0749b470961faaea05304345bc339bb
Inpaintingモデルのほかにも手法があるので見てみましょう
🐉ControlNet Inpaintを使う
inpaintingモデルを使う方法の弱点は、inpaintingモデルを使わないといけないことです(当たり前)
特にStable Diffuison 1.5のものはかなり古いのでモダンな好きなモデルを使いたい場合もあるでしょう
先取りになりますが、ControlNetを使うことでノーマルモデルでもinpaintigできるようになります 🪢カスタムノード
https://gyazo.com/502405e34be5d221292df10ea3d6383e
一番上で紹介したworkflowにControlNetを組み込みます
Fooocusで開発された独自のinpaintingモデル(?)を使うという手もあります ControlNetと同様、好きなモデルをinpaintingに対応させることができます
SDXLのみの対応ですが、SDXL用のControlNet inpaintモデルが存在しないためちょうど代わりとして使えます
🪢カスタムノード
モデルのダウンロード
ComfyUI\modelsにinpaintフォルダを作り、fooocus_inpaint_head.pthとinpaint_v26.fooocus.patchを置きます
Model downloadをクリックしてLaMaとMATをダウンロード、上と同じinpaintフォルダに置きます
https://gyazo.com/3a6fdbbab073d6f9a50bfebee76963f6
🟨下処理として、LaMaを使ってオブジェクト除去
なくても良いのですが、境目が目立ってしまうためあった方が良いです
中身としてはInpaintModelConditioningノードとVAEEncodeForInpaintノードが合体したものです
いつか解説するかもしれない