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.
How it works
Flash once
Put the RFX Effects firmware on your board a single time — or buy a module with it preloaded.
Drop in a show
Describe devices, inputs, effects, and states in show.json. Copy it over USB or edit live over WiFi.
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.
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.
ESP32-S3-CAM
ESP32-S3 · audio
Headless props with a small pin budget; camera support is planned but not active yet.
Espressif ESP32-WROOM-32 DevKit
ESP32 · audio
The classic budget DevKit for strip-only props — firmware support is still in progress.
M5Stack Core2
ESP32 · 2" 320x240 ILI9342C IPS LCD (SPI)
An all-in-one touchscreen controller: battery, case, speaker, and capacitive touch UI in one unit.
Arduino Uno R3
ATmega328P (AVR)
The minimal target: short LED strips (up to 60 pixels) with no sound, storage, or WiFi.