Saltar al contenido
Todos los proyectos
HackathonTuneTools4 min de lectura

TuneTools: una canción nueva cada día, escrita a partir de tus noticias, tu clima y tu calendario

Las playlists recomiendan canciones que ya existen; ninguna escribe una sobre tu día. TuneTools convierte tus noticias, tu clima y tu calendario en una canción nueva de ~60 segundos cada día, con letra de un LLM y voz del modelo abierto YuE en una GPU alquilada. Un proyecto en equipo de dos para la hackathon Kiroween.

Landing de TuneTools: un logo de disco de vinilo girando, la frase 'Your Daily Song, Generated from Your Life' y los botones Get Started / Log In sobre fondo oscuro.

El problema

Las apps de música son buenas recomendando canciones que ya existen. Ninguna escribe una sobre tu día: el clima donde estás, los titulares que te importan, lo que tienes en el calendario. Es un hueco pequeño y un poco absurdo, y por eso me gustaba como idea de hackathon. También parecía lo bastante difícil como para ser interesante, porque implica generar una canción cantada, no armar una playlist.

Qué construí

TuneTools te hace cada día una canción nueva de unos 60 segundos, escrita a partir de tu propio contexto. La construimos en equipo de dos para Kiroween, la hackathon que Kiro (el IDE agéntico de AWS) organizó en Devpost del 31 de octubre al 5 de diciembre de 2025. Entramos en la categoría "Frankenstein", cuya consigna era coser tecnologías que no encajan en una sola app. Yo hice el pipeline de música, el spec y el deploy a producción; Sebastian tomó el spec y construyó la mayor parte de la aplicación (126 de los 163 commits son suyos, 35 míos).

Qué hace

  • Tu día como entrada. Toma el clima de tu ubicación, titulares de los temas que elijas y, si lo conectas, tu Google Calendar.
  • Letra y música. Un LLM escribe una estrofa y un coro sobre ese día, y un modelo abierto de música los canta sobre una base generada en los géneros que elegiste.
  • Ajustes que dan forma a la canción. Tus temas son el 70 % de las noticias que se usan, y tus géneros orientan el estilo, el instrumento, el mood y la voz.
  • Álbumes semanales. Las canciones de cada semana forman un álbum con portada generada, recortada en forma de vinilo y con un link para compartir.
El video demo de TuneTools que enviamos a Kiroween
La landing en vivo hoy. Cuatro pasos, y el tercero es el que tarda siete minutos.
Página de ajustes de TuneTools: categorías de noticias con Technology, Business y Science seleccionadas, y debajo botones de géneros musicales con Jazz y Classical seleccionados.
Los ajustes mandan en la canción: tus temas son el 70 % de las noticias del día y tus géneros orientan las cinco etiquetas de YuE (género, instrumento, mood, voz, timbre).
Una portada de álbum generada convertida en vinilo: un gato naranja con gafas de aviador conduce un descapotable rojo por una autopista elevada en una ciudad de neón al atardecer, con un agujero en el centro.
Las canciones de cada semana forman un álbum. La portada se genera y un pequeño script de Pillow la recorta como un disco con un agujero central del 14 %.

Por qué estas herramientas

YuE es el centro: un modelo abierto que canta letras sobre música generada, justo lo que necesita una canción sobre tu día. En realidad son tres modelos (un planificador de 7B, una etapa de audio de 1B y un upsampler), unos 18,5 GB en total.

RunPod serverless ejecuta YuE, porque nadie iba a pagar una GPU parada 23 horas al día esperando una canción. Los pesos se descargan una sola vez a un network volume en la primera petición, en lugar de ir dentro de la imagen del contenedor, así que las siguientes van directo a generar. Son unos 12 minutos y ~0,23 $ para la primera canción en frío, y unos 7 minutos y ~0,09 $ con los modelos ya en caché. Esos siete minutos son la razón de que TuneTools sea una canción diaria y no una app de "pulsa y escucha".

Dashboard de RunPod con un log en vivo: el modelo stage 2 descargándose al network volume, luego 'Starting YuE inference' a las 3:31 y 'Generation complete' a las 3:36.
Una de las primeras ejecuciones reales. Los modelos caen en /runpod-volume una sola vez; después son cinco minutos de pura inferencia en una RTX 4090.

gpt-4o-mini de OpenAI escribe las letras, con Gemini 2.5 Flash de respaldo si falla. Supabase guarda usuarios, canciones y álbumes. FastAPI en Railway llama a los servicios de noticias, clima, calendario y GPU, y el frontend en React corre en Vercel.

Kiro era el sentido de la hackathon, y fue lo que nos dejó trabajar a dos sin sincronizarnos todo el tiempo. Escribí con él un spec (requisitos, un documento de diseño y 34 tareas numeradas), además de documentos de steering y el servidor MCP de Supabase para que el agente pudiera crear tablas solo. Sebastian fue avanzando por la lista de tareas; sus commits coinciden con ella.

Lo difícil

Durante un tiempo las canciones se cortaban a los 25 segundos, en algún punto del coro. Había dos causas. El LLM agregaba un puente o una segunda estrofa, y YuE solo canta las dos primeras secciones, así que el coro nunca llegaba. Reescribí el prompt sin rodeos, con número exacto de versos y un bloque de "WRONG Examples" en mayúsculas. La otra causa era que YuE genera tokens, no segundos, y nuestro tope era demasiado bajo. Subir --max_new_tokens de 2500 a 4000 hizo casi toda la diferencia, y también hizo que cada canción costara más tiempo de GPU.

El costo fue la otra pelea. Cada canción cuesta dinero de verdad, y cualquiera puede abrir un link de demo en Devpost. El límite diario pasó de 2 a 5 y volvió a 2 en cuestión de minutos, lo que resume la economía del proyecto: la gente quiere volver a pulsar el botón, y cada pulsación cuesta.

En qué se convirtió

Enviamos el proyecto a Kiroween antes del cierre del 5 de diciembre, con el repo público, la carpeta .kiro, un video demo y la página en Devpost. La landing sigue en vivo en Vercel. La app funciona de punta a punta: te registras, eliges temas y géneros, conectas Google Calendar o te lo saltas, pulsas un botón y unos minutos después tienes una canción sobre tu martes, con portada en forma de disco y un link para compartirla.

Nunca la usó nadie más que nosotros y la gente a la que se la mostramos, y prefiero decirlo antes que inventar un número.