Nodes/ComfyUI-FL-AceStep-Training/FL AceStep Scan Audio Directory
ComfyUI Node

FL AceStep Scan Audio Directory

Where every ACE-Step training run actually starts

By filliptm·Created 7 months ago·Updated 4 months ago· 143
FL AceStep Scan Audio Directory
    • dataset
    • sample_count
    • status
    directory
    all_instrumentaltrue
    custom_tag
    tag_positionprepend

    This is the boring node that makes or breaks a training run, and nobody reads about it until it breaks. FL AceStep Scan Audio Directory walks a folder - recursively - looking for .wav, .mp3, .flac, .ogg, .opus and .m4a files, reads each one's duration, and builds the ACESTEP_DATASET that every later step in this pack consumes. It doesn't train, it doesn't label, it doesn't encode. It just finds your audio and hands it onward. If it finds nothing, nothing else runs: a status of "No audio files found" is the most common way a fresh ACE-Step workflow silently dies.

    How it works

    For every audio file it computes the duration (via soundfile, with a torchaudio fallback), then looks for two kinds of sidecar data:

    • A .txt file next to the audio with the same name - its contents become the sample's lyrics.
    • A key_bpm.csv or metadata.csv in the same folder, matched by filename, for BPM, key and caption columns.

    That means a hand-curated folder - captions in a CSV, lyrics in .txt files - flows through this node with no LLM involved at all. The Auto-Label node is the automated path; this is the "I already know what I have" path, and it's a good one.

    The inputs that matter

    • directory - the path to your audio folder. Use an absolute path; relative paths are how people point it at nothing and stare at an empty dataset.
    • all_instrumental (default True) - flags every sample as instrumental, which forces lyrics to [Instrumental]. Most ACE-Step style training is instrumental, so leaving it on is usually right. If your set has vocals, turn it off and drop .txt lyric files next to the songs.
    • custom_tag - a LoRA activation tag like my_style. This is the token you'll prompt with after training, same idea as a trigger word on an image LoRA. It gets prepended to every caption.
    • tag_position - prepend (default), append, or replace. Controls where the tag lands relative to the caption text. replace is a fun one: it swaps the entire caption for the tag, which is how you train a purely tag-driven LoRA.

    Outputs

    • dataset (ACESTEP_DATASET) - the object every subsequent node takes as its dataset input.
    • sample_count (INT) - how many files it found.
    • status (STRING) - the human-readable summary.

    Installing it

    The node ships inside the pack, so install the pack once:

    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"). Dependencies include soundfile and torchaudio, both pulled in by pip install -r.

    Where people get burned

    • It only reads. It never copies, moves or renames anything. Organize your folder before you point it somewhere, or you'll be re-scanning.
    • CSV matching is by exact filename. 02. Destiny.wav and 02. Destiny.WAV won't match the same CSV row. Keep the case consistent.
    • all_instrumental overwrites lyrics. If you set it to True, samples get marked instrumental and their .txt lyrics effectively don't count - the raw text is kept, but the sample is treated as instrumental. On a mixed vocal/instrumental set, that's the trap.
    • One scan, one snapshot. The dataset is built at scan time. Add files after scanning and you'll re-run the node. Cheap, but easy to forget.

    It's not glamorous, but get this node happy and the rest of the pipeline is downhill. A good rule from the pack's own example workflow: tidy folder, absolute path, all_instrumental on, one custom_tag, and let the label node do the rest.

    CategoryFL AceStep/Dataset

    Inputs (4)

    NameTypeDefaultDescription
    directorySTRING
    all_instrumentalBOOLEANtrue
    custom_tagoptSTRING
    tag_positionoptCOMBOprepend3 options: prepend, append, replace

    Outputs (3)

    NameTypeDescription
    datasetACESTEP_DATASET
    sample_countINT
    statusSTRING