ComfyUI で顔など画像の一部を再生成する [ltdrdata/ComfyUI-Impact-Pack]
ComfyUI の便利なカスタムノード、Impact Pack を紹介します。いろいろな機能を持っているカスタムノードですが、その中でも顔などの画像の特定のエリアの検出や、検出した箇所を新たに生成して置き換えることが可能になります。
同じような機能として「インペインティング」がありますが、インペインティングは画像全体を再生成します。一方で Impack Pack の場合は再生成する箇所のみを生成するので、生成にかかる時間が短くて済むという利点があります。
ComfyUI 環境準備
Stable Diffusion 3 Medium を実行する環境を ComfyUI で用意した手順 を実行し、コンテナで ComfyUI を実行できるようにします。
起動 & Custom Node 導入
ComfyUI のディレクトリで以下コマンドを実行し、起動します。
ブラウザで UI を開いたら、右下の Manager
をクリックします。
ComfyUI Manager Menu が開くので、Custom Node Manager
をクリックします。
上部の「Search」欄に impact
と入力します。すると Comfyui Impact Pack
があるので、そこの Install
をクリックします。同時に Comfyui Inspire Pack
があるので、こちらも Install
しておきます。
※Inspire Pack は今回は使用しませんが、今後使用する際は改めて紹介する予定です
しばらく待つと「Restart Required」と表示されるので、Restart
ボタンをクリックします。あわせて、ブラウザの再読み込みを行い、画面を更新します。
生成
ComfyUI を起動したら、メニューの「Clear」などでワークフローを初期化します。空白部分でダブルクリックし、検索画面を出したら detector
と検索します。すると UltralycsDetectorProvider
があるので、それをクリックします。
さらに検索画面を出して simple detector
と検索し、Simple Detector (SEGS)
をクリックします。
続けて検索画面を出して saml
と検索し、SAMLoader (Impact)
をクリックします。
さらに検索画面を出して segspre
と検索し、SEGSPreview
をクリックします。
ここまで来たら、以下の画面のように各ノードを接続します。UltralyticsDetectorProvider と SAMLoader にモデルが必要ですが、Impact Pack をインストールしたときに合わせて導入されたと思います。もし不足している場合は別途ダウンロードして所定のパスに配置してください。
(ComfyUI Manager からダウンロードできると思います)
「Queue Prompt」をすると、「SEGSPreview」に検出されたエリアのみ明るく残った画像が表示されます。(今回は顔を検出している)
ここで意図しない検出になっている場合は、Simple Detector のパラメータを調整する必要があると思います。今回は、多少髪の毛も検出されていますが、おおむね OK としてこのまま進めます。
検出がうまくいったら、次は検出した箇所を再生成します。再度検索画面を出して、detailer
と検索し、Detailer (SEGS)
をクリックします。
Detailer (SEGS) にはいろいろな入力が必要ですが、基本的には KSampler とほぼ同じです。そのため、Load Checkpoint
でモデルを、CLIP Text Encoder (Prompt)
でポジティブ・ネガティブプロンプトを入力します。image
は元画像を、segs
は Simpler Detector (SEGS)
を接続します。
最終的なワークフロー全体です。これで画像を生成したあとからでも、「表情だけ変えたい」や「顔だけ指定のキャラクターにする」といったことが可能になります。ComfyUI で LoRA を適用する のように、Load LoRA ノードを使えば LoRA を適用して再生成することも可能です。
また、顔ではなく手を検出させることも可能です。以下のように、UltralyticsDetectorProvider のモデルで「bbox/hand_yolov8s.pt」を選択すると、赤丸で示した通り手の部分を検出しています。指はどうしても破綻しやすいので、そこだけ修正したい、という要望にも対応しやすそうですね。