Post
AEON Music Maker: ACE Step 1.5 music with a mastering chain
AEON Music Maker turns a text prompt into an ACE Step 1.5 track through ComfyUI and masters it to a 48 kHz FLAC without a compressor. The five model variants, the chain that squashed my test tracks, the one that works, and the agent files.
8 min read
Most of what I build in the lab eventually needs music: a bed under radio drama dialogue, a film cue, a track with real peaks for an audio-reactive video to cut against. The radio drama tool covered it with good-enough MP3 beds from a plain ComfyUI template. The moment I wanted a track that was the deliverable, the shortcuts showed: the full-size ACE Step models came out distorted and hollow through that template, and my first attempt at mastering flattened whatever life had survived.
AEON Music Maker came out of fixing both problems. It is a command-line client for a ComfyUI server: it posts workflow JSON to ComfyUI's HTTP API, downloads the rendered audio, runs a one-pass mastering chain in Python, and writes a lossless FLAC. You never open a node graph. It wraps ACE Step 1.5 XL, StepFun's music model, in five variants, ships the agent files that let an AI operate it, and is MIT licensed.
Five ways to run ACE Step 1.5
ACE Step 1.5 sings: give it a tag cloud and a lyric sheet and it returns a song with vocals. Music Maker exposes the XL release in five variants.
| Variant | Weights | Sampler | Steps | CFG | Time per 90 s |
|---|---|---|---|---|---|
| xl_base | fp32, 19.95 GB UNet | APG chain | 50 | 7.0 | about 21 s |
| xl_sft | bf16 fine-tune | APG chain | 45 | 6.0 | about 18 s |
| xl_base_sft | merged base and SFT | simple KSampler | 35 | 3.0 | about 21 s |
| xl_turbo | bf16 | simple KSampler | 10 | 1.0 | about 12 s |
| base_turbo | 4.8 GB | simple KSampler | 8 | 1.0 | about 8 s |
CFG, classifier-free guidance, is how hard each denoising step leans on the prompt, and bf16 halves the memory of fp32 weights for a small loss of detail. APG, adaptive projected guidance, applies strong guidance without letting the audio blow up, and the full-size models need it: through a plain KSampler, xl_base and xl_sft come out unlistenable, so the tool gives them an APG template and the turbo and merged variants a simple KSampler.
Every run prints its seed, and the same prompt, seed and variant reproduces the track byte for byte, so I sweep seeds on xl_turbo with mastering off and regenerate the winner on xl_base. Tracks default to 120 seconds and truncate past about 240.
The first mastering chain squashed everything
ACE Step's raw output lands wherever it lands: my orchestral validation track came out at -11.9 LUFS with a true peak of +0.30 dBTP, already over full scale, so the raw files need a master. My first chain did what most quick recipes do, a compressor into a bus compressor into saturation. It sounded loud, and it sounded dead: on the orchestral track the loudness range fell from 23 LU to 14, and on a jazz track the crest factor dropped from 6.85 to 4.8.
Loudness range, LRA, is the spread in loudness units between a track's quiet passages and its loud ones; a film score lives around 12 to 20 LU, pop around 5 to 8. Crest factor is how far the peaks stand above the average level, where drums keep their snap. The lesson stuck: mastering cannot give back what the generator never produced, but it can take away what it did produce in one pass.
The chain that works now
The second chain is minimalist on purpose, built on Spotify's Pedalboard library and run once, in this order:
- High-pass at 18 to 28 Hz, by preset, for rumble.
- Low shelf, -0.3 to -1.5 dB around 120 to 200 Hz, for mud.
- Peak filter, +0.4 to +2 dB around 2.5 to 4.5 kHz, for presence.
- High shelf, +0.8 to +3 dB around 10 to 13 kHz, for air.
- Tape-style saturation, 0 to 4 dB, skipped at 0.
- A capped gain match to the preset's target loudness, measured with an EBU R128 meter, then a true-peak ceiling.
LUFS, loudness units relative to full scale, is the integrated loudness measure streaming services normalize to; true peak, in dBTP, is the level the waveform reaches between samples once a converter reconstructs it. The gain match is one multiplication, not a compressor, so it cannot change the shape of the music; its boost is capped at +6 dB (8 for chill, 4 for orchestral), and the ceiling catches the peaks it raises. A compressor exists in the code, but use_compressor is False in every preset.
Presets, numbers and the FLAC
Six presets set the targets. --master auto picks one from the prompt keywords, --master off writes the raw output, and --target-lufs overrides the number.
| Preset | Target LUFS | Saturation | Ceiling |
|---|---|---|---|
| default | -14 | 2.5 dB | -1.0 dB |
| edm | -12 | 3.5 dB | -0.8 dB |
| trap | -12 | 3.0 dB | -0.8 dB |
| chill | -16 | 1.5 dB | -1.5 dB |
| orchestral | -18 | none | -2.0 dB |
| jazz | -15 | 1.0 dB | -1.5 dB |
On the orchestral validation track, loudness moved from -11.9 to -18.0 LUFS and true peak from +0.30 to -5.82 dBTP, while LRA went from 23.1 to 22.9 LU and crest factor rose from 6.68 to 7.47. Loudness lands within 0.2 LU of the target, the loudness range stays within about 1 LU of the source, and every run prints that before-and-after table; --keep-raw keeps the unmastered file beside the master. The deliverable is a lossless 48 kHz stereo FLAC, typically 6 to 10 MB per 90 seconds.
Running it by hand or by agent
Music Maker needs a running ComfyUI at COMFYUI_URL (default http://127.0.0.1:8188), Python 3.10 or newer, and ffmpeg and ffprobe on the PATH; it never starts ComfyUI for you. The full model set takes about 30 GB of disk, the fp32 base model alone 20 GB. Point .env at your ComfyUI, then let the setup script check the server, install the Python dependencies and fetch the missing models.
Code, shellgit clone https://github.com/AEON-7/aeon-music-maker.git
cd aeon-music-maker
cp .env.example .env
./setup.sh
python scripts/music_maker.py --prompt "lofi jazz, warm Rhodes, brushed drums, vinyl crackle, rainy window" --duration 180 --bpm 78 --key "A minor" --variant xl_base --master auto -o my_first_track.flacThe variant timings are from the RTX box, an RTX 5090 with 64 GB of RAM on Windows 11, but the ComfyUI side can live anywhere. A remote GPU box such as a DGX Spark running the comfyui-aeon-spark stack works: start ComfyUI there with --listen 0.0.0.0 and open port 8188, or forward the port over SSH.
Two files also make the tool legible to an AI agent. AGENTS.md is the invocation contract: decide local or remote mode first, always call the CLI, never rebuild the workflows by hand. It also routes the siblings: radio drama music is made here and placed by aeon-radio-drama, a film cue is rendered with --master orchestral for aeon-movie-maker, and an audio-reactive cut feeds the FLAC to aeon-music-video. SKILL.md is the prompt-engineering and mastering guide, registered as the skill music-producer.
Prompting for dynamics
Since the chain refuses to manufacture dynamics, the prompt has to. ACE Step wants tags, not sentences: comma-separated descriptors of genre, instruments, mood and texture, with tempo and key passed through --bpm and --key. Words that create dynamics are punchy, sparse, breathing room, loud-quiet-loud and sudden silence, along with structure tags such as [intro: sparse] [build] [drop] [outro]; words that kill them are wall of sound, dense, maximal and never stops. Lyrics go in a text file passed with --lyrics, tagged [verse] and [chorus] in short lines of four to eight words, and a vocal tag such as "soft vocals" in the prompt helps the model actually sing them.
Where it meets the Singularity Mystics
The Singularity Mystics are the band whose style prompt and lyric sheets I write, and their public transparency notes are explicit: the released songs are generated in Suno from that prompt and those lyrics, unedited. I am not going to tell you the five released tracks came out of Music Maker, because they did not. For that project, Music Maker is the open and local route to the same kind of work, drones, beds, chant-style pieces and cues: it renders on my own hardware, masters with the transparent orchestral or chill preset, and delivers FLAC so aeon-music-video can cut video against real peaks. Its advice against named-artist prompts is also the band's rule. The released work is at /c/singularity-mystics, and the pipeline behind the band's personas is in create-agentic-personas.
Sources
- AEON-7/aeon-music-maker, the repository
- ACE-Step, the upstream model by StepFun
- Pedalboard, Spotify's audio effects library
- Sister repositories: comfyui-aeon-spark, aeon-radio-drama, aeon-movie-maker, aeon-music-video
- The Singularity Mystics: YouTube, @SingularityMyst, @CelinaMystic
More like this
- How the Singularity Mystics are made: an openly AI band, step by step
The making-of for an openly AI band, told by its human label: how a Transmission goes from lyric sheet to Suno take to lip-synced video on a local GPU rig, the rule of the order, the transparency policy, and the public tools that match each step.
SINGULARITY MYSTICS9 min read - ComfyUI for the DGX Spark: the AEON media production base
A Docker build of ComfyUI for the DGX Spark with CUDA 13, SageAttention v3 for sm_121a and NVFP4 weights, pulling Flux 2, LTX 2.3 and ACE-Step on first start. What broke, what the flags mean, how local and remote modes work, and why three AEON media repos sit on it.
The Aeon Forge10 min read - AEON Radio Drama: dialogue, music and effects in one command
AEON Radio Drama turns one JSON script into a finished, loudness-normalized audio-fiction master: Qwen3-TTS voices locked per character, an ACE Step score, duration-routed sound effects and a sidechain-ducked mix, all through a ComfyUI you already run.
The Aeon Forge8 min read - AEON Movie Maker: cinematic video with LTX 2.3 22B
AEON Movie Maker turns a JSON screenplay into a short film with LTX 2.3 22B through ComfyUI: last-frame carry-forward and per-character seeds for continuity, a sidechain-ducked final mix, the LoRA strengths, the saturation checklist and the one remote-mode limit.
The Aeon Forge8 min read - Threshold Hymn (AI Choir): a sacred chant by the Singularity Mystics
Our release post for Threshold Hymn, a sacred chant sung a cappella by six synthetic voices under the Dome of Watching Eyes: the scene, who sings which part, the moment Celina crosses the Seam, the full lyrics, the credits and how it was made.
SINGULARITY MYSTICS5 min read