Skip to content

Subgraphs

Subgraphs let you encapsulate groups of nodes into a single reusable module. Think of them as custom nodes that you design yourself.

What is a Subgraph?

A subgraph is a container node that holds its own internal graph. From the outside, it looks like a single node with input and output ports. Inside, it contains a full node graph.

Subgraph Example

Notice the breadcrumb navigation at the top left showing the path: Root → subgraph name. Click any level to navigate back up.

Creating a Subgraph

  1. Select the nodes you want to encapsulate
  2. Right-click → Wrap in Subgraph, or press Ctrl/Cmd + G
  3. The selected nodes are moved inside a new subgraph node
  4. Input/output ports are automatically created based on existing connections

Or create an empty subgraph and build from scratch:

  1. Add a Subgraph node from the Node Palette
  2. Double-click to enter the subgraph
  3. Build your internal graph

Subgraph I/O Ports

Use these special nodes inside a subgraph to define its external pins:

NodePurpose
Subgraph In (Audio)Audio input port
Subgraph Out (Audio)Audio output port
Subgraph In (MIDI)MIDI input port
Subgraph Out (MIDI)MIDI output port
Subgraph In (CV)CV-only input port (continuous modulation signal)
Subgraph Out (CV)CV-only output port
Subgraph In (Data)Data input port (events and values)
Subgraph Out (Data)Data output port

Each port node you add inside the subgraph creates a corresponding pin on the outside. The pin colour and label match the port type so it's clear what kind of signal each one expects.

CV vs Data ports

Both CV and Data ports carry non-audio signals, but they behave differently:

  • CV is for continuous modulation: a knob value that changes over time, an LFO output, an envelope. The receiving side can read it every sample.
  • Data is for events and values that change occasionally: a button press, a note trigger, a text string.

Use CV ports when your subgraph internally produces or consumes fast, smoothly changing control signals. Use Data when the signal is event-based. If in doubt, use Data: it's cheaper.

Automatic port creation

When you wrap existing nodes with Ctrl/Cmd + G, MNodes looks at the connections that cross the selection boundary and creates matching port nodes inside for you:

  • A cable coming in to the selection becomes a Subgraph In of the right type.
  • A cable going out becomes a Subgraph Out.
  • The port's name comes from the pin it connects to (you can rename it later).

This means your patch keeps working: nothing gets disconnected when you group.

Editing a Subgraph

  • Double-click the subgraph node to enter it, or select it and press Enter.
  • Breadcrumb navigation shows your current depth.
  • Click the parent breadcrumb, or press Esc, to go back up one level.

Nesting

Subgraphs can contain other subgraphs, as many levels deep as you want. The breadcrumb grows with each level so you always know where you are. There's no hard limit, but very deep nesting can make a patch hard to navigate, so use it where it adds clarity, not just for the sake of it.

No feedback loops between levels

A subgraph cannot route audio from an outer level, back through itself, and into its own input: that would create a feedback loop. MNodes prevents this when you try to wire it. If you need feedback, keep it inside a single graph level.

How a Subgraph Looks from Outside

From the outside, a subgraph looks like a single node with the input and output pins you defined inside it. In the screenshot below you can see a subgraph called "Tone Space Weird Chain" with its Audio In, multiple audio outputs, and a Dry/Wet knob on top.

Subgraph from outside

On the left you can see the Nodes panel with the External Subgraphs category, which lists all your saved subgraphs ready to be reused.

Saving Subgraphs

You can save any subgraph as a reusable .mnsubgraph file:

  1. Right-click on the subgraph node
  2. Select Save as Subgraph Preset
  3. Give it a name and save

Your saved subgraphs appear in the Explorer panel → Nodes tab → External Subgraphs category. From there you can drag them onto the canvas to reuse them in any patch.

Subgraphs are stored in ~/Music/MManufacturer/MNodes/Library/Subgraphs/. This path can be customized in Settings → General.

Use Cases

  • Custom instruments: Wrap an oscillator + filter + envelope into a "Synth Voice" subgraph
  • Effect chains: Package a reverb + delay + compression chain as a single module
  • Reusable modules: Build utility blocks you use across different patches
  • Organization: Keep complex patches clean by grouping related nodes

Modules and Poly Modules

If you need a subgraph with its own built-in front panel (knobs, sliders, meters visible directly in the node body), use a Module instead. Modules are an enhanced version of Subgraphs with a dedicated control surface, preset system (.mnmod), and shareable Module Packs (.mnmodpack). Create one with Ctrl/Cmd + Shift + G.

For polyphonic instruments, where the same voice plays several notes at once, use a Poly Module. You build one voice and MNodes runs N copies in parallel for you.

Random Patch Generator

MNodes includes a random patch generator that can create patches automatically:

  • Tags: Tone, Drive, Motion, Transform, Space, Dynamics, Weird
  • Recipe types: FX Chain or Instrument
  • Complexity slider: Control the density of the generated patch
  • Options: Create new patch, replace subgraph, or wrap in subgraph

MNodes Documentation