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
- 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 (35)
| 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. |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | normal | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| 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 = deterministic diffusion. sde = stochastic (remaps sampler). |
| guidance_mode | COMBO | apg | APG = Adaptive Projected Guidance. 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. | |
| batch_sizeopt | INT | 11–16 | Number of audios to generate in parallel. |
| 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 tiled VAE for long audio / low VRAM. |
| unload_models_after_generateopt | BOOLEAN | false | Unload models from memory after generation. |
| voice_boostopt | FLOAT | 0.0-12–12 | Voice boost in dB. |
| 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 norm threshold for gradient clipping. |
| guidance_intervalopt | FLOAT | 0.50-1–1 | Guidance interval width. -1 = use legacy cfg_interval_start/end. |
| guidance_interval_decayopt | FLOAT | 0.000–1 | — |
| min_guidance_scaleopt | FLOAT | 3.00–30 | — |
| 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–5 | Timestep schedule shift. ACEStep15 default is 3.0. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| vae | VAE | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| audio | AUDIO | — |