Nodes/ComfyUI-AceStep_SFT/AceStep 1.5 SFT Get Music Infos
ComfyUI Node

AceStep 1.5 SFT Get Music Infos

Reverse-engineer any track into tags, BPM and key — then feed it back into generation

By jeankassio·Created 7 months ago·Updated a day ago· 61
AceStep 1.5 SFT Get Music Infos
  • audio
  • tags
  • bpm
  • keyscale
  • music_infos
  • lyrics
◄get_tagstrue►
◄get_bpmtrue►
◄get_keyscaletrue►
◄get_lyricstrue►
◄max_new_tokens1024►
◄audio_duration300►
◄unload_modeltrue►
◄use_flash_attnfalse►
◄free_vram_beforetrue►
◄temperature0.00►
◄top_p1.00►
◄top_k0►
◄repetition_penalty1.10►
◄seed0►
◄transcription_chunk_seconds30►
◄lyrics_modelWhisper-large-v3-transcription►
◄lyrics_languageauto►

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, because flash-attn isn'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.

Categoryaudio/AceStep SFT

Inputs (18)

NameTypeDefaultDescription
audioAUDIOAudio to analyze for style, BPM and key/scale.
get_tagsBOOLEANtrueDerive descriptive vocal/language/structure tags from the selected transcription. If get_lyrics is disabled, the native ACE-Step Transcriber is used for tags.
get_bpmBOOLEANtrueDetect BPM from audio using librosa.
get_keyscaleBOOLEANtrueDetect key and scale from audio using librosa.
get_lyricsoptBOOLEANtrueReturn lyrics formatted for ACE-Step TextEncode. Whisper is the accurate default; the native model remains selectable for its detected section markers.
max_new_tokensoptINT1024256–4096Per-segment token ceiling. Duration-aware limits are applied automatically so a decoder loop cannot consume a full-song budget.
audio_durationoptINT30010–600Max seconds of audio to analyze (center crop only when the song exceeds this limit). Keep this above the song duration to return the complete lyrics.
unload_modeloptBOOLEANtrueUnload the ACE-Step transcriber after use to free VRAM for generation.
use_flash_attnoptBOOLEANfalseUse FlashAttention-2 for the ACE-Step transcriber. Requires flash-attn package installed. Faster and uses less VRAM.
free_vram_beforeoptBOOLEANtrueUnload ComfyUI diffusion/text models before loading the selected transcription model. Recommended on 24 GB GPUs.
temperatureoptFLOAT0.000–2Sampling temperature for the native ACE-Step Transcriber. Whisper uses deterministic beam search for accuracy.
top_poptFLOAT1.000–1Nucleus sampling for the native ACE-Step Transcriber; ignored by Whisper beam search.
top_koptINT00–200Top-K sampling for the native ACE-Step Transcriber; ignored by Whisper beam search.
repetition_penaltyoptFLOAT1.101–3Token penalty for the native ACE-Step Transcriber. Whisper repetition is handled by segment retry and line-loop cleanup.
seedoptINT00–18446744073709550000Random seed for reproducible transcription generation when sampling is enabled.
transcription_chunk_secondsoptINT3010–120Split long songs into bounded transcription segments. 30 seconds is recommended and prevents one hallucinated loop from replacing the complete lyrics.
lyrics_modeloptCOMBOWhisper-large-v3-transcriptionModel used when get_lyrics is enabled. Whisper large-v3 is the accurate default; Turbo is faster; ACE-Step keeps native structure but can hallucinate repeated lyrics on some songs.
lyrics_languageoptCOMBOautoOptional Whisper language hint. Use pt for Brazilian Portuguese if automatic detection confuses a heavily processed vocal.

Outputs (5)

NameTypeDescription
tagsSTRING—
bpmINT—
keyscaleSTRING—
music_infosSTRING—
lyricsSTRING—