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

Publicado 22 de junio de 2026
Última modificación 23 de junio de 2026
Construcción

td-mg.png

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 aproximación por lo menos en este grupo de investigación no ha cambiado en una década, no están tanto en el producto terminado, ás en dar herramientas open source

Su último modelo, Magenta RealTime 2 (MRT2), es un modelo abierto de última generación, con un eficiente motor de inferencia en tiempo real que te permite crear y tocar instrumentos musicales con IA en tu ordenador. Y lo nuevo: ahora corre en local, 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). Al funcionar en un Mac ya no dependes de servicios comerciales como Lyria RealTime de Gemeni.

Pasted image 20260622111749.png

Además, Magenta no solo abre el modelo, publica una colección de instrumentos y experiencias de ejemplo así como da acceso a librerías para creártelos tú y para que músicos y desarrolladores lo integren en su propio software. Algunos ejemplos sirven para ver como se puede usar el modelo, clonar un sonido y tocarlo, mezclar estilos sobre la marcha, montar acompañamientos en vivo con muy baja latencia, o trabajar la experimentación sonora.

Pasted image 20260622121810.png

Como siempre, cuidado con las palabras, sobre todo con las que dicen «genera música». Estos modelos no generan música: generan probabilidades de estilos parecidos a los que ya han visto, con más o menos acierto. Si no hay intención humana hay tokens.
A mi lo que de verdad me interesa es otra cosa y es que los pesos son libres y funciona en local, y te deje construir tus propios instrumentos, como quien diseña un módulo eurorack o parchea en Pure Data o SuperCollider, una caja de herramientas generativa.

Con esta guía busco crear un instrumento con MRT2 pero, como siempre, abriendo la caja. ¿Qué supone crear un instrumento mezclando palabras, aunque sean estilos conocidos? ¿Si pongo «punk» o «punks» suena igual? ¿Y «punks rosas» es lo mismo que «pops negros»?

Claro, al mirar en detalle apareció (o entendí) algo curioso. Por dentro, MRT2 es un sistema discreto: convierte lo que le mandes (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 fijo del modelo (1024 opciones por símbolo), y con ellos genera audio a trozos, como fotogramas, unas 25 veces por segundo. No entrega una pista cerrada, sino un flujo que puedes empujar mientras suena, en lugar de tocar ese flujo como instrumento, se puede recorrer el mapa de sonidos que el modelo ya distingue de forma nativa. Usar las palabras para cartografiar ese espacio latente y volverlo un sistema musical finito que se convierte en nuestro propio mapa.

Esta guía abre esa cadena paso a paso y enseña dónde metimos mano. Y lo de aquí no es solo de este modelo de música: la base (texto a vector, vector a símbolos, símbolos a salida) es común a casi toda la IA generativa.

1 · El panorama

del modelo

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.

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

2 · Una palabra es un punto en 768 dimensiones

del modelo

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 que es 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) y en direcciones opuestas, próximo a 0 o negativo será lejano. Para estos modelos trabajar con vectores permite trabajar con esta matemática por es el coseno nos acompañará el resto de la guía ya 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.

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

del modelo

Conviene separar dos cosas. Que «ocean» acabe en ese punto de 768 dimensiones 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 (tokens) 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 aquí 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.

3 · Cuantizar: del valor continuo al símbolo

del modelo

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, por eso 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 esto 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 como resultado pierdes matices, pero 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.

El codebook por dentro: abrir un token y reconstruir

del modelo

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

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

4 · RVQ: doce capas que afinan el tono

del modelo

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.

El nivel 1, el más grueso, será nuestro mapa.

5 · Los índices no son coordenadas

medido

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: es ahí, sobre el vector reconstruido, donde 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. Eso es lo que legitima usar el codebook como mapa.

6 · Un sistema discreto que se toca en tiempo real

nuestro

qué es del modelo y qué es nuestro

Aquí viene nuestro juego y nuestra exploración, pero para eso hay que separar dos cosas. Una es del modelo: MRT2 es, de fábrica, un generador de música en tiempo real, responde al instante y nunca se detiene (esa onda sonora continua). La otra es nuestra: la interfaz que construimos para jugar, crear nuestro propio mapa y oír qué suena en las distintas regiones.

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.

7 · De constelaciones a territorio

nuestro

nuestra pregunta, y dos formas de responderla

Para eso tuve que entender que las palabras, otra vez, están mediadas por el entrenamiento; pero había que poder situarlas, y al hacerlo apareció 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 musicales) 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, recorres 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í».

8 · El codebook grueso = 1024 regiones = 32²

del modelo · nuestro

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 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 región i es −codebook[0][i]).

espacio 768D nivel 1 1024 centros codebook grueso (token 0) 32² 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 es del modelo; dibujarlos como tapiz 32×32 es decisión nuestra. Pero cada casilla es un punto de verdad, que suena.

9 · Situar por el centro: la palabra más cercana

nuestro

poner nombres a lo anónimo

El espacio no trae nombres propios, así que se los ponemos nosotros. Para cada región vamos a su centro y le preguntamos a nuestro vocabulario qué palabra tiene más cerca (un retrieval por coseno): esa palabra es el rótulo. La ventaja de medir desde el centro es que se puede nombrar cualquier región, también las vacías o las raras, sin depender de que una palabra «caiga» justo dentro.

Qué cae dentro qué palabras CAEN en la celda house techno acid depende de que algo caiga ahí Desde el centro ← 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».

El rótulo es un préstamo del lenguaje sobre un punto que existía sin él.

10 · El vocabulario: tres capas con procedencia

nuestro

la vara de medir

Situar por cercanía 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.

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

medido · nuestro

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 (Principal Component Analysis) es lineal, se queda con los ejes donde los datos más varían, como aplastar una sombra contra la pared. Es rápido, pero si el espacio no se reparte de forma uniforme (y este no lo hace), deforma. t-SNE (t-distributed Stochastic Neighbor Embedding) 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.

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

nuestro

cuadricular sin romper vecindades

El t-SNE da una nube orgánica; el tapiz necesita una retícula perfecta. El truco (estilo RasterFairy de Quasimondo): 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.

13 · El tapiz que suena

nuestro

el instrumento final

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

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. No le pedimos música: recorremos su territorio y escuchamos lo que el modelo distingue.

Conexiones