Nodes/MD Nodes/MD: AceStep Audio Generative Fill πŸ–ŒοΈ
ComfyUI Node

MD: AceStep Audio Generative Fill πŸ–ŒοΈ

Repaint ten seconds of a track

By MDMAchineΒ·Created about a year agoΒ·Updated 3 months agoΒ· 15
MD: AceStep Audio Generative Fill πŸ–ŒοΈ
  • latent
  • inpainting_latent
β—„start_seconds10.0β–Ί
β—„end_seconds20.0β–Ί
β—„clear_source_audiotrueβ–Ί

Image inpainting - mask a region, regenerate just that patch - has been a ComfyUI staple for years. Audio inpainting is the newer, weirder cousin, and ACE-Step is the model family making it practical. This node is the mask: it takes the VAE latent of an existing piece of audio, blanks out a time region you specify, and hands the result to the sampler so ACE-Step can regenerate exactly those seconds while leaving the rest of the track alone.

The whole idea only works because audio latents are structured enough to mask in time. ACE-Step 1.5 encodes 48kHz audio with a 1920-sample hop, which works out to exactly 25 latent frames per second. So start_seconds and end_seconds are converted straight to frame indices - 10.0s to 20.0s becomes frames 250–500 - clamped to the latent length, and a noise_mask is written into the latent dict.

The inputs

  • latent - the VAE-encoded latent of your source audio (encode with the ACE-Step VAE first, same as you'd encode an image for img2img).
  • start_seconds / end_seconds - the time region to fill, 0.1s precision. That's your mask. Everything outside it is preserved.
  • clear_source_audio - defaults to true, and you'll usually keep it that way: it zeroes the original audio inside the masked region so the old content doesn't bleed into the new generation. Flip it off if you want the fill to layer on top of what's there.

One output, inpainting_latent - the latent plus its noise_mask, ready to feed a sampler. The sampling side then decides what fills the gap based on your prompt and settings.

How it fits a workflow

The natural chain is: Load Audio β†’ ACE-Step VAE Encode β†’ this node (set your time range) β†’ MD_ACE_SigmaDenoisePatcher to control how much of the original structure bleeds through β†’ sampler β†’ VAE Decode. The paired Denoise Patcher is genuinely useful here, because pure generative fill can drift far from the original's vibe; a denoise around 0.7 "keeps MIDI structure, paints new sounds," per its tooltip, which is the sweet spot for a fill that matches the surrounding bars.

ACE-Step audio generation has real community momentum - the model family shows steady discussion across 2025–2026, with a big spike in early 2026 as the XL variants landed - so this is less a niche toy than the front edge of what local audio workflows look like now.

Installing it

Part of MD Nodes (MDMAchine/ComfyUI_MD_Nodes). ComfyUI Manager β†’ search MD_Nodes β†’ Install, restart. Manual:

cd path/to/ComfyUI/custom_nodes
git clone https://github.com/MDMAchine/ComfyUI_MD_Nodes.git
cd ComfyUI_MD_Nodes
pip install -r requirements.txt

The pack itself needs no model downloads - the ACE-Step models (base/SFT/turbo variants) come from Hugging Face and load through this pack's ACE-Step XL Loader. Python 3.10+ and a current ComfyUI.

Common issues

The usual failure is forgetting the clear_source_audio implications: leave it true and the masked region is fully silent at the start of sampling, which is what you want; flip it off and the sampler has to fight the old audio. If your fill ignores the mask entirely, check that the mask is actually flowing through - the node returns a new latent with the noise_mask key, so make sure you're sampling the output, not the original. And watch your time bounds: the node clamps to the latent length, so a end_seconds past the end of the clip silently truncates to the full length.

CategoryMD_Nodes/AceStep

Inputs (4)

NameTypeDefaultDescription
latentLATENTThe encoded VAE latent of your source audio.
start_secondsFLOAT10.00–600When the generative fill should BEGIN.
end_secondsFLOAT20.00–600When the generative fill should END.
clear_source_audioBOOLEANtrueMutes the original audio inside the mask so it doesn't bleed into the new generation.

Outputs (1)

NameTypeDescription
inpainting_latentLATENTβ€”