FL AceStep Train LoRA
The node that actually trains your music LoRA (and watches the loss live)
- model
- config
- model
- final_lora_path
- status
This is the payoff. Everything else in the pack was feeding this node: a scanned, labeled, preprocessed dataset, a config, and the ACE-Step checkpoint. FL AceStep Train LoRA runs the flow-matching training loop and hands back a LoRA you can load with ComfyUI's native LoRA nodes. It also ships the nicest training UI in ComfyUI's audio corner - a live loss chart, progress bar and per-epoch stats streamed over a WebSocket widget.
This is the node people actually talk about when they talk about this pack. It's the one behind the community's "1000 epochs in an hour on 12 tracks, faster and better than the official UI" reports, and it's the one a prominent YT tutorial maker pointed people at ("please give em stars") for training ACE-Step style LoRAs. It works, and it's fast.
How it works
Mechanically, a lot happens between "queue" and "training complete":
- It clones the loaded model so your checkpoint isn't mutated, then does a genuinely fiddly thing: ComfyUI loads models in inference mode, which "taints" parameters so they can't take gradients. The node rebuilds the DiT decoder's modules as fresh PyTorch modules (Linear, norms, rotary embeddings and all) to strip that taint. This is the heavy machinery the repo is known for, and it's why training works at all inside ComfyUI.
- It wraps the decoder in a PEFT LoRA targeting the q/k/v/o projections from your config.
- It runs the loop: sample one of the 8 discrete timesteps, interpolate between data and noise (flow matching), take the MSE between the predicted velocity and the target, and step AdamW with warmup + cosine restarts under bf16 autocast.
- Checkpoints save as a PEFT adapter -
adapter_model.safetensorsplusadapter_config.json- with key names fixed up so ComfyUI's own LoRA loader can read them, alongside atraining_state.ptfor resuming.
The inputs that matter
- model (
MODEL) - the ACE-Step checkpoint. It has to be one; see the gotchas. - config - from
FL AceStep Training Configuration. No config, no training. - tensor_dir (default
./output/acestep/datasets) - must match theoutput_diryou preprocessed to. This is the number one silent-failure point in the pack. - lora_name (default
my_lora) - the output subfolder. It gets sanitized (spaces → underscores), so keep it simple. - resume_from (optional) - path to a previous checkpoint folder (not a file) to continue from.
Outputs
- model (
MODEL) - the patched model, so you can chain it onward if you like. - final_lora_path (STRING) - where the final adapter landed.
- status (STRING) - the run summary.
Output lives at <output_dir>/<lora_name>/final/adapter/adapter_model.safetensors. Grab it and load it with ComfyUI's built-in LoRA loader on the ACE-Step inference nodes.
Installing it
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". The pack's requirements pull in peft, accelerate, lightning and friends - pip install -r handles it, and peft specifically is what the LoRA injection needs. README says 8GB+ VRAM for bf16 training; real-world reports sit comfortably on 3080/5080/3090-class cards.
Where people get burned
- The two stock errors. "Model is not an ACE-Step model" means you wired in the wrong checkpoint. "PEFT not installed" means requirements didn't install -
pip install peft, restart. - Overtraining is the community's biggest complaint. The "failing spectacularly" thread ran 1600 epochs / 20k steps on 14 songs and ended up needing LoRA strength 2.0 to barely hear the style. Fewer songs, fewer epochs, checkpoints every 10 - resist the epoch inflation.
tensor_dirvs. preprocessoutput_dir. If they don't match, you get "No samples in dataset" before anything trains.- It's a long-running node. Training blocks the graph for however long your run takes. That's expected behavior with these nodes - the live widget is there to keep you sane.
When it's done you'll have a small bf16 adapter that embeds your style, genre or artist's vibe into ACE-Step 1.5's generation. That's the whole point of this pack: the local, open answer to Suno, trained the way you want it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| config | ACESTEP_TRAINING_CONFIG | — | |
| tensor_dir | STRING | ./output/acestep/datasets | — |
| lora_name | STRING | my_lora | — |
| resume_fromopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| final_lora_path | STRING | — |
| status | STRING | — |