ACE-step
ACE-Step, a novel open-source foundation model for music generation.
Installation
Last Update 30.05.2025
MacOS > 15.1 and minimum M1 processor. See website and github for other systems.
Create Environment
using conda (recommended) or venv:
# create conda environment
conda create -n ace_step python=3.10 -y
# activate the new environment
conda activate ace_step
#clone repository
git clone https://github.com/ace-step/ACE-Step.git && cd ACE-Step
# install pyTorch fitting your OS and system
# this currently installs pytorch version 2.7.0
pip3 install torch torchvision torchaudio
# test pyTorch installation using python3 and check mps availability:
python3
import torch
print("PyTorch version:", torch.__version__)
print("MPS available:", torch.backends.mps.is_available())
exit()
# launch ACE-step app from ACE-step directory:
cd ~/ACE-step
conda activate ace-step
acestep --port 7865 --bf16 false --share false
# !!! on MAC use `--bf16 false` to avoid errors !!!
# set --share true to make the editor public
# starting up can take some time...
# then open: http://127.0.0.1:7865 in browser.
# Advanced startup options:
acestep --checkpoint_path /path/to/checkpoint --port 7865 --device_id 0 --share true --bf16 false
# If `--checkpoint_path` is not set, auto download models to the default path `~/.cache/ace-step/checkpoints`.
Training
Preparing the training data
.wav to .mp3 batch convertion
on Mac, you can convert using ffmpeg with this script:
for i in /pathToYourFolder/*.wav; do
ffmpeg -i "$i" -dither_method rectangular -qscale:a 1 -ar 48000 "${i%.*}.mp3"
done
Creating _lyrics.txt and _prompt.txt files
A python script, to convert a folder with .mp3 files into the necessary structure. Here, for every sound-file, a _prompt.txt and _lyrcis.txt file is created with the same content; Change this script if necessary.
```python
import os
Define the path to your audio folder
audio_folder = "audio"
Loop through all files in the audio folder
for filename in os.listdir(audio_folder): if filename.endswith(".mp3"): base_name = os.path.splitext(filename)[0]
# Define paths for new files
prompt_path = os.path.join(audio_folder, f"{base_name}_prompt.txt")
lyrics_path = os.path.join(audio_folder, f"{base_name}_lyrics.txt")
# Write the prompt file
with open(prompt_path, "w") as prompt_file:
prompt_file.write("breakbeat")
# Write the lyrics file
with open(lyrics_path, "w") as lyrics_file:
lyrics_file.write("lyrics")
print("Done: prompt and lyrics files created.")```