Nodes/ComfyUI-FL-AceStep-Training/FL AceStep Train LoRA
ComfyUI Node

FL AceStep Train LoRA

The node that actually trains your music LoRA (and watches the loss live)

By filliptm·Created 7 months ago·Updated 4 months ago· 143
FL AceStep Train LoRA
  • model
  • config
  • model
  • final_lora_path
  • status
tensor_dir./output/acestep/datasets
lora_namemy_lora
resume_from

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":

  1. 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.
  2. It wraps the decoder in a PEFT LoRA targeting the q/k/v/o projections from your config.
  3. 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.
  4. Checkpoints save as a PEFT adapter - adapter_model.safetensors plus adapter_config.json - with key names fixed up so ComfyUI's own LoRA loader can read them, alongside a training_state.pt for 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 the output_dir you 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_dir vs. preprocess output_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.

CategoryFL AceStep/Training

Inputs (5)

NameTypeDefaultDescription
modelMODEL
configACESTEP_TRAINING_CONFIG
tensor_dirSTRING./output/acestep/datasets
lora_nameSTRINGmy_lora
resume_fromoptSTRING

Outputs (3)

NameTypeDescription
modelMODEL
final_lora_pathSTRING
statusSTRING