Build 0.1.0 · Windows 11 · x64

Forward any USB input
as OSC, to anything.

XOSC opens a UDP socket and turns whatever the operating system reports — a key on a USB keypad, MIDI Note 60 on channel 1, button 9 on a generic gamepad, the ASCII line "BTN1_DOWN\\n" coming out of an Arduino at 115 200 baud — into an OSC packet at 127.0.0.1:7000. Designed for Resolume; works for any OSC receiver.

§ 02 — input matrix

Anything the OS reports, XOSC reads.

A switching matrix of what gets captured today. Discrete triggers fire OSC packets one-shot; continuous values forward the raw payload as f.

Input
Discrete trigger
Channel / index
Continuous value
String payload
Keyboard
Any key code + modifiers (Ctrl / Alt / Shift / Meta).
key+mods
ASCII
MIDI
Web MIDI. Note On/Off, CC, Pitch Bend, Program Change.
Note 0–127
ch 1–16
vel ignored
CC #
Gamepad
HTML5 Gamepad API. Polled at 60 Hz.
btn 0–N
pad 1–4
axes raw
Serial
Any COM port. Line-buffered. Each unique line = unique trigger.
line text
verbatim

wired — fires now   partial — value forwarded raw; mapping UI v0.2   not applicable

§ 03 — signal chain

USB → input bus → mapping graph → UDP.

One window, one listener per input class, one mapping graph, one UDP sender. No agents, no daemons, no service to install.

01capture

OS reports an event

Win32 keyboard hook, Web MIDI, HTML5 Gamepad polling, or node-serialport on a chosen COM port. Capture mode is per-node, so two inputs can listen to different sources at the same time.

02match

Bus → graph lookup

Every event becomes a stable signature (midi:noteOn:1:60, kbd:F13, serial:COM4:BTN1_DOWN). The graph router fans it to every wired output node.

03emit

UDP packet leaves

Each output node owns its host:port. Pulse, Toggle, or Hold determines the arg payload. Multiple outputs fire in parallel — fan out to two Resolume machines, an Avolites desk, and a QLab cue stack at the same time.

Resolume tip: open Shortcuts → Edit OSC, click any control on the canvas. The address you need appears in the bottom-right of the Resolume window. Copy → paste into XOSC's output node. The whole binding takes 8 keystrokes.

§ 04 — palette

Four built-in themes. Live swap.

Each one is a flat token map applied to :root. Click a swatch row — the entire site (and the in-app demo) repaints without a reload.