Nodes/ComfyUI-NoiseGen/πŸŽ›οΈ Modulation Matrix
ComfyUI Node

πŸŽ›οΈ Modulation Matrix

A Modular Synth Patchbay in One Node β€” LFOs, Envelopes, and Followers

By eg0pr0xyΒ·Created about a year agoΒ·Updated about a year agoΒ· 1
πŸŽ›οΈ Modulation Matrix
  • audio
  • modulated_audio
  • matrix_report
  • lfo1_value
  • lfo2_value
  • envelope_value
  • follower_value
β—„matrix_size8β–Ί
β—„global_intensity0.50β–Ί
β—„update_rate100β–Ί
β—„amplitude0.80β–Ί
β—„lfo1_frequency2.00β–Ί
β—„lfo1_shapesineβ–Ί
β—„lfo2_frequency5.00β–Ί
β—„lfo2_shapetriangleβ–Ί
β—„envelope_attack0.100β–Ί
β—„envelope_decay0.200β–Ί
β—„envelope_sustain0.50β–Ί
β—„envelope_release1.000β–Ί
β—„modulation_amount_10.00β–Ί
β—„modulation_amount_20.00β–Ί
β—„modulation_amount_30.00β–Ί
β—„modulation_amount_40.00β–Ί
β—„modulation_amount_50.00β–Ί
β—„modulation_amount_60.00β–Ί
β—„modulation_amount_70.00β–Ί
β—„modulation_amount_80.00β–Ί
β—„follower_sensitivity1.0β–Ί
β—„follower_attack0.010β–Ί
β—„follower_release0.100β–Ί
β—„random_rate10.0β–Ί
β—„random_smoothing0.50β–Ί

Most of this pack's nodes are one knob per function. ModulationMatrix is different: it's a single node that acts like a modular synth patchbay, generating control signals - LFOs, an envelope, an audio follower, random - and routing them through up to eight modulation amounts to shape your sound. It's the most "synth-head" node in the pack, and the one that rewards patience.

What it is

You feed it an audio input and it returns modulated_audio - the input processed by whatever the internal matrix is doing. The matrix_size (4, 6, or 8) sets how many routing slots are active, and global_intensity (0–2) scales the whole modulation output. update_rate (1–1000 Hz) sets how often the modulation is recomputed - low rates give you stepped, zippery movement; high rates approach smooth continuous modulation.

The sources are set up through the optional inputs:

  • LFO1 and LFO2 - each with a frequency (0.01–100 Hz) and a shape (sine, triangle, sawtooth, square, random, smooth_random). LFO1 defaults to a 2 Hz sine, LFO2 to a 5 Hz triangle.
  • Envelope - a full ADSR (envelope_attack, decay, sustain, release) that responds to the input's amplitude.
  • Audio follower - follower_sensitivity, follower_attack, follower_release turn the input's loudness into a control signal, so your own audio drives the modulation.
  • Random - random_rate and random_smoothing for stepped or smoothed random values.

How it works

The routing is done by modulation_amount_1 through modulation_amount_8 - each one, βˆ’1 to 1, sets how much of a source feeds a particular modulation target inside the processor. Positive amounts push one way, negative the other. It's a black box in the sense that you can't see exactly which target each slot drives - you sculpt by ear - but the outputs help: besides modulated_audio you get matrix_report (a STRING describing the routing) and live lfo1_value, lfo2_value, envelope_value, and follower_value FLOATs you can display or wire elsewhere.

Honest caveat: the README advertises "chaos" and "step sequencer" sources in addition to these. The current node exposes LFOs, envelope, follower, and random - so treat those as the real feature set, and don't go hunting for inputs that aren't on the node.

The inputs that matter

  • global_intensity - your master dial. Start at 0.5 and build.
  • lfo1_frequency - the single most musical control here. Slow (under 1 Hz) gives long evolving sweeps; up toward 20+ Hz you get tremolo/wobble territory.
  • modulation_amount_1 through 8 - the actual routing. Leave them at 0 and nothing happens; they're the point of the node.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/eg0pr0xy/comfyui_noisegen.git
cd comfyui_noisegen
pip install -r requirements.txt

Windows embedded Python: ComfyUI\python_embeded\python.exe -m pip install -r requirements.txt. Or ComfyUI Manager, search "NoiseGen" / eg0pr0xy. No models, no keys.

Gotchas

The pack rule stands: don't skip the pip install (scipy at module load takes the whole pack down with it). And be patient with this one - with all the amounts at 0, which is the default, it does nothing, and that's confusing the first time you hit it. Turn global_intensity up, nudge an lfo1_frequency in, then start raising the modulation_amount_* slots one at a time so you can actually hear what each route does. Trying to dial all eight at once is how you get a wall of noise you can't untangle.

Category🎡 NoiseGen/Process

Inputs (26)

NameTypeDefaultDescription
audioAUDIOInput audio for modulation processing
matrix_sizeCOMBO83 options: 4, 6, 8
global_intensityFLOAT0.500–2β€”
update_rateFLOAT1001–1000Modulation update rate in Hz
amplitudeFLOAT0.800–2β€”
lfo1_frequencyoptFLOAT2.000.01–100β€”
lfo1_shapeoptCOMBOsine6 options: sine, triangle, sawtooth, square, random, smooth_random
lfo2_frequencyoptFLOAT5.000.01–100β€”
lfo2_shapeoptCOMBOtriangle6 options: sine, triangle, sawtooth, square, random, smooth_random
envelope_attackoptFLOAT0.1000.001–10β€”
envelope_decayoptFLOAT0.2000.001–10β€”
envelope_sustainoptFLOAT0.500–1β€”
envelope_releaseoptFLOAT1.0000.001–10β€”
modulation_amount_1optFLOAT0.00-1–1β€”
modulation_amount_2optFLOAT0.00-1–1β€”
modulation_amount_3optFLOAT0.00-1–1β€”
modulation_amount_4optFLOAT0.00-1–1β€”
modulation_amount_5optFLOAT0.00-1–1β€”
modulation_amount_6optFLOAT0.00-1–1β€”
modulation_amount_7optFLOAT0.00-1–1β€”
modulation_amount_8optFLOAT0.00-1–1β€”
follower_sensitivityoptFLOAT1.00.1–10β€”
follower_attackoptFLOAT0.0100.001–1β€”
follower_releaseoptFLOAT0.1000.001–1β€”
random_rateoptFLOAT10.00.1–100β€”
random_smoothingoptFLOAT0.500–1β€”

Outputs (6)

NameTypeDescription
modulated_audioAUDIOβ€”
matrix_reportSTRINGβ€”
lfo1_valueFLOATβ€”
lfo2_valueFLOATβ€”
envelope_valueFLOATβ€”
follower_valueFLOATβ€”