ACE-Step Text2music Server
Where ACE-Step's audio actually gets made — the node everything else feeds
- gen_params
- settings
- audio
- info
- audio_codes
Every other node in the ACE-Step pack is a way of preparing input for this one. ACE-Step Text2music Server takes the gen_params bundle from the Gen Params node, the settings bundle from the Settings node, and actually calls the generation service - then hands you back the finished audio, plus the generation's info text and its raw audio codes.
Here's the honest pitch: it's an API call dressed as a node. It hits an OpenAI-style /v1/chat/completions endpoint with modalities: ["audio"] and model acemusic/acestep-v15-turbo, and it parses the returned WAV data into a normal ComfyUI AUDIO tensor. So it's fast, it needs almost no VRAM in cloud mode, and it works with zero models downloaded. The flip side is that if the network or the key is wrong, nothing happens locally to tell you - you get an error from the server.
The two modes
- cloud (default) - calls
https://api.acemusic.ai. You need an API key from acemusic.ai/api-key, either pasted into the optional api_key field or set as theACESTEP_API_KEYenvironment variable. The pack auto-saves your key in.config/under the node directory, shows it as●●●●, and - importantly - never embeds it in the workflow JSON, so sharing a workflow won't leak your key. The pack itself is published under the name "ACE-Step-v1.5-online-free," which is a decent hint there's a free tier to start with. - local - runs the ACE-Step-1.5 inference server on your own GPU. Set mode to
local, and server_url auto-fills tohttp://127.0.0.1:8002; the api_key field hides itself because you don't need one. This is the path that costs VRAM instead of API credits, and it's the one people struggle with (more below).
Outputs - what wires where
- audio (AUDIO) - the song. Into a Save Audio node (or a preview) and you're done.
- info (STRING) - the server's text response: LLM-generated parameters, metadata, lyrics. Wire it into an AceStep Show Text node to actually read it. This is how you see what the LLM decided when
autowas on. - audio_codes (STRING) - the
<|audio_code_N|>tokens of what was generated. Feed these into an Audio Codes node to keep them around; reusing them as a source for a follow-up cover is a neat trick, and the server converts them internally when needed.
Install (the full story)
This is the official ACE-Step pack, so Manager knows it: ComfyUI Manager → search ACE-Step-ComfyUI → install. Manual path:
cd ComfyUI/custom_nodes
git clone https://github.com/ace-step/ACE-Step-ComfyUI.git
cd ACE-Step-ComfyUI
pip install -r requirements.txt
Restart ComfyUI. Dependencies are only torch, numpy, and requests - light. The Server node will re-run on every Queue press (it's marked always-changed, so ComfyUI never tries to cache a result), which is what you want for generation but means you can't "disable" it to save credits.
Local mode is where the install gets real. You need the separate ACE-Step-1.5 repo on a GPU with serious VRAM:
git clone https://github.com/ace-step/ACE-Step-1.5.git
cd ACE-Step-1.5
uv sync # or: pip install -e .
uv run acestep-openrouter --host 0.0.0.0 --port 8002
First launch downloads the model weights, then it listens on http://127.0.0.1:8002.
Troubleshooting
The most common failures, in rough order: 401/403 on the cloud API means the key is wrong or not attached - check it, or confirm ACESTEP_API_KEY is set in the environment ComfyUI runs in (the pack reads it at call time). Connection errors in cloud mode mean the endpoint is unreachable; in local mode, almost always the ACE-Step server isn't actually running or isn't on port 8002. Community reports of the local server failing to start are usually a version mismatch - people fixed it by updating ACE-Step-1.5, so if you cloned a while ago, pull latest. And a request can genuinely time out (the call allows 600s); a 30-second song with thinking on can legitimately take a while, so don't rage-kill it too early.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | cloud | 2 options: cloud, local |
| server_url | STRING | https://api.acemusic.ai | — |
| gen_params | ACESTEP_GEN_PARAMS | — | |
| settings | ACESTEP_SETTINGS | — | |
| api_keyopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| info | STRING | — |
| audio_codes | STRING | — |