{
 "_sources": [
  {
   "type": "vendor-doc",
   "name": "monome norns OSC: lua/core/osc.lua and the norns reference 'osc' page",
   "url": "https://github.com/monome/norns/blob/57fa534438672a8827ff77ef88049d751f762fa6/lua/core/osc.lua",
   "notes": "OSC handlers of the norns system (param_handler, remote_handler) at commit 57fa534 (main, 2026-10-21; latest release v2.9.4), and https://monome.org/docs/norns/reference/osc (port 10111, /param/param_id val, /remote/key n val, /remote/enc n d, /remote/brd n val).",
   "firmware": "2.9.4",
   "imported_at": "2026-10-26"
  }
 ],
 "_limitations": "Source: norns system code (lua/core/osc.lua at 57fa534) and monome's norns reference, 'osc'. norns listens to OSC on UDP port 10111 only. The norns is another machine: give its IP address as the device's host override; the default host is 127.0.0.1. Every script parameter is set with /param/<param id> <value> (the value in the parameter's own units: a number, an option's index from 1, 0/1 for a binary); /param/<paramset id>/<param id> reaches a parameter of another parameter set. Parameter ids depend on the script running: the per-script drivers list them (hold K1 and press K3 on the norns to show the ids). /remote/key presses (1) or releases (0) keys 1-3, /remote/enc turns encoders 1-3 by a signed delta, /remote/brd presses (1) or releases (0) a key of the norns keyboard by its code index. The system sends no reply to these. MIDI is not mapped: a script's MIDI handling is its own and parameter MIDI mappings are learned by each user (PMAP). A script can also redefine osc.event for its own paths, which are not mapped here. Untested on hardware.",
 "_coverage": {
  "host_software": "norns 2.9.4",
  "commands": 5,
  "subscriptions": 0,
  "replies": 0
 },
 "device": {
  "name": "norns",
  "vendor": "Monome",
  "revision": "norns system OSC, v2.9.4 (main 57fa534)",
  "osc_prefix": "/norns",
  "transport": {
   "kind": "osc",
   "host": "127.0.0.1",
   "port": 10111
  }
 },
 "commands": [
  {
   "osc": "/param/{id}",
   "section": "Parameters",
   "args": [
    {
     "name": "id",
     "type": "string"
    },
    {
     "name": "value",
     "type": "float"
    }
   ],
   "forward": {
    "path": "/param/{id}",
    "args": [
     "{value}"
    ]
   },
   "_notes": "Set the running script's parameter {id} to {value}, in the parameter's units."
  },
  {
   "osc": "/param/{set}/{id}",
   "section": "Parameters",
   "args": [
    {
     "name": "set",
     "type": "string"
    },
    {
     "name": "id",
     "type": "string"
    },
    {
     "name": "value",
     "type": "float"
    }
   ],
   "forward": {
    "path": "/param/{set}/{id}",
    "args": [
     "{value}"
    ]
   },
   "_notes": "Set parameter {id} of parameter set {set} to {value}."
  },
  {
   "osc": "/remote/key",
   "section": "Remote",
   "args": [
    {
     "name": "n",
     "type": "int",
     "range": [
      1,
      3
     ]
    },
    {
     "name": "z",
     "type": "int",
     "range": [
      0,
      1
     ]
    }
   ],
   "forward": {
    "path": "/remote/key",
    "args": [
     "{n}",
     "{z}"
    ]
   },
   "_notes": "Press (1) or release (0) key {n}."
  },
  {
   "osc": "/remote/enc",
   "section": "Remote",
   "args": [
    {
     "name": "n",
     "type": "int",
     "range": [
      1,
      3
     ]
    },
    {
     "name": "delta",
     "type": "int"
    }
   ],
   "forward": {
    "path": "/remote/enc",
    "args": [
     "{n}",
     "{delta}"
    ]
   },
   "_notes": "Turn encoder {n} by {delta} (negative: to the left)."
  },
  {
   "osc": "/remote/brd",
   "section": "Remote",
   "args": [
    {
     "name": "code",
     "type": "int"
    },
    {
     "name": "z",
     "type": "int",
     "range": [
      0,
      1
     ]
    }
   ],
   "forward": {
    "path": "/remote/brd",
    "args": [
     "{code}",
     "{z}"
    ]
   },
   "_notes": "Press (1) or release (0) the norns keyboard key {code} (index of the norns keyboard codes)."
  }
 ]
}
