π΅ ACE-Step 1.5XL Empty Latent Audio
The audio Empty Latent
- latent
- seconds
- latent_frames
In image workflows you start with an Empty Latent Image - the empty canvas that the sampler fills with noise and then denoises into a picture. Empty Latent Audio is that node, for songs. If you're generating music from scratch in ACE-Step 1.5 XL, this is where the graph starts.
Everything else in the pack assumes you already have audio: Extend, Repaint, Edit, and the reference nodes all take existing material. Pure text-to-music is the one job that doesn't need any of that - just a prompt, a latent of the right length, and the sampler. This node gives you the latent, sized in seconds, which is a much more honest unit than latent frames when you're thinking about a song.
How it works
ACE-Step audio latents are tensors of shape [batch, 64 channels, frames], and this node's one trick is knowing how fast audio runs: 25 latent frames per second (the ACE-Step convention, 48000 Hz / 1920). Give it seconds and it computes round(seconds Γ 25) frames and hands back a tensor of silence - all zeros. It even quantizes your input to whole frames, so the seconds output is the actual, frame-aligned duration, not just what you typed. That's a detail that matters when you're matching a text encoder's duration to the latent length.
The inputs and outputs that matter
- seconds - how long the generated clip should be, default 120. Think in song terms here: a verse-chorus loop wants a lot less, a full track a lot more.
- batch_size - default 1. Bump it if you're rendering several songs in one pass, but be careful: at 4B decoder sizes, batch > 1 is where the VRAM bill comes due.
Outputs are latent (wire to KSampler), plus seconds and latent_frames - both handy to feed into the Text Encode node's duration so the conditioning and the latent length stay in sync. The latent output also carries "type": "audio", which is how downstream ACE-Step-aware nodes know what they're holding.
Install
ComfyUI Manager, search "ComfyUI-ACEStep", install and restart - or:
cd ComfyUI/custom_nodes
git clone https://github.com/starsFriday/ComfyUI-ACEStep.git
No extra pip packages; the pack leans on ComfyUI's built-in ACE-Step 1.5 support and the torchaudio already in your stack. The model files themselves (acestep_v1.5_xl_turbo_bf16.safetensors, a qwen_0.6b_ace15 or qwen_4b_ace15 CLIP, and ace_1.5_vae.safetensors) are downloads from the ACE-Step 1.5 repo, and "XL" means the 4B-decoder tier - budget roughly 12GB+ of VRAM, not the under-4GB that made plain ACE-Step 1.5 famous.
Gotchas
The classic mistake is treating it like an image Empty Latent and just leaving seconds at the default. If your text encoder is set to a different duration than this latent, you get a mismatch that shows up as truncated or misaligned generations. Decide on a duration up front, feed this node's seconds output straight into Text Encode's duration, and you sidestep the whole class of bugs. And if you hear silence on the other end - the sampler is doing its job; ACE-Step's instrumental output is its strong suit, but the very first seconds of a low-CFG generation can come out quiet. That's a sampler/duration tuning issue, not this node.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| seconds | FLOAT | 120.001β1000 | β |
| batch_size | INT | 11β4096 | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | β |
| seconds | FLOAT | β |
| latent_frames | INT | β |