Nodes/OmniNodes/Audio Sidechain Duck πŸ¦†
ComfyUI Node

Audio Sidechain Duck πŸ¦†

The 'Turn the Music Down Under the Voice' Node

By TensorVizionΒ·Created 3 months agoΒ·Updated about 8 hours agoΒ· 0
Audio Sidechain Duck πŸ¦†
  • target_audio
  • trigger_audio
  • audio
  • summary
β—„duck_amount0.70β–Ί
β—„threshold0.10β–Ί
β—„attack_ms15.0β–Ί
β—„release_ms200β–Ί

Every video editor knows the move: when the voiceover starts talking, the background music dips down, then swells back up when the talking stops. That's sidechain ducking, and you've been doing it by hand with automation curves. Audio Sidechain Duck does it automatically in your graph: it watches the loudness of one track (trigger_audio) and lowers the volume of another (target_audio) whenever the trigger is active. The classic pairing is exactly the one above - music bed ducked under a voiceover - or a pad that pumps every time a kick drum hits.

How it works

It's a classic compressor chain, implemented as a pure NumPy envelope follower. The trigger's amplitude envelope is tracked, and wherever it's loud, an inverse gain reduction is applied to the target. Three controls shape the behavior, and these are the ones you'll actually tune:

  • duck_amount (0–1, default 0.7) - how much gain is removed at full trigger loudness. 0.7 is "noticeably ducked"; push toward 1 for a dramatic pump.
  • threshold (0–1, default 0.1) - the trigger level below which no ducking happens. Too low and quiet background noise in the trigger ducks your music unnecessarily; too high and the voice never engages the duck.
  • attack_ms / release_ms - how fast the duck drops in and recovers. Fast attack (default 15ms) catches the word onset cleanly; slow release (default 200ms) makes the music swell back naturally instead of popping. Release is the sound-design knob - a fast release gives you the choppy "pumping" EDM effect, a slow one sounds transparent.

The output is the ducked audio plus a summary string. Note the asymmetry: the duck applies to target_audio, but the trigger itself is not modified - you feed the voice in as trigger and it stays untouched on its own wire.

The honest review

This is a genuinely useful node and it does the one job sidechain compression exists for, without pulling in a full compressor. The limits: it's stereo-summed gain riding, so there's no look-ahead and no per-frequency ducking, and on very fast, dense trigger material (double-time kick drums) the envelope follower can lag enough to sound sloppy - nudge attack down if you hear that.

The trap is the threshold. Because trigger amplitude is measured on a 0–1 scale and generators output at wildly different levels, a track recorded quiet may never cross a 0.1 threshold and nothing will ever duck, which reads as a broken node. If the duck isn't engaging, lower the threshold first - that's the first thing to check, and it's the most common "why is nothing happening" cause.

Install

ComfyUI Manager β†’ search OmniNodes, or:

cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes

Restart ComfyUI; it's under TensorVizion/Audio. Pure NumPy, no extra dependencies. If you've ever hand-automated a music dip under a voice, this is the node that retires that chore.

CategoryTensorVizion/Audio

Inputs (6)

NameTypeDefaultDescription
target_audioAUDIOβ€”
trigger_audioAUDIOβ€”
duck_amountFLOAT0.700–1β€”
thresholdFLOAT0.100–1β€”
attack_msFLOAT15.00.1–500β€”
release_msFLOAT2001–2000β€”

Outputs (2)

NameTypeDescription
audioAUDIOβ€”
summarySTRINGβ€”