π΅ ACE-Step 1.5XL Extend Latent
Extend a track when you already have it in latent form
- latent
- latent
- seconds
- summary
Extend Latent is the plumbing-friendly twin of Extend Audio. Same job - pad a track with newly generated audio before or after the existing material, leaving the original untouched - but instead of taking an AUDIO clip and a VAE, it takes a latent that's already been encoded. If your source is coming from an Empty Latent Audio, an earlier generation, or a cached encode, this is the node you want.
The immediate win is speed and repeatability. The encode step in Extend Audio runs every time; here you encode once (or reuse a latent you already have) and then extend as many times as you like, adjusting left/right seconds without re-encoding the source. It also exposes a control the audio version doesn't: existing_mask_mode, for deciding what happens to any mask that's already on the latent.
How it works
It concatenates ACE silence latents (from ComfyUI's own get_silence_latent, so the padding matches what the model thinks silence sounds like) around your source latent, then builds a noise_mask marking the new regions. The existing content keeps its latent values - so the sampler's job is to generate only the padded regions, guided by the conditioning, with the old audio acting as context. Because it works on a latent directly, it can chain: extend, generate, extend again, and the mask logic keeps accumulating correctly if you tell it to.
The inputs and outputs
- latent - an ACE-Step
LATENT(64 channels,"type": "audio"), e.g. from Audio to Latent. - left_extend_seconds / right_extend_seconds - how much to add (defaults 0 / 10).
- existing_mask_mode -
overwrite(default) replaces any prior mask;addunions the new region into it;subtractclears it. Reach foraddwhen you're chaining multiple extensions or edits on one latent.
Outputs: latent (extended, into KSampler), seconds (new total - feed to Text Encode's duration), and summary (the source/left/right/output timing breakdown). Note there's no source_latent here, unlike the audio version - the input latent is the source, and it's unchanged.
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; models come from the ACE-Step 1.5 repo (acestep_v1.5_xl_turbo_bf16.safetensors, a Qwen ACE CLIP, ace_1.5_vae.safetensors). This is the XL tier - ~12GB+ VRAM, not the sub-4GB promise of plain 1.5.
Gotchas
The 64-channel validation will bite you if you feed it a latent from the wrong source - that error message is the pack telling you the latent isn't ACE-Step audio. And the same duration rule as its audio sibling: set the text encoder's duration from the returned seconds, or the extended region won't line up with the conditioning. One more: if you extend a latent that was already generated-and-decoded, you're extending at latent quality - the mask preserves the old region, but the seam quality depends on the sampler's denoise, so budget a bit of fiddling there.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | β | |
| left_extend_seconds | FLOAT | 0.000β10000 | β |
| right_extend_seconds | FLOAT | 10.000β10000 | β |
| existing_mask_mode | COMBO | overwrite | 3 options: overwrite, add, subtract |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | β |
| seconds | FLOAT | β |
| summary | STRING | β |