ConditioningSetMask

(comfyanonymous/ComfyUI)
conditioning/Conditioning (Set Mask)
conditioning の効果範囲を限定する

入力された conditioning でサンプリングした結果を反映する範囲を、マスクで限定できます。 矩形以外のマスクも使用できます。 マスクは KSampler の開始時に、latent 画像に合わせてリサイズされます。 マスクが 1 の場所が効果最大になります。 二値化はされません。 また、strength で効果の強さを変更できます。 set_cond_areamask_bounds にすると、サンプリング範囲も限定します (ConditioningSetArea を追加するのと同等。ただし、KSampler 内でリサイズ済マスクに合わせて範囲が作られる)。

ConditioningCombine と組み合わせることで、場所により異なる conditioning を適用できるようになります。

似たような名前の、そして効果もなんとなく似ている ConditioningSetArea とは、用途や動作が違います:

  • ConditioningSetArea はサンプリング範囲を限定するためのノード。
    ConditioningSetMask は conditioning でサンプリングした結果を反映する範囲を限定するためのノード。 サンプリング範囲を限定することもできるが、それは副。 (とは言え、latent 画像に合わせたリサイズ後に範囲が決まるので、範囲設定の手段として ConditioningSetArea より使いやすい場面もあります。)
  • ConditioningSetArea は効果範囲 = サンプリング範囲になる。
    ConditioningSetMask では効果範囲はマスクで指定する。
  • ConditioningSetArea はサンプリング範囲を限定するのでコンテキストが失われ、生成された画像の中でその範囲だけはっきりと違うものになる反面、浮きがちになる (コマ割りされたマンガみたいになりやすい)。
    ConditioningSetMask ではサンプリング範囲を限定しなければ、マスクの内外がうまく馴染みやすい。

このノードが行うのは、マスクなどの付加データを conditioning に記録するところまでです。 実際に効果を発揮するのは、KSampler などによるサンプリング時です。

入力の conditioning にすでにマスクや強さが設定されている場合は、新しいマスク、強さで置き換えられます。

マスク、と呼んでいますが、実際の効果は latent 画像更新の相対的な重み付けです。 そのため ConditioningSetArea と同様に、KSampler 実行時に担当する conditioning が全く無い領域がわずかでもあると、計算が破綻します。 mask の値が 0 の場所は担当範囲外になります。 > 0 でも、担当する conditioning が一つしか無い場合はその conditioning の結果がそのまま使われることになるので、重みの意味が無くなります。 このノードだけで inpaint や部分的な img2img ができるわけではありません。

inpaint や部分的な img2img が (も) したい場合は、SetLatentNoiseMask 等を使用 (併用) してください。

関連

使用例

マスク無しの negative 1つ (で全体を覆う) と、矩形マスク付きの positive 4つ (合わせて全体を覆う):