v0.1.7
ace-step/ACE-Step-1.5v0.1.7Apr 24, 2026by ChuxiJ
AI Summary
This release introduces the DCW sampler for improved SNR compensation across all model paths and adds first-class support for community VAEs like ScragVAE. It also includes various performance optimizations for Apple Silicon and fixes for sampling logic and Gradio UI interactions.
Key Highlights
- DCW (Differential Correction in Wavelet domain) sampler with full UI integration
- Swap-in support for community VAEs (ScragVAE registered)
- MLX VAE decode chunk size configuration for lower memory usage
- `infer_steps` now honored on turbo/xl_turbo samplers
- User preferences persisted across sessions via localStorage
New Features
- DCW sampler hook with default-on configuration
- Community VAE swap-in support
- User preferences persistence via localStorage
- `ACESTEP_CHECKPOINTS_DIR` environment variable for shared storage
- MLX VAE decode chunk size auto-tuning
Full Release Notes
## ๐๏ธ DCW (Differential Correction in Wavelet domain)
The headline of this release: we ship **DCW**, a training-free, sampler-side correction from *Elucidating the SNR-t Bias of Diffusion Probabilistic Models* (CVPR 2026, arXiv:[2604.16044](https://arxiv.org/abs/2604.16044), reference: [AMAP-ML/DCW](https://github.com/AMAP-ML/DCW)).
DCW decomposes each DiT sampler step's latent and its x0-reconstruction via a 1-D DWT along the time axis, then pushes the low / high frequency bands away from the reconstruction per-band. It compensates for the drift between training and inference SNR with negligible compute and no retraining.
**Defaults** (tuned via grid search on the pure-DiT path):
- `dcw_enabled = True`
- `dcw_mode = "double"`, `dcw_scaler = 0.05`, `dcw_high_scaler = 0.02`
- `dcw_wavelet = "haar"`
**Coverage**: wired into every sampler path โ `base`, `sft`, `turbo`, `xl_base`, `xl_sft`, `xl_turbo`, and the **MLX** Apple Silicon path (native Haar + `pytorch_wavelets` bridge for non-Haar bases). Full Gradio UI controls under **Advanced DiT โ ๐งช DCW**.
Quick API usage:
```python
params = GenerationParams(
caption="mellow lo-fi hiphop with jazzy piano",
dcw_enabled=True, dcw_mode="double",
dcw_scaler=0.05, dcw_high_scaler=0.02,
)
```
See [docs/en/DCW.md](https://github.com/ace-step/ACE-Step-1.5/blob/v0.1.7/docs/en/DCW.md) for details, mode reference, and tuning guidance.
## ๐๏ธ Swap-in support for community VAEs (ScragVAE)
This release also adds **first-class support for community-finetuned VAEs**, with the first registered variant being [**ScragVAE**](https://huggingface.co/scragnog/Ace-Step-1.5-ScragVAE) (MIT, by [@scragnog](https://huggingface.co/scragnog)) โ a fine-tune of `ACE-Step/ace-step-v1.5-1d-vae-stable-audio-format`.
Three ways to pick which VAE to load (precedence: explicit param > env var > default `"official"`):
1. **Gradio**: new **VAE** dropdown next to the model-variant selector under Service Configuration.
2. **Environment**: `export ACESTEP_VAE_CHECKPOINT=scragvae` (or an absolute path to a local Oobleck VAE directory). In Gradio, the env var seeds the dropdown's initial value on first launch.
3. **API**: `dit_handler.initialize_service(..., vae_checkpoint="scragvae")`.
Weights are **not vendored** โ they're auto-downloaded into `<checkpoints>/scragvae/` on first use via the existing HuggingFace โ ModelScope smart-download path (~640 MB). The MLX (Apple Silicon) path picks up the alternate VAE for free, since `MLXAutoEncoderOobleck.from_pytorch_config(self.vae)` rebuilds itself from whichever PyTorch VAE just loaded.
See [docs/en/ALT_VAE.md](https://github.com/ace-step/ACE-Step-1.5/blob/v0.1.7/docs/en/ALT_VAE.md) for the full table, env-var contract, and how to register a new community VAE.
---
### โจ Features
- DCW sampler hook, with full Gradio UI, MLX support, and default-on ([#1120](https://github.com/ace-step/ACE-Step-1.5/pull/1120))
- Swap-in support for community VAEs (ScragVAE registered) โ env var, Gradio dropdown, API kwarg ([#1138](https://github.com/ace-step/ACE-Step-1.5/issues/1138), [#1139](https://github.com/ace-step/ACE-Step-1.5/pull/1139))
- User preferences persisted across sessions via localStorage ([#1013](https://github.com/ace-step/ACE-Step-1.5/pull/1013))
- `ACESTEP_CHECKPOINTS_DIR` env var for shared model storage across installations ([#1056](https://github.com/ace-step/ACE-Step-1.5/pull/1056), [#1057](https://github.com/ace-step/ACE-Step-1.5/pull/1057))
- MLX VAE decode chunk size configurable with auto-tuning, lower peak memory on Apple Silicon ([#1042](https://github.com/ace-step/ACE-Step-1.5/pull/1042), [#1059](https://github.com/ace-step/ACE-Step-1.5/pull/1059))
- Portuguese (pt-BR) i18n translation ([#1087](https://github.com/ace-step/ACE-Step-1.5/pull/1087))
- Gradio A/B toggle for legacy LM CFG uncond prompt format
### ๐ Fixes โ sampling / models
- **`infer_steps` now honoured on `turbo` / `xl_turbo`** โ previously silently clamped to 8 steps
- **Handler kwargs no longer silently swallowed** on `base` / `turbo` / `xl_turbo`
- **LM CFG unconditional prompt aligned with training dropout format** ([#1127](https://github.com/ace-step/ACE-Step-1.5/pull/1127)), including the missing `\n\n` separator after `</think>` in CFG codes prompt ([#1128](https://github.com/ace-step/ACE-Step-1.5/pull/1128)) and correct `"<think>\n</think>"` rendering of empty reasoning for 1.5
### ๐ Fixes โ cover / remix / repaint flows
- Cover / repaint tasks with audio codes but no `src_audio` now work ([#1036](https://github.com/ace-step/ACE-Step-1.5/pull/1036))
- Clear error when cover / repaint / extract lack source audio ([#1035](https://github.com/ace-step/ACE-Step-1.5/pull/1035))
- Duration auto-locked to `src_audio` for cover / repaint / lego / extract ([#1031](https://github.com/ace-step/ACE-Step-1.5/pull/1031), [#1033](https://github.com/ace-step/ACE-Step-1.5/pull/1033))
- AAC / M4A source audio supported in remix / extract ([#1028](https://github.com/ace-step/ACE-Step-1.5/pull/1028))
### ๐ Fixes โ Gradio / UI
- LM Codes Hints textbox stays editable so load-JSON can import codes
- `restore_preferences` no longer crashes on empty values ([#1030](https://github.com/ace-step/ACE-Step-1.5/pull/1030))
- MP3 child control visibility syncs correctly on preference restore ([#1026](https://github.com/ace-step/ACE-Step-1.5/pull/1026))
- Dropdown values validated against choices; ffmpeg `-abr` flag removed ([#1070](https://github.com/ace-step/ACE-Step-1.5/pull/1070))
### ๐ Fixes โ other
- `GenerationParams` no longer crashes when `None` passed for numeric fields ([#1027](https://github.com/ace-step/ACE-Step-1.5/pull/1027))
- Auto-calculation allowed for metadata params in API (duration / bpm) ([#1023](https://github.com/ace-step/ACE-Step-1.5/pull/1023))
- macOS compatibility: Bash 4.0+ uppercase syntax replaced in update scripts ([#1061](https://github.com/ace-step/ACE-Step-1.5/pull/1061))
- Triton-without-torch now produces a clearer error ([#1110](https://github.com/ace-step/ACE-Step-1.5/pull/1110))
- Loguru printf specifiers fixed ([#1043](https://github.com/ace-step/ACE-Step-1.5/pull/1043))
- MLX VAE stride-safety env clamp raised to 192
### ๐ Docs / community
- Clarified `use_cot_lyrics` is a CLI-layer gate ([#1106](https://github.com/ace-step/ACE-Step-1.5/pull/1106))
- DCW docs under `docs/en/DCW.md`
- Alt-VAE docs under `docs/en/ALT_VAE.md`
- Added Majik's Music Studio to Partners ([#1040](https://github.com/ace-step/ACE-Step-1.5/pull/1040))
---
**Full changelog**: https://github.com/ace-step/ACE-Step-1.5/compare/v0.1.6...v0.1.7