> ## Documentation Index
> Fetch the complete documentation index at: https://docs.comfy.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Tipos de datos de nodos personalizados de ComfyUI

> Referencia de tipos de datos de nodos personalizados de ComfyUI: tipos de Python, formatos de tensor (IMAGE, LATENT, MASK), tipos personalizados y comodines en INPUT_TYPES.

Estos son los tipos de datos integrados más importantes. También puedes [definir los tuyos propios](https://docs.comfy.org/es/custom-nodes/backend/more_on_inputs.md#tipos-de-datos-personalizados).

Los tipos de datos se usan en el lado del cliente para evitar que un flujo de trabajo pase una forma incorrecta de datos a un nodo, algo parecido al tipado fuerte.
Por lo general, el código JavaScript del lado del cliente no permitirá conectar la salida de un nodo a una entrada de otro tipo de datos, aunque a continuación se indican algunas excepciones.

## Tipos de datos de Comfy

### COMBO

* Sin parámetros adicionales en `INPUT_TYPES`

* Tipo de dato de Python: definido como `list[str]`, el valor de salida es `str`

Representa un widget de menú desplegable.
A diferencia de otros tipos de datos, `COMBO` no se especifica en `INPUT_TYPES` mediante un `str`, sino mediante un `list[str]` que corresponde a las opciones de la lista desplegable, con la primera opción seleccionada de forma predeterminada.

Las entradas `COMBO` a menudo se generan dinámicamente en tiempo de ejecución. Por ejemplo, en el nodo integrado `CheckpointLoaderSimple`, encuentras

```
"ckpt_name": (folder_paths.get_filename_list("checkpoints"), )
```

o pueden ser simplemente una lista fija de opciones,

```
"play_sound": (["no","yes"], {}),
```

### Primitive y Reroute

Los nodos Primitive y Reroute solo existen en el lado del cliente. No tienen un tipo de dato intrínseco, pero cuando están conectados adoptan el tipo de dato de la entrada o salida a la que se han conectado (por eso no pueden conectarse a una entrada `*`...)

## Tipos de datos de Python

### INT

* Parámetros adicionales en `INPUT_TYPES`:

  * `default` es requerido

  * `min` y `max` son opcionales

* Tipo de dato de Python `int`

### FLOAT

* Parámetros adicionales en `INPUT_TYPES`:

  * `default` es requerido

  * `min`, `max`, `step` son opcionales

* Tipo de dato de Python `float`

### STRING

* Parámetros adicionales en `INPUT_TYPES`:

  * `default` es requerido

* Tipo de dato de Python `str`

### BOOLEAN

* Parámetros adicionales en `INPUT_TYPES`:

  * `default` es requerido

* Tipo de dato de Python `bool`

## Tipos de datos de tensor

### IMAGE

* No hay parámetros adicionales en `INPUT_TYPES`

* Tipo de dato de Python `torch.Tensor` con *forma* \[B,H,W,C]

Un lote de `B` imágenes, alto `H`, ancho `W`, con `C` canales (generalmente `C=3` para `RGB`).

### LATENT

* No hay parámetros adicionales en `INPUT_TYPES`

* Tipo de dato de Python `dict`, que contiene un `torch.Tensor` con *forma* \[B,C,H,W]

El `dict` que se pasa contiene la clave `samples`, que es un `torch.Tensor` con *forma* \[B,C,H,W] que representa
un lote de `B` latents, con `C` canales (generalmente `C=4` para los modelos de stable diffusion existentes), alto `H`, ancho `W`.

El alto y el ancho son 1/8 del tamaño de imagen correspondiente (que es el valor que estableces en el nodo Empty Latent Image).

Otras entradas del diccionario contienen cosas como máscaras de latent.

### MASK

* No hay parámetros adicionales en `INPUT_TYPES`

* Tipo de dato de Python `torch.Tensor` con *forma* \[H,W] o \[B,C,H,W]

### AUDIO

* No hay parámetros adicionales en `INPUT_TYPES`

* Tipo de dato de Python `dict`, que contiene un `torch.Tensor` con *forma* \[B, C, T] y una frecuencia de muestreo.

El `dict` que se pasa contiene la clave `waveform`, que es un `torch.Tensor` con *forma* \[B, C, T] que representa un lote de `B` muestras de audio, con `C` canales (`C=2` para estéreo y `C=1` para mono) y `T` pasos de tiempo (es decir, la cantidad de muestras de audio).

El `dict` contiene otra clave `sample_rate`, que indica la frecuencia de muestreo del audio.

## Tipos de datos de muestreo personalizados

### Noise

El tipo de dato `NOISE` representa una *fuente* de ruido (no el ruido en sí). Puede representarlo cualquier objeto Python
que proporcione un método para generar ruido, con la firma `generate_noise(self, input_latent:Tensor) -> Tensor`, y una
propiedad, `seed:Optional[int]`.

> [!TIP]
>
> La `seed` se pasa al guider de `sample` en `SamplerCustomAdvanced`, pero no parece usarse en ninguno de los guiders estándar.
> Es opcional, así que por lo general puedes establecerla en None.

Cuando hay que añadir ruido, el latent se pasa a este método, que debe devolver un `Tensor` de la misma forma que contenga el ruido.

Consulta el [ejemplo de mezcla de ruido](./snippets#crear-variaciones-de-ruido)

### Sampler

El tipo de dato `SAMPLER` representa un sampler, que se representa como un objeto Python que proporciona un método `sample`.
El muestreo de Stable Diffusion está fuera del alcance de esta guía; consulta `comfy/samplers.py` si quieres profundizar en esta parte del código.

### Sigmas

El tipo de dato `SIGMAS` representa los valores de sigma antes y después de cada paso del proceso de muestreo, tal como los produce un scheduler.
Se representa como un tensor unidimensional, de longitud `steps+1`, donde cada elemento representa el ruido que se espera que esté presente
antes del paso correspondiente, con el valor final representando el ruido presente después del último paso.

Un scheduler `normal`, con 20 pasos y denoise de 1, para un modelo SDXL, produce:

```
tensor([14.6146, 10.7468,  8.0815,  6.2049,  4.8557,  
         3.8654,  3.1238,  2.5572,  2.1157,  1.7648,  
         1.4806,  1.2458,  1.0481,  0.8784,  0.7297,  
         0.5964,  0.4736,  0.3555,  0.2322,  0.0292,  0.0000])
```

> [!TIP]
>
> El valor inicial de sigma depende del modelo, y por eso un nodo scheduler necesita una entrada `MODEL` para producir una salida SIGMAS

### Guider

Un `GUIDER` es una generalización del proceso de eliminación de ruido, "guiado" por un prompt o cualquier otra forma de conditioning. En Comfy el guider se
representa mediante un objeto Python `callable` que proporciona un método `__call__(*args, **kwargs)` que es invocado por el `sample`.

El método `__call__` recibe (en `args[0]`) un lote de latents con ruido (tensor `[B,C,H,W]`) y devuelve una predicción del ruido (un tensor de la misma forma).

## Tipos de datos de modelos

Existen varios tipos de datos más técnicos para los modelos de Stable Diffusion. Los más importantes son `MODEL`, `CLIP`, `VAE` y `CONDITIONING`.
Trabajar con ellos está (por el momento) fuera del alcance de esta guía.&#x20;

## Parámetros adicionales

A continuación verás una lista de las claves admitidas oficialmente que puedes usar en la parte de 'opciones extra' de la definición de una entrada.

> [!WARNING]
>
> Puedes usar claves adicionales para tus propios widgets personalizados, pero *no* debes reutilizar ninguna de las claves de abajo para otros fines.

| Clave | Descripción |
| - | - |
| `default` | El valor predeterminado del widget |
| `min` | El valor mínimo de un número (`FLOAT` o `INT`) |
| `max` | El valor máximo de un número (`FLOAT` o `INT`) |
| `step` | La cantidad en la que se incrementa o disminuye un widget |
| `label_on` | La etiqueta que se muestra en la UI cuando el bool es `True` (`BOOL`) |
| `label_off` | La etiqueta que se muestra en la UI cuando el bool es `False` (`BOOL`) |
| `defaultInput` | Usa por defecto una conexión de entrada en lugar de un widget compatible |
| `forceInput` | Igual que `defaultInput` y además no permite convertir a un widget |
| `multiline` | Usa una caja de texto multilínea (`STRING`) |
| `placeholder` | Texto de marcador de posición que se muestra en la UI cuando está vacío (`STRING`) |
| `dynamicPrompts` | Hace que el front-end evalúe los prompts dinámicos |
| `lazy` | Declara que esta entrada usa [Lazy Evaluation](https://docs.comfy.org/es/custom-nodes/backend/lazy_evaluation.md) |
| `rawLink` | Cuando existe una conexión, en lugar de recibir el valor evaluado recibirás la conexión (es decir, `["nodeId", <outputIndex>]`). Es útil principalmente cuando tu nodo usa [Node Expansion](https://docs.comfy.org/es/custom-nodes/backend/expansion.md). |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.