Nodes/ComfyUI-ACEStep/🎡 ACE-Step 1.5XL Empty Latent Audio
ComfyUI Node

🎡 ACE-Step 1.5XL Empty Latent Audio

The audio Empty Latent

By starsFridayΒ·Created 4 months agoΒ·Updated 4 months agoΒ· 4
🎡 ACE-Step 1.5XL Empty Latent Audio
    • latent
    • seconds
    • latent_frames
    β—„seconds120.00β–Ί
    β—„batch_size1β–Ί

    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.

    Categoryaudio/ACE-Step 1.5 XL

    Inputs (2)

    NameTypeDefaultDescription
    secondsFLOAT120.001–1000β€”
    batch_sizeINT11–4096β€”

    Outputs (3)

    NameTypeDescription
    latentLATENTβ€”
    secondsFLOATβ€”
    latent_framesINTβ€”