# Crear plugins

## Primer vistazo <a href="#first-look" id="first-look"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-44474fba6da83e832204ad7cf690a9888f02e681%2Ffirst-look.jpg?alt=media" alt=""><figcaption></figcaption></figure>

Designer Window es la forma más rápida de pasar de “Necesito un nodo especial” → “Puedo usarlo en mi escena”.

Escribes (o generas) una pequeña clase en Python (un `Block`), presionas **CREATE BLOCK**, y aparece en la lista de Custom Blocks.

{% hint style="info" %}
Si te gusta empezar desde una plantilla que ya funcione, abre [Coding Reference](https://docs.augelab.com/spanish/caracteristicas-clave/create-plugins-with-designer-window/coding-reference) y copia el bloque de ejemplo.
{% endhint %}

### Inicio rápido <a href="#generate-block-script-button" id="generate-block-script-button"></a>

Sigue estos pasos una vez, luego vuelve y explora los detalles.

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-56906816ac8adbc6b2d482daa0fbcfb8967deee1%2Fdesigner-window-how-to-open.jpg?alt=media" alt=""><figcaption></figcaption></figure>

1. Abre **Designer Window**.
2. Mantén el script por defecto, pega el tuyo o genera uno con el asistente de IA.
3. Asegúrate de que el script termine con `add_block(...)`.
4. Presiona **CREATE BLOCK**.
5. Encuentra tu bloque en la lista de **Custom Blocks** y arrástralo a una escena.

{% hint style="success" %}
Consejo: Mantén los nombres de los sockets estables. Facilita mucho la actualización de un bloque.
{% endhint %}

### Editor de código <a href="#code-editor" id="code-editor"></a>

El área grande del editor es la fuente de verdad para tu bloque.

Tu script debe incluir (como mínimo):

* `from studio.custom_block import *`
* Una clase que herede de `Block`
* Un `op_code` que coincida
* Una línea final `add_block(MyBlock.op_code, MyBlock)`

{% hint style="warning" %}
Al crear, AugeLab Studio normaliza la indentación reemplazando tabs por 4 espacios antes de guardar.
{% endhint %}

### AI Assistant <a href="#parameter-settings-section" id="parameter-settings-section"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-f0b6c5460a9e602ac38f4cf1b57c4123d25620c0%2Fprompt.jpg?alt=media" alt=""><figcaption></figcaption></figure>

En la parte inferior de Designer Window puedes:

* Escribir un prompt (ejemplo: “Write a block that converts a BGR image to grayscale”)
  * Sé descriptivo para obtener mejores resultados.
  * Por ahora, el asistente de custom blocks es gratuito.
* Elegir un modelo desde el desplegable.
* Presionar **Submit** para generar código en el editor.

Esto está pensado para que empieces rápido. Siempre tienes el control: revisa y edita el código antes de presionar **CREATE BLOCK**.

{% hint style="info" %}
El agente de IA recuerda tus prompts anteriores; puedes pedir mejoras o cambios.
{% endhint %}

{% hint style="warning" %}
La función de IA puede no estar disponible según la licencia, la conectividad o el estado del servidor.
{% endhint %}

### Actualizar un bloque existente <a href="#block-configuration" id="block-configuration"></a>

Cuando presionas **CREATE BLOCK** de nuevo:

* El archivo se sobrescribe.
* La entrada en la lista de Custom Blocks se refresca.
* Studio intenta un *safe replace* por su cuenta en las escenas abiertas (intenta preservar las conexiones).

{% hint style="info" %}
Si renombraste sockets, Studio puede reconectar por índice como alternativa. Por eso es importante mantener nombres de sockets estables.
{% endhint %}

<details>

<summary><strong>Avanzado: Qué hace exactamente CREATE BLOCK</strong></summary>

* Studio encuentra la primera clase que hereda de `Block` y usa su nombre de clase como nombre del bloque.
* Tu script se guarda como `<BlockName>.py` en la carpeta marketplace custom blocks.
* Studio importa `custom_blocks.<BlockName>` y lo instancia una vez para validarlo.
* Si todo está bien, el bloque queda disponible en la lista de Custom Blocks.

{% hint style="info" %}
Ubicación del archivo: `.../AugeLab Studio/marketplace/custom_blocks/<BlockName>.py`
{% endhint %}

{% hint style="warning" %}
Si la importación/validación falla, Studio muestra el error y elimina el archivo. Corrige el script e inténtalo de nuevo.
{% endhint %}

</details>

### Recargar bloques en Designer Window <a href="#reloading-blocks-into-designer-window" id="reloading-blocks-into-designer-window"></a>

Para editar un bloque existente, haz clic derecho en su nombre en la lista de Custom Blocks y elige **Load into Designer Window**.

{% hint style="warning" %}
Cargar un bloque en Designer Window solo funciona para scripts de usuario editables (`.py`). Los bloques compilados/encriptados (por ejemplo `.pyd` o scripts protegidos con PyArmor) están bloqueados intencionalmente.
{% endhint %}

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-a3e2c436eaf966be146347dcba157f50b15550ca%2Fimage%20(7).png?alt=media" alt=""><figcaption><p>Load Existing Block</p></figcaption></figure>

{% hint style="info" %}
“Reload” actualiza la lista de Custom Blocks (añade archivos nuevos / elimina archivos borrados). No actualiza en caliente los nodos ya colocados en escenas.

<img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-7523e772522bf1a464bae9117625326ab34e11a2%2Fcustom-block-refrest.jpg?alt=media" alt="Refresh Block List" data-size="original">
{% endhint %}
