AceStep 1.5 SFT Get Music Infos
Reverse-engineer any track into tags, BPM and key — then feed it back into generation
- audio
- tags
- bpm
- keyscale
- music_infos
Sometimes you don't want to describe a song you've never heard - you want to copy the DNA of one you already like. AceStepSFTMusicAnalyzer (displayed as "AceStep 1.5 SFT Get Music Infos") takes an audio file and hands back descriptive tags, the BPM, and the key/scale. Wire those outputs into the TextEncode node's style_tags / style_bpm / style_keyscale inputs and you've got a style-transfer-ish loop: analyze a reference track, generate something in the same lane. It's the pack's most genuinely novel node.
What's under the hood
Three analysis paths, three outputs:
- Tags - extracted by the native ACE-Step Transcriber, the official audio-to-text model from the AceStep team. It transcribes lyrics, vocal content, and song-structure markers (verse/chorus/bridge) and derives comma-separated tags from them. This is a real speech-and-music model, not a toy.
- BPM - detected via librosa tempo estimation (an
INT, e.g.129). - Key/scale - also librosa, output as text like
"G minor".
There's a fourth output, music_infos, a JSON blob with all three, handy if you want to stash the analysis or pass it around as a string.
The gotcha you need to know before you try it
The tag extraction model downloads on first use, and it's enormous - roughly 22 GB. That's not a typo, and it's why the unload_model toggle defaults to true (free the VRAM after analysis so generation isn't starved). If you only want the BPM and key, flip get_tags off and it never loads the transcriber at all - that's the smart way to use this node on a modest GPU. The audio_duration input (default 60s, center-cropped) is your other lever: the transcriber benefits from more context for structure, but you don't need to feed it five minutes.
The inputs that matter
audio- what to analyze (an AUDIO, e.g. loaded from a file).get_tags/get_bpm/get_keyscale- toggles for each analysis. Keep tags off until you're ready for the 22 GB download.max_new_tokens- transcription length ceiling; higher preserves more lyric/structure detail.use_flash_attn- off by default, becauseflash-attnisn't installed by the pack (it's a notoriously finicky compile-time dependency). Turn it on only if you've already got it working; the tooltip says it's faster and lighter on VRAM.temperature(default 0, deterministic - recommended),top_p,top_k,repetition_penalty(default 1.1),seed- sampling knobs for the transcription. The defaults are chosen for stable structure extraction; the tooltips basically say "don't touch unless experimenting."
Outputs and the loop
tags (STRING), bpm (INT), keyscale (STRING), music_infos (STRING). The intended pipeline, straight from the README:
Music Analyzer → tags, bpm, keyscale
↓
TextEncode: style_tags ← tags
style_bpm ← bpm
style_keyscale ← keyscale
↓
Generate → Save Audio
style_bpm overrides bpm when > 0; style_keyscale overrides when non-empty; style_tags gets appended to your caption. It's a good workflow, with one honest caveat: the tags describe what the track is, and the model is trained on licensed-clean music, so this clones a vibe more reliably than it clones a specific hit. Treat the output as a starting point, not a cover generator.
Practical notes
unload_model defaults to true, which is right for generation-heavy graphs but means every analyze re-loads the transcriber - batch your analyses if you can. If use_flash_attn errors, that's the missing dependency talking; set it back to false. And if tags come back thin, raise max_new_tokens and audio_duration before you blame the model.
Install the pack once via ComfyUI Manager (search "AceStep") or git clone https://github.com/jeankassio/ComfyUI-AceStep_SFT.git into custom_nodes/. Its only hard runtime deps - transformers, torchaudio, librosa, soundfile - are in the pack's requirements.txt and install with it.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Audio to analyze for style, BPM and key/scale. | |
| get_tags | BOOLEAN | true | Extract descriptive tags from the audio using the native ACE-Step transcriber. |
| get_bpm | BOOLEAN | true | Detect BPM from audio using librosa. |
| get_keyscale | BOOLEAN | true | Detect key and scale from audio using librosa. |
| max_new_tokensopt | INT | 25664–2000 | Maximum tokens for the native ACE-Step transcription output. Higher values preserve more lyric/structure detail. |
| audio_durationopt | INT | 6010–300 | Max seconds of audio to analyze (center crop). ACE-Step Transcriber benefits from more context for sections and lyrics. |
| unload_modelopt | BOOLEAN | true | Unload the ACE-Step transcriber after use to free VRAM for generation. |
| use_flash_attnopt | BOOLEAN | false | Use FlashAttention-2 for the ACE-Step transcriber. Requires flash-attn package installed. Faster and uses less VRAM. |
| temperatureopt | FLOAT | 0.000–2 | Sampling temperature for transcription generation. 0 = deterministic and recommended for stable structure extraction. |
| top_popt | FLOAT | 1.000–1 | Nucleus sampling for transcription generation. Keep at 1.0 for native deterministic behavior unless you are experimenting. |
| top_kopt | INT | 00–200 | Top-K sampling for transcription generation. 0 preserves the native default behavior. |
| repetition_penaltyopt | FLOAT | 1.101–3 | Penalty against repeated tokens in the transcription output. 1.1 is a mild safeguard against loops. |
| seedopt | INT | 00–18446744073709550000 | Random seed for reproducible transcription generation when sampling is enabled. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| tags | STRING | — |
| bpm | INT | — |
| keyscale | STRING | — |
| music_infos | STRING | — |