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

🎡 ACE-Step 1.5XL Edit Latent

Edit a song section when you're working straight in latents

By starsFridayΒ·Created 4 months agoΒ·Updated 4 months agoΒ· 4
🎡 ACE-Step 1.5XL Edit Latent
  • latent
  • latent
  • seconds
  • summary
β—„edit_start_seconds0.00β–Ί
β—„edit_end_seconds0.00β–Ί
β—„edit_strength1.00β–Ί
β—„existing_mask_modeoverwriteβ–Ί

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.

Categoryaudio/ACE-Step 1.5 XL

Inputs (5)

NameTypeDefaultDescription
latentLATENTβ€”
edit_start_secondsFLOAT0.000–10000β€”
edit_end_secondsFLOAT0.000–10000β€”
edit_strengthFLOAT1.000–1β€”
existing_mask_modeCOMBOoverwrite3 options: overwrite, add, subtract

Outputs (3)

NameTypeDescription
latentLATENTβ€”
secondsFLOATβ€”
summarySTRINGβ€”