π΅ ACE-Step 1.5XL Extend Audio
Extend a track without rewriting the part you already like
- audio
- vae
- latent
- source_latent
- seconds
- summary
You've got a track you like and you want it longer - a proper outro, an intro before the first verse, another chorus on the end. Extend Audio is the node for that. It takes your audio, encodes it, pads the latent with ACE-Step's own "silence" before or after the clip, and masks the new region so the sampler only generates the added part. Your existing music stays bit-identical; the new section grows out of it.
This is one of those features people assume needs a different model. It doesn't - ACE-Step's native support has an extend/repaint family, and this node is the ergonomic wrapper around it. Load your source in a Load Audio node, drop this in, and the returned latent is ready for the KSampler. The reference workflow in the pack README shows the exact wiring, including the one gotcha that catches everyone: the text encoder's duration must be set from this node's returned seconds, because the encoded clip is now longer than it was.
How it works
Three steps, all visible if you read the source. First it encodes your audio with the ACE 1.5 VAE (resampling to the VAE's sample rate if needed). Then it builds the extended latent by concatenating silence latents - pulled from ComfyUI's own get_silence_latent for the ACE-Step path, not just zeros - with your source in the middle. Finally it writes a noise_mask with the new regions set to 1.0, so when the KSampler runs, it regenerates only the padded areas while the original audio's latent is preserved underneath. That's the audio version of masked inpainting, applied to time instead of space.
The inputs and outputs
- audio - your source clip (
AUDIO). - vae - the ACE 1.5 VAE.
- left_extend_seconds - how much to add before the clip (default 0).
- right_extend_seconds - how much to add after (default 10).
Outputs: latent (the extended latent + mask, into KSampler), source_latent (the unextended encode, handy for comparison), seconds (the new total - feed it to the text encoder's duration), and summary, a string showing source/left/right/output timings so you can sanity-check the math.
Install
ComfyUI Manager ("ComfyUI-ACEStep") or:
cd ComfyUI/custom_nodes
git clone https://github.com/starsFriday/ComfyUI-ACEStep.git
then restart. No pip deps of its own. Model files come from the ACE-Step 1.5 repo (acestep_v1.5_xl_turbo_bf16.safetensors, a Qwen ACE CLIP, ace_1.5_vae.safetensors); the XL tier wants ~12GB+ VRAM.
Gotchas
Duration drift is the #1 failure: forget to update the text encoder and the extended latent and your conditioning disagree, giving you truncated or hallucinated audio. Wire seconds straight into Text Encode. The other thing to know: "silence" here is ACE-Step's learned silence, which is what makes extensions blend naturally - but a very long extension can drift musically since the model keeps the key but improvises the arrangement. Keep extensions to a section at a time and let the sampler's denoise handle how much the boundary gets reimagined. The masked edit nodes (Repaint/Edit) are the natural companion when you want to fix, not add.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | β | |
| vae | VAE | β | |
| left_extend_seconds | FLOAT | 0.000β10000 | β |
| right_extend_seconds | FLOAT | 10.000β10000 | β |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | β |
| source_latent | LATENT | β |
| seconds | FLOAT | β |
| summary | STRING | β |