# 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/`: retorna un flow individual por su `id`. - `POST /flow`: crea un nuevo flow (envía JSON con `label`, `nodes`, etc.). - `PUT /flow/`: actualiza un flow existente. - `DELETE /flow/`: 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í.