generated at
🦊inpainting


inpaintingは画像の一部分のみを編集するタスクですが、細かく見ると2種類に分けることができます
1. マスクされた部分のみのimage2image
2. マスクされた部分を周りの情報をもとに埋める


🎨マスクされた部分のみのimage2image
🟩シンプルなimage2imageのworkflowにSetLatentNoiseMaskノードでマスクを追加するだけです
マスクを作る方法はいろいろありますが、まずは以下の方法を
画像上で右クリック → Open in MaskEditor からペンで塗りつぶし → Save to node


🍩マスクされた部分を周りの情報をもとに埋める
さて、上のworkflowのdenoiseを1.00にしてみましょう
うわぁぉホラー画像
元の画像の情報をほぼまったく持っていないので、マスク部分(右画像)をキャンバスにしただけのtext2imageに近いです
これでは困りますね、全体の雰囲気を見つつ、マスクされた部分を描いてもらう方法はないでしょうか?

🎯inpaintingモデルを使う
一番簡単なのは、このようなタスクに特化したinpaintingモデルを使うことです
モデルのダウンロード
https://civitai.com/models/146028/sdxl-inpainting-01-official-reuploadsdxlInpainting01Official_v01-inpainting.safetensors
🟩inpaintingモデルにはマスクされた部分だけでなく、全体の画像も一緒に渡さないといけないのでInpaintModelConditioningノードを使います
髪の色を変えるくらいなら上のimage2imageでも対応できますが、なにかものを描き加えるといったimage2imageでは対応できない場面で真価を発揮します
Inpaintingモデルのほかにも手法があるので見てみましょう


🐉ControlNet Inpaintを使う
inpaintingモデルを使う方法の弱点は、inpaintingモデルを使わないといけないことです(当たり前)
特にStable Diffuison 1.5のものはかなり古いのでモダンな好きなモデルを使いたい場合もあるでしょう
先取りになりますが、ControlNetを使うことでノーマルモデルでもinpaintigできるようになります
🪢カスタムノード
一番上で紹介したworkflowにControlNetを組み込みます


🐔fooocus_inpaintを使う
Fooocusで開発された独自のinpaintingモデル(?)を使うという手もあります
ControlNetと同様、好きなモデルをinpaintingに対応させることができます
SDXLのみの対応ですが、SDXL用のControlNet inpaintモデルが存在しないためちょうど代わりとして使えます
実装された → ControlNet Union
🪢カスタムノード
モデルのダウンロード
ComfyUI\models inpaint フォルダを作り、 fooocus_inpaint_head.pth inpaint_v26.fooocus.patch を置きます
Model downloadをクリックしてLaMaとMATをダウンロード、上と同じinpaintフォルダに置きます
🟨下処理として、LaMaを使ってオブジェクト除去
なくても良いのですが、境目が目立ってしまうためあった方が良いです
🟦fooocus inpaint専用のINPAINT_VAEEncodeInpaintConditioningノードが追加されています
中身としてはInpaintModelConditioningノードとVAEEncodeForInpaintノードが合体したものです


🦊FLUX.1 Tools
Fluxの開発元からinpaintingモデルのようなものが発表され、かなり高いクオリティでinpaintingすることができます

いつか解説するかもしれない