Nodes/RyanOnTheInside/Audio Region Mask (ACE 1.0) βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Audio Region Mask (ACE 1.0) βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Mark a time window in a song for ACE-Step to repaint

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Audio Region Mask (ACE 1.0) βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • audio_latents
  • MASK
β—„start_time5.0β–Ί
β—„end_time15.0β–Ί
β—„mask_value1.00β–Ί
β—„feather_seconds0.0β–Ί

This is inpainting, but for music. If you've got an ACE-Step generation that's 90% right and one 10-second bridge you want regenerated - or, the flip side, one section you want to keep untouched while everything around it changes - you need a mask that says "this exact stretch of time, and nothing else." That's this node: pick a start and end time in seconds and it hands you a mask shaped for exactly that window, ready to plug into an ACE-Step repaint or extend pass.

How it works

You give it a time range and it builds a mask over the audio latent's timeline that's "on" between start_time and end_time. mask_value controls how strongly that region is marked, and feather_seconds softens the edges of the window instead of leaving a hard cut - useful because a hard boundary in an audio mask can produce an audible seam right at the transition, the same way a hard-edged image inpaint mask leaves a visible line.

This is the ACE-Step 1.0 version specifically. The pack ships a near-identical AudioRegionMask15 node for ACE-Step 1.5, because the two model versions don't share the same latent shape - use the one matching whichever ACE-Step checkpoint you're actually running.

The inputs and outputs that matter

  • audio_latents (LATENT, required) - the ACE-Step 1.0 latent you're building a mask against; the mask needs to match its shape.
  • start_time / end_time (seconds, default 5 / 15, range 0–1000) - the window you're masking.
  • mask_value (default 1, range 0–1) - the intensity of the masked region. 1 is fully active.
  • feather_seconds (default 0, range 0–5) - soften the start/end boundaries by this many seconds instead of a hard cutoff.

Output is a single MASK, sized to the input latent's timeline, ready to feed into an ACE-Step conditioning/guider setup for repaint or extend.

How to install it

Via ComfyUI Manager: search "RyanOnTheInside," install, restart. By hand:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt

then restart. No separate model download for the mask node itself, though ACE-Step's silence latent auto-downloads from HuggingFace the first time you run any ACE-Step chain - have HF access available on first use.

Common issues & troubleshooting

Used this on an ACE-Step 1.5 workflow and something breaks downstream. Wrong node - swap to AudioRegionMask15. The two ACE-Step versions have different latent shapes, and this one's built for 1.0.

A hard click or seam right at the region boundary. Bump feather_seconds up from 0. A completely hard-edged mask is the most common cause of an audible discontinuity at the transition.

Not sure the mask covers what you think it does. Run it into the pack's AudioMaskAnalyzer node first - it turns the mask into a readable string so you can confirm the region before spending generation time on it.

Region seems to do nothing. Confirm mask_value isn't left at 0, and that start_time/end_time actually falls within your clip's real length - the range goes up to 1000 seconds regardless of how long your audio actually is, so it's easy to set a window that's entirely past the end of a short clip.

Categoryconditioning/audio

Inputs (5)

NameTypeDefaultDescription
audio_latentsLATENTβ€”
start_timeFLOAT5.00–1000β€”
end_timeFLOAT15.00–1000β€”
mask_valueFLOAT1.000–1β€”
feather_secondsFLOAT0.00–5β€”

Outputs (1)

NameTypeDescription
MASKMASKβ€”