Skip to content

What is RFX Effects?

RFX Effects is an animation engine for props and costumes — proton packs, gauntlets, helmets, badges, anything with lights, a screen, or a speaker. It runs on small ESP32-class boards and coordinates everything in real time: LED strips, LCD panels, sound playback, buttons, and the logic that ties them together.

The core idea: your whole show lives in one file, show.json. You flash the firmware once. After that, the firmware never changes — the JSON is your program. Change a color, add a button behavior, rewrite the entire state machine: just edit the file and reload. No compiler, no reflashing.

A show declares your hardware, then describes behavior declaratively. Here’s the heart of a “tap a button to toggle a rainbow” prop:

"scripts": {
"idle": { // a looping background look
"loop": true,
"children": [
{ "comet": "@strip", "color": "hsv(time*0.1, 1, 1)", "lapSec": 2.0, "tail": 6, "loop": true }
]
}
},
"states": { // the brain: when X happens, do Y
"initial": "Off",
"Off": { "on": { "go.tapped": "On" } },
"On": {
"enter": [ { "start": "idle" } ],
"exit": [ { "stop": "idle" } ],
"on": { "go.tapped": "Off" }
}
}

You describe what things are and when things happen; the engine handles the frame-by-frame animation, timing, audio mixing, and looping. Speed and intensity cascade down the tree — slow a script down and everything inside it, including audio pitch, slows with it.

RFX Effects supports 11 boards, from a bare ESP32 devkit up to boards with built-in screens, audio, and SD storage — plus a desktop target so you can build shows with no hardware at all. See the board lineup for the full comparison.

Each device is set up for one of two update modes. Standalone (the default) updates over WiFi: open the device’s web page and upload new firmware from the Files tab — no cable needed. Loader mode needs no WiFi at all: the device exposes a USB drive, and you update by dragging a firmware.uf2 file onto it, with automatic recovery if a bad image ever crash-loops. Either way, show.json itself is just a file on the device — editing your show never requires a firmware update in the first place.

Every device serves its own dashboard over WiFi (at http://<name>.local/ or its IP). From it you can:

  • Press virtual buttons. Inputs without a physical pin show up as buttons on the dashboard — buttons light up only in states that respond to them.
  • Edit files live. The Files tab lets you edit show.json, upload sounds and fonts, and flash new firmware.
  • Check your work. Saving a show gives you an instant pass/fail validation banner, with the full report in the Console. A show with errors is rejected and the device keeps running the last good one — you can’t brick your prop with a typo.

The same engine runs as a desktop preview: a browser-based visualizer with the same dashboard, virtual buttons, and a live view of your LED strips and screens. Edits to show.json hot-reload instantly. It’s the fastest way to write a show — build the whole thing on your computer, then copy it to the prop. See the desktop target for details.