これらのデータ型を扱う際には、torch.Tensor クラスについて知る必要があります。
完全なドキュメントは こちら にあり、または Comfy に必要な主要概念の紹介は こちら を参照してください。
ノードの出力がテンソル単体の場合、(image) ではなく (image,) を返すようにしてください
以下の概念のほとんどは、示例コードスニペット で説明されています。
画像(Images)
IMAGE は形状 [B,H,W,C] の torch.Tensor であり、C=3 です。画像を保存または読み込む場合は、PIL.Image 形式との変換が必要です。以下のコードスニペットを参照してください!なお、計算効率の理由から、一部の pytorch 操作は [B,C,H,W](「チャンネル優先」と呼ばれる)を提供(または期待)します。取り扱いには注意してください。
PIL.Image の使用
画像の読み込みと保存を行いたい場合は、PIL を使用します。
from PIL import Image, ImageOps
マスク(Masks)
MASK は形状 [B,H,W] の torch.Tensor です。
多くの文脈において、マスクは二値(0 または 1)を持ち、どのピクセルに特定の操作を適用すべきかを示すために使用されます。
場合によっては、0 から 1 の間の値を使用してマスクの程度を示すこともあります(例えば、透明度の調整、フィルターの調整、またはレイヤーの合成など)。
Load Image ノードからのマスク
LoadImage ノードは、画像のアルファチャンネル(「RGBA」の「A」)を使用して MASK を作成します。
アルファチャンネルの値は範囲 [0,1](torch.float32)に正規化され、その後反転されます。
LoadImage ノードは、画像を読み込む際に常に MASK 出力を生成します。多くの画像(JPEG など)にはアルファチャンネルがありません。
この場合、LoadImage は形状 [1, 64, 64] のデフォルトマスクを作成します。
マスクの形状の理解
numpy、PIL、およびその他の多くのライブラリでは、単チャンネル画像(マスクなど)は通常、形状 [H,W] の 2 次元配列として表現されます。
これは C(チャンネル)次元が暗黙的であることを意味し、したがって IMAGE 型とは異なり、MASK のバッチは 3 次元のみを持ちます:[B, H, W]。
B 次元が暗黙的に squeeze され、テンソル [H,W] になっているマスク encountered することも珍しくありません。
MASK を使用するには、多くの場合、C=1 の形状 [B,H,W,C] を生成するために unsqueeze して形状を一致させる必要があります。
C 次元を unsqueeze するには unsqueeze(-1) を使用し、B 次元を unsqueeze するには unsqueeze(0) を使用します。
ノードが MASK を入力として受け取る場合、常に len(mask.shape) をチェックすることをお勧めします。
潜在変数(Latents)
LATENT は dict です。潜在変数サンプルはキー samples で参照され、形状 [B,C,H,W] を持ち、C=4 です。
LATENT はチャンネル優先、IMAGE はチャンネル最後