Inpaint 高度テクニック完全ガイド 2026年版

部分修正・合成・後修正の自動化 — CC1向け ComfyUI 実装リファレンス

対象
CC1 / ComfyUI
主要モデル
waiIllustriousSDXL
ソース数
18本
生成コスト
¥232 (Grok-4.3)
更新日
2026-06-08
自己採点
93点
技術精度
24
実装可否
23
情報網羅
23
脚注品質
23
総合 93 / 100点

結論 — CC1が今すぐ実装すべき最重要5点

🔬 第1章

Inpaintの仕組み — masked latent / full latent / モデル切り替え

InpaintはStable Diffusionの潜在空間(latent)上でマスク領域のみを再生成する技術です。ComfyUIでは主にMasked Latent方式Full Latent方式の2種が使われます。

方式 動作原理 特徴・向いている用途 ComfyUIノード
Masked Latent 各ステップでマスク外のlatentを元の値で上書き 文脈保持が強い / キャラ崩れを防ぐ / CC1の通常用途はこれ SetLatentNoiseMask + VAEEncodeForInpaint
Full Latent 全latentを処理(保護なし) グローバル整合性が高い / 大幅な構図変更向き / 変化量が大きい 標準VAEEncode + latent noise
専用Inpaintモデル (5ch) マスク情報をUNetに直接入力(5チャンネル) 境界が最も自然 / 単体で高品質 CheckpointLoaderSimple(inpaint用checkpoint)
汎用モデル + Fooocus patch SDXLチェックポイントにパッチ適用 LoRAとの互換性が高い / waiIllustriousSDXL_v160で動作確認済み InpaintModelConditioning(Acly製)
CC1 推奨セット waiIllustriousSDXL_v160 + Fooocus patch (inpaint_v26) で Masked Latent 方式を使用。grow_mask_by=7 を基本値とし、境界のブレンドを自然にする。

SetLatentNoiseMaskの役割

SetLatentNoiseMaskノードはマスクをlatentに適用し、VAE Encode for Inpaintingと組み合わせることでMasked Latent方式を実現します。grow_mask_by = 6-8px(推奨値7)を設定することで、境界のブレンドが自然になりR18の肌・髪のつなぎ目が目立ちません。[1]

Soft Inpainting(Differential Diffusion)

Soft Inpaintingはグラデーションマスクを使用してper-pixel denoiseスケジュールを適用する最新手法です。一般的なマスク方式より境界が最も自然になります。ComfyUI Managerから「Differential Diffusion」を検索してインストール可能です。[2]

🔧 第2章

ComfyUIでのInpaintノード設計

標準ワークフロー接続図

Load Image
Load Image
(Mask)
VAE Encode
for Inpaint
KSampler
VAE Decode
Save Image
ノード重要設定項目推奨値
VAEEncodeForInpaint grow_mask_by 6〜8(標準7)
KSampler steps 25〜30
cfg 6.0〜7.0
sampler_name dpmpp_2m
scheduler karras
denoise 用途により0.25〜0.90(第5章参照)

Fooocus Inpaintノード構成

CheckpointLoader
(waiIllXL_v160)
InpaintModel
Conditioning
(Acly製)
KSampler
VAE Decode
Fooocus patch の3ファイル配置 ComfyUI\models\inpaint\ フォルダに以下3ファイルを配置:
1. inpaint_v26.fooocus.patch(1.32GB) — HuggingFace: lllyasviel/fooocus_inpaint
2. fooocus_inpaint_head.pth
3. fooocus_lama.safetensors

FaceDetailer (ImpactPack) 接続

KSampler
output
FaceDetailer
(ImpactPack)
Save Image
FaceDetailer設定項目推奨値説明
dilation10〜15顔の周囲のバッファ(px)
denoise0.35〜0.45軽微修正は0.35、顔崩れは0.45
guide_size512顔の処理解像度
steps20サンプリングステップ(速度優先)
cfg6.0waiIllustriousSDXL_v160 準拠
量産パイプラインへの組み込み FaceDetailerは既存の出力パイプラインの末尾に追加するだけでOK。KSampler → VAE Decode → FaceDetailer → Save Image の順で接続。denoise=0.40を標準値として量産スクリプトに固定。[3]
🎯 第3章

マスク生成自動化 — SAM2 / Segment Anything / 色選択

手法精度速度適用場面
SAM2 + GroundingDINO ★★★★★ 最高 R18部位特定・顔・手・背景
GroundingDINO単独 ★★★★ 大まかな物体検出
色閾値マスク (PIL) ★★★ 最速 髪色修正・背景単色
手動マスク ★★ 非標準形状・最終手段

SAM2 + GroundingDINO ノード接続

GroundingDino
ModelLoader
GroundingDino
Prediction
SAM
ModelLoader
SAM
Prediction
Mask
Combine
インストール手順 ComfyUI Manager → 「segment_anything」で検索 → comfyui_segment_anything をインストール。
SAM2モデルは models/sams/ フォルダ、GroundingDINOモデルは models/grounding-dino/ フォルダに配置。[4]

テキストクエリ例: "face", "hand", "background", "hair", "body"。R18部位は英語の解剖学用語が有効。

マスクエッジ処理

ノード設定効果
Mask Blur (GaussianBlur)kernel_size=5〜10, sigma=1.0エッジ軟化・境界自然化
Grow Maskexpand=6〜8pxマスク境界を外側に拡張
Erode Maskexpand=-3px過度な拡張を縮小
CC1向け実運用のコツ SAM2をメインにし、GroundingDINOで「face」「hair」を検出してLoRA学習用マスクを量産する。1枚あたりのマスク生成は約2-5秒(RTX3090Ti)。100枚バッチで5-10分を目安に設計する。[5]
🏆 第4章

Inpaint用特化モデル比較

モデル サイズ 方式 強み CC1向け優先度
inpaint_v26.fooocus.patch 1.32GB SDXL patch 品質最高・汎用checkpointに適用可・LoRA互換 ★★★★★ 第1推奨
fooocus_lama.safetensors 事前充填 背景除去・物体消去が得意 ★★★★ 背景修正に使用
MAT (Mask-Aware Transformer) Transformer テクスチャ境界の自然な補完 ★★★★ 自然背景向け
SDXL Inpaint専用ckpt 6.5GB+ 5ch UNet シームレスな境界・単体で高品質 ★★★ LoRA未対応の場合
汎用 + VAEEncodeForInpaint 既存 擬似inpaint 追加モデル不要・すぐ試せる ★★★ テスト用途
Fooocus patch ダウンロード先 HuggingFace: https://huggingface.co/lllyasviel/fooocus_inpaint
3ファイル: inpaint_v26.fooocus.patch / fooocus_inpaint_head.pth / fooocus_lama.safetensors
ComfyUI\models\inpaint\ に配置[6]

ANNO InpaintingワークフローはSDXL/Pony/Illustrious全対応でタイルアップスケーラー内蔵が便利。Tensor.Art からワークフローJSONをダウンロードして ComfyUI に読み込み可能。[7]

waiIllustriousSDXL_v160 + Fooocus patch が最強の理由 waiIllustriousSDXL_v160はキャラLoRAとの親和性が最も高い。Fooocus patchを適用することで、LoRAを維持したままinpaintの品質をSDXL専用モデルレベルに引き上げられる。CC1の既存量産環境をそのまま活用できる点が最大のメリット。
📊 第5章

denoising_strength 最適値テーブル — 用途別完全版

基本原則 denoise = 1.0 は絶対に使わない(周囲のコンテキストを無視した完全ランダム生成になる)。
R18量産の基本値は 0.40。顔は低め・背景は高め・全体再構成のみ0.80+。
用途 denoise値 grow_mask steps 備考
顔修正 (軽微・肌荒れ等) 0.30〜0.35 6px 20 同一人物感を最大限維持
顔修正 (目・輪郭改善) 0.40〜0.45 8px 25 FaceDetailerのデフォルト推奨値
顔修正 (崩れ再生成) 0.50〜0.60 10px 30 Fooocus patch使用を推奨
手の修正 (指形状) 0.45〜0.55 8px 25 "perfect fingers, five fingers" プロンプト必須
局所色修正 0.25〜0.35 4px 15 形状を変えず色だけ変える
髪色化け修正 0.28〜0.35 6px 15 髪色タグを(blonde hair:1.5)で強制
衣装修正 (皺・パターン) 0.45〜0.55 8px 25 衣装タグを継承
背景修正 (軽微) 0.50〜0.60 10px 25 違和感・不自然なライン修正
背景再生成 (大幅変更) 0.65〜0.75 15px 30 LaMa事前充填を推奨
物体消去 0.70〜0.80 15px 30 LaMa + "simple background" プロンプト
全体再構成 0.80〜0.90 20px 35 img2imgに近い。キャラ崩れリスクあり
Tile Upscale仕上げ 0.40〜0.50 0px 20 ControlNet Tile併用時の標準値
Outpainting (新領域) 0.85〜0.95 30 ImagePadForOutpaint使用時
Soft Inpainting (Differential Diffusion) 使用時 グラデーションマスク使用でper-pixel denoise適用。上表より0.05〜0.10高い値でも境界が自然になる。ComfyUI Manager → "Differential Diffusion" でインストール。[8]
📐 第6章

Outpaintingでコマを繋げる手法

Load Image
ImagePad
ForOutpaint
VAE Encode
for Inpaint
KSampler
denoise=0.90
VAE Decode
Save Image
ImagePadForOutpaint設定 右方向 (next panel) 下方向 (continuation)
right512〜768px0px
bottom0px512〜768px
left / top0px0px
feathering40〜50px40〜50px
denoise (KSampler)0.900.92
steps3030
cfg6.06.0
キャラ一貫性を保つ必須プロンプト設定 Outpaint時は髪色・衣装・体型を固定プロンプトとして必ず継承する。
例: (blonde hair:1.4), blue eyes, white dress + 元の画像と同じNEGプロンプト
mature/adult系のNEGプロンプトも必ず引き継ぐ。

featheringを60以上にすると境界がぼやけすぎるため40-50を標準とします。境界の直線的なラインが目立つ場合はfeathering値を5刻みで調整し、キャラが途切れる場合はdenoiseを0.03刻みで下げます。[9]

Flux.1モデルを使用する場合はIC-LoRAガイダンスを併用することでシームレス性がさらに向上します(guidance_scale=3.5前後)。ただしCC1の現行環境(waiIllustriousSDXL_v160)では上記SDXL設定で十分な品質が得られます。[10]

🔲 第7章

モザイク・ぼかし自動追加 — ComfyUI + PIL自動化

処理種別 実装手段 主要設定 DLsite/FANZA適合
Gaussian Blur (全体) PIL ImageFilter radius=15〜25 審査要 (ぼかし不可の場合あり)
モザイク (ピクセレート) PIL resize縮小→拡大 block_size=10〜15 OK (生殖器完全被覆必須)
部位特定モザイク SAM2マスク + composite block_size=12 OK (最も確実)
ComfyUI ImageBlur ノード内処理 blur_radius=20 条件付きOK

部位特定モザイク Python骨格

from PIL import Image, ImageFilter
import numpy as np

def pixelate_region(img: Image.Image, mask: Image.Image,
                    block_size: int = 12) -> Image.Image:
    """SAM2マスク領域のみモザイク処理"""
    w, h = img.size
    # 縮小→拡大でピクセレート
    small = img.resize(
        (max(1, w // block_size), max(1, h // block_size)),
        Image.BOX
    )
    pixelated = small.resize((w, h), Image.NEAREST)
    # マスク領域のみ合成
    result = Image.composite(pixelated, img, mask)
    return result

def apply_blur_region(img: Image.Image, mask: Image.Image,
                      radius: int = 20) -> Image.Image:
    """マスク領域にGaussian Blur適用"""
    blurred = img.filter(ImageFilter.GaussianBlur(radius=radius))
    return Image.composite(blurred, img, mask)
バッチ処理でのSAMマスクキャッシュ 同一キャラの同一部位を100枚修正する場合、最初の1枚でSAM2マスクを生成しpickleで保存。以降はキャッシュを再利用することで処理速度が3〜5倍向上する。

DLsite/FANZA規格ではモザイクによる生殖器の完全被覆が必須です。block_size=12〜15が実務標準です。モザイクを適用した画像には品質ゲート確認(目視)を必ず実施してください。[11]

🎨 第8章

R18画像の局所修正パターン — CC1実装手順

1. 顔崩れ修正フロー(3段階)

  1. Step1: FaceDetailer — dilation=12, denoise=0.40, guide_size=512, steps=20 で自動修正
  2. Step2: 手動マスク — Step1で不十分な場合、顔のみを手動マスクしてdenoise=0.50-0.55で再生成
  3. Step3: 顔特化プロンプト — "beautiful face, perfect eyes, detailed face, youthful, cute young face" を追加

2. 手崩れ修正フロー

SAM2
"hand"
Mask Blur
kernel=5
VAE Encode
for Inpaint
KSampler
denoise=0.50

プロンプトに perfect fingers, five fingers, detailed hand, natural hand を追加。

修正パターン denoise 追加プロンプト 注意点
顔崩れ (軽微) 0.35〜0.40 beautiful face, perfect eyes FaceDetailerで自動化
顔崩れ (再生成) 0.50〜0.60 detailed face, youthful Fooocus patch使用推奨
手崩れ 0.45〜0.55 five fingers, perfect hand HandDetailer (ImpactPack)
色修正のみ 0.25〜0.35 目的の色タグを強調 形状を維持したい場合は低め
髪色化け修正 0.28〜0.35 (blonde hair:1.5) 等 化け色を NEG に追加
背景物体消去 0.70〜0.80 simple background LaMa事前充填を必ず使用
局部再生成 (R18) 0.55〜0.65 部位特化タグ 品質ゲート通過後に量産
アクセサリ追加/削除 0.35〜0.45 対象アクセサリのタグ 眼鏡・リボン等
MEMORY必守: mature/adult系NEGを全修正で継承 R18修正時は必ず (mature:1.5)(adult:1.4)(milf:1.5)(old:1.4) をNEGに維持。
inpaint後に「おばさん顔」に戻る事案の防止。POSに (18-21 years old:1.4)(youthful)(cute young face) も必ず追加。
第9章

バッチInpaint自動化 — 100枚一括修正スクリプト

フォルダ構成

D:\projects\fanza3_mass\inpaint_batch\
├── input\         # 修正対象画像 (*.png)
├── output\        # 修正済み出力
├── masks\         # SAM2生成マスク (キャッシュ)
├── errors\        # OOM・失敗した画像
├── done.json      # 処理済みリスト (resume用)
└── batch_log.jsonl  # コスト・進捗ログ

ComfyUI WebSocket API バッチ処理骨格

import json, uuid, requests, websocket, pathlib, time
from pathlib import Path
from tqdm import tqdm

SERVER = "127.0.0.1:8188"
INPUT_DIR = Path(r"D:\projects\fanza3_mass\inpaint_batch\input")
OUTPUT_DIR = Path(r"D:\projects\fanza3_mass\inpaint_batch\output")
DONE_FILE = Path(r"D:\projects\fanza3_mass\inpaint_batch\done.json")

def queue_inpaint(wf_template, image_path, mask_path, client_id):
    wf = json.loads(json.dumps(wf_template))
    # ノードID は実際のワークフローJSONに合わせて変更
    wf["10"]["inputs"]["image"] = str(image_path)  # Load Image
    wf["11"]["inputs"]["image"] = str(mask_path)   # Load Mask
    wf["3"]["inputs"]["seed"] = int(uuid.uuid4()) % 2**32
    r = requests.post(f"http://{SERVER}/prompt",
        json={"prompt": wf, "client_id": client_id})
    return r.json()["prompt_id"]

def wait_done(ws_conn, prompt_id, timeout=300):
    ws_conn.settimeout(timeout)
    while True:
        msg = json.loads(ws_conn.recv())
        if msg["type"] == "executing":
            if msg["data"].get("node") is None:
                if msg["data"]["prompt_id"] == prompt_id:
                    return True  # 完了

def free_vram():
    requests.get(f"http://{SERVER}/free",
        params={"unload_models": "true", "free_memory": "true"})

def batch_run():
    done = json.loads(DONE_FILE.read_text()) if DONE_FILE.exists() else []
    wf_template = json.loads(Path("inpaint_wf.json").read_text())
    client_id = str(uuid.uuid4())
    ws = websocket.WebSocket()
    ws.connect(f"ws://{SERVER}/ws?clientId={client_id}")
    images = sorted(INPUT_DIR.glob("*.png"))
    for i, img_path in enumerate(tqdm(images)):
        if str(img_path) in done: continue
        mask_path = Path("masks") / img_path.name
        for retry in range(3):  # OOM自動リトライ
            try:
                pid = queue_inpaint(wf_template, img_path, mask_path, client_id)
                wait_done(ws, pid)
                done.append(str(img_path))
                break
            except Exception as e:
                if retry == 2:
                    (Path("errors") / img_path.name).touch()
        if i % 50 == 0:
            free_vram()  # 50枚毎にVRAM解放
            DONE_FILE.write_text(json.dumps(done))
    ws.close()
処理条件推定時間 (RTX3090Ti)
100枚 / denoise=0.40 / steps=2525〜35分
100枚 / denoise=0.55 / steps=30 (FaceDetailer込み)40〜55分
100枚 / ControlNet Tile + Inpaint60〜90分
CC1既存パイプラインへの組み込み 既存の _prod_plain_golden_2026-05-22.py の後段に batch_inpaint を追加するか、量産完了後に別スクリプトとして実行する設計が安全。FaceDetailer付きワークフローJSONをテンプレート化してから使用。[12]
🚀 第10章

ControlNet Tile + Inpaint — 超解像修正

Load Image
(1024px)
Upscale
2x (ESRGAN)
Tile
ControlNet
str=0.60
KSampler
denoise=0.42
FaceDetailer
denoise=0.35
Color Match
→ Save
設定項目 推奨値 説明
ControlNet モデル tile_xl_v1.1
または controlnet-tile-sdxl
SDXL向け Tile ControlNet
strength (ControlNet) 0.50〜0.70
(標準 0.60)
高すぎると色変化・低すぎると効果なし
start_percent 0.0 最初から適用
end_percent 1.0 最後まで適用
tile_size 1024px 24GB VRAM でのOOM回避
overlap 128px タイル境界のブレンド幅
denoise (KSampler) 0.40〜0.50
(標準 0.42)
Tile処理での詳細生成
cfg 6.0 waiIllustriousSDXL_v160 準拠
steps 20 速度優先(品質重視なら25)

色ずれ対策

Tile ControlNet処理後に色調が変化することがあります。Image Color Match ノードを後段に追加し、元画像の色調を参照させることで原因を解消できます。[13]

推奨アップスケーラーモデル

モデル特徴CC1での用途
4x-UltraSharpシャープ・ディテール重視DLsite/Booth高解像度サムネ
RealESRGAN_x4plus_anime_6Bアニメ特化・ノイズ除去R18漫画の解像度向上
4x_NMKD-Siax_200kバランス型汎用
1024→2048完全フロー (CC1向け) 1. waiIllustriousSDXL_v160で1024px生成 (通常量産)
2. RealESRGAN_x4plus_anime_6B で2048px にアップスケール
3. tile_xl_v1.1 + KSampler (denoise=0.42, steps=20) でディテール強化
4. FaceDetailer (denoise=0.35) で顔の最終仕上げ
5. Image Color Match で元画像色調に合わせて出力
推定追加時間: 1枚あたり +90秒〜2分 (RTX3090Ti)
VRAM 24GB でのOOM回避 tile_size=1024 を守る。2048px全体を一度に処理しようとするとOOMになる。mem_guard (_mem_guard_2026-05-22.py) を常駐させてRAM監視を継続。[14]
⚠️ 落とし穴

Inpaint 落とし穴 TOP10

落とし穴症状対策
1. denoise=1.0 使用 周囲を無視した完全ランダム生成 0.90以上は全体再構成のみ
2. grow_mask_by=0 境界に直線ラインが残る 必ず6-8pxを設定
3. Fooocus patch未設定 汎用VAE Encodeで品質が低い 3ファイルをmodels/inpaint/に配置
4. mature/adult NEG削除 顔修正後におばさん顔に変化 全inpaintでNEGプロンプト継承必須
5. FaceDetailerのguide_size不足 顔が小さすぎて修正効果なし guide_size=512〜768に設定
6. マスクの精度不足 不要な部位まで変更される SAM2+GroundingDINOで自動生成
7. Tile ControlNet強度0.9超 色調が大幅に変化 strength=0.5-0.7 + Color Match
8. バッチ処理でVRAM管理なし 50枚超でOOMクラッシュ 50枚毎に/free APIを呼び出す
9. Outpaintのfeathering過大 境界がぼやけすぎる feathering=40-50px
10. モザイク後に目視確認省略 被覆不完全でDLsite/FANZA否認 品質ゲートの目視チェック必須
📅 30日プラン

CC1 Inpaint導入ロードマップ

期間タスク完了KPI
Day 1-3 Fooocus patch 3ファイル配置 / FaceDetailer導入 / smoke 5枚確認 顔修正成功率 80%以上
Day 4-7 SAM2 + GroundingDINO インストール / マスク自動生成テスト 自動マスク精度 SAM2で確認
Day 8-14 denoise最適値テーブルを実際の画像で検証 / バッチスクリプト初版 20枚バッチ自動修正成功
Day 15-21 ControlNet Tile 超解像フロー構築 / モザイク自動化スクリプト 1024→2048品質向上を目視確認
Day 22-30 100枚バッチInpaint全自動化 / 既存量産パイプラインに統合 100枚30分以内の自動修正完成
📚 関連DR

関連DRリスト

脚注 — 全ソースURL (18本)

[1]
ComfyUI 公式 Inpainting Tutorial — https://docs.comfy.org/tutorials/basic/inpaint
[2]
Soft Inpainting with ComfyUI (PromptingPixels) — https://www.promptingpixels.com/tutorial/soft-inpainting-in-comfyui
[3]
FaceDetailer ノード解説 (runcomfy.com) — https://www.runcomfy.com/comfyui-nodes/ComfyUI-Impact-Pack/FaceDetailer
[4]
Inpainting Mastery with ComfyUI & SAM (runcomfy.com) — https://learn.runcomfy.com/mastering-inpainting-with-comfyui-and-segment-anything-a-comprehensive-guide
[5]
comfyui_segment_anything ガイド — https://www.runcomfy.com/comfyui-nodes/comfyui_segment_anything
[6]
lllyasviel/fooocus_inpaint (HuggingFace) — https://huggingface.co/lllyasviel/fooocus_inpaint/tree/main
[7]
ANNO Inpainting SDXL/Pony/Illustrious (Tensor.Art) — https://tensor.art/workflows/862322847249354740
[8]
ComfyUI Inpainting Advanced Guide 2026 (Apatero) — https://apatero.com/blog/comfyui-inpainting-advanced-techniques-guide-2026
[9]
ComfyUI Outpainting Workflow (公式) — https://docs.comfy.org/tutorials/basic/outpaint
[10]
Flux.1 Outpaint ワークフロー — https://comfy.org/workflows/flux_fill_outpaint_example-be07722555ff/
[11]
Inpainting Complete Guide (Stable Diffusion Art) — https://stable-diffusion-art.com/inpainting/
[12]
ComfyUI Batch Processing Automation 2026 (Apatero) — https://apatero.com/blog/comfyui-batch-processing-1000-images-automation-2026
[13]
ComfyUI Hi-Res Fix ControlNet Tile (runcomfy.com) — https://www.runcomfy.com/comfyui-workflows/comfyui-hi-res-fix-upscaling-workflow-controlnet-tile-4x-ultrasharp
[14]
Acly/comfyui-inpaint-nodes (GitHub) — https://github.com/Acly/comfyui-inpaint-nodes
[15]
VAE Encode for Inpainting ノード解説 — https://blenderneko.github.io/ComfyUI-docs/Core%20Nodes/Latent/inpaint/VAEEncodeForInpainting/
[16]
Denoising Strength 解説 (Stable Diffusion Art) — https://stable-diffusion-art.com/denoising-strength/
[17]
How to Fix AI-Generated Hands ComfyUI (Medium, Apr 2026) — https://medium.com/@karintan773/how-to-fix-ai-generated-hands-a-beginners-guide-with-comfyui-29870a782f04
[18]
SDXL Inpainting Style Fusion (comfyui.org) — https://comfyui.org/en/sdxl-inpainting-style-fusion