ComfyUI Node

(SP) Mix Down

Turn a pile of audio lists into one track

By c0ffymachyne·Created 2 years ago·Updated about a year ago· 22
(SP) Mix Down
  • audio_inputs
  • gain_factors
  • mixed_audio

Every audio pack eventually needs the glue node, and (SP) Mix Down is it. Its one job: take a list of audio clips and sum them into a single mixed track, with an optional per-clip volume control. In this pack it exists mostly to catch the AUDIO_LIST output of (SP) PadSynth Choir - the choir generates one note per list entry, and this is how you turn those notes into one playable chord.

It's more careful than a naive "add them up" though, and the details matter:

  • Sample rate mismatch is handled. If your clips are at different rates, each one is resampled to match the first input before mixing. You won't get a silent or mangled result from mixing a 44.1 kHz and 48 kHz clip - it just works.
  • Lengths get padded, not cropped. Every clip is zero-padded (silence) up to the longest one, so a short voice note doesn't vanish because a longer pad clipped it off.
  • The mix is LUFS-normalized. This pack's signature move - the summed result is normalized to a loudness target, so stacking several tracks doesn't blow your head off.

The inputs

  • audio_inputs - the AUDIO_LIST to mix. This is a list input, so it's meant to receive the list output from something like PadSynth Choir (or any list-producing node).
  • gain_factors - optional FLOAT_LIST, one volume multiplier (0.0–2.0) per input clip. This is the "volume control per note" the README promises. Empty (the default) means all clips at unity gain - perfectly fine for a quick mix.

One mixed_audio output, ready to feed the rest of the chain.

Where people get tripped up

The classic error is dropping a single AUDIO into audio_inputs - that's a type mismatch, because this socket expects a list. If you have one plain audio clip, you don't need this node at all; and if you're getting "no audio inputs provided," you've handed it an empty list. Also worth knowing: if you provide gain_factors, its length must exactly match the number of input clips, or the node raises an error rather than silently guessing. That's a friendly failure mode, but it means you should double-check your list lengths when wiring them up.

How it fits

PadSynth Choir → Mix Down → Stereo Width → Filter → Convolution Reverb is the whole "generate a pad from nothing" pipeline in this pack, and Mix Down is the hinge. For anything else, it's just a clean way to sum a batch of clips - and given the resampling and padding behavior, it's more forgiving than most.

Installing it

ComfyUI Manager → "Install Custom Nodes" → search ComfyUI Signal Processing, or:

cd ComfyUI/custom_nodes
git clone https://github.com/c0ffymachyne/ComfyUI_SignalProcessing

then restart ComfyUI. Dependencies from requirements.txt (scipy, pyfar, torchaudio, pyloudnorm, cupy-cuda11x, ...) - Manager handles them. The repo is a work in progress; if the pack won't load at all, the pinned cupy-cuda11x is the usual suspect.

CategorySignal Processing

Inputs (2)

NameTypeDefaultDescription
audio_inputsAUDIO_LIST
gain_factorsoptFLOAT_LIST0–2

Outputs (1)

NameTypeDescription
mixed_audioAUDIO