Qwen3-TTS Audio Post-Process ✨
The two-second fix for TTS pops and sample-rate mismatches
- audio
- AUDIO
You know that little "tick" or click at the very start of generated speech? It's not you, it's the model - TTS audio frequently starts with a hard transient because the first samples come out of the decoder at full amplitude. The pack's own FAQ calls it out: generated audio has noise at the beginning, and the fix is a short fade-in. This node is that fix, plus a sample-rate converter, in one small package.
Qwen3TTSAudioPostProcess is the least glamorous node in the pack and easily the most likely to be in your final workflow, because nearly every TTS chain wants what it does.
What it does
Three jobs, all cheap:
fade_in_ms(default 10) - ramps the volume from silence up over the first N milliseconds. Set this to 10–20 and the startup click is gone. This is the whole reason most people add the node.fade_out_ms(default 50) - the mirror image at the end, which softens the abrupt stop that can also thump on export.target_sample_rate- resamples to one of 24000, 44100, or 48000 (default 44100). Qwen3-TTS generates at 24kHz; if you're dropping the result into a video edit, 44.1k or 48k is what the timeline expects.
Input is a single audio (the AUDIO output of any generation node), output is AUDIO again, so it drops into the graph wherever you like - after a Voice Clone, before a preview or save, or after you've spliced things together.
How it works
It's pure torch, no model involved. Fade-in multiplies the first N samples by a linear ramp from 0 to 1; fade-out does the inverse on the tail. Resampling is a linear interpolation to the new sample count. That's the whole mechanism, which is why it's instant and why it works on any AUDIO - it doesn't care what produced the sound. It does mean the fade is linear rather than a fancier curve, but at 10–50ms nobody's ear will tell the difference.
Fitting it into a workflow
Qwen3TTSLoader ─> Qwen3TTSVoiceClone ─> Qwen3TTSAudioPostProcess ─> save / preview / lip-sync
fade_in_ms=10, target_sample_rate=48000
If the audio is heading into a talking-head or lip-sync step later, that post-process pass (fade + resample) is also a small form of insurance: downstream audio-driven tools are less surprised by a clean 48k mono file than by a raw 24k one with edge transients.
Gotchas
- It only cleans edges. Fade-in won't fix noise inside the audio, only the click at the boundary. If the body of the clip is hissy, that's a different problem this node won't touch.
- Defaults are sensible, not sacred. 10ms fade-in is the README's suggestion; if you still hear a click, nudge to 20. Fade-out at 50ms is fine for speech but you might want it shorter if you're cutting right up to another sound.
- No extra install beyond the pack itself - this node uses only what ComfyUI already has, so it's one of the few here that can't drag in a dependency conflict.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| fade_in_ms | INT | 10 | — |
| fade_out_ms | INT | 50 | — |
| target_sample_rate | COMBO | 44100 | 3 options: 24000, 44100, 48000 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |