メインコンテンツへスキップ
この記事では、AI画像生成における「局部再描画(インペインティング)」の概念を紹介し、ComfyUIでインペインティングワークフローを構築する手順を解説します。以下のような内容をカバーします:
  • インペインティングワークフローを用いた画像の編集方法
  • ComfyUIのマスクエディタを用いたマスク作成方法
  • VAE Encoder (for Inpainting) ノード

局部再描画(インペインティング)とは

AIによる画像生成において、全体としては満足できる画像が得られたものの、不要な要素や誤った生成結果(例:不自然な身体部位など)が含まれている場合があります。このような場合、画像全体を再生成すると、全く異なる結果になってしまう可能性があるため、特定の領域のみを修正する「局部再描画(インペインティング)」が非常に有効です。 これは、画家(AIモデル) に絵を描かせた後、その完成した作品の一部だけを修正したいという状況に似ています。つまり、私たちは画家に対して、どの領域を修正すべきか(マスク) を明示し、その後、その指示に基づいて再び描き直してもらう(再描画/インペインティング) というプロセスになります。 代表的なインペインティングの活用シーンには以下のようなものがあります:
  • 欠陥修復:不要な物体の除去、AI生成による不自然な身体部位の修正など
  • ディテール最適化:局所的な要素の精密な調整(例:衣装の質感変更、表情の微調整)
  • その他さまざまな応用シーン

ComfyUI 局部再描画ワークフローの実例

モデルおよびリソースの準備

1. モデルのインストール

以下のファイルをダウンロードし、ComfyUI/models/checkpoints フォルダに保存してください:
512-inpainting-ema.safetensors

2. 局部再描画用の入力画像

以下の画像をダウンロードし、本チュートリアルの入力画像として使用します: ComfyUI 局部再描画入力画像
この画像には既にアルファチャンネル(透過マスク)が含まれているため、マスクを手動で描く必要はありません。ただし、本チュートリアルでは後ほどマスクエディタを用いたマスク作成方法も解説します。

3. 局部再描画ワークフロー

以下の画像をダウンロードし、ComfyUIのキャンバス上にドラッグ&ドロップすることで、ワークフローを読み込みます: ComfyUI 局部再描画ワークフロー
メタデータにワークフローJSONを含む画像は、ComfyUIへ直接ドラッグ&ドロップするか、メニューから WorkflowsOpen (ctrl+o) を選択して読み込むことができます。

ComfyUI 局部再描画ワークフローの解説

下図の手順に従って、ワークフローが正しく実行されるよう確認してください。 ComfyUI 局部再描画ワークフロー
  1. Load Checkpoint ノードが 512-inpainting-ema.safetensors を正しく読み込んでいることを確認します
  2. 入力画像を Load Image ノードにアップロードします
  3. Queue ボタンをクリックするか、Ctrl + Enter キーで画像生成を実行します
比較のために、v1-5-pruned-emaonly-fp16.safetensors モデルを用いたインペインティング結果を以下に示します: SD1.5 インペインティング結果 一方、512-inpainting-ema.safetensors モデルを用いた結果は、より高品質なインペインティング効果と、自然な境界のトランジションが得られます。
これは、当該モデルがインペインティング専用に設計・最適化されているためであり、生成領域をより正確に制御でき、結果として優れた再描画品質を実現します。
先ほどご紹介した「画家」というアナロジーを思い出してください。異なるモデルは、それぞれ得意分野や限界を持つ「画家」のような存在です。適切なモデルを選択することで、より理想的な生成結果を得ることが可能になります。 さらに良い結果を得るためのアプローチとして、以下の方法を試すことができます:
  1. プロンプト(正のプロンプト/負のプロンプト)をより具体的な記述に変更する
  2. KSampler のシード値を変えて複数回実行し、異なる生成結果を試す
  3. 本チュートリアルで学ぶマスクエディタを活用し、一度生成された画像を再度インペインティングして、最終的に満足のいく結果を得る
次に、マスクエディタ(Mask Editor) の使い方について学びます。今回の入力画像にはすでに alpha 透過チャンネル(編集対象領域)が含まれているため、マスクの手動描画は不要ですが、実際の運用ではマスクエディタを頻繁に用いてマスクを作成することになります。

マスクエディタの使用方法

まず、Save Image ノードを右クリックし、「Copy(Clipspace)」を選択して、現在の画像をクリップボードにコピーします: クリップボードへの画像コピー 次に、Load Image ノードを右クリックし、「Paste(Clipspace)」を選択して、クリップボードから画像を貼り付けます: 画像の貼り付け さらに、Load Image ノードをもう一度右クリックし、「Open in MaskEditor」を選択して、マスクエディタを開きます: マスクエディタの起動 マスクエディタの動作例
  1. 右側パネルでブラシの各種パラメータ(サイズ・不透明度など)を調整できます
  2. 間違えた部分は消しゴムツールで修正可能です
  3. 編集が完了したら Save ボタンをクリックしてマスクを保存します
このように作成したマスクは、VAE Encoder (for Inpainting) ノードへの mask 入力として使用され、エンコード処理に組み込まれます。 その後、プロンプトを調整して再生成を繰り返し、満足のいく結果が得られるまで試行してください。

VAE Encoder (for Inpainting) ノード

本ワークフローを テキスト→画像(Text-to-Image)画像→画像(Image-to-Image) のワークフローと比較すると、主な違いは VAE 部分の条件入力にあることに気づくでしょう。
本ワークフローでは、インペインティング専用に設計された VAE Encoder (for Inpainting) ノード を使用しており、これにより生成領域をより正確に制御し、高品質な再描画結果を得ることができます。
VAE Encoder (for Inpainting) ノード 入力パラメータ
パラメータ名機能
pixels潜在空間(latent space)へエンコードする対象の入力画像。
vae画像をピクセル空間から潜在空間へエンコードするための VAE モデル。
maskどの領域を修正すべきかを指定する画像マスク。
grow_mask_by元のマスクを外側へ拡張するピクセル数。これにより、再描画領域と元画像との間に滑らかなトランジション領域を確保し、境界のギザギザ(ハードエッジ)を防ぎます。
出力パラメータ
パラメータ名機能
latentVAE によって潜在空間へエンコードされた画像データ。