ποΈ Modulation Matrix
A Modular Synth Patchbay in One Node β LFOs, Envelopes, and Followers
- audio
- modulated_audio
- matrix_report
- lfo1_value
- lfo2_value
- envelope_value
- follower_value
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 ashape(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_releaseturn the input's loudness into a control signal, so your own audio drives the modulation. - Random -
random_rateandrandom_smoothingfor 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_1through8- 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.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Input audio for modulation processing | |
| matrix_size | COMBO | 8 | 3 options: 4, 6, 8 |
| global_intensity | FLOAT | 0.500β2 | β |
| update_rate | FLOAT | 1001β1000 | Modulation update rate in Hz |
| amplitude | FLOAT | 0.800β2 | β |
| lfo1_frequencyopt | FLOAT | 2.000.01β100 | β |
| lfo1_shapeopt | COMBO | sine | 6 options: sine, triangle, sawtooth, square, random, smooth_random |
| lfo2_frequencyopt | FLOAT | 5.000.01β100 | β |
| lfo2_shapeopt | COMBO | triangle | 6 options: sine, triangle, sawtooth, square, random, smooth_random |
| envelope_attackopt | FLOAT | 0.1000.001β10 | β |
| envelope_decayopt | FLOAT | 0.2000.001β10 | β |
| envelope_sustainopt | FLOAT | 0.500β1 | β |
| envelope_releaseopt | FLOAT | 1.0000.001β10 | β |
| modulation_amount_1opt | FLOAT | 0.00-1β1 | β |
| modulation_amount_2opt | FLOAT | 0.00-1β1 | β |
| modulation_amount_3opt | FLOAT | 0.00-1β1 | β |
| modulation_amount_4opt | FLOAT | 0.00-1β1 | β |
| modulation_amount_5opt | FLOAT | 0.00-1β1 | β |
| modulation_amount_6opt | FLOAT | 0.00-1β1 | β |
| modulation_amount_7opt | FLOAT | 0.00-1β1 | β |
| modulation_amount_8opt | FLOAT | 0.00-1β1 | β |
| follower_sensitivityopt | FLOAT | 1.00.1β10 | β |
| follower_attackopt | FLOAT | 0.0100.001β1 | β |
| follower_releaseopt | FLOAT | 0.1000.001β1 | β |
| random_rateopt | FLOAT | 10.00.1β100 | β |
| random_smoothingopt | FLOAT | 0.500β1 | β |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| modulated_audio | AUDIO | β |
| matrix_report | STRING | β |
| lfo1_value | FLOAT | β |
| lfo2_value | FLOAT | β |
| envelope_value | FLOAT | β |
| follower_value | FLOAT | β |