Access and transmit complete Sensel Morph touchpad data over OSC, Syphon, or WebSockets with Processing or Python — and with no SDK dependencies.
Golan Levin, July 2026

Image of the Sensel Morph's 185x105 pressure-image visualized in Processing
This repository is the first complete open-source implementation of the Sensel Morph's raw pressure data pipeline. It restores open access to one of the most expressive pressure-imaging devices ever made after its original software stack was abandoned.

Image of the Sensel Morph's trio of data channels (L-R): pressure, labels, contacts. The device can also send accelerometer and other interaction data.
The Sensel Morph is an unusually expressive pressure-sensitive input device capable of reporting not only touches, but dense force images over its entire sensing surface. Unlike conventional multitouch devices, it can measure and report continuous pressure distributions from fingers, hands, brushes, and custom physical overlays.
Although Sensel published an SDK, the key components required to access the Morph's raw pressure imagery were distributed only as closed binary libraries. After official development of the SDK ceased in 2017, those libraries became increasingly difficult to use, limiting access to much of the hardware's most interesting capabilities.
This repository reconstructs those missing pieces through an open implementation of the Morph's communication protocol, pressure and label decoding, and live data bridges. It provides standalone tools for Processing and Python that communicate directly with the hardware, without depending on Sensel's SDK. The utilities in this repository will allow you to:
- access and visualize the Morph's complete sensing data, including pressure images, label images, contacts, and accelerometer data
- transmit Sensel Morph data over OSC, WebSockets, and Syphon
- record, replay, and re-transmit interaction sessions
- calibrate the device to compensate for its fixed noise patterns
- interface with p5.js, Processing, Python, TouchDesigner, etc.
Our OSC utilities preserve optional compatibility with
morphosc and senselosc so that older Morph patches and tools can continue to
run against a newly liberated data source.
- Overview
- Processing Utilities for Sensel Morph
- Python Utilities for Sensel Morph
- Other Documentation

Image of Sensel Morph pressure and contacts, visualized in Processing
This repository provides six standalone Processing applications for viewing, recording, calibrating, replaying, and broadcasting Sensel Morph data. Together they offer a complete SDK-free environment for working with the device in creative coding workflows. For complete information on the Processing implementations, please see processing/README.md.
The Processing app you probably want is sensel_morph_osc_transmitter, which connects directly to the Sensel Morph over USB serial, decodes live data frames, displays the pressure/label/contact layers, and emits this information over OSC. However, there are also other Processing apps which transmit Sensel Morph data over WebSockets or Syphon, as summarized here and in the table below.
All apps are compatible with Processing 4.5.5, with the exception of the Syphon transmitter, which due to limits in the Syphon library is currently restricted to Processing 4.3. To minimize dependencies, all apps use the Processing's built-in Serial Library to communicate with the device, and native Java UDP code for OSC; they do not depend on oscP5, the original Sensel SDK, or any of the Python code in this repository.
| Processing App | Intended Use |
|---|---|
| sensel_morph_osc_transmitter | Standalone live USB reader and OSC broadcaster. Features local display, performance recording, and playback. |
| sensel_morph_osc_receiver | Live OSC monitor (receiver) and viewer. |
| sensel_morph_syphon_osc_transmitter | Standalone live USB reader, which transmits device data over both OSC and Syphon (for audiovisual tools like TouchDesigner). Note: compatible up to Processing 4.3 owing to the Syphon library. |
| sensel_morph_websocket_transmitter | Standalone live USB read and WebSocket transmitter (for browser-based/p5 clients). |
| sensel_morph_capture_viewer | Offline recording viewer. |
| sensel_morph_osc_calibrator | Creates optional pressure calibration files to compensate for fixed noise patterns. |

Screenshot of Processing (at right) communicating with Touchdesigner (at left) over Syphon and OSC
In addition to the Processing apps, this repository also provides:
- sensel_morph_syphon_osc_receiver.toe, a sample TouchDesigner project which receives Syphon and/or OSC data from the provided transmitters;
- Receivers for Sensel Morph data broadcast on WebSockets, built in p5.js:
A local server is not required to run the p5.js receiver apps.

Screenshot of Processing (at right) communicating with p5.js (at left) over WebSockets.

Image of the Sensel Morph's LEDs under interactive control
The Python tools provided here are lightweight command-line utilities intended for scripting, automation, and software integration. They provide direct USB access to the Morph, live OSC and WebSocket bridges, recording tools, and interactive LED control, making them suitable for creative coding, rapid prototyping, and protocol research.
The Python command-line tools live in python/. For installation instructons, command summaries, recording examples, and notes about behavior and implementation, please see: python/README.md
| Python Program | Intended Use |
|---|---|
sensel_morph_osc.py |
Live USB reader and OSC broadcaster. |
sensel_morph_ws.py |
Live USB reader and WebSocket broadcaster. |
sensel_morph_capture_session.py |
Performance recording tool; produces JSONL/JSON. |
sensel_morph_led.py |
Controls the Morph's 24 white LEDs. |
This repository aims to be a definitive resource for anyone hacking the Sensel Morph in the future. To that end, more information is available in the following documents:
- Communications Protocol: Information about the Sensel Morph's low-level USB CDC/register protocol, frame formats, compression, labels, contacts, accelerometer, and built-in LEDs.
- Implementation Details: lower-level notes on contact geometry, calibration application, serial-number handling, and contact summary semantics.
- Reverse Engineering Lab Notes: how the raw pressure, labels, contact geometry, accelerometer, calibration, and output bridges were recovered.
- Prior Art Survey: annotated technical bibliography of SDKs, examples, OSC bridges, decompression resources, and other prior work.
- Third Party Archive: small archival copies of third-party files that were important to the reverse-engineering work.