π΅ ACE-Step 1.5XL Edit Latent
Edit a song section when you're working straight in latents
- latent
- latent
- seconds
- summary
Edit Latent is the masked-edit mechanism with the encode step removed. If Edit Audio is "give me a wav and I'll prep the edit," this is "give me a latent and I'll mark the region." Same goal - regenerate one section of a song to new tags or lyrics while everything else stays identical - but it operates on latents you already have, and it exposes existing_mask_mode, which the audio wrapper keeps hidden.
Reach for it when your source is already encoded: a cached latent, a latent that came out of an earlier generation, or one you've been composing in latent space. It's also the natural building block for chains - extend a track, then edit a slice of the extension, then repaint another, all without ever going back to a wav. When you want that kind of accumulated mask control, the latent versions of these nodes are the ones to use.
How it works
This is a thin, honest wrapper: its edit method literally calls the repaint routine with edit_strength as the mask value. So the mechanism is the repaint one - convert edit_start_seconds/edit_end_seconds to latent frames at 25 fps, write a noise_mask over that range at the given strength, hand the latent to the KSampler. The existing_mask_mode enum (overwrite / add / subtract) decides how the new mask combines with anything already on the latent, which is the difference between one clean edit and a series of stacked ones.
The inputs and outputs
- latent - an ACE-Step
LATENT(64 channels,"type": "audio"). - edit_start_seconds / edit_end_seconds - the window to rewrite.
- edit_strength - 0β1, how thoroughly the region is redrawn (default 1).
- existing_mask_mode -
overwrite(default) /add/subtract.
Outputs: latent (masked, into KSampler), seconds (clip length), and summary (the masked range + strength). Note there's no source_latent here - the input is the source, and it's not modified in place.
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; the ACE-Step 1.5 XL models (acestep_v1.5_xl_turbo_bf16.safetensors, a Qwen ACE CLIP, ace_1.5_vae.safetensors) come from the ACE-Step repo, and XL wants ~12GB+ VRAM.
Gotchas
Because it's a passthrough to repaint, every repaint rule applies: backwards ranges error, end_seconds 0 means "to the end," and edit_strength at 1.0 is a full rewrite that tends to leave visible seams - drop it toward 0.6β0.8 and pair with a moderate sampler denoise for edits that sound continuous. The one thing unique here is the mask chaining: if you add an edit onto a latent that already has a repaint mask, you're now asking the sampler to regenerate both regions in one pass. That's powerful and occasionally surprising - check the summary output before you commit to a run, because it tells you exactly what range and strength you're about to sample.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | β | |
| edit_start_seconds | FLOAT | 0.000β10000 | β |
| edit_end_seconds | FLOAT | 0.000β10000 | β |
| edit_strength | FLOAT | 1.000β1 | β |
| existing_mask_mode | COMBO | overwrite | 3 options: overwrite, add, subtract |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | β |
| seconds | FLOAT | β |
| summary | STRING | β |