Nodes/ComfyUI-FL-AceStep-Training/FL AceStep Auto-Label Samples
ComfyUI Node

FL AceStep Auto-Label Samples

The node that writes captions, BPM, key and genre for every song

By filliptm·Created 7 months ago·Updated 4 months ago· 143
FL AceStep Auto-Label Samples
  • dataset
  • model
  • vae
  • llm
  • dataset
  • labeled_count
  • status
skip_metasfalse
only_unlabeledfalse
format_lyricsfalse
transcribe_lyricsfalse

This is the showpiece - the node that makes this pack more than a glorified trainer. FL AceStep Auto-Label Samples takes a scanned dataset and hands it back with a caption, genre tags, BPM, key/scale, time signature and (optionally) lyrics for every sample, all generated by a local LLM. It's the music-world equivalent of auto-captioning an image dataset with a vision model, and it's the reason you can dump a folder of songs into ComfyUI and train a style LoRA without writing a single tag by hand.

It's the same idea the community has been doing on the image side for years - putting a language model in the graph as a worker tool - just pointed at audio. And it's genuinely what this pack is known for: people who use it describe dumping tracks in and letting "the training do the rest."

How it works

For each sample the node does four things:

  1. Runs the audio through the ACE-Step VAE to get latents.
  2. Quantizes those latents into discrete audio code tokens via the DiT tokenizer - strings like <|audio_code_123|>.
  3. Feeds the code string to the 5Hz LLM (from FL AceStep LLM Loader) using ACE-Step's "understand the audio semantics" instruction.
  4. Parses the returned <think> YAML block into caption, bpm, keyscale, timesignature, genre and language, with any lyrics pulled from after the closing tag.

The audio gets limited to 30 seconds for the listening pass, which is plenty for the model to get tempo, key and vibe.

The inputs that matter

Required: dataset (from Scan Directory), model (MODEL - the ACE-Step checkpoint, purple), vae (VAE - red), llm (ACESTEP_LLM - from the LLM Loader).

The four optional toggles:

  • skip_metas - caption only; skip BPM/key/time signature. Faster, and honestly the right call if you don't care whether the key is right.
  • only_unlabeled - process only samples that don't have a caption yet. Gold for re-runs after you hand-fix a few.
  • format_lyrics - run the LLM over your own .txt lyrics instead of listening to the audio.
  • transcribe_lyrics - attempt to transcribe vocals from the audio itself. Temper expectations: ACE-Step's vocals are its weak suit, so the transcriptions inherit that weakness.

Outputs

  • dataset - the same dataset object, now with labeled samples populated.
  • labeled_count (INT) - how many samples got tagged.
  • status (STRING) - summary, including an error count if any samples failed.

Installing it

Same pack-level install as the rest of this set:

cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI-FL-AceStep-Training.git
cd ComfyUI-FL-AceStep-Training
pip install -r requirements.txt

Restart ComfyUI, or use ComfyUI Manager and search "FL AceStep". You'll also need the ACE-Step 1.5 checkpoint loadable through ComfyUI's built-in Load Checkpoint node - this pack relies on ComfyUI's native ACE-Step support for the MODEL/VAE/CLIP trio rather than shipping its own model loader.

Where people get burned

  • It checks the model. Feed it anything that isn't an ACE-Step checkpoint and it returns "Model is not an ACE-Step model" and labels nothing. The MODEL input has to come from an ACE-Step checkpoint.
  • It's the slowest step before training. Every sample gets encoded to codes and pushed through an LLM. Do a couple of files first, eyeball the captions, then run the full set. Nobody wants to discover bad captions at epoch 90.
  • The vocal honesty gap. Instrumental description is genuinely good; vocals and lyrics are where the output gets flaky. If you're training instrumental style (the common case), this doesn't matter much.
  • Labeling isn't mandatory. This is the fun path, but the pack fully works if your captions come from a metadata.csv and your lyrics from .txt files. Auto-labeling is a convenience, not a requirement.

One tip carried over from image-side training: treat these captions as a starting draft, not gospel. A 30-second listen and an LLM will get you 90% of the way; the last 10% is you saying "no, it's not 'dreamy synthwave', it's 'night drive synthwave'". The only_unlabeled toggle makes that audit loop cheap.

CategoryFL AceStep/Dataset

Inputs (8)

NameTypeDefaultDescription
datasetACESTEP_DATASET
modelMODEL
vaeVAE
llmACESTEP_LLM
skip_metasoptBOOLEANfalse
only_unlabeledoptBOOLEANfalse
format_lyricsoptBOOLEANfalse
transcribe_lyricsoptBOOLEANfalse

Outputs (3)

NameTypeDescription
datasetACESTEP_DATASET
labeled_countINT
statusSTRING