Entradas ocultas de ComfyUI (UNIQUE_ID, PROMPT, EXTRA_PNGINFO, DYNPROMPT) y flexibles, con tipos de datos personalizados y comodines para nodos personalizados.
Además de las entradas required y optional, que crean las entradas o widgets correspondientes en el lado del cliente, existen tres opciones de entrada hidden que permiten al nodo personalizado solicitar cierta información al servidor.Se accede a ellas devolviendo un valor para hidden en el dict de INPUT_TYPES, con la firma dict[str,str], que contenga uno o más de PROMPT, EXTRA_PNGINFO o UNIQUE_ID.
UNIQUE_ID es el identificador único del nodo y coincide con la propiedad id del nodo en el lado del cliente.
Se usa comúnmente en las comunicaciones cliente-servidor (consulta mensajes).
EXTRA_PNGINFO es un diccionario que se copiará en los metadatos de los archivos .png que se guarden. Los nodos personalizados pueden almacenar información adicional en este diccionario para guardarla (o como una forma de comunicarse con un nodo posterior).
Ten en cuenta que si Comfy se inicia con la opción disable_metadata, estos datos no se guardarán.
DYNPROMPT es una instancia de comfy_execution.graph.DynamicPrompt. Se diferencia de PROMPT en que puede mutar durante el transcurso de la ejecución en respuesta a la Node Expansion.
DYNPROMPT solo debe usarse para casos avanzados (como implementar bucles en nodos personalizados).
Si quieres pasar datos entre tus propios Nodos personalizados, puede resultarte útil definir un tipo de datos personalizado. Esto es (casi) tan sencillo como elegir un nombre para el tipo de datos, que debe ser una cadena única en mayúsculas, como CHEESE.Después puedes usar CHEESE en los INPUT_TYPES y RETURN_TYPES de tu nodo, y el cliente de Comfy solo permitirá que las Salidas CHEESE se conecten a una Entrada CHEESE. CHEESE puede ser cualquier Objeto de python.El único punto a tener en cuenta es que, como el cliente de Comfy no conoce CHEESE, necesitas (a menos que definas un widget personalizado para CHEESE, que es un tema para otro día) forzarlo para que sea una Entrada en lugar de un widget. Esto se puede hacer con la opción forceInput en el diccionario de opciones de la Entrada:
El frontend permite usar * para indicar que una Entrada se puede conectar a cualquier Fuente. Como el backend no lo admite oficialmente, puedes Saltar la Validación de tipos del backend si aceptas un parámetro llamado input_types en tu función VALIDATE_INPUTS. (Consulta VALIDATE_INPUTS para obtener más información.)
Depende del nodo dar sentido a los datos que recibe.
Si las Entradas se crean dinámicamente en el lado del cliente, no se pueden definir en el código fuente de Python.
Para acceder a estos datos necesitamos un DICCIONARIO optional que permita a Comfy pasar datos con nombres arbitrarios. Dado que el Servidor de Comfy
class ContainsAnyDict(dict): def __contains__(self, key): return True...@classmethoddef INPUT_TYPES(s): return { "required": {}, "optional": ContainsAnyDict() }...def main_method(self, **kwargs): # los datos de Entrada creados dinámicamente estarán en el DICCIONARIO kwargs