ComfyUI Node

(SP) Limiter

The loudness safety net that uses your GPU

By c0ffymachyne·Created 2 years ago·Updated about a year ago· 22
(SP) Limiter
  • audio_input
  • audio
mode
threshold100.0
slope100.0
release_ms100.0

A limiter is the "never let it clip, ever" insurance policy at the end of a chain, and (SP) Limiter is this pack's version - with the unusual twist that it's genuinely GPU-accelerated. The README calls it "Gpu limiter - experimental," and it earns that label: instead of running the limiter as a Python loop on CPU, it compiles raw CUDA kernels at runtime (via CuPy/NVRTC) and runs the heavy lifting in parallel on your GPU. For long clips that's a real speedup, and it's the most technically interesting node in the pack.

There's a catch baked into that design: because the Limiter imports CuPy kernels at startup, and because nodes.py imports every node in the pack at load, a broken CuPy/CUDA setup takes down the entire pack, not just this node. The pinned dependency is cupy-cuda11x, and the author develops on CUDA 11.8 with an RTX 3090. If the pack won't load with a cupy-related error, this node is why - match your CUDA version to the wheel and everything comes back.

The inputs

  • mode - four flavors: downward-upward (compresses above and below the threshold - the most "mastering" choice), downward (only peaks above threshold get tamed), soft-clipper and hard-clipper (waveshaping curves that fold the tops off - fast, aggressive, and great for punch if you like the tone). Default is downward.
  • threshold - 0–100, in percent, default 100. At 100 nothing gets touched; drop toward 80–90 and the loudest material starts getting caught. This is your main knob.
  • slope - 0–100 percent, default 100, how hard the gain reduction kicks in above the threshold. High slope = aggressive catch.
  • release_ms - 0–1000 ms, default 100, how fast the gain recovers after the loud part passes. Longer release = smoother but flatter; shorter = punchier but can pump.

One audio output, and as with every processor in the pack, the result is re-normalized to the input's LUFS so limiting won't silently drop your overall volume.

Where people get burned

  • It's experimental. The CUDA kernel approach is clever and fast, but it means behavior can differ by GPU/driver, and the node assumes a working CUDA runtime. On a CPU-only machine or a mismatched CUDA version, this is the node that breaks the whole pack.
  • The percent-based threshold/slope aren't dB values. 100 = no-op, and everything meaningful happens in the top 10-20% of the range.
  • It's a limiter, not a compressor - you're catching peaks and preventing clipping, not sculpting dynamics. Pair it after (SP) Normalizer (lufs mode) and before export for the classic "loud, clean, never clips" finishing move.

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 - critically cupy-cuda11x - are installed by Manager or with pip install -r requirements.txt. If you're on CUDA 12+, you may need to swap the CuPy wheel to your matching cupy-cuda12x in the pack's requirements.txt before it loads. That single edit is the fix for 90% of the pack's "won't load" reports.

CategorySignal Processing

Inputs (5)

NameTypeDefaultDescription
audio_inputAUDIO
modeCOMBO4 options: downward-upward, downward, soft-clipper, hard-clipper
thresholdFLOAT100.00–100
slopeFLOAT100.00–100
release_msFLOAT100.00–1000

Outputs (1)

NameTypeDescription
audioAUDIO