Flex Audio Time Stretch β‘π ‘π π £π
Stretch or compress audio without pitch-shifting, reactively
- audio
- opt_feature
- AUDIO
Time-stretching changes how long a clip lasts without changing its pitch - slow a voice down and it still sounds like a voice, not a demon growl, which is the whole point versus just resampling. This node does that, and being one of the pack's "Flex" nodes, the stretch rate itself can be modulated by an audio, motion, or other reactive signal instead of staying fixed for the whole clip.
How it works
Feed it audio, set a rate, and it stretches (rate > 1) or compresses (rate < 1) the timing. Because the pack's Flex nodes are typically built to sync with a per-frame video pipeline rather than operate on audio in isolation, this node also takes a target_fps - it chunks the audio processing to align with a given frame rate, which matters if you're driving the stretch rate from a FEATURE curve that itself has one value per video frame.
The inputs and outputs that matter
audio(AUDIO, required) - your input clip.rate(default 1, range 0.5β2) - the time-stretch factor. Below 1 speeds it up (shorter output), above 1 slows it down (longer output). At 1, output should match input length.target_fps(default 3, range 1β60) - how the audio processing is chunked to align with a video frame rate. If you're syncing this to a video sequence elsewhere in your workflow, set it to match that sequence's actual fps.feature_param- only one real choice here per the schema:rate. This is the field that lets an incomingFEATUREsignal drive the stretch amount dynamically instead of staying fixed.feature_mode(relative/absolute, defaultrelative) - relative modulation is centered around your setrate; absolute scales from zero to the max regardless of whatrateis set to.strength,feature_threshold,opt_feature- the standard Flex trio for overall modulation intensity, a minimum-feature gate, and the reactive signal input itself.- Output - a single
AUDIO.
How to install it
Via ComfyUI Manager: search "RyanOnTheInside," install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt
then restart ComfyUI. No model downloads for this node - it's DSP on audio you already have.
Common issues & troubleshooting
Output audio length doesn't match what you expected. Remember rate above 1 makes the clip longer (slower playback), not shorter - it's easy to have the direction backwards in your head if you're coming from a "speed" mental model rather than a "stretch factor" one.
Reactive modulation feels out of sync with your video. Check target_fps actually matches the frame rate of whatever video sequence you're syncing this audio to. A mismatch here means the audio processing is chunked at the wrong granularity relative to your feature curve, which shows up as timing drift over a longer clip even if the first second or two looks fine.
Rate modulation does nothing even with a feature wired in. feature_param needs to be set - since rate is effectively the only real option in this node's dropdown, if modulation isn't happening the most likely culprit is the field defaulting to unset/None rather than the feature signal itself being wrong.
Audio sounds warped or artifacty at extreme rates. Time-stretching algorithms generally degrade toward the edges of their supported range - this node caps rate at 0.5β2 for a reason, and pushing close to those limits is where you're most likely to hear artifacts, especially on complex mixes rather than simple tones or speech.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| strength | FLOAT | 1.000β1 | Overall strength of the effect (0.0 to 1.0) |
| feature_threshold | FLOAT | 0.000β1 | Minimum feature value to apply the effect (0.0 to 1.0) |
| feature_param | COMBO | Parameter to be modulated by the feature | |
| feature_mode | COMBO | relative | How the feature modulates the parameter ('relative' or 'absolute') |
| audio | AUDIO | Input audio to be processed | |
| target_fps | FLOAT | 31β60 | Target frames per second for processing (1.0 to 60.0 fps) |
| rate | FLOAT | 1.000.5β2 | Time stretching factor (0.5 to 2.0) |
| opt_featureopt | FEATURE | Optional feature input for parameter modulation |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | β |