chore: bootstrap node-red ableton dashboard
This commit is contained in:
95
README.md
Normal file
95
README.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# 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í.
|
||||
Reference in New Issue
Block a user