NODESTROM
Repository | Releases | Manual | Examples
NODESTROM is a node-based interface tool for live performances. It acts as a modular bridge between creative real-time systems, receiving, interpreting, processing, and forwarding signals between music and visuals. Originally developed for my own audiovisual live-coding practice, its open architecture makes it useful for many signal routing scenarios.
The Problem
In audiovisual performances, instruments and sequencers produce musical data (e.g. MIDI) that needs to be translated into visual parameters. Traditionally, this interpretation logic lives inside each individual receiver, meaning every time you swap a visualizer or change your setup, you have to rewrite everything from scratch.
┌─────────────────────────────────────────────────────────┐
│ SENDER (sequencer, synthesizer, controller, ...) │
└─────────────────────────────────────────────────────────┘
↓
(MIDI signals)
↓
┌─────────────────────────────────────────────────────────┐
│ RECEIVER (visualizer, synth, DAW, ...) │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ interpretation logic baked into each receiver │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
Logic inside the RECEIVER
The Solution
NODESTROM sits between sender and receiver as an independent intermediary layer. The interpretation logic moves out of your receivers and into one central, visual environment, making the entire setup modular and reusable.
┌─────────────────────────────────────────────────────────┐
│ SENDER (sequencer, synthesizer, controller, ...) │
└─────────────────────────────────────────────────────────┘
↓
(MIDI signals)
↓
┌─────────────────────────────────────────────────────────┐
│ NODESTROM │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ interpretation logic lives here now │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
(interpreted signals)
↓
┌─────────────────────────────────────────────────────────┐
│ RECEIVER (visualizer, synth, DAW, ...) │
└─────────────────────────────────────────────────────────┘
Logic inside NODESTROM
Swap receivers without rewriting logic. Change your sender setup mid-performance. Use presets to switch entire configurations in real time. Both sides stay independent, connected only through NODESTROM.
How It Works
NODESTROM provides a visual canvas where you place nodes, small functional building blocks, and connect them freely with edges (the cables between them). Each node does one specific thing: receive a MIDI signal, filter a value, generate a pattern, convert data types, send an output. The power comes from combining them.
NODESTROM-patch
Nodes communicate through typed sockets:
– Bang: a trigger signal („something happened“)
– Value: a single number or string (velocity, note, position…)
– Dict: a complete protocol message (e.g. full MIDI data with note, velocity, channel…)
The feature set grows with every new node. The current version focuses on MIDI, with OSC and DMX planned for the future.
Use Cases
NODESTROM adapts to different signal routing setups:
Bridge:
Translate signals between two systems.
Sequencer → NODESTROM → Visualizer
Splitter:
Route one input to multiple destinations.
→ Synth 1
Controller → NODESTROM → Synth 2
→ Visualizer
Merger:
Combine multiple inputs into one output.
Keyboard → Controller → NODESTROM → Visualizer Sequencer →
Generator:
Use NODESTROM itself as a sequencer.
NODESTROM (internal clock + patterns) → Synth
→ Visualizer
Feedback Loop:
Multi-stage processing where visuals trigger sounds.
┌─────────────────────────────────┐
↓ │
Controller → NODESTROM → Visualizer (sends back)──┘
↓
Synth
Node Overview
NODESTROM ships with a growing library of nodes across several categories:
| Category | Nodes | Purpose |
|---|---|---|
| Utility | Note, Debug | Comments, value inspection |
| Trigger & Timing | Bang, Clock, To Bang | Manual/automated triggers, tempo control |
| Data Processing | Input, Convert, Count, Random, Map To, Script | Value generation, type conversion, mapping, custom logic |
| Pattern & Sequencing | Pattern, Graph Draw | Step sequences, hand-drawn curves |
| MIDI | MIDI Input, MIDI Output, MIDI Select, MIDI Filter, MIDI Edit, MIDI Build, MIDI Note | Full MIDI I/O, filtering, message construction |
| Interface | Interface Node | Custom JSON-configured nodes for complex setups |
A complete and interactive overview of all nodes is included in the built-in tutorial: Help → Examples → Tutorial
Installation
– Download the latest release
– Unzip and move NodeStrom.app to your Applications folder
– macOS will likely block the unsigned app on first launch. Remove the quarantine flag via Terminal:
Platform: macOS (Apple Silicon / ARM64)
License: MIT, open source, full source code on Codeberg
Context
NODESTROM was developed as my bachelor project at HfK Bremen. It grew out of a real need in my own audiovisual live-coding practice: the friction of rewriting signal interpretation logic for every new piece or setup. NODESTROM doesn’t generate sound or visuals itself. It connects the things that do.

