ACE-Step Understand
Reverse-engineer any song into a generation spec — ACE-Step Understand reads your audio
- audio
- analysis_text
- caption
- duration
- bpm
- keyscale
- lyrics
Understand is the "what am I actually listening to?" node. You feed it an audio file and it hands back a full breakdown: a caption describing the style, the lyrics, bpm, keyscale, duration, and a formatted analysis_text. In one pass it answers the questions you'd normally spend an evening trying to pin down by ear, and - here's the practical payoff - the outputs wire directly into the generation nodes as a spec. It's the analysis half of a clone loop: Understand a song you like, feed its caption/BPM/key into Text to Music, and generate in that same direction.
The interesting mechanic is that it doesn't just listen with a classifier. The node encodes your audio into ACE-Step's semantic "codes" using the DiT's audio encoder, then runs the language model's understand_music over those codes. That's why config_path is in the required inputs even though no music is being generated - the encoder needs a real model to produce the codes. The target_duration input tells the model what length to reference while analyzing.
The inputs that matter
audio- the track to analyze.config_path- the model config used for encoding (acestep-v15-turbodefault).target_duration- reference length for analysis, 30s default.language- a hint about the vocal language if you know it; helps the LLM transcribe.temperature- the tooltip's advice is worth quoting: lower (0.0-0.3) is more precise, "try 0.1 for better accuracy." Default 0.3.top_k/top_p/repetition_penalty- the usual sampling controls; the defaults already lean toward faithfulness.
Outputs: analysis_text (a formatted summary string), caption, duration (FLOAT), bpm (STRING), keyscale, lyrics.
Install
Shared pack install - nothing extra for this node beyond the standard model stack:
git clone https://github.com/ACE-Step/ACE-Step-1.5.git
cd ACE-Step-1.5 && pip install -e .
cd ComfyUI/custom_nodes
git clone https://github.com/kana112233/ComfyUI-kaola-ace-step.git
cd ComfyUI-kaola-ace-step && pip install -r requirements.txt
huggingface-cli download ACE-Step/Ace-Step1.5 --local-dir ComfyUI/models/Ace-Step1.5
Restart ComfyUI after installing.
Where people get burned
Two realistic frustrations. First, the output is only as good as the encoder and LLM's judgment - BPM and key on a complex, tempo-shifting track can be off, and the README itself positions Understand as a starting analysis, not sheet music. Second, note that bpm comes back as a STRING here (unlike Create Sample's INT), so if you're wiring it into a node that expects a number, you'll need a conversion or a text node in between. For quickly capturing the direction of a track - the caption and tags - it's excellent, and that's the workflow worth building around it.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | The audio signal to be analyzed. | |
| checkpoint_dir | COMBO | Ace-Step1.5 | Directory containing ACE-Step model weights (DiT model). |
| config_path | COMBO | acestep-v15-turbo | Specific model configuration to use (e.g., v1.5 turbo). |
| lm_model_path | COMBO | acestep-5Hz-lm-1.7B | Path to the language model used for audio analysis and understanding. |
| target_duration | FLOAT | 30.0010–600 | Target duration to reference during analysis. |
| device | COMBO | auto | Computing platform to run the model on. |
| languageopt | COMBO | auto | Hint the model about the vocal language in the audio. |
| temperatureopt | FLOAT | 0.30–2 | Sampling temperature. Lower (0.0-0.3) = more precise/faithful, Higher (0.5+) = more creative. Try 0.1 for better accuracy. |
| top_kopt | INT | 00–100 | Top-K sampling. 0 = disabled. Lower values (e.g., 20-50) can improve accuracy by limiting token choices. |
| top_popt | FLOAT | 0.900–1 | Top-P (nucleus) sampling. 1.0 = disabled. Lower values (e.g., 0.8-0.9) can improve accuracy. |
| repetition_penaltyopt | FLOAT | 1.00.5–2 | Repetition penalty. 1.0 = no penalty. Higher values (1.1-1.3) reduce repetitive lyrics. |
| thinkingopt | BOOLEAN | true | Whether to show the language model's Chain-of-Thought reasoning. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| analysis_text | STRING | — |
| caption | STRING | — |
| duration | FLOAT | — |
| bpm | STRING | — |
| keyscale | STRING | — |
| lyrics | STRING | — |