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

🎡 ACE-Step 1.5XL Repaint Latent

Repaint a time range when your audio is already a latent

By starsFridayΒ·Created 4 months agoΒ·Updated 4 months agoΒ· 4
🎡 ACE-Step 1.5XL Repaint Latent
  • latent
  • latent
  • seconds
  • summary
β—„start_seconds0.00β–Ί
β—„end_seconds0.00β–Ί
β—„mask_value1.00β–Ί
β—„existing_mask_modeoverwriteβ–Ί

Repaint Latent is the raw engine behind the audio repaint workflow. Where Repaint Audio encodes a .wav for you, this node takes an already-encoded latent and masks a time range on it - nothing more, nothing less. It's the version you reach for when your source is already in latent form, or when you want to control exactly how a mask combines with one that's already there.

If you squint, the whole Repaint/Edit family is one mechanism with different dials. Repaint masks a range for regeneration; Edit does the same thing but is aimed at "change the tags or lyrics and let the region adapt." This node sits in the middle of that: the mask mechanics, exposed directly.

How it works

It takes your latent's samples, computes the frame indices for start_seconds/end_seconds at 25 frames per second, and writes a noise_mask onto the latent with that range set to mask_value. Frames outside the range keep whatever mask they had (or none, if there wasn't one). The KSampler then regenerates only the masked frames. The existing_mask_mode input is the interesting part - overwrite (default) discards any prior mask, add unions the new range into it, subtract clears it. That's how you build up complex masks across several repaint passes on the same latent, or chip away at an over-aggressive mask.

The inputs and outputs

  • latent - an ACE-Step LATENT (64 channels, "type": "audio").
  • start_seconds / end_seconds - the masked window; end_seconds 0 means "to the end".
  • mask_value - how strongly the region is marked for redraw (default 1.0).
  • existing_mask_mode - overwrite / add / subtract for combining with an existing mask.

Outputs: latent (masked, into KSampler), seconds (clip length), and summary (the exact masked range and mask value - the cheap sanity check that your seconds became the right frames).

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 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) and XL wants ~12GB+ VRAM.

Gotchas

Backwards ranges throw an error (end_seconds must exceed start_seconds unless it's 0) - a genuinely helpful guard, not a bug. The subtler trap is the mask value: treat mask_value as a strength, not a switch. At 1.0 the region is fully redrawn and can clash at the seams; at 0.5 the sampler blends old and new, which is often the better-sounding compromise. And because this node doesn't encode anything, your latent quality is whatever produced it - repaint an already-repainted latent and you're compounding whatever the first pass left behind. For a clean result on a fresh source file, the Repaint Audio wrapper is usually the friendlier start.

Categoryaudio/ACE-Step 1.5 XL

Inputs (5)

NameTypeDefaultDescription
latentLATENTβ€”
start_secondsFLOAT0.000–10000β€”
end_secondsFLOAT0.000–10000β€”
mask_valueFLOAT1.000–1β€”
existing_mask_modeCOMBOoverwrite3 options: overwrite, add, subtract

Outputs (3)

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