AceStepKSampler
The Ace-Step Sampler That Fights Back Against Robotic Vocals
- model
- positive
- negative
- latent
- vae
- latent
- audio
This is the reason the pack exists. AceStepKSampler is a full-fledged replacement for the basic KSampler when you're generating music with the ACE-Step text-to-audio model in ComfyUI - and it exists because the stock sampler treats audio latents like images, which gets you warbly, autotuned-sounding vocals and cut-off words. This one adds a pile of audio-specific cleanup that nobody else bundles in one node.
How it works
Under the hood it's still a KSampler: same model, positive/negative conditioning, latent, and denoise you already know. The difference is what it does during and after the sampling loop. It stabilizes the noise prediction with EMA smoothing and an L2 norm clamp, optionally rescales CFG (CFG++ style) to stop oversaturation, and - the part people actually buy into - applies anti-autotune, frequency damping, temporal smoothing, and beat stability to the latents to kill the metallic, quantized vocal artifacts ACE-Step's vocoder tends to produce.
The pack also registers two custom samplers, jkass_quality and jkass_fast, straight into ComfyUI's global sampler dropdown. You'll find them listed alongside euler and dpmpp in any KSampler node. jkass_quality is a second-order Heun method that costs about 2x compute; jkass_fast is first-order Euler for iterating on ideas. For a finished render, the README's default pick is jkass_quality with sgm_uniform.
The inputs that matter
You set five things most of the time and leave the rest alone:
- steps - 80 default. README's sweet spot is 80–100; the code comments note that above ~120 you start over-processing.
- cfg - 4.0–4.5 for audio, not the 7 you'd use on SDXL. Higher is not better here.
- sampler_name / scheduler -
jkass_qualityandsgm_uniformare the house recommendation. - vae - connect it (highly recommended) and you get the
audiooutput; the pack decodes the latent for you. Without a VAE theaudiooutput has nothing to produce. - anti_autotune_strength - 0.25–0.35 for vocals, 0.0–0.15 for instruments. This is the knob for the "AI voice" problem.
Everything else has sane defaults and a tooltip in the node. The noise_ema, noise_norm_threshold, frequency_damping, temporal_smoothing, and beat_stability floats are the anti-artifact tuning rack - start from the defaults (0.08 / 2.0 / 0.18 / 0.10 / 0.5) and only nudge one at a time.
One genuinely cool feature is quality check discovery: flip enable_quality_check and it renders several step counts, scores each with the same composite metric as the pack's AudioQualityEvaluator, and picks the best. Important caveat from the author: scores are comparative only. A 0.65 on Dubstep is often excellent - electronic music naturally scores lower than acoustic. Compare within the same style, not across genres.
Installing
ComfyUI Manager (search "JK AceStep Nodes"), or the classic way:
cd ComfyUI/custom_nodes
git clone https://github.com/jeankassio/JK-AceStep-Nodes.git
Restart ComfyUI. Requirements are torch, numpy, tqdm, and librosa - librosa is the only heavyweight, and it's what powers the quality metrics. You also need the ACE-Step model itself loaded in ComfyUI, and if you want the vocoder path to work you must drop diffusion_pytorch_model.safetensors and config.json from the ACE-Step music_vocoder into JK-AceStep-Nodes/vocoder/. Without those files, use_vocoder silently generates without the vocoder.
Where people get burned
- Enabling every optimization at once (dynamic CFG + latent norm + all the smoothing) - the README explicitly warns this causes word cutting/stuttering. Start stock, add features one at a time.
- Expecting a quality score to be comparable across genres. It isn't.
- Forgetting the VAE. No VAE, no audio out - just a latent you can't hear.
It's not a magic bullet: this is a niche pack (the author's announcement thread on r/comfyui is small), so expect to tune per prompt. But it's the one sampler node you want when ACE-Step vocals sound like T-Pain after a bad day.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 8020–200 | — |
| cfg | FLOAT | 4.01–20 | — |
| sampler_name | COMBO | 46 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +40 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent | LATENT | — | |
| denoise | FLOAT | 1.000–1 | — |
| use_apgopt | BOOLEAN | false | — |
| use_cfg_rescaleopt | BOOLEAN | false | — |
| cfg_rescale_multiplieropt | FLOAT | 0.250–1 | — |
| enable_dynamic_cfgopt | BOOLEAN | true | — |
| enable_latent_normalizationopt | BOOLEAN | true | — |
| use_vocoderopt | BOOLEAN | false | — |
| noise_emaopt | FLOAT | 0.080–0.5 | EMA smoothing of noise prediction; 0.08 optimal for 8-channel latents |
| noise_norm_thresholdopt | FLOAT | 2.00–5 | L2 norm clamp vs input; 2.0 for clean audio without artifacts |
| anti_autotune_strengthopt | FLOAT | 0.150–1 | Smooth spectral quantization artifacts. 0.15 default for natural vocals |
| frequency_dampingopt | FLOAT | 0.180–2 | Damps higher frequencies to remove metallic sound - 0.18 recommended |
| temporal_smoothingopt | FLOAT | 0.100–0.5 | Temporal smoothing to prevent stuttering - 0.10 for natural flow |
| beat_stabilityopt | FLOAT | 0.500–1 | Rhythm stability - 0.5 prevents beat dropout without compression |
| enable_quality_checkopt | BOOLEAN | false | — |
| quality_check_targetopt | FLOAT | 0.850.5–1 | — |
| quality_check_minopt | INT | 4020–100 | — |
| quality_check_maxopt | INT | 15050–300 | — |
| quality_check_intervalopt | INT | 51–20 | — |
| vaeopt | VAE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| audio | AUDIO | — |