🦊ComfyUI-Impact-Pack
🏠 | 🦊雑に学ぶComfyUI
👈 |
👉 | 🦊Detector
https://github.com/ltdrdata/ComfyUI-Impact-PackComfyUI-Impact-PackはComfyUIに最も貢献しているカスタムノードのひとつです
殿堂入りのComfyUI Managerも同じltdrdataさんによって作られています。すごい
こんなにいろいろ作ってるのにチュートリアルが充実してるし、初心者の質問にも優しく答えてくれる聖人。こうなりたいねnomadoor.icon
物体検出からのマスク・Detailer、Tilingアップスケールまで担う壮大なカスタムノードですが、それゆえ独自概念がしばしば登場し理解しにくい部分があります
本格的に使う前に、ある程度ポイントを整理しましょう
SEGS
SEGSは、マスク、bbox、クロップ領域、confidence、label、ControlNet情報など、Detailerの操作に必要な情報を含む包括的なデータフォーマットです。
これが躓く一つの要因だとは思いますが、いろんなデータをまとめて送っているpipeのようなものです
Detailerを行うには、マスクだけでなく位置情報やサイズ等も必要なため、それらをまとめて送るためこのように設計されています
詳しくは → 🦊SEGS
Detector
物体検出・セグメンテーションを扱います
詳しくは → 🦊Detector
Detailers
Detectorで検出したBBOXの範囲・もしくはマスクの範囲でクロップしてinpaintingします
Stable Diffusion web UIではAfter Detailerと呼ばれていたものです
詳しくは → 🦊Detailer
List
詳しくは → 🦊連続処理#65e5eed0e2dacc000094e404
pipe
https://gyazo.com/48b028dbc48de70cf6816d4134fb2728
これはImpact-Packに限らない概念ですが、いくつかの入出力を一つのノードにまとめます
nomadoor.iconはあまり好きではないですが、Detailerは入力するものが多すぎるため適度に活用します
DetailerHook
Impact-Packで追加されるKSamplerには処理を繰り返すCycleという機能がある
出力された画像をそのまま同じ設定でN回サンプリングする
このHookを使うと一回目からN回目にかけてパラメータを推移させることができる
e.g. Denoise 0.5 → 0.3
PixelKSamplerHook (PK_HOOK)
上に同じ
https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/TwoSamplers.mdTwoSamplersForMask
image2imageの際、マスクした部分とそのほかの部分で別の設定を使ってサンプリングします
使っている人を見たことがない
ReencodeLatentノード
SDXLのlatentをピクセルにデコードしてSD v1.5に変換、もしくはその逆をするノード
多分SD v1.5の生成画像にSDXLのRefinerをかけてみるを手軽にやるためのノードだと思うけれどVAEDecode → VAEEncodeが一つにまとまるだけなのであまり楽にはならないかなnomadoor.icon
Batch/List Util
Image Batch to Image Listノード
画像Batchを画像Listsに変換する
複数のバッチで生成された画像を使用して処理することができます
Image List to Image Batch
画像Listを画像Batchに変換する
Make Image List
複数の画像を1つの画像リストに変換する
Make Image Batch
複数の画像を1つの画像バッチに変換します。
必要に応じて画像の入力を拡大できます。
Masks to Mask List, Mask List to Masks, Make Mask List, Make Mask Batch
上記のノードと同じ機能を持ちますが、入力として画像ではなくマスクを使用します
Flatten Mask Batch
マスクバッチを単一のマスクにフラット化します。非バイナリマスクでは正常な動作は保証されません。
Make List (Any)
任意の値を含むリストを作成します。
Select Nth Item (Any list)
リストからN番目の項目を選択します。インデックスが範囲外の場合は、リストの最後の項目を返します。
ロジック(実験的)
これらのノードは、ループと動的スイッチングのロジックを実装するために設計された実験的なノードです。
ImpactCompare, ImpactConditionalBranch, ImpactConditionalBranchSelMode, ImpactInt, ImpactBoolean, ImpactValueSender, ImpactValueReceiver, ImpactImageInfo, ImpactMinMax, ImpactNeg, ImpactConditionalStopIteration
ImpactIsNotEmptySEGS
このノードは、入力SEGSが空でない場合にのみtrueを返します。
ImpactIfNone
any_inputがNoneの場合trueを返し、Noneでない場合はfalseを返します。
Queue Trigger
このノードが実行されると、繰り返しタスクを支援するために新しいキューが追加されます。シグナルのステータスが変化した場合にのみ実行されます。
Queue Trigger (Countdown)
キュートリガーと同様にキューを追加しますが、キューの数が1より大きい場合にのみ追加され、実行されるたびにカウントが1ずつ減ります。
Sleep
指定された時間(秒)待機します。
Set Widget Value
このノードは、指定されたノードのウィジェットに任意の入力の1つを設定します。型が一致しない場合はエラーが発生する可能性があります。
Set Mute State
このノードは、特定のノードのミュート状態を変更します。
Control Bridge
このノードは、接続されたコントロールノードの状態をモードと動作に基づいて変更します。変更が必要なノードがある場合、現在の実行は一時停止され、ミュート状態が更新され、新しいプロンプトキューが挿入されます。
モードがアクティブな場合、動作に関係なく、接続されたコントロールノードをアクティブにします。
モードがバイパス/ミュートの場合、動作がバイパスかミュートかに基づいて、接続されたノードの状態を変更します。
制限事項:これらの特性により、バッチカウントが1を超えると正しく機能しません。また、シードがランダム化される場合や、コントロールブリッジの前にキュートリガー、ウィジェット値の設定、ミュートの設定などのアクションによってノードの状態が変更される場合は、適切な動作が保証されません。
このノードを使用する場合は、キュートリガー、ウィジェット値の設定、ミュート状態の設定などのアクションがワークフローの最後に実行されるようにワークフローを構成してください。
各反復処理でシード値を変更する場合は、ランダム化を使用せず、ワークフローの最後に「ウィジェット値の設定」を実行するようにしてください。
シード値がランダム化によって変更されても、Control Bridge セクションの後に実行されていれば問題ありません。
Remote Boolean (on prompt), Remote Int (on prompt)
プロンプトの開始時に、このノードは node_id の widget_value を強制的に設定します。対象のウィジェットタイプが異なる場合は無視されます。
node_id は、Badge: # ID Nickname という形式を使用して ComfyUI-Managerで確認することで見つけることができます。
ループ機能を実装するための実験的なノード セット (後で準備されるチュートリアル / サンプルワークフロー)。
参考
https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/detectors.mdDetectors