Nodes/ComfyUI-AceStep_SFT/AceStep 1.5 SFT Generate
ComfyUI Node

AceStep 1.5 SFT Generate

The node that makes AceStep 1.5 SFT actually sound good in ComfyUI

By jeankassio·Created 8 months ago·Updated 6 days ago· 64
AceStep 1.5 SFT Generate
  • model
  • positive
  • negative
  • vae
  • latent_or_audio
  • task
  • reference_audio
  • model
  • vae
  • positive
  • negative
  • latent
  • audio
◄seed0►
◄steps50►
◄cfg7.0►
◄sampler_namejkass_quality►
◄schedulerace_step►
◄denoise1.00►
◄duration60.0►
◄infer_methodode►
◄guidance_modeapg►
◄batch_size1►
◄latent_shift0.00►
◄latent_rescale1.00►
◄fade_in_duration0.0►
◄fade_out_duration0.0►
◄use_tiled_vaetrue►
◄unload_models_after_generatefalse►
◄voice_boost0.0►
◄apg_eta0.00►
◄apg_momentum-0.75►
◄apg_norm_threshold2.5►
◄guidance_interval1.00►
◄guidance_schedulenormal►
◄min_guidance_scale3.0►
◄guidance_scale_text-1.0►
◄guidance_scale_lyric-1.0►
◄omega_scale0.00►
◄erg_scale0.00►
◄cfg_interval_start0.00►
◄cfg_interval_end1.00►
◄shift3.0►
◄noise_sourceofficial►
◄timbre_cls_tokentrue►
◄guidance_rescale0.00►
◄schedule_precisionfloat32►
◄apg_norm_rms0.000►
◄reference_xl_attentiontrue►
◄reference_guidance_scale1.0►
◄reference_timbre_repeats1►

This is the payoff node - the one that turns a text prompt into actual music. If you've tried a stock AceStep 1.5 workflow in ComfyUI and felt the results were flat, this is the node the rest of the pack exists for. The author's pitch, from the announcement on r/comfyui, is basically "until now the SFT model in ComfyUI gave you not-very-good results; this replicates the official Gradio pipeline byte for byte." Community feedback backs it up: one early adopter called it a "huge improvement over the vanilla acestep 1.5 workflow."

What it actually does

AceStepSFTGenerate is the sampler plus the decoder in one node. Feed it the MODEL from the Model Loader (or a LoRA stack), the positive/negative conditioning from the TextEncode node, and optionally the VAE, and it runs flow-matching diffusion on a latent and hands you back an AUDIO output. Skip the VAE and you get the raw latent instead - useful if you want to inspect or post-process before decoding.

The one thing people miss: audio only appears when you connect the VAE. The node passes model, vae, positive, and negative straight through as outputs too, so you can chain Generate after Generate or tee the conditioning into a second render.

The guidance modes are the whole story

AceStep ships with three classifier-free guidance flavors, and the default apg (Adaptive Projected Guidance) is the reason this pack sounds different from the vanilla workflow. It smooths the conditional difference with a momentum buffer, clips it against a norm threshold, then projects out the collinear component that normally just amplifies noise. The result is cleaner, more stable audio at the same settings. adg is the angle-based variant for aggressive style distortion; standard_cfg is plain CFG, kept around as a comparison baseline. If you only ever change one thing, leave it on apg.

Inputs worth touching

  • model, positive, negative - the required wires from Model Loader / Lora Loader and TextEncode.
  • steps (default 50) and cfg (default 7.0) - the author's recommended starting point is euler / normal at 50 steps. Don't drag these toward Turbo-style low numbers; SFT is a full, non-distilled model.
  • denoise - 1.0 is a fresh generation. Set it below 1.0 and wire something into latent_or_audio (it accepts AUDIO or LATENT) and you're doing img2img-style refinement. Community experiments on AceStep 1.5 audio-to-audio tend to live in the 0.25–0.7 range; the README suggests 0.5–0.7 to keep the original character.
  • duration (seconds, 0 = derive from the input audio), infer_method (ode vs sde), and batch_size (1–16, start at 1–2 and check your VRAM).

The long tail of optional knobs - apg_momentum, apg_norm_threshold, split guidance_scale_text/guidance_scale_lyric, omega_scale, erg_scale, cfg_interval_start/end, shift - is for when you're chasing a specific sound. You will not need them on day one.

When things go wrong

The README has a genuinely useful troubleshooting section. Clipping/distortion → push latent_shift negative (e.g. −0.1) to cut amplitude before the VAE decodes. Results jumping all over the place between seeds → raise apg_norm_threshold toward 3.0–4.0 for more aggressive gradient clipping. Mild vocal hiss → the README says it's usually a generation artifact and that APG plus a few more steps beats cranking cfg. Slow generation → lower batch_size, drop to ~20 steps, or try the karras scheduler. And keep in mind the practical ceiling: the author recommends treating ~240 seconds as the max duration on consumer GPUs.

Installing it

Install once for the whole pack - every node here ships in the same repo:

cd ComfyUI/custom_nodes
git clone https://github.com/jeankassio/ComfyUI-AceStep_SFT.git

Or search "AceStep" in ComfyUI Manager and install ComfyUI-AceStep_SFT from there. Either way you still have to grab the model files: the diffusion model (the merged SFT+Turbo is recommended over the pure SFT), the two Qwen text encoders, and the audio VAE. They live in ComfyUI/models/diffusion_models, text_encoders, and vae, and the download links are in the README. Restart, and the whole family shows up under audio/AceStep SFT.

Categoryaudio/AceStep SFT

Inputs (45)

NameTypeDefaultDescription
modelMODELAceStep 1.5 diffusion model (from Load Diffusion Model or with LoRA applied).
positiveCONDITIONINGPositive conditioning from AceStep 1.5 SFT TextEncode.
negativeCONDITIONINGNegative conditioning from AceStep 1.5 SFT TextEncode.
seedINT00–18446744073709550000—
stepsINT501–200Diffusion inference steps.
cfgFLOAT7.01–20Classifier-free guidance scale. Use 7 for Base/SFT and 1 for Turbo checkpoints.
sampler_nameCOMBOjkass_qualityjkass_quality uses the bundled JK-AceStep-Nodes Heun sampler (ODE), with two model evaluations per step except the final zero-sigma step.
schedulerCOMBOace_stepace_step uses Gradio's shifted linear timesteps and CFG timestep bounds. Other schedulers retain ComfyUI step-fraction intervals.
denoiseFLOAT1.000–1Denoise strength. 1.0 = full generation. < 1.0 requires latent_or_audio.
durationFLOAT60.00–600Duration in seconds. Set to 0 for auto from latent_or_audio.
infer_methodCOMBOodeode keeps the selected sampler. sde remaps supported ComfyUI Euler/Heun choices to SDE variants; jkass_quality remains ODE.
guidance_modeCOMBOapgapg follows ACE-Step velocity guidance. apg_denoised projects clean latents per channel; apg_denoised_joint projects channels and time together. ADG = Angle-based Dynamic Guidance. standard_cfg = normal CFG.
vaeoptVAEVAE for decoding latents to audio. Audio output requires this.
latent_or_audiooptAUDIO,LATENTBase input for refinement (img2img). Use denoise < 1.0.
taskoptACESTEP_SFT_TASKOfficial Cover/Remix or Inpaint/Repaint task. Native tasks carry their own source audio and must not be combined with latent_or_audio.
batch_sizeoptINT11–16Number of audios to generate in parallel. Native task context is repeated for each variation.
latent_shiftoptFLOAT0.00-0.2–0.2Additive shift on latents before VAE decode.
latent_rescaleoptFLOAT1.000.5–1.5Multiplicative scale on latents before VAE decode.
fade_in_durationoptFLOAT0.00–10—
fade_out_durationoptFLOAT0.00–10—
use_tiled_vaeoptBOOLEANtrueUse context-padded chunks and discard boundary predictions for 1D audio VAE decoding, matching ACE-Step's overlap-discard policy.
unload_models_after_generateoptBOOLEANfalseUnload models from memory after generation.
voice_boostoptFLOAT0.0-12–12Gain in dB for the entire mix before peak protection. Does not isolate or boost only the singer.
apg_etaoptFLOAT0.00-10–10APG eta: parallel component retention.
apg_momentumoptFLOAT-0.75-1–1APG momentum buffer coefficient.
apg_norm_thresholdoptFLOAT2.50–15APG update norm cap; 0 disables clipping. Velocity units for apg, clean-latent units for apg_denoised. Joint APG uses this value times sqrt(latent channels) as its aggregate cap (2.5 becomes 20 for 64 channels).
guidance_intervaloptFLOAT1.00-1–1Guidance interval width. 1.0 matches the official full 0-1 guidance interval; -1 uses cfg_interval_start/end.
guidance_scheduleoptCOMBOnormalnormal keeps CFG constant; decay decreases from CFG to min_guidance_scale; ramp_up increases from min_guidance_scale to CFG. Ramps follow the active guidance interval. Applies to standard CFG, APG, ADG and split guidance, including jkass_quality.
min_guidance_scaleoptFLOAT3.00–30Final CFG for decay, or initial CFG for ramp_up. Set to 1 for a fully conditional endpoint. Unused by normal.
guidance_scale_textoptFLOAT-1.0-1–30Split text guidance. Active when both text and lyric > 1.0.
guidance_scale_lyricoptFLOAT-1.0-1–30Split lyric guidance. Active when both text and lyric > 1.0.
omega_scaleoptFLOAT0.00-8–8—
erg_scaleoptFLOAT0.00-0.9–2—
cfg_interval_startoptFLOAT0.000–1—
cfg_interval_endoptFLOAT1.000–1—
shiftoptFLOAT3.00.1–5Timestep schedule shift. ACEStep15 default is 3.0.
noise_sourceoptCOMBOofficialofficial draws noise on the model device in model dtype/BTC layout. comfy preserves ComfyUI CPU noise. Batch variations use seed + index.
timbre_cls_tokenoptBOOLEANtrueUse the trained timbre summary token omitted by this ComfyUI core. Disable only to compare with the previous generation behavior.
guidance_rescaleoptFLOAT0.000–1Experimental velocity rescale after CFG/APG/ADG, during sampling. 0 preserves current behavior; compare 0.25 and 0.50 with the same seeds. No extra model evaluations.
schedule_precisionoptCOMBOfloat32float32 avoids rounded or repeated ace_step timesteps with BF16 models. model reproduces the previous schedule precision. Does not change model or noise dtype; other schedulers retain their own precision.
apg_norm_rmsoptFLOAT0.0000–1Optional APG update RMS cap in the selected prediction space, before projection and CFG. 0 keeps apg_norm_threshold. Positive values replace that fixed cap and keep the per-value budget independent of audio duration. For apg_denoised_joint, compare 0.05 and 0.075. Does not control audio volume; ignored by other guidance modes.
reference_audiooptAUDIO,LATENTOptional singer/timbre reference for a new song. Keeps lyrics, duration and LM codes; with a task, overrides its reference. For Advanced continuation, connect it to every stage.
reference_xl_attentionoptBOOLEANtrueUse the checkpoint's alternating sliding/full attention windows in the timbre encoder when a voice reference is available. Independent of timbre_cls_token; keeps LM codes, lyrics and sampling controls. Disable to compare with the previous reference behavior.
reference_guidance_scaleoptFLOAT1.00–4Experimental independent reference-timbre guidance; 1 retains standard result; higher costs extra conditional prediction per sampling step. Can introduce artifacts.
reference_timbre_repeatsoptINT11–8Experimental repetition of the complete reference-timbre tokens in cross-attention, without increasing embedding amplitude. 1 keeps the standard result. Only affects a direct reference_audio input; can alter the music or introduce artifacts and does not guarantee voice similarity.

Outputs (6)

NameTypeDescription
modelMODEL—
vaeVAE—
positiveCONDITIONING—
negativeCONDITIONING—
latentLATENT—
audioAUDIO—