Files
node-red-als/README.md
2025-12-01 02:40:11 +00:00

96 lines
4.9 KiB
Markdown

# Generador de Flows con Node-RED
Este proyecto monta una instancia local de Node-RED dentro de un contenedor y expone su API de administración para poder crear y editar flows de manera programática.
## Requisitos
- Docker 24+ con soporte para `docker compose`
- Puerto `1880` disponible en la máquina host
## Variables de entorno
Configura los parámetros en el archivo `.env` (usa `.env.example` como base):
```
NODE_RED_IMAGE=nodered/node-red # Imagen oficial
NODE_RED_VERSION=3.1.5 # Tag de la imagen
NODE_RED_PORT=1880 # Puerto expuesto en el host
NODE_RED_DATA=./data # Directorio local para flows/lib/data
NODE_RED_FLOW_CREDENTIAL_SECRET=... # Se usa para cifrar credenciales de los flows
```
Puedes modificar estos valores antes de levantar el contenedor. Compose usará automáticamente este archivo.
## Levantar Node-RED
```bash
docker compose up -d
```
Esto descargará la imagen (si no existe), creará la red `musica_default` y levantará el contenedor `node-red-dev`. Para apagarlo:
```bash
docker compose down
```
Los flows persistirán en la carpeta `data/` gracias al volumen montado.
## Endpoints relevantes para editar flows
La API de administración de Node-RED queda expuesta en `http://localhost:${NODE_RED_PORT}`. Los endpoints más usados para gestionar flows son:
- `GET /flows`: devuelve el flow completo (un arreglo de nodos). Ejemplo:
```bash
curl http://localhost:1880/flows
```
- `POST /flows`: reemplaza todos los flows. Requiere el JSON completo del workspace.
- `GET /flow/<id>`: retorna un flow individual por su `id`.
- `POST /flow`: crea un nuevo flow (envía JSON con `label`, `nodes`, etc.).
- `PUT /flow/<id>`: actualiza un flow existente.
- `DELETE /flow/<id>`: elimina un flow existente.
Todos los endpoints aceptan/retornan JSON y necesitan el header `Content-Type: application/json`. Mientras no configures autenticación en `settings.js`, la API está abierta en localhost.
Para validar el acceso básico puedes ejecutar:
```bash
curl --silent http://localhost:1880/flows
# [] -> instancia recién creada
```
La interfaz gráfica del editor sigue estando disponible en `http://localhost:${NODE_RED_PORT}` para editar flows manualmente.
## Próximos pasos
- Añadir autenticación al editor (por ejemplo con `adminAuth`).
- Conectar Node-RED con tus modelos IA (GLM, Minimax, etc.).
- Integrar Node-RED a Node-RED Dashboard o Node-RED Projects para versionar flows.
## Dashboard para analizar proyectos `.als`
Se añadió un flow en `data/flows.json` que usa Node-RED Dashboard para mostrar un pequeño panel en `http://localhost:${NODE_RED_PORT}/ui`. Allí encontrarás:
1. **Card “Inspector de proyectos ALS”**: permite subir un archivo `.als` (Ableton Live Set). El archivo se procesa solo en tu instancia.
2. **Card “Resumen del proyecto”**: enseña los metadatos extraídos:
- Nombre del Live Set, versión de Ableton y tamaño del archivo.
- Tempo detectado, longitud aproximada del arreglo (a partir de `LoopLength`) y número de escenas.
- Conteo de tracks por tipo (Audio, MIDI y Grupos) junto con el número de dispositivos por track.
- Lista de escenas y primeras rutas de samples (`RelativePath`) encontradas dentro del proyecto.
### ¿Cómo funciona el flujo?
- El `ui_template` de subida convierte el archivo a base64 y lo envía mediante `fetch` al endpoint `POST /als/upload`.
- `HTTP in` + `function JSON base64 → Buffer` validan y transforman el body en un `Buffer`.
- El nodo `function` **Inspector ALS** descomprime el `.als` (gzip de XML), usa `fast-xml-parser` para navegar `Ableton.LiveSet` y construye el resumen (tempo, escenas, tracks, muestras, etc.).
- La respuesta HTTP devuelve el JSON al navegador y, en paralelo, el flujo envía el resumen al dashboard y al nodo `debug` para inspección.
### Dependencias y estructura
- En `/home/ren/musica/data/package.json` se añadieron `node-red-dashboard` (UI) y `fast-xml-parser` (parser XML). Al levantar el contenedor se instalan automáticamente.
- Los flujos viven en `data/flows.json`; puedes exportarlos/importarlos con `GET/POST /flows`.
- Los archivos de ejemplo que compartiste (`als/...`) sirven para probar: levanta la app, ve a `/ui`, y sube uno de los `.als` para ver la ingeniería inversa básica.
- Para evitar desconexiones del dashboard al subir archivos grandes, la subida ahora se hace contra `POST /als/upload` (Content-Type `application/json`). El payload debe incluir `{ filename, size, data }`, donde `data` es un DataURL/base64 del `.als`. El límite del body se amplió a `20mb` en `settings.js (apiMaxLength)`.
- Puedes automatizar la subida llamando directamente al endpoint; el servidor responde con el mismo JSON que consume el dashboard (o `{ error: \"...\" }` en caso de fallo).
> Tip: si cambias el flujo desde el editor de Node-RED, recuerda exportarlo o guardar el nuevo `flows.json` para versionarlo aquí.