Appearance
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.

Notice the breadcrumb navigation at the top left showing the path: Root → subgraph name. Click any level to navigate back up.
Creating a Subgraph
- Select the nodes you want to encapsulate
- Right-click → Wrap in Subgraph, or press Ctrl/Cmd + G
- The selected nodes are moved inside a new subgraph node
- Input/output ports are automatically created based on existing connections
Or create an empty subgraph and build from scratch:
- Add a Subgraph node from the Node Palette
- Double-click to enter the subgraph
- Build your internal graph
Subgraph I/O Ports
Use these special nodes inside a subgraph to define its external pins:
| Node | Purpose |
|---|---|
| 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.

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:
- Right-click on the subgraph node
- Select Save as Subgraph Preset
- 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
