Qwen3-TTS Audio Speed ⚡
Speed up a voice without turning it into Alvin and the Chipmunks
- audio
- AUDIO
Changing how fast a voice talks is not one operation - there are at least three, and they sound completely different. Speed it up by keeping the pitch and you get a faster, still-natural speaker. Speed it up by resampling and the pitch rises too, and suddenly you have a cartoon character. This node gives you all three, and the pack's maintainers made their recommendation pretty explicit in the option names.
Qwen3TTSAudioSpeed takes any AUDIO, stretches or compresses it by a speed factor, and hands back AUDIO. Zero model involvement - it's a utility you bolt onto the end of a TTS chain, most often to fit a narration into a fixed video length or to punch up a line.
The three methods, and which to use
FFmpeg (atempo) - Best for Speech(default) - pitch-preserving time stretch via FFmpeg'satempofilter. This is the one for voices: faster or slower, same pitch, no "chipmunk" effect. It's the default and usually the right answer.Time Stretch (Librosa)- also pitch-preserving, but done withlibrosa.effects.time_stretchinstead. Quality is controlled by then_fftsetting (2048/4096/8192, default 4096); bigger FFT means better low-frequency resolution but slower processing. You generally only reach for this if FFmpeg isn't available or you want finer control.Resampling (Pitch Shift)- linear interpolation to a new sample count. Pitch shifts with speed: slower = deeper, faster = squeakier. Usually wrong for a natural voice, occasionally exactly right when you want a comic effect or a demon voice.
There's also channel_mode (Keep Original / Force Mono / Force Stereo) for when the downstream stage needs a specific channel layout.
How it works
If speed is 1.0 it returns the audio untouched (a nice freebie - you can leave it in the graph and never worry). Otherwise:
- FFmpeg path writes the audio to a temp wav and chains
atempofilters. Becauseatempoonly supports 0.5×–2.0× per application, the node loops for bigger changes - 4× becomes 2.0 then 2.0 again. Ifffmpeg-pythonisn't importable, it silently falls back to Librosa. - Librosa path runs
time_stretchwith yourn_fft. - Resampling path uses torch
F.interpolate.
If even Librosa is missing, it degrades to resampling rather than crashing. Graceful, if not great.
Fitting it into a workflow
Qwen3TTSLoader ─> Qwen3TTSVoiceClone ─> Qwen3TTSAudioSpeed (speed=1.25, FFmpeg)
│
▼
Qwen3TTSAudioPostProcess ─> save
Typical use: you generated a take at a comfortable pace, the video is 30 seconds, the narration is 34 - drop speed to ~1.13 and re-render instead of regenerating speech and gambling on the timing.
Gotchas
- FFmpeg needs to exist.
ffmpeg-pythonis just a Python wrapper; the actualffmpegbinary has to be on your system PATH or the atempo path fails and it falls back to Librosa. On Windows, that means installing FFmpeg separately even though the pip package is present. - The pitch-stretch tradeoff is real. Push
speedmuch past ~1.3–1.5 with atempo and speech starts to sound rushed and unnatural. If you need 2×, you'll probably want to re-generate at a different instruct instead. - Same pack-wide install as everything else here: clone the repo,
pip install -r requirements.txt(which includesffmpeg-python), restart ComfyUI.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| speed | FLOAT | 1.00.1–10 | — |
| method | COMBO | FFmpeg (atempo) - Best for Speech | 3 options: FFmpeg (atempo) - Best for Speech, Time Stretch (Librosa), Resampling (Pitch Shift) |
| channel_mode | COMBO | Keep Original | 3 options: Keep Original, Force Mono, Force Stereo |
| n_fft | COMBO | 4096 | 3 options: 2048, 4096, 8192 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |