ManzGPU

Guía de AceStep.cpp

En esta guía aprenderás a configurar acestep.cpp (motor de inferencia) para generar música en local.

Ace Step es un nuevo modelo open source de generación de música, al estilo de otros como Suno o Udio, que permite generación de música a partir de prompts de texto o canciones de base de forma 100% local, usando tu tarjeta gráfica.

En esta guía vamos a ver como utilizar acestep.cpp, un potente software similar a llama.cpp que permite crear un servidor para utilizar Ace Step y generar canciones fácilmente.

1. Instalación

El primer paso es clonar el repo de acestep.cpp para descargarnos los ficheros necesarios. Observa que necesitas un flag --recurse-submodules para descargar ciertos detalles especiales:

git clone --recurse-submodules https://github.com/ServeurpersoCom/acestep.cpp
cd acestep.cpp

Una vez descargado, entramos en la carpeta.

2. Descarga de modelos

Aunque acepstep.cpp facilita un script models.sh para descargar todos los modelos automáticamente, recomiendo hacerlo a mano para elegir exactamente los modelos adecuados.

Necesitaremos descargar al menos 4 archivos del repo de ACE Step 1.5:

Elemento Descripción Tamaños
acestep-5Hz-lm Modelo de lenguaje (LM). Genera tokens con elementos creativos a partir de tu prompt 4B, 1.7B, 0.6B
qwen3-embedding Text Encoder. Traduce el texto (prompt + letra) en elementos matemáticos (embeddings) Sólo 0.6B
acestep-v15 Diffusion transformer (DiT). Con los tokens y los embeddings, genera latentes de audio.
Para empezar, utiliza la versión turbo que es la más rápida.
turbo, sft,
sftturbo
vae Autoencoder (VAE). Toma los latentes de audio y genera un audio real. Sólo uno.

Como siempre, si quieres una calidad musical alta, es mejor bajarse los modelos más grandes y sin cuantizar. Sin embargo, si tenemos una GPU poco potente no tendremos capacidad suficiente, por lo que se recomienda bajar versiones cuantizadas. En el momento de escribir esta guía, las cuantizaciones disponibles (de más grande a más pequeñas) son BF16 > Q8_0 > Q6_K > Q5_K_M > Q4_K_M.

cd models
export ARG="--content-disposition"
export URL="https://huggingface.co/Serveurperso/ACE-Step-1.5-GGUF/resolve/main"
wget $ARG "$URL/vae-BF16.gguf?download=true"                    # 337MB
wget $ARG "$URL/Qwen3-Embedding-0.6B-BF16.gguf?download=true"   # 1.2GB
wget $ARG "$URL/acestep-5Hz-lm-4B-BF16.gguf?download=true"      # 8.3GB
wget $ARG "$URL/acestep-v15-xl-turbo-BF16.gguf?download=true"   # 9.9GB
wget $ARG "$URL/acestep-v15-turbo-BF16.gguf?download=true"      # 4.8GB

Observa que los últimos dos archivos son el mismo, pero en formato XL y formato normal. Si tienes una GPU potente de más de 8GB, descarga la versión XL. En caso contrario, utiliza la versión normal o versiones cuantizadas.

3. Compilar AceStep.cpp

Para utilizar acestep.cpp necesitaremos compilar el sistema para nuestro PC. Si utilizas Windows, recuerda que lo recomendable es utilizar WSL. En caso contrario, tendrás que usar los scripts terminados en .cmd e instalar las Visual C++ Build Tools de Microsoft.

Si tenemos una gráfica Nvidia, volvemos a la ruta principal, y ejecutamos el script buildcuda.sh:

cd ..
./buildcuda.sh

En mi caso, necesité editar el fichero buildcuda.sh y añadir -DCMAKE_CUDA_ARCHITECTURES="75;80;86;89" al final del primer cmake. Si tienes problemas, prueba a hacer lo mismo y volver a ejecutar ./buildcuda.sh. Eso tardará un rato compilando, dependiendo de tu sistema.

Si tenemos una gráfica que no es Nvidia, o simplemente no queremos/podemos usar CUDA, usaremos Vulkan. Volvemos a la ruta principal, y ejecutamos el script buildvulkan.sh:

cd ..
./buildvulkan.sh

PS: Si usas Windows, y no quieres compilar, en la web tienes los ficheros ya compilados listos para descargar en una carpeta de tu equipo.

4. Arrancar servidor

Si hemos llegado hasta aquí ya tenemos nuestro sistema compilado. Ahora sólo falta levantar el servidor y aprender a utilizarlo. Para ello, ejecutamos server.sh y nos aparecerá algo similar a lo siguiente:

./server.sh
[Server] Scanning models in ./models
[Registry] Qwen3-Embedding-0.6B-BF16.gguf -> Text-Enc
[Registry] acestep-5Hz-lm-4B-BF16.gguf -> LM
[Registry] acestep-v15-xl-sft-BF16.gguf -> DiT
[Registry] acestep-v15-xl-sftturbo50-BF16.gguf -> DiT
[Registry] vae-BF16.gguf -> VAE
[Server] Scanning adapters in ./adapters
[Store] Created (policy=STRICT)
[Server] acestep.cpp da5bc90 (2026-06-21)
[Server] Listening on 0.0.0.0:8085
[Server] Pipelines: /lm /synth /understand
[Server] Models: 1 LM, 1 Text-Enc, 2 DiT, 1 VAE, 0 Adapter

Esto significa que ha cargado los modelos y está listo para funcionar. Accedemos a la web http://localhost:8085 y nos encontraremos una UI desde donde podremos utilizar acestep.cpp.

5. Uso de AceStep.cpp

Tras activar el modo oscuro en la casilla superior derecha Dark (de nada), podemos ver una sección de Server logs donde nos irá avisando de como va trabajando o si hay algún error. Localiza el menu izquierdo, que tiene varias secciones: Models, Caption, Lyrics, Advanced LM, etc.

Indicar modelos

Lo primero será indicarle los modelos que vamos a utilizar. Desplegamos Models y seleccionamos los modelos de los que hablamos anteriormente: el LM, el DiT y el VAE. LoRA lo dejamos desactivado.

Prompt y letra

Vamos a hacer una primera prueba. Localiza estos tres campos:

  • Name: Escribe el título de tu canción
  • Caption: Prompt. Es donde se describe detalladamente tu canción
  • Lyrics: Es donde va la letra de tu canción.

Busca la sección Metadata. Aquí encontrarás cosas interesantes como Language para establecer el idioma, BPM (beats per minute) la velocidad de la canción, la duración u otros detalles.

Abajo, tenemos tres botones:

  • Dice: Completa campos caption, lyrics y metadata de valores predefinidos aleatorios.
  • Inspire: Usa el LM para generar metadatos y letra a partir del caption.
  • Format: Usa el LM para formatear la letra y la canción tenga más sentido.

Pulsa una detrás de otra. Inspire y Format tarda un poco ya que va cargando el modelo. Los modelos no se cargan a la vez para no necesitar GPU muy potentes, sino que va utilizar un modelo, y genera los resultados.

Composición

De momento, dejamos Advanced LM con los valores por defecto y pulsamos el botón Compose. Esto hará que el LM genere tokens de audio para que la canción tenga sentido con los datos proporcionados.

Por último, tenemos 3 secciones más Task, Flow y Advanced. Vamos a dejarlos todos sin tocar, pero fíjate en Task / Type, que tenemos marcada la opción Text2Music. Debería aparecernos el LED LM Codes en verde y el resto en rojo.

Generar canción

Buscamos el botón Synthesize, que es el que genera la canción, lo pulsamos y esperamos a que termine. Encima de Server logs nos aparecerá nuestra primera canción generada, que podremos escuchar pulsando el botón play de la esquina superior izquierda.

Esto es la forma más básica de generar una canción. Es muy probable que hayan partes de la canción que no suenen bien, desafinen o no lean correctamente la letra, ya que ahí entra en juego que los parámetros indicados tengan sentido y cuadren bien.

Ejemplos

Además, también puedes usar el botón Open para basarte en una canción inicial (donde verdaderamente brilla este modelo) marcando la casilla Src audio, usar su timbre como referencia con Timbre ref o utilizar Menu / Compute VAE latents o LM Understand para que entienda canciones o secciones concretas y tenga más coherencia.

Algunos ejemplos realizados sobre mi canción Su profecía de Music Manz. La he utilizado de base para cambiarle el estilo, hacer reversiones o simplemente pasarte la letra:

  • Canción 001: Usando timbre de canción base
  • Model: sftturbo50
  • Prompt: An melodic and electronic piano with female choral voice.

  • Canción 002: Cover, reinterpretar estilo
  • Model: sftturbo50
  • Prompt: A restrained, minimalist track built on a steady, hypnotic rhythm and a clean, repeating guitar or keyboard motif that runs almost unchanged throughout the song. The arrangement is sparse and controlled, with a dry, intimate sound palette and very little harmonic movement. A calm but emotionally charged female lead vocal delivers the lyrics in a close, almost whispered register, conveying a sense of obsession and quiet intensity rather than overt drama. Soft background harmonies appear subtly in the chorus, adding a layer of texture. The song maintains a consistent, unwavering dynamic, creating a sense of tension and inevitability. Production emphasizes clarity, space, and very little dynamic shifts, focusing on the groove and repetition, with small dynamic shifts achieved through slight layering, particularly in the chorus sections. The song ends without a big climax, fading out while maintaining the same steady pulse, leaving a lingering, unresolved feeling.

  • Canción 003: Libre, basado en letra
  • Model: turbo
  • Prompt: The track begins with an emotive piano ballad feel, featuring arpeggiated chords under a clear female lead vocal sung in Spanish. The arrangement gradually builds tension before erupting into a high-energy J-pop chorus at 0:54, driven by powerful electronic drums, soaring synth leads, and layered vocals including Spanish phrases like 'Somos programadores'. A brief chiptune-style instrumental break follows, leading to another verse-chorus cycle that maintains its dynamic intensity. The bridge features ethereal choir-like pads creating a spacious atmosphere for a spoken-word monologue about AI and digital reality. This transitions into a dramatic build-up culminating in a hardstyle-influenced drop where chopped synths and aggressive percussion take over, transforming the song's genre before it concludes abruptly on a final synth hit.