Los videoclips, las pistas y las portadas están en un dataset público de Hugging Face, y el navegador los busca directamente allí. Esta app carga solo el texto, por eso es ligera, económica y no se cae junto con los medios.

El video es el archivo más caro de servir y el más complicado de alojar. Aquí simplemente no pasa por esta app: lo que viaja en el deploy es texto, y lo pesado se queda donde ya se sirve gratis y con range request.
Los clips, las pistas y las portadas vienen del dataset público Inematds/musicavideo-acervo. O resolve/main responde desde Hugging Face range request — la barra del video navega sin ningún proxy y la app no paga ancho de banda ni almacenamiento.
Los títulos, las letras, los prompts y el desglose provienen de un manifest.json versionado en el propio repo. La página se muestra sin hacer ningún viaje por la red: si Hugging Face se cae, aún muestra todo el acervo en texto.
Suno entrega dos pistas por solicitud, y cada una es una canción diferente: la misma letra, otra interpretación. Cada pista tiene su tarjeta, su dirección y su página, con el videoclip abriéndose encima.
Esta app es la punta de un camino que comienza en el panel local de musicavideo: el espacio de trabajo donde escuchas, comparas y mandas a la papelera. Publicar no es la consecuencia de que esté listo: la producción lista es material de trabajo; exhibirla es una decisión.
La app funciona sin ninguna clave — el archivo es público y el manifiesto está en el repo. Solo el like necesita infraestructura, y sin ella la vitrina sigue siendo una vitrina.
Next.js 16, sin base de datos ni dependencias de servicios para renderizar. El manifiesto se importa como módulo.
npm install npm run dev # http://localhost:3000
Dataset público, escrito por musicavideo publica-hf. Cambiar de dataset es una variable.
# opcional — este ya es el valor predeterminado HF_REPO=Inematds/musicavideo-acervo
Es la única escritura del público y por eso la app no es HTML estático puro. Sin estas variables, la app sigue funcionando: el contador desaparece y el clic no se guarda.
KV_REST_API_URL
KV_REST_API_TOKEN
# en Vercel: Storage → Upstash RedisLos comandos con musicavideo se ejecutan en el repo del pipeline (inematds/musicavideo); los de npm, aquí.
Un clic en la tarjeta marca la producción en el estado.json. Desmarcar no elimina lo que ya se subió — genera una solicitud de eliminación, que se ejecuta en la próxima publicación.
musicavideo painel # el estudio, en :5400 musicavideo nuvem MVD#113 # o el botón en la tarjeta
Se sube a Hugging Face solo lo que cambió, escribe el manifest.json en este repo y haz commit. Ejecutarlo dos veces seguidas no vuelve a leer nada.
musicavideo publica-hf --dry # lo que se subiría, sin subir musicavideo publica-hf # sube, escribe el manifiesto, hace commit y envía musicavideo publica-hf --manifesto # solo los metadatos, sin volver a enviar medios
El manifiesto se importa como módulo, así que la app funciona sin conexión para todo lo que es texto; los medios necesitan conexión.
npm install npm run dev # :3000 npm run build # verifica que todas las páginas se generen
Cada producción tiene un número — el mismo del bot que la generó — y cada pista tiene una página. La ruta antigua por producción sigue respondiendo y lleva a la versión aprobada.
/mvd-113-v1 # la pista 1 de aquella producción /mvd-113-v2 # la pista 2 — misma letra, otra interpretación /mvd-113 # ruta antigua: lleva a la versión aprobada /analises # lo que analisevideo midió en videos reales
En Vercel: Storage → Create Database → Upstash Redis, conéctalo al proyecto y vuelve a implementarlo — las variables se inyectan solas. El token debe ser el de escritura; el modo de solo lectura no sirve.
# el contador es un INCR atómico por pista: MVD#113:1 curl "$URL/api/like?mvd=mvd-113:1"
Es la única señal del público que tiene el proyecto. Sin esa respuesta, moriría aquí.
MUSICAVIDEO_PUB_URL=https://sua-vitrine.vercel.app \ musicavideo likes # se convierte en ♥ en cada tarjeta del panel local
Importar este repo en Vercel con Root Directory ./. A partir de ahí, el webhook se encarga del resto — no hay ningún paso manual de deploy.
git push # el deploy se realiza mediante el webhook git → Vercel
Capturas de la app real, con el archivo actual: 27 producciones y 53 canciones.


La V1 (el panel local) y la V2 (esta vitrina) son dos apps, no una migración: desactivar esta no desactiva aquella.
MVD#113), y la pestaña de análisis de video.publica-hf sube solo lo que cambió y termina en el git push del manifiesto: nada de subir gigabytes y que la vitrina siga mostrando la versión anterior.musicavideo likes se ejecuta a mano. El «me gusta» llega cuando el público hace clic, no cuando se aprueba: es la única parte del ciclo que no tiene un gesto humano natural para activarla.