Open Pixel Control (OPC)
Open Pixel Control (OPC) — Lightweight Pixel Protocol
Open Pixel Control (OPC) is a minimal, TCP/IP-based protocol for streaming pixel data to LED controllers. It was designed by Micah Scott for the Fadecandy project and is widely used in creative coding environments.

Technical Specifications
| Parameter | Value |
|---|---|
| Transport | TCP/IP (port 7890 default) |
| Max pixels per message | 65,535 bytes (~21,845 RGB pixels) |
| Max channels | 256 |
| Command types | Set pixel colors, set color correction, system exclusive |
| Framing | Simple binary header + data payload |
Protocol Header Format
| Byte | Field | Description |
|---|---|---|
| 0 | Channel | Output channel (0–255) |
| 1 | Command | 0 = set pixels, 1 = set color correction, 255 = system exclusive |
| 2–3 | Length | Number of data bytes (big-endian, 16-bit) |
| 4+ | Data | Pixel data (RGB 0–255 per channel) |
A pixel data message for 3 LEDs (RGBRGBRGB) would be: [0, 0, 0, 9, R, G, B, R, G, B, R, G, B]
Comparison with Other Protocols
| Feature | OPC | Art-Net | sACN (E1.31) |
|---|---|---|---|
| Transport | TCP | UDP | UDP |
| Max pixels per packet | ~21,845 | 512 (RGB) / 680 (RGBW) | 512 (RGB) / 680 (RGBW) |
| Universe/channel support | 256 channels | 32,768 universes | 63,999 universes |
| Error checking | None (TCP handles it) | None | CID + sequence numbers |
| Complexity | Very low | Moderate | Moderate |
| Latency | Low (TCP overhead) | Very low | Very low |
Tools That Use OPC
| Tool | Purpose |
|---|---|
| Fadecandy | USB LED controller with OPC server |
| Processing | PixelBender, OPC library for Java sketches |
| openFrameworks | ofxOPC addon for C++ creative coding |
| Glediator | LED matrix control software |
| PixelController | Web-based LED matrix control |
| OPC Python client | Lightweight Python library for LED control |
Use Cases
- Interactive installations — Low latency, easy to integrate with Processing, openFrameworks, TouchDesigner
- Fadecandy setups — The native protocol for Fadecandy controllers (8 outputs, 512 pixels each)
- Prototyping — Minimal overhead makes it ideal for quick LED sketches
- Small-to-medium installations — Up to ~21K pixels per channel without multiplexing