Ultra Tools Audio Fade
Kill the click at the start of your generated audio with a 0.15s fade
- audio
- audio
The problem it exists for
Generated audio very often starts mid-waveform. The model hands you a clip whose first sample is at some arbitrary amplitude, and your speakers translate that discontinuity into a click - a pop, a tick, a tiny "thump" before anything musical happens. It's the audio equivalent of a video that starts on a half-frame. Nobody notices it in isolation and everybody notices it when they string ten clips together.
The fix has been known for fifty years: ramp the gain up from zero over a couple hundred milliseconds. Ultra Tools Audio Fade is that ramp, as a node you drop between whatever made the audio and whatever consumes it. Author's own framing is blunt about it - the node was built for the start-of-audio pop you get out of models like MiniMax H3.
Worth saying plainly: this is a utility, not a capability. It doesn't generate, repair or master anything. It multiplies your waveform by a curve and hands it back.
What it does to the waveform
The mechanism is a straight gain envelope. The node builds a ramp from 0 to 1 the length of your requested fade, multiplies the front (and optionally the back) of the waveform by it, and returns a new tensor. Your original audio is untouched, which matters in a graph: you can keep a clean copy wired to something else and only fade the branch that goes into the video assembly.
The four curves are not cosmetic:
- smooth (default) - a raised cosine. It starts and ends at zero slope, so there's no derivative jump where the fade meets full volume. This is the one that sounds least like a fade.
- linear - a straight line. Fine, slightly more audible as a "swell."
- equal_power -
sin(t·π/2). Louder through the first half; the right pick if you're crossfading something rather than just de-clicking. - exponential - a strong curve that stays near-silent far longer, then rushes up. Good for a hard, sudden-entrance feel; overkill for pop removal.
Length, sample rate and sync are preserved exactly - one sample in, one sample out, same rate - so an AUDIO wire feeding a video-latent or a save node keeps its alignment.
The inputs
Three knobs and the wire.
fade_in_seconds - default 0.15, range 0–10. 0.15s is a sensible de-click default; push toward 0.25–0.4 if the pop survives, and stop when you start hearing the music creep in.
fade_out_seconds - default 0. You almost always want to raise this for clips that will loop or cut. Same range.
curve - smooth, linear, equal_power, exponential, as above.
Output is a single audio of type AUDIO - identical shape to the input, ready for a Save Audio node, a video combine, whatever was downstream.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Yamoon-jjang/comfyui-Ultra-Tools
Or via ComfyUI Manager, searching Ultra Tools. Restart fully, Ctrl+F5 the browser. This is the most install-friendly node in the pack: no models, no downloads, and requirements.txt installs literally nothing - just torch, which you have.
Coming from the older standalone comfyui-Ultra-* packs? Delete those folders. Same class names, different pack, confusing errors.
Where people get burned
The fade eats your whole clip. If fade_in_seconds + fade_out_seconds exceeds the clip length, the node doesn't fail and doesn't warn - it proportionally shrinks both fades to fill the clip exactly, keeping the ratio you asked for. That's graceful, but it means a 0.3s clip with a 10s fade request comes back entirely faded and it looks like the node is broken. Shorten the request.
The wire type. This takes a ComfyUI AUDIO object, which is a dict holding a waveform tensor and a sample rate. A file path string, or an audio file loaded by some node that decided to return a path, will fail with a validation error about the expected AUDIO dictionary. Use a real Load Audio or the audio output of your generation node.
A pop that isn't a pop. If the click is in the middle of the clip, it's a generation artefact, not a boundary discontinuity, and no fade will remove it. Similarly, if the noise floor is loud at sample zero because the model generated a transient, a short smooth fade will soften it but a longer one is the honest answer.
Long clips, no cost. This is CPU/GPU tensor multiplication on an existing tensor. It won't be your bottleneck, and there's no reason to avoid putting two in a graph if you want different curves on different branches.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| fade_in_seconds | FLOAT | 0.150–10 | — |
| fade_out_seconds | FLOAT | 0.000–10 | — |
| curve | COMBO | smooth | 4 options: smooth, linear, equal_power, exponential |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |