Domina datos backend para imágenes, máscaras y latentes en nodos personalizados de Comfy. Aprende formas de tensores y conversiones PIL en la documentación.
Cuando trabajes con estos tipos de datos, necesitarás conocer la clase torch.Tensor.
La documentación completa está aquí, o
una introducción a los conceptos clave requeridos para Comfy aquí.
Si tu nodo tiene una sola salida que es un tensor, recuerda devolver (image,) no (image)
Un IMAGE es un torch.Tensor con forma [B,H,W,C], C=3. Si vas a guardar o cargar imágenes, necesitarás
convertir desde y hacia el formato PIL.Image; ¡consulta los fragmentos de código a continuación! Ten en cuenta que algunas operaciones de pytorch
ofrecen (o esperan) [B,C,H,W], conocido como ‘channel first’, por razones de eficiencia computacional. Solo ten cuidado.
Una MASK es un torch.Tensor con forma [B,H,W].
En muchos contextos, las máscaras tienen valores binarios (0 o 1), que se usan para indicar qué píxeles deben someterse a operaciones específicas.
En algunos casos, se usan valores entre 0 y 1 para indicar un grado de enmascaramiento (por ejemplo, para alterar la transparencia, ajustar filtros o componer capas).
El nodo LoadImage usa el canal alfa de una imagen (la “A” de “RGBA”) para crear MASKs.
Los valores del canal alfa se normalizan al rango [0,1] (torch.float32) y luego se invierten.
El nodo LoadImage siempre produce una salida MASK al cargar una imagen. Muchas imágenes (como las JPEG) no tienen canal alfa.
En estos casos, LoadImage crea una máscara predeterminada con la forma [1, 64, 64].
En bibliotecas como numpy, PIL y muchas otras, las imágenes de un solo canal (como las máscaras) suelen representarse como arreglos 2D, con forma [H,W].
Esto significa que la dimensión C (canal) es implícita y, por lo tanto, a diferencia de los tipos IMAGE, los lotes de MASK tienen solo tres dimensiones: [B, H, W].
No es raro encontrar una máscara a la que se le ha quitado implícitamente la dimensión B, dando como resultado un tensor [H,W].Para usar una MASK, a menudo tendrás que igualar las formas añadiendo dimensiones para producir una forma [B,H,W,C] con C=1.
Para añadir la dimensión C, debes usar unsqueeze(-1); para añadir B, usas unsqueeze(0).
Si tu nodo recibe una MASK como entrada, sería prudente que siempre revises len(mask.shape).