Guía visual · Magenta RealTime 2 · del texto a la música al territorio

Publicado June 22, 2026
Última modificación June 22, 2026
Construcción

Llevo siguiendo a Magenta, el grupo de investigación musical de Google, desde que en 2017 sacaron NSynth, un sintetizador neuronal que llegó a tener hasta su versión física (de la cual conseguí una copia). Su apuesta no ha cambiado en una década: la IA como instrumento para músicos, no como su sustituto.

Su último modelo, Magenta RealTime 2 (MRT2), da por fin un salto muy interesante: corre abierto y en local, en un portátil, sin pasar por la nube. El modelo deja de ser un servicio remoto y se convierte en una herramienta independiente (generas y tocas música en tiempo real, respondiendo al instante a texto, MIDI o audio). Para mí eso lo cambia todo: ya no dependes de un modelo alojado en la nube, como Lyria RealTime. El modelo baja de la nube y se queda en tu mesa.

Pasted image 20260622111749.png

Magenta no solo abre el modelo: publica además una colección de instrumentos y experiencias de ejemplo hechos con él, pensados para que músicos y desarrolladores lo integren en su propio software. Sirven para verlo en acción y dejan clara la intención original: clonar un sonido y tocarlo, mezclar estilos sobre la marcha, montar acompañamientos en vivo con muy baja latencia. Esa es la propuesta oficial, convertir el modelo en instrumentos. Nosotros, a partir de aquí, tiramos por otro lado.

Pasted image 20260622121810.png

Esta guía no va de usar MRT2 como instrumento (que también). Va de darle la vuelta. Hice una implementación propia con dos intenciones: usarlo y, sobre todo, entenderlo por dentro. Y al abrirlo apareció algo curioso: en lugar de tocar el instrumento, podía recorrer el mapa de sonidos que el modelo ya distingue de forma nativa. Usar las palabras no como prompt, sino como una manera de cartografiar ese espacio latente y volverlo un sistema musical finito: nuestro propio mapa.

Porque por dentro MRT2 es un sistema discreto. De lo que le mandes, sea audio o texto, va a generar una señal sonora continua, y para eso hace tres cosas encadenadas: convierte lo que le pides (una palabra, un audio) en un vector de 768 números; comprime ese vector a 12 símbolos (los tokens) de un vocabulario cerrado; y, a partir de esos símbolos, va generando el audio a trozos (por muestreo), como fotogramas, unas 25 veces por segundo. No entrega una pista cerrada: entrega un flujo que puedes empujar mientras suena. Esta guía abre esa cadena, paso a paso, y enseña dónde metimos mano.

1 · El panorama

de una palabra a un río de audio

El recorrido completo de un vistazo. A la izquierda entra tu indicación (texto o audio); a la derecha sale música, no como pista cerrada sino como ese flujo. Entre medias, los dos cuellos de botella que vertebran toda la guía: la compresión a un vector de 768 números (el embedding, que vemos enseguida) y, sobre él, la compresión a 12 símbolos (la cuantización, justo después). Cada flecha es uno de esos pasos, abierto en canal.

"deep house" texto · o audio MusicCoCa codificador 768 números (un punto en el espacio) RVQ cuantizador 412 88 5 901 12 símbolos MRT2 transformer autoregresivo audio · 25 fps · río continuo nuestra rama: el codebook como MAPA En vez de pedir música, leemos los centros que el modelo distingue de serie y los convertimos en un territorio navegable: el tapiz 32×32 que suena (esta guía). El estilo son solo 12 símbolos; melodía, armonía y batería las improvisa el modelo. No hay compases ni BPM: el tempo emerge del estilo.

El recorrido completo. Dos cuellos de botella deliberados (768 números y 12 símbolos) y una salida que es un flujo, no una pista. La flecha ámbar es lo que añadimos nosotros: tratar el cuantizador como un atlas.

2 · Una palabra es un punto en 768 dimensiones

el embedding (incrustación)

Cuando el modelo recibe «ocean» no piensa en olas ni en su significado: la convierte en un punto dentro de un espacio de 768 dimensiones. Es decir, 768 números, cada uno una coordenada (imposible de dibujar, pero la intuición es la de cualquier mapa). Y lo que importa no es el punto en sí, sino las distancias entre puntos: esa distancia es musical. «ocean» y «underwater» caen casi en el mismo sitio, y suenan a cosas parecidas; «thrash metal» se va a la otra punta del espacio, y suena a otro mundo. La regla es justo esa: cerca quiere decir que suena parecido.

Esa cercanía se mide con el coseno: el ángulo entre dos puntos vistos desde el centro. Dos términos casi en la misma dirección dan coseno próximo a 1 (muy cerca); en direcciones opuestas, próximo a 0 o negativo. Nos acompañará el resto de la guía: es la regla con la que medimos todo el mapa.

ocean codifica 768 componentes · cada cuadrito es un número ‖v‖ ≈ 1 vive en una esfera La «cercanía» se mide con el coseno entre dos puntos: ese será el motor de todo el mapa.

El embedding. Una palabra (o un audio) se vuelve un punto en 768 dimensiones, casi unitario. La distancia entre puntos es musical: vecinos suenan parecido. Todo lo demás se construye sobre esta idea.

Dos etapas, y por qué esto vale más allá de MRT2

Conviene separar dos cosas que solemos confundir. Que «ocean» acabe en ese punto de 768 lo decide una red neuronal: es una función aprendida, sin fórmula que puedas seguir a mano. Lo que viene después, convertir ese punto en símbolos y volver a montarlo, es matemática sencilla, tablas y sumas (como verás enseguida). Y casi cualquier modelo actual arranca igual, texto a embedding; la diferencia está en qué hace luego con esos vectores.

Dos etapas distintas (y esto vale para casi cualquier modelo con embeddings)ETAPA 1 · texto → embedding«ocean»red neuronalfunción APRENDIDAembedding 768No hay fórmula a mano: el vector es la salida de la red.ETAPA 2 · embedding ↔ tokens768cuantizaciónvecino + lookup + suma41288590112 tokens≈ 768Matemática simple: tablas (codebook) y sumas. Reversible casi del todo.Casi cualquier modelo moderno empieza igual: texto → embedding con una red.Lo que cambia es qué hace luego con esos vectores. Aquí: cuantizarlos y recorrerlos como un mapa.

Dos etapas. Primero una red convierte el texto en un punto de 768 números (eso es lo aprendido). Después, la cuantización lo empaqueta en símbolos con tablas y sumas. Lo primero es propio de cada modelo; lo segundo es el mecanismo que vamos a abrir.

3 · Cuantizar: del valor continuo al símbolo

la carta de colores y el codebook

La cuantización es una idea vieja y muy usada en señales y compresión: representar algo continuo con un conjunto finito de valores de referencia, igual que una imagen reduce millones de colores a una paleta. Aquí hacemos lo mismo, pero con vectores.

Y es que un punto de 768 decimales es demasiado para un transformer: estos modelos no manejan valores continuos, sino símbolos de un vocabulario finito, como un idioma maneja un número limitado de letras. Cuantizar es sustituir cada valor continuo por el más parecido dentro de un conjunto cerrado de valores de referencia. Ese conjunto es el codebook (un diccionario fijo de puntos-tipo), y a cada una de sus entradas la llamamos centroide, porque representa el centro de una región del espacio.

Verlos como una paleta de colores igual lo hace más claro: tienes un tono exacto (tu vector) y una paleta cerrada de 1024 tonos de referencia (el codebook). Eliges el más cercano y te quedas con su número, no con el color original. Pierdes matiz; ganas un símbolo manejable. Eso es cuantizar.

el tono exacto (vector de 768) continuo · infinitos matices el más cercano la paleta cerrada · codebook (1024 tonos) token = 412 guardas el número Comprimes un punto continuo a un símbolo de un vocabulario de 1024. Pierdes matiz; ganas algo que el transformer sí sabe manejar.

La carta de colores. El codebook es la paleta; cada celda, un centroide (un punto de referencia en 768 dimensiones). Cuantizar = sustituir tu punto por el centroide más próximo y quedarte con su índice. (En el siguiente paso: por qué no basta una paleta, sino doce.)

El codebook por dentro: abrir un token y reconstruir

Vale la pena ver el mecanismo. Un centroide es otro vector de 768, un punto fijo de referencia. El codebook es una tabla con 1024 de esos puntos. Y abrir un token es leer una fila: el token es un número, vas a la tabla y lees esa fila. Lo que hay ahí es el centroide.

1 · Un centroide es un vector de 768 números: un punto del espacio768 componentes (aquí 30)el centro de una nube devectores parecidos (por esose llama «centroide»)2 · El codebook de un nivel es una tabla: 1024 filas, cada fila un centroide (congelada al entrenar)token = 412(un número de fila)abrir = ir a la fila 41201241241310221023= el centroide (768 nº)No es un cálculo: es leer una fila (lookup en la tabla).

Abrir un token es leer una fila. El codebook es una tabla de 1024 centroides (cada uno, un vector de 768). El token es el número de fila: no se calcula nada, se consulta.

¿Y reconstruir? Igual de directo: lees las filas de los tokens (12 en MRT2) y las sumas. Esa suma recupera, casi clavado, el vector original. Por eso un estilo entero cabe en 12 símbolos.

Reconstruir: leer las 12 filas y sumarlas recupera el vector12 tokenssus filas (centroides)41288590137540119780325664970Σsuma≈ el embedding original (768)coseno ≈ 0,96 con los 12 nivelesCon 12 símbolos se reconstruye el estilo. De ese vector, el motor sigue generando audio.

Reconstruir es sumar. Lees los centroides de los 12 tokens y los sumas: recuperas el vector original con un coseno de ~0,96. Esa es la razón de que 12 símbolos basten.

4 · RVQ: doce capas que afinan el tono

cuantización residual

Una sola paleta de 1024 tonos es muy basta: el tono elegido se queda lejos del original. De ahí la R de RVQ (Residual Vector Quantization, cuantización vectorial residual). La idea: tras elegir el primer tono, miras lo que aún falta (el residuo) y eliges otro tono que lo corrija; y así doce veces, cada nivel con su propia paleta. El estilo no es un símbolo: son doce. Y la reconstrucción mejora rápido: con 1 token rondas un coseno de 0,5; con los 12, ≈0,96.

cada nivel cuantiza el RESIDUO del anterior (su propia paleta de 1024): nivel 1737nivel 239nivel 3467nivel 476nivel 5781nivel 6492nivel 7498nivel 8165nivel 9269nivel 10565nivel 11199nivel 1285 reconstrucción acumulada (coseno con el vector original): 0.500.751.001234567891011121 token ≈ 0,5012 ≈ 0,96nº de niveles acumulados Por eso el estilo cabe en 12 símbolos al ~96 %: comprimir 768 decimales en 12 letras del mismo alfabeto que el resto del modelo.

Coarse-to-fine. El primer nivel da el trazo grueso; los siguientes, el detalle. La curva sube deprisa y se aplana: los últimos niveles solo pulen. El nivel 1 (el más grueso) será nuestro mapa.

5 · Los índices no son coordenadas

una trampa sutil

Dos estilos que suenan parecido (funk y disco, con un coseno alto de 0,77, o sea muy cerca) tienen tokens de aspecto dispar: funk da 412, 88, 5, 901… y disco 39, 991, 220, 7…, sin apenas prefijo común. Tentador concluir que están lejos, y sería falso. Los 1024 centroides están numerados de forma arbitraria: el número es una etiqueta de posición, no una medida. La cercanía solo reaparece cuando abres los tokens y sumas los centroides a los que apuntan; ahí, sobre el vector reconstruido, funk y disco vuelven a quedar juntos.

los ÍNDICES funk 412 88 5 901 37 disco 39 991 220 7 640 prefijo común ≈ 0 · parecen no tener relación ✕ vecindad ilegible en los números los VECTORES reconstruidos funk disco coseno 0,77 · CONSERVADO la matriz reconstruida difiere solo 0,046 de la continua Moraleja: no leas los 12 números como una posición. Decodifícalos y compara los vectores —ahí vive la geometría.

Ruta, no coordenada. Los índices RVQ son punteros a centroides; su orden no significa cercanía. Pero sumar esos centroides recupera un vector que sí respeta las distancias musicales. Esto es lo que legitima usar el codebook como mapa.

6 · Un sistema discreto que se toca en tiempo real

qué es del modelo y qué es nuestro

Conviene separar dos cosas que se mezclan con facilidad. Una es del modelo: MRT2 es, de fábrica, un generador de música en tiempo real; responde al instante y nunca se detiene (ese río de fotogramas del principio). La otra es nuestra: la interfaz que construimos para gobernarlo, cómo le vamos diciendo por dónde ir mientras suena.

Lo que montamos es sencillo de contar. En lugar de reescribir un prompt cada vez, mandamos al motor, en caliente, el vector de estilo ya cuantizado, y dejamos que interpole suavemente de uno a otro sin cortar el sonido. Mover el estilo deja de ser escribir: es empujar un punto por el mapa y oír cómo el río cambia de color.

tapiz / pad web (clic en celda) FastAPI REST + WebSocket realtime_engine MRT2 · 25 fps audio OSC :7400 /style_vec · 768 floats /studio/alive · latido funde con crossfade SLERP · sin re-embeber El motor no sabe de HTTP: habla OSC. Igual que TouchDesigner, la web es solo otro cliente OSC. Mover el estilo = enviar un vector nuevo.

Nuestra capa de control. El estilo viaja como vector, no como texto; el motor interpola entre puntos y nunca corta el río de audio. Este es el mismo camino por el que el tapiz hará sonar una provincia.

7 · De constelaciones a territorio

nuestra pregunta, y dos formas de responderla

Aquí aparece lo que de verdad buscábamos. Si cada palabra es un punto y la cercanía es musical, ¿qué ocurre si en vez de pedir música soltamos términos (estilos, nombres, verbos, colores) y miramos dónde caen y cómo suenan? ¿Se puede ver el mapa entero, no solo los lugares que sabemos nombrar?

Hay dos formas de intentarlo. La de constelaciones: eliges unos puntos con nombre (por ejemplo 24 géneros) y los proyectas; el mapa toma la forma de lo que elegiste y solo navegas por ahí. La otra, la de territorio: en vez de nombrar, muestreas la rejilla nativa del propio modelo y alcanzas también las zonas anónimas. Nosotros nos pasamos a la segunda.

constelaciones proyectas puntos NOMBRADOS punk techno disco deep house jazz flamenco solo navegas lo nombrado y su casco territorio muestreas la rejilla NATIVA alcanzas todo, incluido lo anónimo El modelo puede tocar cualquier punto, tenga nombre o no. La pregunta deja de ser «qué le pido» y pasa a ser «qué hay aquí».

Cambio de paradigma. Las constelaciones quedan limitadas por lo que sabes nombrar. El territorio recorre la partición que el modelo trae de fábrica, y ahí aparecen los vecindarios sin nombre.

8 · El codebook grueso = 1024 provincias = 32²

la partición nativa

Volvamos al codebook, pero a su primer nivel (el más grueso, el del primer paso de la cuantización residual). Tiene 1024 centros, y cada uno es una provincia: una región que el modelo distingue de serie. Como 1024 = 32², se dibuja limpiamente como un tapiz de 32×32. Esos centros son reales y legibles del fichero del cuantizador (vienen negados: el centro de la provincia i es −codebook[0][i]).

espacio 768D nivel 1 1024 centros codebook grueso (token 0) 32² una provincia = una región que el modelo distingue de serie No inventamos la rejilla: ya estaba dentro del modelo. Solo la sacamos a la luz y la dibujamos.

Lo real y lo elegido. Que haya 1024 centros, y que el modelo los distinga de serie, es real y nativo. Dibujarlos como un tapiz de 32×32 ya es decisión nuestra, una elección estética (1024 = 32² lo pone fácil). Pero cada casilla es un punto de verdad, que podemos decodificar y hacer sonar.

9 · Manera B: rotular cada provincia por su centro

poner nombres a lo anónimo

El espacio no trae nombres propios. Para etiquetar una provincia hay dos caminos. Manera A: ver qué palabras caen dentro de la celda (su token 0). Manera B: ir al centro de la celda y preguntar qué palabra del vocabulario tiene más cerca (un retrieval). Elegimos la B: caracteriza también las celdas vacías y no depende de que algo «caiga» justo ahí.

Manera A qué palabras CAEN en la celda house techno acid depende de que algo caiga ahí Manera B ← elegida al CENTRO, la palabra más CERCANA centro vinyl surf gamelan deep house rótulo El vocabulario no mueve el territorio: solo lo nombra. Si ninguna palabra se acerca, eso también es un hallazgo: «desierto».

Recuperación, no clasificación. Para cada uno de los 1024 centros buscamos la palabra más próxima del vocabulario. El rótulo es un préstamo del lenguaje sobre un punto que existía sin él.

10 · El vocabulario: tres capas con procedencia

la vara de medir

La manera B necesita un buen vocabulario, porque es la vara de medir con la que nombramos. Lo construimos en tres capas con procedencia: la folksonomía musical (lo que la gente usa para etiquetar música, alto en señal), un registro evocador cotidiano y una cosecha del libro Retromania. En total ~5.500 palabras. Importante: solo nombran; el territorio sigue siendo del modelo.

capa 1 · folksonomía géneros, escenas, subgéneros, instrumentos · Every Noise / RYM / MusicBrainz 4.631 capa 2 · evocador emociones, texturas, luz, movimiento, lugares, color 673 capa 3 · Retromania hauntology, crepuscular, dead media, sepia… 218 total ~5.522 palabras la folksonomía concentra señal (tags reales); solo NOMBRAN, no mueven el territorio. El dedup gana la 1ª aparición (capa 1 → 2 → 3): un género específico se queda con su procedencia folksonómica; lo evocador, en su capa.

Procedencia como dato. Cada palabra sabe de dónde viene. Eso permite, después, colorear el tapiz por capa (o por familia musical) y razonar sobre qué tipo de lenguaje cubre cada zona.

11 · t-SNE: el cono y por qué «respira»

aplanar 768 dimensiones a un plano

Para poder dibujar algo de 768 dimensiones hay que bajarlo a 2, y a eso se le llama reducción de dimensionalidad: buscar un plano que conserve lo esencial de la nube original. Hay dos familias. PCA es lineal, se queda con los ejes donde los datos más varían, como aplastar una sombra contra la pared; rápido, pero si el espacio tiene mañas, deforma. t-SNE es no lineal, le dan igual las distancias globales y solo cuida quién está cerca de quién, colocando cada punto junto a sus vecinos.

Y aquí el espacio tiene una maña importante: es anisótropo, no se reparte por igual en todas las direcciones. Casi todos los vectores apuntan hacia el mismo lado (el llamado efecto cono), así que el coseno crudo sale siempre alto y el PCA lo agolpa todo en una bola. El t-SNE con métrica coseno respira: separa los vecindarios y deja ver el mapa.

el cono origen todo apunta parecido coseno inflado (~0,5 hasta entre aleatorias) PCA (lineal) agolpa en una bola t-SNE (coseno) respira: separa vecindarios No es que t-SNE «mejore» los datos: elige conservar la vecindad local en vez de las distancias globales, que es justo lo que queremos para navegar.

Por qué t-SNE. En un espacio cónico, lo lineal aplasta. El t-SNE con coseno despliega los 1024 centros en una nube donde lo cercano sigue cercano, el plano que luego cuadriculamos.

12 · RasterFairy: del t-SNE a la retícula

cuadricular sin romper vecindades

El t-SNE da una nube orgánica; el tapiz necesita una retícula perfecta. El truco (estilo RasterFairy): plantearlo como una asignación óptima 1:1 entre los 1024 puntos y las 1024 casillas de un 32×32, minimizando el desplazamiento total. Cada punto se mueve lo mínimo a su casilla y las vecindades se conservan (desplazamiento medio ≈ 0,10).

nube t-SNE asignación óptima retícula 32×32 linear_sum_ assignment • 1:1 punto↔casilla • mínimo desplazo • conserva vecinos ≈ 0,10 medio Las líneas finas marcan cuánto se movió cada punto: poco. La estructura de la nube sobrevive a la cuadrícula.

Orden sin perder el mapa. No reordenamos al azar: resolvemos el emparejamiento que menos distorsiona. El resultado es un tapiz regular cuyas casillas vecinas siguen sonando parecido.

13 · El tapiz que suena

el instrumento final

Todo confluye aquí. Las 1024 provincias, rotuladas y cuadriculadas, forman un tapiz navegable. Pasas el ratón y lees; haces clic y la provincia suena: mandamos su centro al motor por el mismo camino del panorama. Y como las casillas vecinas se parecen, recorrerlas con criterio casi compone bandas sonoras.

motor MRT2 crossfade · 25 fps suena clic → /style_vec(768) recorrer celdas vecinas con criterio bandas sonoras (mismo rótulo ≠ mismo sonido) Color = familia musical; brillo = riqueza; casillas oscuras = «desierto». De la teoría discreta al instrumento que se toca con el ratón.

El círculo se cierra. Lo que empezó como 768 números y 12 símbolos termina como un mapa que se toca. No le pedimos música: recorremos su territorio y escuchamos lo que el modelo distingue.

Conexiones