An RFX project

One JSON file.
A whole show.

RFX Effects is a data-driven animation engine for interactive props and costumes. LEDs, screens, and sound — choreographed from a single show.json, with a live web dashboard and no reflashing.

11 Boards supported
1 JSON file per show
0 Reflashes needed

How it works

1

Flash once

Put the RFX Effects firmware on your board a single time — or buy a module with it preloaded.

2

Drop in a show

Describe devices, inputs, effects, and states in show.json. Copy it over USB or edit live over WiFi.

3

Press the button

The state machine runs your show — lights sweep, sound fires, screens update. Change the file, not the firmware.

Show, don't tell

{
  "devices": { "strip": { "kind": "ledstrip", "count": 16, "pin": 45 } },
  "inputs":  { "power": { "label": "ON/OFF", "pin": 7 } },
  "scripts": {
    "idle": {
      "loop": true,
      "children": [
        { "comet": "@strip", "color": "hsv(time*0.1, 1, 1)",
          "lapSec": 2, "tail": 6, "loop": true }
      ]
    }
  },
  "states": {
    "initial": "Off",
    "Off": { "on": { "power.tapped": "On" } },
    "On": {
      "enter": [ { "start": "idle" } ],
      "exit":  [ { "stop": "idle" } ],
      "on":    { "power.tapped": "Off" }
    }
  }
}

This is a complete show

A 16-pixel strip, one button, a rainbow comet idle, and a two-state brain: tap to turn on, tap to turn off. The hsv(time*0.1, 1, 1) expression re-evaluates every frame, so the color cycles forever.

Build this yourself in 15 minutes →

What's in the engine

A state machine you can read

Buttons, timers, and events drive states. Tap to toggle, hold to charge, timeout to sleep — all declared in JSON.

Effects that flow downhill

Slow a script and every child slows with it — LED sweeps, screen draws, even audio pitch. One knob, whole-show feel.

Synced sound

WAV and MP3 playback with overlapping voices, volume control, and pitch that follows your show speed.

Screens and gauges

Draw text, live numbers, gauges, meters, and per-pixel shader patterns on LCD boards with baked custom fonts.

Live web dashboard

Edit your show over WiFi, watch state and inputs live, and read the console — right from your phone or laptop.

Two cable-free update paths

Standalone devices update over WiFi. Loader devices show up as a USB drive — drag, drop, done.

Preview without hardware

The same engine runs on your desktop or in the browser, so you can build the show before the electronics exist.

Firmware that never changes

The behavior lives in show.json, not code. Change the file, not the flash.

Board lineup

Compare all →

Waveshare ESP32-S3-Zero

ESP32-S3 · audio

Tiny hidden installs: single-strip props where space is tight, driven from its one onboard pixel pin or any free pad.

LilyGo T-QT Pro

ESP32-S3 · 0.85" 128x128 GC9107 IPS LCD (SPI)

Pocket-size props that want a tiny status screen; no audio.

Waveshare ESP32-S3-LCD-1.47

ESP32-S3 · 1.47" 172x320 ST7789 IPS LCD (SPI) · audio

The everything board: LEDs, a screen, removable microSD storage, and audio-ready pins in one prop.

Espressif ESP32-S3-DevKitC-1

ESP32-S3 · audio

Big builds: the largest LED budget (2048) and the most free pins — e.g. a 67-LED proton pack on GPIO45.

LilyGo T-Display-S3

ESP32-S3 · 1.9" 170x320 ST7789 IPS LCD (8-bit parallel i8080) · audio

Props with a built-in screen: ammo counters, gauges, countdown displays.

LilyGo T-Display AMOLED 1.64

ESP32-S3 (S3R8) · 1.64" 280x456 ICNA3311/CO5300 AMOLED (QSPI) · audio

Props where the screen IS the prop: a 280x456 AMOLED is brighter and deeper-black than any LCD here, and the QSPI panel leaves both headers almost entirely free. Touch, a Qwiic socket and the house amp wiring come with it.

ESP32-S3-CAM

ESP32-S3

Headless props with a small pin budget; camera support is planned but not active yet.

Espressif ESP32-WROOM-32 DevKit

ESP32

The classic budget DevKit for strip-only props — firmware support is still in progress.

M5Stack Core2

ESP32 · 2" 320x240 ILI9342C IPS LCD (SPI) · audio

An all-in-one touchscreen controller: battery, case, speaker, and capacitive touch UI in one unit.

Lonely Binary ESP32-C3 OLED

ESP32-C3 (RISC-V) · 0.42" 72x40 SSD1306 monochrome OLED (I2C)

The cheapest way to put a readable status line on a prop: a tiny mono OLED, one onboard WS2812, and a LiPo shield stack. Good for badges, test rigs and anything that mostly reports rather than performs.

Arduino Uno R3

ATmega328P (AVR)

The minimal target: short LED strips (up to 60 pixels) with no sound, storage, or WiFi.