Nodes/ꘇ Genereti/ꘇ mod.filter
ComfyUI Node

ꘇ mod.filter

The one node that makes a synth sound like a synth

By languel·Created about a month ago·Updated 3 days ago· 1
ꘇ mod.filter
  • input
  • audio
◄mode▾►
◄cutoff1800.00►
◄resonance0.70►

ꘇ mod.filter is a BiquadFilter on the Genereti audio bus: pick lowpass, highpass, bandpass or notch, then set cutoff and resonance. Two knobs, and it's the difference between a raw oscillator and something that sounds like an instrument.

What it is

Genereti ships a live Web Audio patching layer for ComfyUI - mod.* nodes connected by GENERETI_AUDIO_BUS routes, running in the browser tab rather than Comfy's Python graph, with chop.* control signals available to drive their parameters. mod.synth has its own filter baked into each voice, so why does this node exist? Because per-voice filtering is a synthesis decision, while a filter in the chain is an arrangement decision - you can sweep a whole drum-and-synth mix, or filter a delay's output so its repeats get progressively darker.

If you've used a resonant filter before, you'll know the sound. If you haven't: lowpass with a bit of resonance is the classic "wooo" of electronic music, and it's also the safest way to tame a harsh patch without touching levels.

How it works

This maps directly onto a Web Audio biquad, so the parameters mean exactly what they mean in the standard:

  • mode picks the biquad's type - lowpass, highpass, bandpass, notch. Setting it changes the filter type live; no restart needed.
  • cutoff is the corner frequency in Hz.
  • resonance becomes the biquad's Q - up to 12, which is plenty to get a sharp, whistly peak at the cutoff.

Changes ramp over about 15 ms rather than jumping, so sweeping the cutoff while audio runs sounds smooth instead of stepping. The filter module is built once and reused; it isn't rebuilt per frame.

Because cutoff is just a parameter, it's a prime target for automation: convert the cutoff widget to an input and drive it from chop.lfo or chop.expression, and you have the filter sweep that most mod.synth patches are missing.

The inputs and outputs that matter

  • input - the GENERETI_AUDIO_BUS to filter. Anything in the family: synth, drum kit, delay, gain, another filter.
  • mode - lowpass / highpass / bandpass / notch. Start with lowpass; it's what 90% of patches want.
  • cutoff - 20 to 18000 Hz, default 1800. The default is already doing something audible to a bright patch; drop it to 400 for a muffled, lo-fi feel.
  • resonance - 0.1 to 12, default 0.7. Past ~5 it starts to whistle at the corner, which is either the point or a problem, depending on what you wanted.

One output: audio. Typical chain: mod.sequence → mod.synth → mod.filter → mod.delay → mod.mixer → mod.output. Both ends of those arrows must be bus sockets; a CHOP output like notes won't connect here.

Install

Manager → search Genereti, or from your ComfyUI folder:

git clone https://github.com/languel/genereti.git custom_nodes/genereti
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt

Restart ComfyUI, refresh the browser page. The install is small - requirements.txt is one line (comfyui-frontend-package>=1.53.6) and everything else the pack uses is already in ComfyUI. No models, no model server, no extra node packs for the audio demos. Comfy ≥ 0.38.2 and Python ≥ 3.11. Workflows → Genereti → ꘇ-Modular-Audio has a filter pre-wired if you want a known-good starting point.

Common issues

Nothing to filter. Queueing a mod.* node never produces audio; it stores a route description. Start the downstream mod.output first, then tweak the cutoff - live editing is the whole point of these nodes.

Cutoff seems to do nothing. Two real causes. Either the filter is placed after something that already removed those frequencies, or you're listening to a bypassed path - recall that a module with no reachable path to an output gets disposed, so a filter wired in parallel to nothing is silence, not a subtle difference. Also check mode before blaming the knob: a highpass at 1800 Hz on a bass patch will genuinely delete the signal you're listening for.

Resonance sounds harsh or explodes. That's what Q 12 does at a high cutoff. Back it off. The output node's compressor will soften it, but it won't save you from a resonant peak sitting on top of the fundamental.

Feedback loops get refused. If you're routing the filter output back into itself, the browser patch throws "Audio cable cycles are unsupported; use audio.delay for feedback" - the delay node is the sanctioned way to get that effect, with feedback capped at 0.85.

And the standing caveat for this pack: a single-maintainer MIT alpha (Liuboto, v0.1.4), self-described as "super alpha - early classroom testing", with an explicit warning to back up workflows before updating.

CategoryGenereti / Modular audio

Inputs (4)

NameTypeDefaultDescription
inputGENERETI_AUDIO_BUS—
modeCOMBO4 options: lowpass, highpass, bandpass, notch
cutoffFLOAT1800.0020–18000—
resonanceFLOAT0.700.1–12—

Outputs (1)

NameTypeDescription
audioGENERETI_AUDIO_BUS—