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

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:

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:
    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:

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í.

Biblioteca y deduplicación

  • Cada análisis queda persistido en data/als-library.json junto con su hash MD5 y todos los metadatos.
  • Si intentas subir el mismo .als, el flujo detecta el hash duplicado, responde 409 y el dashboard avisa sin sobrescribir la biblioteca.
  • Para consultar el inventario (por ejemplo, desde una IA) usa GET /als/library; el endpoint devuelve el arreglo completo de proyectos almacenados.
  • Como el archivo vive dentro de /data, puedes versionarlo o respaldarlo fácilmente según tu flujo de trabajo.

Chatbot y generación de nuevos .als

  • Coloca tus stems/loops en data/sources/ (el contenedor los comparte con Node-RED). Los .als creados se guardan en data/generated/ y las plantillas descomprimidas viven en data/library/.
  • Configura en .env las credenciales de MiniMax/GLM (ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, etc.). Si la IA falla, el generador recurre a heurísticas locales con las plantillas existentes.
  • Nuevo endpoint POST /als/chat:
    { "prompt": "generame un als de reggaeton 2001" }
    
    Devuelve el resumen del proyecto creado (nombre, hash y ruta del archivo). En el dashboard aparece la tarjeta Chatbot ALS para conversar visualmente.
  • Si envías mensajes generales (“hola”, “¿qué estilos tenemos?”, “qué hay en sources?”) el bot usa la API de MiniMax para responder de forma amigable, recuerda el contexto reciente y te guía hasta que le pidas explícitamente “generame un als ...”.
  • Internamente se usa data/lib/alsGenerator.js: el bot elige una plantilla (als-library.json), edita el XML del .als (nombre del proyecto, tempo, anotaciones con los sources) y registra el resultado llamando otra vez a /als/upload para mantener la deduplicación.
  • También puedes usarlo desde terminal:
    set -a && source .env
    node scripts/chatbot.js                # modo interactivo
    node scripts/generate-als.js "generame un als tribal"
    
    Ambos comandos generan el archivo dentro de data/generated/ y lo añaden automáticamente a la biblioteca.
Description
Node-RED dashboard that analyzes Ableton .als files
Readme 178 KiB
Languages
JavaScript 100%