AceStep 1.5 SFT Generate
The node that makes AceStep 1.5 SFT actually sound good in ComfyUI
- model
- positive
- negative
- vae
- latent_or_audio
- task
- reference_audio
- model
- vae
- positive
- negative
- latent
- audio
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) andcfg(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 intolatent_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), andbatch_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.
Inputs (45)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | AceStep 1.5 diffusion model (from Load Diffusion Model or with LoRA applied). | |
| positive | CONDITIONING | Positive conditioning from AceStep 1.5 SFT TextEncode. | |
| negative | CONDITIONING | Negative conditioning from AceStep 1.5 SFT TextEncode. | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 501–200 | Diffusion inference steps. |
| cfg | FLOAT | 7.01–20 | Classifier-free guidance scale. Use 7 for Base/SFT and 1 for Turbo checkpoints. |
| sampler_name | COMBO | jkass_quality | jkass_quality uses the bundled JK-AceStep-Nodes Heun sampler (ODE), with two model evaluations per step except the final zero-sigma step. |
| scheduler | COMBO | ace_step | ace_step uses Gradio's shifted linear timesteps and CFG timestep bounds. Other schedulers retain ComfyUI step-fraction intervals. |
| denoise | FLOAT | 1.000–1 | Denoise strength. 1.0 = full generation. < 1.0 requires latent_or_audio. |
| duration | FLOAT | 60.00–600 | Duration in seconds. Set to 0 for auto from latent_or_audio. |
| infer_method | COMBO | ode | ode keeps the selected sampler. sde remaps supported ComfyUI Euler/Heun choices to SDE variants; jkass_quality remains ODE. |
| guidance_mode | COMBO | apg | apg 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. |
| vaeopt | VAE | VAE for decoding latents to audio. Audio output requires this. | |
| latent_or_audioopt | AUDIO,LATENT | Base input for refinement (img2img). Use denoise < 1.0. | |
| taskopt | ACESTEP_SFT_TASK | Official Cover/Remix or Inpaint/Repaint task. Native tasks carry their own source audio and must not be combined with latent_or_audio. | |
| batch_sizeopt | INT | 11–16 | Number of audios to generate in parallel. Native task context is repeated for each variation. |
| latent_shiftopt | FLOAT | 0.00-0.2–0.2 | Additive shift on latents before VAE decode. |
| latent_rescaleopt | FLOAT | 1.000.5–1.5 | Multiplicative scale on latents before VAE decode. |
| fade_in_durationopt | FLOAT | 0.00–10 | — |
| fade_out_durationopt | FLOAT | 0.00–10 | — |
| use_tiled_vaeopt | BOOLEAN | true | Use context-padded chunks and discard boundary predictions for 1D audio VAE decoding, matching ACE-Step's overlap-discard policy. |
| unload_models_after_generateopt | BOOLEAN | false | Unload models from memory after generation. |
| voice_boostopt | FLOAT | 0.0-12–12 | Gain in dB for the entire mix before peak protection. Does not isolate or boost only the singer. |
| apg_etaopt | FLOAT | 0.00-10–10 | APG eta: parallel component retention. |
| apg_momentumopt | FLOAT | -0.75-1–1 | APG momentum buffer coefficient. |
| apg_norm_thresholdopt | FLOAT | 2.50–15 | APG 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_intervalopt | FLOAT | 1.00-1–1 | Guidance interval width. 1.0 matches the official full 0-1 guidance interval; -1 uses cfg_interval_start/end. |
| guidance_scheduleopt | COMBO | normal | normal 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_scaleopt | FLOAT | 3.00–30 | Final CFG for decay, or initial CFG for ramp_up. Set to 1 for a fully conditional endpoint. Unused by normal. |
| guidance_scale_textopt | FLOAT | -1.0-1–30 | Split text guidance. Active when both text and lyric > 1.0. |
| guidance_scale_lyricopt | FLOAT | -1.0-1–30 | Split lyric guidance. Active when both text and lyric > 1.0. |
| omega_scaleopt | FLOAT | 0.00-8–8 | — |
| erg_scaleopt | FLOAT | 0.00-0.9–2 | — |
| cfg_interval_startopt | FLOAT | 0.000–1 | — |
| cfg_interval_endopt | FLOAT | 1.000–1 | — |
| shiftopt | FLOAT | 3.00.1–5 | Timestep schedule shift. ACEStep15 default is 3.0. |
| noise_sourceopt | COMBO | official | official draws noise on the model device in model dtype/BTC layout. comfy preserves ComfyUI CPU noise. Batch variations use seed + index. |
| timbre_cls_tokenopt | BOOLEAN | true | Use the trained timbre summary token omitted by this ComfyUI core. Disable only to compare with the previous generation behavior. |
| guidance_rescaleopt | FLOAT | 0.000–1 | Experimental 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_precisionopt | COMBO | float32 | float32 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_rmsopt | FLOAT | 0.0000–1 | Optional 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_audioopt | AUDIO,LATENT | Optional 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_attentionopt | BOOLEAN | true | Use 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_scaleopt | FLOAT | 1.00–4 | Experimental independent reference-timbre guidance; 1 retains standard result; higher costs extra conditional prediction per sampling step. Can introduce artifacts. |
| reference_timbre_repeatsopt | INT | 11–8 | Experimental 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)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| vae | VAE | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| audio | AUDIO | — |