AI活用

ComfyUI FaceDetailerの使い方|顔・手の検出と「変わりすぎ」を分けて調整

ComfyUIのFaceDetailerを、検出マスクの確認から部分再生成まで順に接続。Impact Subpackと顔・手用モデルの選び分け、bbox設定とdenoiseの役割、同じ条件で比較する記録表を解説します。

この記事の目次
  1. Impact Packだけでは検出用ノードがそろわない
  2. 先に検出マスクだけを見てからFaceDetailerへつなぐ
  3. 「拾う範囲」と「描き直す量」は別々に決める
  4. 顔と手を一度に直さず、採用した画像から次へ進む
  5. 同じseedでも、変えた条件を1行ずつ残す

全身画像の顔だけを直したいのに、FaceDetailerを動かしても変わらない。そこでdenoiseを上げる前に、その顔を検出できているかを確認します。検出が空なら再生成の設定を変えても対象は増えません。顔を拾えているのに別人になる場合は、描き直す側を調整します。

FaceDetailerは、検出した領域を切り出して部分再生成し、画像へ戻すノードです。顔用・手用の検出モデルを使い分けられますが、元の人物や正しい指の形を必ず復元する機能ではありません。まず静止画1枚、顔だけで接続を確かめ、その後に手の処理を足すと変化を追いやすくなります。

Impact Packだけでは検出用ノードがそろわない

この接続例で使うのは、ComfyUIのImpact PackとImpact Subpackの両方です。FaceDetailerは前者、UltralyticsDetectorProviderは後者に含まれます。現在のImpact PackではSubpackは自動導入されないため、Managerで両方の配布元を確認して導入し、ComfyUIを再起動します。手動導入では、ComfyUIが使っているPython環境へ各配布元の手順どおりに依存関係を入れてください。

検出モデルは、画像を描くcheckpointとは別のファイルです。Subpackの標準配置では、bbox用のファイルをComfyUI/models/ultralytics/bbox/へ置きます。Providerの一覧ではbbox/ファイル名.ptとして選びます。一覧に出ないときは、まずこの配置と再起動、起動ログの読み込みエラーを確認します。

対象 検出モデルの例 選ぶときの確認
顔 face_yolov8n.pt 配布元の検出対象が顔であること。小さい顔や横顔を必ず拾うとは限らない
手 hand_yolov8n.pt 手用を別途選ぶ。顔モデルのしきい値を下げても手用にはならない

ファイル名はBingsu/adetailerの配布例です。モデルカードと入手元を確認して選びます。重みの読み込みで安全性に関するエラーが出た場合、出所が分からないまま制限を解除せず、配布元が示す互換性・読み込み方法を確認してください。

導入の参照先はImpact Pack公式とImpact Subpack公式です。拡張機能は更新で接続仕様が変わるため、保存する画像と一緒にComfyUI・拡張機能の版も残します。

スポンサーリンク

先に検出マスクだけを見てからFaceDetailerへつなぐ

最初は生成済み画像をLoad Imageで読み込みます。顔が写っている原画像と、検出結果の白い領域を見比べ、対象を拾えているか確認しましょう。生成処理まで一度に走らせず、次のプレビュー経路だけを実行します。

出力元 接続先 目的
Load ImageのIMAGE BBOX Detector (combined)のimage 調べる画像を渡す
UltralyticsDetectorProviderのBBOX_DETECTOR BBOX Detector (combined)のbbox_detector 顔用モデルで検出する
BBOX Detector (combined)のMASK Convert Mask to Imageのmask マスクを表示用画像に変換する
Convert Mask to ImageのIMAGE Preview Imageのimages 白い検出領域を見る

thresholdを0.5、dilationを0にして、まず検出位置を見ます。白い領域がない場合はモデルの対象、画像、しきい値を順に確認します。しきい値を少し下げると候補は増えやすくなりますが、背景などの誤検出も増え得ます。このマスクは検出の事前確認用で、FaceDetailer内の除外条件や後述の設定まで含めた最終マスクと常に同一ではありません。

位置を確認できたら、次の経路でFaceDetailerを追加します。ここでは、通常のSD1.5/SDXL系checkpointを使う接続を想定します。特殊なモデル固有のconditioningや追加ノードが必要な構成は、そのモデル側の手順に合わせます。

出力元 FaceDetailerの入力・出力先
Load ImageのIMAGE imageへ
Load CheckpointのMODEL・CLIP・VAE それぞれmodel・clip・vaeへ
同じCLIPにつないだ2つのCLIP Text Encode 肯定側のCONDITIONINGをpositive、否定側をnegativeへ
ProviderのBBOX_DETECTOR bbox_detectorへ
FaceDetailerのimage出力 Save Imageのimagesへ

顔用bboxモデルを使うこの段階では、sam_model_optとsegm_detector_optは空けておきます。bbox用ProviderのSEGM_DETECTOR出力を、名前が似ているという理由で接続する必要はありません。FaceDetailerのmask出力も画像化して確認できますが、こちらはFaceDetailerを実行した後の結果です。

「拾う範囲」と「描き直す量」は別々に決める

次の数値は比較を始めるための設定例です。画質の実測から選んだ最適値ではありません。seedを固定し、steps・CFG・sampler・schedulerは使用する生成モデルで動作する設定にそろえます。入力画像やpromptも途中で変えないでください。

FaceDetailerの設定 出発点の例 何を見るか
bbox_threshold 0.5 検出の採用しきい値。検出漏れと誤検出を比べる
bbox_dilation 0 検出マスクの拡張・縮小。切り出し倍率とは別
bbox_crop_factor 3.0 検出枠の周囲をどこまで切り出すか。周囲の文脈を含める
drop_size 10 小さすぎる検出領域を除外する条件。小顔が消えるときに確認
denoise 0.30から比較 再生成の強さ。下げれば同一人物を保証できるわけではない
guide_size / guide_size_for 512 / bbox 検出枠を基準に拡大率を決める。crop_regionを選ぶと切り出し領域が基準になる
max_size 1024 拡大後の切り出し画像の長辺上限。guide_sizeどおりの拡大にならない場合がある
noise_mask / force_inpaint enabled / enabled マスクを使った再生成と、サイズ条件による処理省略の制御
feather / cycle 5 / 1 貼り戻す境界と処理回数。最初から繰り返さない

表にない項目は使用版の既定値を起点にします。wildcardは空欄、追加のhookは未接続にすると比較条件を増やさずに済みます。SAMをつないでいなければ、SAM用しきい値を動かしても今回の検出問題は解決しません。

顔が別人になるなら、まずdenoiseだけを0.30から0.20へ下げて比較します。細部が変わらない場合には逆方向の比較もできますが、検出がない状態で上げ続けないこと。guide_sizeを大きくするのは「元の顔の情報を取り戻す」操作ではなく、部分再生成時の処理サイズを変える操作です。

検出マスクには顔があるのに処理されない場合は、FaceDetailerのdrop_size、force_inpaint、サイズに関するログを見ます。force_inpaintを無効にした構成では、領域サイズや拡大率の条件で処理が省略される場合があります。

顔と手を一度に直さず、採用した画像から次へ進む

顔の結果を採用できたら、そのimage出力を2個目のFaceDetailerへ渡し、別のProviderで手用モデルを選びます。2個目のpositiveは手や元画像の場面に合う記述にし、顔用の容姿指定をそのまま流用しないようにします。MODEL・CLIP・VAEは、比較を始める間は同じ組み合わせを使います。

順序 残す画像 次へ進む条件
原画像 無加工の入力 比較の基準として保存
顔の1回目 顔だけ処理した結果 表情・向き・人物の印象が許容できる
手の1回目 顔の採用版から手だけ処理 指の本数だけでなく、物との接触・手首のつながりも確認

これは変化を見分けるための順序例です。顔→手が常に高画質になるという意味ではありません。手の処理後に顔まで変わるなら、検出マスクが顔と重なっていないか、切り出し・貼り戻しの範囲を確認し、顔の採用版まで戻ります。

目だけを直したいとき、顔用モデルが目を別領域として検出するとは限りません。対象に合う検出器がなければ、Mask Editorで範囲を指定し、inpaintingで部分を描き直すほうが、直す場所を自分で限定できます。崩れた手を何度も自動処理して戻れなくなる前にも、この切り替えが役立ちます。

同じseedでも、変えた条件を1行ずつ残す

seedだけを同じにしても、入力画像・モデル・解像度・処理順が変われば比較条件はそろいません。自動でseedを変える設定を止め、原画像と顔の採用版を別々に保存します。次の欄は結果を書き込むための記録例で、改善を実測した結果表ではありません。

比較 変える項目 確認して記入すること
A:基準 なし 入力名、seed、検出数、誤検出、顔・手の見た目
B:変わりすぎ denoiseだけ0.30→0.20 元の印象、修正したかった崩れ、採用/不採用
C:処理サイズ Aに戻し、guide_sizeだけ512→768 max_size制限、細部、違和感、処理時間
D:検出漏れ Aに戻し、bbox_thresholdだけ0.5→0.4 拾えた対象と増えた誤検出。必要なら生成前のマスク確認へ戻る

環境欄にはComfyUIと両拡張の版、生成checkpoint・VAE・検出重みのファイル名、入手URL、確認日を残します。ライセンスも一括で「AIモデル」とせず、拡張のコードと重みを分けて記録してください。2026年9月12日の表示確認では、Impact PackはGPL-3.0、SubpackはAGPL-3.0、上記Bingsu配布ページはApache-2.0です。利用する生成モデルや依存ライブラリも、それぞれの配布条件を確認します。

次に顔が直らなかったら、最初に見るのはdenoiseではなく検出マスクです。拾えていると分かってから描き直す量を変えれば、「設定を全部変えたら偶然よくなった」状態を減らせます。

スポンサーリンク