Getting started
-
Install the mod
- Enable it in SYSTEM > MODS and restart the norns
-
Get and run a client app
You need an OSC app that implements the oscgard/serialosc device protocol.
See compatible clients below. -
Discover devices
Open the oscgard mod menu on norns (SYSTEM > MODS > OSCGARD).
It will scan your network for OSC devices. -
Assign virtual device to a port
Choose grid or arc, and vport to use (1-4) and pick the discovered device from the list.
-
Patch your script
Add the include line at the top of your script to route API calls through oscgard
-
for grid
local grid = include("oscgard/lib/grid") -
for arc
local arc = include("oscgard/lib/arc")
-
for grid
- You're good and have the emulated device up and running!
SerialOSC protocol compliant
The mod speaks the standard serialosc OSC protocol — the same protocol real monome devices use.
Any client that implements the serialosc device spec can connect. On top of this, oscgard adds an optimized bulk transfer mode for high-performance updates over WiFi.
Zero-effort connect
Oscgard uses zeroconf (avahi-browse) to find OSC client devices on your network. Discovered devices appear in the mod menu, where you assign them to ports just like plugging in real hardware.
Both GRID and ARC supported
Oscgard emulates two types of monome hardware. Each is a distinct virtual device with its own protocol, API, and port assignment.
Up to 4 virtual devices can be connected simultaneously across both types — for example, 2 grids and 2 arcs, or any other combination.
Grid
The monome grid is a minimalist instrument — a matrix of backlit silicone buttons with no labels, no velocity, just press/release and 16 levels of LED brightness.
Oscgard virtualizes the full spec: key input, LED feedback, all three editions, hardware rotation, and tilt sensors.
- Editions64 / 128 / 256
- Device inputButtons + Sensors
- LED feedback16 brightness levels
- Rotation0 / 90 / 180 / 270
Arc
The monome arc is a set of high-resolution optical encoders, each ringed by 64 individually addressable LEDs. Designed for continuous control — filters, sequences, waveforms.
Oscgard virtualizes encoder delta input and per-LED ring feedback for both editions.
- Editions2 / 4 encoders
- Device inputEncoders + Push-buttons
- LED feedback64 LEDs per ring
- Ring modesAll / map / range
How it works
The mod registers as a norns system hook, intercepting OSC traffic. When a client connects, oscgard creates a virtual device that looks exactly like real monome hardware to any norns script.
LED updates from scripts are packed into efficient bulk messages and sent to the client.
Button presses and encoder turns from the client are transformed and delivered to the script’s callbacks.
Built for WiFi
One message per refresh. 128x fewer packets than other emulators.
Any rate,
no tearing.
| Metric | Others | oscgard |
|---|---|---|
| Messages for full refresh | up to 128 | 1 |
| Bytes for full refresh | ~2,560 | ~140 |
| Atomicity | Sequential | Atomic |
| Refresh rate | - | Adjust to your network |
-
Messages for full refreshOthers: up to 128oscgard: 1
-
Bytes for full refreshOthers: ~2,560oscgard: ~140
-
AtomicityOthers: Sequentialoscgard: Atomic
-
Refresh rateOthers: -oscgard: Adjust to your network
Drop-in API
Oscgard provides drop-in replacements for the norns grid and arc modules. The API is identical to real hardware.
-- Example script for Grid emulation
local grid = include("oscgard/lib/grid")
-- or with hardware fallback
-- local grid = util.file_exists(_path.code.."oscgard") and include("oscgard/lib/grid") or grid
local g = grid.connect()
g.key = function(x, y, z)
g:led(x, y, z * 15)
g:refresh()
end
-- Example script for Arc emulation
local arc = include("oscgard/lib/arc")
-- or with hardware fallback
-- local arc = util.file_exists(_path.code.."oscgard") and include("oscgard/lib/arc") or arc
local a = arc.connect()
local pos = {}
a.delta = function(n, d)
-- light up ring led based on rotation
if pos[n] == nil then
pos[n] = 0
end
pos[n] = (pos[n] + d) % 64
a:led(n, pos, 15)
a:refresh()
end
One more thing...
THE MOST POWERFUL TOUCHOSC PROJECTFOR EMULATING MONOME CONTROLLERS
TouchOSC template
Polished grid and arc emulator project for TouchOSC.
- Configurable sizes and layouts
- Tilt sensors support
- Optimized performance
- And the best part — it works out of the box!
Support the project
Oscgard is free and open source.
If it saved you from buying hardware or just made your norns setup more fun, consider saying thanks.
Follow along
Updates, demos, and behind-the-scenes stuff.