The ProtoFrenz controller is an LED face system for protogen fursuits and helmets. This is your complete guide — from first power-on to making it entirely yours. Your current firmware version is shown in the System tab of the WebUI.
Follow these steps in order — by the end your face will be glowing, reacting to your voice, and ready to customise. Pick your display type in the bar at the top of this page and the whole manual trims itself to just your hardware.
http://192.168.4.1 in your browser.
Boot sequence on a MAX7219 dot-matrix display — scrolling animation then face fade-in
Your ProtoFrenz controller supports three different kinds of LED face display. You choose which type you're using in the app — no rewiring, no reflashing the firmware.
Full color. Every single pixel is individually lit and colored. This is the default display type and the one most builds use.
Two large 64×32 RGB panels for a smooth, high-resolution look. Uses a "procedural" face engine — shapes are drawn mathematically for super-clean curves.
The original protogen look — monochrome white dots on black. Simple, crisp, and extremely low power. Great for builds where battery life is the priority.
Nine connectors, all labeled on the board. Here's the full map — click any numbered connector on the diagram to jump to its description.
The large circular component on the board — this is the built-in microphone. It drives the voice-reactive mouth animation, Music Mode spectrum analysis, and Dance Mode beat detection. Permanently soldered — no wiring needed. Mic sensitivity is adjustable in the Options tab.
Reserved for a future magnetometer or IMU sensor for head-tracking and tilt features. Not used in current firmware — nothing needs to be plugged in here.
The capacitive boop sensor — mount this on the outside of your suit's face. When someone touches it, the eyes squint. Works through thin fabric or foam so you can hide it completely.
Connects to a standard normally-open momentary push button — route it to the exterior of your helmet for hands-free Face switching and mode control. Any small tactile button works. Keep wire length under a meter.
Connects to two chained 64×32 P3 RGB panels via a standard HUB75 ribbon cable. Panel 1 INPUT → Panel 1 OUTPUT → Panel 2 INPUT. Panel 2 mirrors Panel 1 automatically — no extra configuration needed.
Provides 5V power output — use this to power a non-PWM cooling fan or supplement power to your HUB75 panels. Pass-through from your USB power bank; no regulation or boost.
Connects to your chain of monochrome 8×8 LED matrix modules. Pin 1 carries 5V to the whole chain. Data, clock, and chip-select lines drive all modules in sequence from this one connector.
Data output for the WS2812B-2020 color LED matrix — the flagship display type. Connects to the first module in the chain; data flows through each module automatically.
Drives a PWM-controlled cooling fan inside your helmet. Fan speed is adjustable via button hold or the speed slider in the System tab. Suited for standard 5V 3-wire PWM fans. For fixed-speed 2-wire fans, use connector 5 (5V OUT) instead.
Your primary power connection. Plug any 5V USB-C power bank in here — this powers the controller, display, fan, and everything else. Also used for firmware flashing via computer if needed.
The small RGB LED on the PCB surface — your window into what the controller is doing without touching your phone.
During normal use it glows the color assigned to your active Face. During button holds it cycles through colors at each threshold (magenta=Music 2s, red=Dance 4s, blue=Fan 6s, white=Brightness 8s) — release when you see the one you want.
Every color and behavior is configurable in the Controls tab. Can be disabled entirely in System settings to eliminate light bleed.
Your face has 8 slots — Idle plus seven more. Each slot has its own eye, nose, and mouth design, its own colors, and its own personality. And each one can serve two jobs: a Face (a mood you switch to with the button) and/or a Reaction (a moment that plays when someone boops you).
Each button tap advances to the next enabled Face in the rotation (Idle → onward, then wraps around). Quick multi-taps skip ahead. A Face stays until you change it (Duration 0), or auto-returns to Idle after its Duration runs out.
A boop plays a Reaction briefly, then returns to whatever Face you were showing. Pick how in Controls → Touch: By boop count (each Reaction has a "Boops" number — 1 boop, 2 boops, …) or At random (every boop rolls a surprise). Reactions always end — Duration 0 plays for 3 seconds.
Which slot does which job is up to you — the "Used by" checkboxes on each slot in the Editor let you mark it as a Face, a Reaction, or both. Out of the box it looks like this:
The colored dots are the onboard status LED color for each slot — so even inside the suit, you always know which Face you're wearing. Names, colors, durations, and boop counts are all customizable in the WebUI.
A few automatic behaviors make the face feel alive without you doing anything:
Two physical inputs — both fully configurable in the Controls tab, and both usable while fully suited up. In short: boops play Reactions, the button changes Faces.
A capacitive touch sensor mounted on the face of your suit — it works through thin fabric or foam, so you can hide it completely. It doesn't click; it just senses touch. Here's everything it does:
Hold the sensor until the display shows MENU, then release. Now each boop steps through WIFI → BRIGHTNESS → DANCE → MUSIC, and a long press selects the one on screen (it flashes "OK!" when the hold is long enough). Leave it alone for a few seconds and the menu times out back to your face. The WIFI item is also how you switch into Floor mode for Bluetooth greetings while suited up.
Each tap advances to your next enabled Face — Idle, onward through your lineup, then back around. Tap quickly several times to skip ahead that many Faces. And 10 rapid taps triggers Glitch Mode (more on that in Modes).
The tap timing, which slots are in the rotation, and the Glitch threshold are all adjustable in the Controls tab.
Holding the button activates a different set of actions — modes and settings changes. The onboard LED changes color as you hold longer to tell you what you're about to trigger. Release when you see the color you want.
Hold the button — or the boop sensor — for 3 seconds and the face returns to normal. That exit duration is adjustable in the Controls tab, anywhere from 1 to 10 seconds.
Three special modes that transform how the face behaves — all triggered hands-free from the button.
Hold the button for 2 seconds. The face sets your Faces aside and becomes a live audio visualizer — responding to music, voices, or any sound the microphone picks up. Exit by holding the button (or the boop sensor) for 3 seconds.
The whole color matrix becomes a full spectrum analyzer, colored by your active gradient. Five visualizer styles are available in the Options tab:
The full 128×32 RGB canvas becomes a spectrum analyzer rendered at high resolution across both panels — same five styles (Bars, Mirror, Waterfall, Pulse, Auto), selectable in the Options tab.
Monochrome dot-matrix reacts through brightness instead of color. Three layered effects — enable any combination in Options:
Music Mode — audio spectrum visualizer reacting to sound in real time
Hold the button for 4 seconds. The face keeps showing your Faces, but everything gets more reactive and energetic — gradient colors shift faster, brightness pulses with the beat, background effects go into overdrive.
On color builds, connected LED strips also sync up if you have them.
On dot-matrix builds, the same Beat Slam, Brightness Ripple, and Display Shake effects from Music Mode slam the brightness on every detected hit — mix and match their toggles in Options.
Tap the button 10 times really quickly — or boop the sensor 15 times. The face goes haywire — faces cycle randomly, pixels corrupt, brightness flickers. It looks like your suit just had a digital breakdown. It lasts a few seconds and then returns to normal automatically.
This can also trigger if the boop sensor physically disconnects — which is an intentional feature for dramatic effect if you want it. If you don't want that, you can turn Glitch Mode off entirely in Options and it won't trigger from anything.
You can also choose whether Glitch Mode ends with the dramatic black-screen reboot sequence, or just snaps straight back to your normal face. Toggle "Show reboot sequence" in Options under Glitch Mode.
Glitch Mode — the full sequence, from chaos to fake reboot
Make the "reboot" that plays after a glitch your own. In Options under Glitch Mode you can set what appears, and it adapts to your display type:
Upload your own image — a logo, a glyph, anything — to flash on the panel when it reboots, with your choice of fade or wipe transitions and an adjustable hold time.
Show your own reboot text — your proto's name, a catchphrase — in place of the built-in boot text.
Give your proto a name, and it greets other ProtoFrenz suits it meets — "HI SPARKY" scrolls across your face when a fren comes near. All over Bluetooth, no internet, no accounts, and completely opt-in.
Everything lives in the WebUI's Social tab:
The controller has one radio, shared between WiFi and Bluetooth — so greetings run while WiFi is off. Think of it as two hats:
The WebUI is reachable and you can configure everything. Greetings are paused.
Bluetooth takes over and your suit announces and greets. This is what you want while wandering the con floor.
Switch to Floor mode with the 🐾 Floor button in the WebUI header, or hands-free via the face menu (boop-and-hold → WIFI). WiFi comes back at the next power-on, or through the face menu again.
Every proto your suit has greeted lands in the Frenz Met list on the Stats tab — who, and how many times you've crossed paths. It's stored on your controller only, and there's a Clear button if you want a fresh start.
Add small NeoPixel rings — cheeks are the classic spot — that light up right alongside your face.
If your face runs on a HUB75 or dot-matrix (MAX7219) display, the controller's NeoPixel output is free — so you can plug small NeoPixel rings into it and drive them independently of the face. Set it up in the WebUI under Accessory LEDs (turn on Advanced Mode in Options to see it).
Set LEDs / ring to one ring's LED count (8, 12, 16, or 24), then tell the controller how your two cheeks are wired so they mirror each other:
Everything about how your face looks is configurable from your phone — no cables, no software, no technical knowledge needed. Just connect to your suit's WiFi and open a browser.
Editor tab — face drawing canvases for eyes, nose, and mouth with preset navigation
The Editor tab has three drawing canvases — one for eyes, one for nose, one for mouth. Below each canvas are left/right arrows that let you flip through the built-in preset library. There are 52 eye designs, multiple mouth and nose shapes, plus 11 animated eye presets.
Hit Update to preview any preset on your face live before committing. Hit Save when you're happy with it.
Round
Angled
Sharp
Narrow
X Eyes
Oval
Arch
Arrow
Slit
9 of 52 built-in eye presets — use the ◀ ▶ arrows in the Editor to browse the full library
Closed
Wave
Smirk
Flat
Thin
Frown
Slight
Bumpy
Slice
Zigzag
10 of 33 built-in mouth presets — browse the full library with ◀ ▶ in the Editor
The presets are just a starting point. Every canvas is fully editable — tap any pixel to toggle it on or off. On NeoPixel and HUB75 builds, you can also set a color for each pixel you draw — choose between Gradient (follows the slot's gradient) or a fixed solid color.
You can save your own custom designs as personal presets — 8 eye slots, 6 nose slots, 10 mouth slots. They appear alongside the built-in presets in the navigation so everything's in one place.
NeoPixel editor — gradient color mode with per-pixel color visible on all three canvases
Alongside the 52 static eye designs, there are 11 animated eye presets that cycle through frames automatically — on every display type. You'll see them in the preset list with small symbols in front of the name; on HUB75 they appear in the eye picker right after the 52 static presets, and the blink, mouth, and nose stay live while the eyes animate.
Animation speed is a single global setting in the Options tab — adjust the Eye Animation Speed slider anywhere from very snappy (60ms per frame) to slow and dramatic (800ms per frame).
New in 3.0.12: any non-Idle slot can play an animated GIF instead of a drawn face. In the HUB75 editor, tick "Play an animation (GIF) instead of a face" on the slot and upload any GIF — your browser converts it on the spot (up to 32 frames at 128×32; works in any browser, including Brave).
When the slot triggers — as a Face or a Reaction — the GIF plays for the slot's Duration, then the display returns to normal. The editor shows what's loaded as "Stored: filename (N frames)", and Clear stored removes it.
This is where the display types diverge most dramatically. Color displays can overlay animated gradients and particle effects on top of your face design. Dot-matrix is monochrome — clean, sharp, and classic.
Each slot has its own animated color gradient that flows across the face pixels. Configure it per-slot in the Editor tab.
Gradient editor
Effects overlay
Layered on top of the gradient, these sit behind the face shape and add depth and movement. One effect active at a time per slot.
The gradient fills the entire 128×32 canvas — not just the face pixels. Up to 6 color stops, 16 flow directions, adjustable speed, and 16 built-in presets (Rainbow, Fire, Ocean, Neon, Pastel, Pan, Trans, Lesbian, Nonbinary, Ace, Bi, White, Cyan, Purple, None, Custom). The color wash covers the whole panel and the face floats on top.
All 8 effects (Sparkle, Fire, Comet, Matrix Rain, Breathe, Reactive, Scan, Glitch), rendered at full panel resolution. At 128×32, Fire and Matrix Rain use the whole canvas for an immersive result.
Dot-matrix is monochrome — no color gradients, no effects overlay. The face looks exactly as you've drawn it: sharp white pixels on black. Clean, readable, and legible from a distance.
What you do control is brightness — a global slider in the Options tab, plus in-suit adjustment via the button hold. In Dance and Music modes brightness turns dynamic, reacting to beats with the Slam, Ripple, and Shake effects.
No app to install. Connect to your suit's WiFi, open any browser, and you're in. Here's what each tab does.
NeoPixel Effects Overlay — all nine effects available, applied on top of the gradient
Options tab — brightness, fan, mic, mouth mode, eye animation speed, Glitch Mode
Controls tab (Button section) — hold actions with LED colors, mode exit duration
The controller broadcasts its own wireless network. No router, no home internet, no app install. Just connect and go.
Your device's WiFi network is called ProtoFrenz followed by a unique 4-character code — something like ProtoFrenz-A1B2. That suffix is generated from your specific board's hardware ID, so it's unique to your device. At a convention with ten ProtoFrenz suits in the same room, everyone connects to their own network without any confusion.
ProtoFrenz-XXXX where XXXX is yours.192.168.4.1
http://192.168.4.1
By default the network has no password — anyone nearby could connect to it. If you want to protect it, set a password in the System tab (minimum 8 characters). Just make sure you remember it, because if you forget it, you'll need to do a reset to clear it.
You don't need WiFi on while you're actually wearing the suit — only when you're configuring it. Turn it off with the 🐾 Floor button in the WebUI header, the face menu (boop-and-hold → WIFI), a button hold action, or System tab → Auto-start WiFi on boot. Bonus: with WiFi off, Bluetooth proximity greetings run — that's Floor mode. WiFi comes back at the next power-on.
Firmware updates bring new features, display improvements, and bug fixes. The preferred path is fully automatic — takes about two minutes and touches nothing you've configured.
This requires your controller to be connected to your home network. If you haven't done that yet, see the WiFi section first.
If automatic update isn't available — for example, your controller isn't connected to a home network — you can upload a firmware file manually.
192.168.4.1..bin file.
System tab — Firmware Update section
If your controller's WiFi update isn't working, or you're setting up a fresh / blank board for the first time, you can install the firmware directly from this page using your computer's USB port and a Chrome or Edge browser. This works on Windows, Mac, and Linux.
USB Serial (Paired) COM3).If you can't reach the WebUI through the controller's built-in WiFi network — most commonly with iPhones, iPads, or Macs — you can add the controller directly to your home network over USB instead. After this one-time setup, your Apple device (or any device on your home network) reaches the WebUI through the home network at a regular IP address, and the controller's built-in WiFi quirks become irrelevant.
This uses the same green install button as the firmware update above. When the browser detects your controller, it offers a Configure Wi-Fi option in addition to Install.
USB Serial (Paired) COM3).http://192.168.1.42. Click that link to open the WebUI in your browser.If you ever need to start completely fresh, the Factory Reset option is in the System tab. Before it resets, it gives you a choice:
Most issues have a fast fix. Start here before anything else.
Can't reach the WebUI? This is the most common problem, and the Connection Helper below diagnoses it for you over USB. On a phone, use the written fixes underneath instead.
Make sure the controller is fully powered on — wait about 10 seconds after turning it on before looking for the network. If you changed the AP name in System settings, look for that custom name plus the 4-character suffix. If you don't know what name you set, a factory reset restores the default ProtoFrenz-XXXX.
Work through these in order — they fix the vast majority of cases:
192.168.4.1.http:// → http://192.168.4.1. Some browsers silently switch to https://, which won't load.This almost always means the firmware was flashed with mismatched settings in Arduino IDE. The fix is to re-flash using the correct partition scheme (8M with spiffs (3MB APP/1.5MB SPIFFS)) with Erase All Flash enabled. This is a one-time technical fix — if you bought a completed build and this happens, contact us at protofrenz.com and we'll sort it out.
If the page starts to load and then vanishes — and the suit's face keeps running normally (a brief freeze while it talks to your browser is normal and expected) — your phone is dropping the suit's hotspot because it has "no internet."
This step puts the suit on your home Wi-Fi. The suit's chip is 2.4 GHz only — it physically cannot join a 5 GHz network, and many routers broadcast 2.4 GHz and 5 GHz under the same name.
You don't actually need this step to use your suit — it only adds the suit to your home network. You can do everything from the control panel over the suit's own hotspot at http://192.168.4.1.
Still stuck? The controller can tell you exactly what's happening over USB. Plug the suit into a computer, open the browser installer, click the green button, and choose Logs & Console. Then click Reset Device — the suit prints a plain-English status.
You'll see its firmware version, board type, and why it last restarted. After that, just press a letter in the console (no Enter needed):
d — show full diagnostics now (version, power, Wi-Fi status)p — pause / resume the automatic status updates (every 15 seconds)w — log each web request as your browser makes it (use this when the control panel loads blank or sticks on "Connecting…")? — show the command list againQuick test — is your phone actually reaching the suit? Press w to turn on web logging, then try to open http://192.168.4.1 on your phone and watch the console. What you see tells you exactly what's wrong:
GET / and then GET /api/status repeating. Your phone and the suit are talking fine. If the page still looked stuck, just refresh it.
GET / once, then nothing more. The page opened, but your browser is being blocked from finishing. Fix: close the "Sign in to network" pop-up and open http://192.168.4.1 in a normal browser (Chrome or Safari), with mobile data off.
GET / at all (maybe only "other request" lines). Your browser isn't reaching the suit. Fix: turn off mobile data, tap "Stay connected" when your phone warns about no internet, and try again — or use a laptop.
When you try to join your home Wi-Fi, the console says why it failed — for example "network not found … make sure it's 2.4 GHz" or "wrong password." Share those lines with us at protofrenz.com or on Discord and we can pinpoint it fast.
The diagnostics console needs firmware 3.0.9a or newer. On older firmware this console shows no readable text — update via the green Install button first.
This usually means a module wiring direction is off. On color matrix displays, run the Wiring Orientation test in the Diagnostics tab — it lights the four corners of each module a specific color so you can see if anything's rotated wrong. On dot-matrix builds, high device-number modules should be on the left when you're looking at the display.
On color matrix displays, run the Color Fill tests in Diagnostics — they test red, green, blue, and white separately. A pixel that shows as cyan instead of white means its red subpixel is dead. If an entire module is out, check the solder connections on the data wire leading to it.
White pixels draw much more power than other colors. This is a power supply issue — your bank either can't deliver enough current, or there's a long run of wire between the bank and the display causing a voltage drop. Try reducing brightness, or using a higher-output power bank. The controller caps brightness automatically in diagnostic modes, but if you're using all-white fills in your custom design at high brightness, you can hit this limit.
This is almost always a loose ribbon or connector, not the firmware. In the WebUI, turn on Advanced Mode and open Diagnostics → Line & glitch troubleshooter. It walks you through a couple of quick checks — which color, which panel — and tells you exactly which cable to re-seat or replace. The color of a stray line even points to the specific data wire.
Some third-party MAX7219 matrix boards are wired differently and come up mirrored. Add ?dev=1 to the WebUI address to open Developer Mode, then set MAX7219 module type / orientation to match your board (ProtoFrenz custom 1×1 modules use the "ICStation" option) and save.
Open the WebUI, go to the Options tab, and nudge the Mic Sensitivity slider one notch in either direction. That triggers a fresh calibration and usually fixes it immediately. The mic calibrates on startup for the ambient noise level it hears first — if you powered on somewhere very quiet and then moved somewhere louder, the calibration will be off.
The visualizer needs more audio input than normal mouth animation. Increase mic sensitivity and make sure music is playing at a reasonable volume nearby. Bars and Mirror visualizer styles respond more visibly to quieter input than Waterfall or Pulse.
Work down this list — greetings need a few things lined up on both suits:
And if your Frenz Met counts don't match your fren's — that's expected. Each suit counts from its own radio, and range and signal differ per suit.
Each tap steps to the next slot that's enabled and marked as a Face — check the slot's "Used by" checkboxes in the Editor. If a slot is Reaction-only, the button skips it (that's by design). And remember taps count in quick succession: pause more than about 700ms and the sequence locks in.
Updating from firmware before 3.0.12? Tap counts no longer jump to a specific expression — the button cycles now. See Faces & Reactions.
Watch the onboard LED — it should change color as you hold longer. If it's not changing at all, check that the action is enabled in the Controls tab. If it's changing color but not triggering, you might be releasing before you hit the right threshold. Hold a beat longer than you think you need to.
What's new and fixed in recent updates: