Nodes/ComfyUI-ACEStep/🎡 ACE-Step 1.5XL Reference Audio
ComfyUI Node

🎡 ACE-Step 1.5XL Reference Audio

Make ACE-Step sing with someone else's voice

By starsFridayΒ·Created 4 months agoΒ·Updated 4 months agoΒ· 4
🎡 ACE-Step 1.5XL Reference Audio
  • conditioning
  • reference_audio
  • vae
  • conditioning
  • reference_latent
  • negative_conditioning
β—„reference_strength1.00β–Ί
β—„reference_start_seconds0.00β–Ί
β—„reference_max_seconds0.00β–Ί

ACE-Step's vocals are its weak point, but there's a workaround the model was built for: give it a voice to imitate. Reference Audio takes a clip of someone singing or speaking, encodes it, and attaches the timbre to your conditioning - so the song you generate comes out in that voice's direction. It's the closest thing ACE-Step has to voice cloning, and it's what turns the TTS-like prompt node from a gimmick into a voice-guided narration pipeline.

The canonical use is the pack's reference workflow: build positive conditioning with Text Encode, run it through this node, connect conditioning to the KSampler's positive and negative_conditioning to its negative, and keep generate_audio_codes off on the text encoder so the reference voice actually steers the result. Done right, you get the target voice steering timbre while ACE-Step still reinterprets timing and melody - looser than TTS, more useful for singing.

How it works

This node is a convenience wrapper over its sibling, Reference Latent: it encodes your reference_audio with the ACE 1.5 VAE first (resampling if needed), then applies the reference logic. That logic does three things:

  1. Builds a negative_conditioning by zeroing out your conditioning and stripping the reference payload - the safe way to get a negative, because a naive ConditioningZeroOut can keep the reference latents attached and quietly weaken the voice reference. The README calls this out specifically.
  2. Crops the reference clip to reference_start_seconds through reference_start_seconds + reference_max_seconds (0 means "whole clip").
  3. Blends the reference latent toward silence by reference_strength, then stamps it into the conditioning as reference_audio_timbre_latents.

The inputs that matter

  • conditioning - your positive conditioning from Text Encode.
  • reference_audio - the voice sample, 10–30 seconds of clean vocals beats a full mix.
  • reference_strength - 0 to 1, how hard the reference voice pushes. Start at 1, dial back if the voice swamps the composition.
  • reference_start_seconds / reference_max_seconds - crop the sample without editing the file.

Outputs: conditioning (positive, to KSampler), reference_latent (the encoded, strength-blended sample), and negative_conditioning (to the KSampler negative).

Install

ComfyUI Manager ("ComfyUI-ACEStep") or:

cd ComfyUI/custom_nodes
git clone https://github.com/starsFriday/ComfyUI-ACEStep.git

then restart. No pip deps; models from the ACE-Step 1.5 repo (acestep_v1.5_xl_turbo_bf16.safetensors, a Qwen ACE CLIP, ace_1.5_vae.safetensors). XL tier means ~12GB+ VRAM.

Gotchas

The two documented traps are both about what you don't do: don't run ConditioningZeroOut after this node for the negative (use the provided negative_conditioning), and keep generate_audio_codes disabled when the reference should dominate - if it's on, the encoder's own lyric-to-code generation fights the reference. And set expectations: this steers timbre, it doesn't clone a voice perfectly. The community's verdict on ACE-Step vocals is "promising, not polished," so treat the reference as a strong nudge, not a guarantee.

Categoryaudio/ACE-Step 1.5 XL

Inputs (6)

NameTypeDefaultDescription
conditioningCONDITIONINGβ€”
reference_audioAUDIOβ€”
vaeVAEβ€”
reference_strengthFLOAT1.000–1β€”
reference_start_secondsFLOAT0.000–10000β€”
reference_max_secondsFLOAT0.000–10000β€”

Outputs (3)

NameTypeDescription
conditioningCONDITIONINGβ€”
reference_latentLATENTβ€”
negative_conditioningCONDITIONINGβ€”