My display:
📖 User Manual

Your face,
fully alive.

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.

ProtoFrenz 3.0 LED face controller in a protogen helmet
New in firmware 3.0.12 — Faces & Reactions. The button and boop sensor learned new tricks: your button now cycles through your Faces (one tap = next mood), and boops play Reactions. You get 8 customizable slots, up from 4 — and all your saved designs, colors, and settings carry over. If you're updating from an older version, read Faces & Reactions — the controls work differently now. Plus: your proto can now greet other ProtoFrenz suits by name when you cross paths. 🐾
Ready to update? Wireless: System tab → Check for Update in your suit's WebUI — settings preserved.
First things first

Up and running in five minutes.

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.

  1. Power on. Plug a USB-C power bank into the USB-C port on the left edge of the board. When the onboard LED lights up a solid colour, it's alive.
    🔋
    Power bank: any 5V USB-C bank works. For all-day wear aim for 10,000mAh+ and a port rated 2A minimum (3–4A for HUB75 RGB panels). Prefer a bank with "always-on" mode — some banks auto-shut-off at low current draw.
  2. Connect to the ProtoFrenz WiFi. The controller broadcasts its own network — no router needed. Join ProtoFrenz-XXXX (the last four characters are unique to your device), then open http://192.168.4.1 in your browser.
    📱
    "No internet" warning? That's normal — the suit's network is a control link, not an internet connection. Tap "Stay connected" if your phone asks, and turn off mobile data if the page won't load. Still stuck? The Connection Helper diagnoses it for you.
  3. Select your display type. In the WebUI, open the System tab, set the Display Type to match your hardware, and tap Apply — the controller reboots in a few seconds. After the reboot, a Module Count selector appears for MAX7219 and NeoPixel builds — set it to the number of modules in your chain and apply again.
  4. Connect your hardware. Plug everything in — the Board Layout section has the exact connector map.
    • Display — HUB75 ribbon cable into the right-edge IDC connector.
    • Display — MAX7219 5-pin cable into its connector on the left edge.
    • Display — NeoPixel 3-pin cable into its connector on the left edge.
    • Boop sensor — 3-pin into the BOOP connector on the top edge. The sensor works through thin fabric or foam.
    • Button — 2-pin into the BTN connector on the top edge.
    • Fan (optional) — 4-pin PWM fan into the FAN connector on the left edge.
  5. See it come to life. Say something — the mouth moves with your voice. Touch the boop sensor — the eyes squint, and a quick boop plays a Reaction. Tap the button to step to your next Face. Hold the button for 2 seconds for Music Mode.
    🎤
    Mouth not moving? Nudge the Mic Sensitivity slider in the Options tab one notch either way — that triggers a fresh calibration.

Boot sequence on a MAX7219 dot-matrix display — scrolling animation then face fade-in

  1. Make it yours. Open the Editor tab to pick eye, nose, and mouth designs, set colours, and fill your 8 Face & Reaction slots. The Controls tab remaps the button and boop sensor; Options handles brightness, fan, and mic. Everything saves instantly and survives power cycles. Have a wonderful time. 🐾

Optional next steps

🌐 Connect to your home network +

Your controller can join your home WiFi while still broadcasting its own ProtoFrenz AP — useful for updating firmware from your laptop or accessing the WebUI from multiple devices on the same network.

In the WebUI go to System → WiFi Mode and select Home — AP + connect to home network. Enter your home network name and password and tap Save WiFi Settings. After the reboot the controller will appear on your home network with a new local IP address — look for it in your router's device list, or check the System tab which will display the assigned IP once connected. You can then reach the WebUI at that IP address from any device on the same network.

⬆️ Update to the latest firmware +

Once your controller is connected to your home network, firmware updates are handled automatically — the WebUI checks for new versions and will prompt you when one is available. Just tap Update in the System tab and it handles the rest. All your saved Faces, colours, and settings are preserved across updates.

If you're having difficulty with the automatic update — or you're not connected to a home network — you can also update by connecting the controller directly to your computer via USB-C and visiting this manual page in your browser. The page will detect the connected controller and walk you through the update from there.

⚠️
Keep the power bank connected and don't close the browser tab during a firmware update. An interrupted flash is recoverable but avoidable — just don't unplug mid-way through.
Hardware

Three display types. One controller.

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.

⭐ Flagship
Color LED Matrix

Full color. Every single pixel is individually lit and colored. This is the default display type and the one most builds use.

  • 32×8 pixels, 256 LEDs total
  • Every pixel can be a different color
  • Animated gradient overlays
  • Background effects (fire, sparkle, rain, and more)
  • The pixel editor in the app is built around this
RGB Panels
RGB LED Panels

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.

  • 128×32 total resolution
  • Smooth animated face shapes
  • Soft glow edge effect
  • Full-screen music visualizer in Music Mode
  • Choose from 52 eye + 33 mouth + 24 nose shapes
Classic
LED Dot-Matrix

The original protogen look — monochrome white dots on black. Simple, crisp, and extremely low power. Great for builds where battery life is the priority.

  • Single color (set by your physical LED modules)
  • Lowest power draw of the three types
  • Available in 16, 14, or 11-module layouts
  • Beat-reactive brightness effects in Music Mode
📌
The module count setting (16, 14, or 11 modules) and the board revision selector are installer settings — you typically set these once when building the suit and never touch them again. If you bought a complete build, this is already configured for you.
NeoPixel color LED matrix face — gradient active, idle expression

NeoPixel — Color LED Matrix

HUB75 RGB LED panel face

HUB75 — RGB LED Panels

MAX7219 dot-matrix face — clean white pixels on black

MAX7219 — Dot-Matrix

All three ProtoFrenz display types side by side — NeoPixel, HUB75, MAX7219

NeoPixel · HUB75 · MAX7219 — same controller, three very different looks

Board layout

What plugs in where.

Nine connectors, all labeled on the board. Here's the full map — click any numbered connector on the diagram to jump to its description.

Onboard NeoPixel BOOP +3.3V SIG GND MAG future expansion +3.3V SIG GND BTN + MAX7219 V+ GND DIN CLK CS NeoPixel V+ GND DATA FAN V+ GND PWM TACH USB-C HUB75 ▲P1 5V OUT +5V GND 1 MIC — Onboard Microphone Onboard · MAX9814 2 BOOP — Touch Sensor JST-XH 3-pin · Top edge 3 BTN — External Button JST-XH 2-pin · Top edge 4 HUB75 — RGB LED Panels 16-pin IDC · Right edge 5 5V OUT — Power Output JST-XH 2-pin · Bottom edge 6 MAX7219 — Dot-Matrix JST-XH 5-pin · Left edge 7 NeoPixel — Color LED Matrix JST-XH 3-pin · Left edge 8 FAN — PWM Cooling Fan JST-XH 4-pin · Left edge 9 USB-C — Main Power Input USB-C · Left edge + S - + S - BTN + - GND CLK DIN CS VCC + RGB - - + FAN + PWR - HUB75 LED MIC = power in = display out = inputs & sensors 10 Onboard NeoPixel WS2812B-2020 · Onboard
1
MIC — Onboard Microphone
Onboard · MAX9814 + MEMS capsule

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.

MAG — Magnetometer / Expansion
JST-XH 3-pin · Top edge · Future expansion

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.

Pin 1V+ (3.3V) Pin 2Signal (I²C / analog) Pin 3GND
2
BOOP — Touch Sensor
JST-XH 3-pin · Top edge

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.

Pin 1V+ (3.3V) + Pin 2Signal (touch out) Pin 3GND
3
BTN — External Button
JST-XH 2-pin · Top edge

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.

Pin 1V+ (3.3V, pull-up) + Pin 2GND (button closes to ground)
4
HUB75 — RGB LED Panels
16-pin IDC ribbon · Right edge

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.

📌
The notch on the ribbon cable housing aligns with the notch on the board connector. Scrambled colors or blank panels? Flip the ribbon 180° — it's almost always an orientation issue.
5
5V OUT — Power Output
JST-XH 2-pin · Bottom edge

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.

Pin 15V OUT + Pin 2GND
6
MAX7219 — Dot-Matrix Display
JST-XH 5-pin · Left edge

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.

Pin 15V + Pin 2GND Pin 3DIN (data) Pin 4CLK (clock) Pin 5CS (chip select)
7
NeoPixel — Color LED Matrix
JST-XH 3-pin · Left edge

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.

Pin 15V + Pin 2GND Pin 3Data out
8
FAN — PWM Cooling Fan
JST-XH 4-pin · Left edge

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.

Pin 15V + Pin 2GND (via FET — switched) Pin 3PWM signal Pin 4Tach (optional, not used by firmware)
9
USB-C — Main Power Input
USB-C · Left edge

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.

💡
Aim for at least 2A for dot-matrix builds and 3–4A for RGB panel builds. A 20,000mAh bank with a 3A USB-C port will run a full HUB75 build all day at a convention.
10
Onboard NeoPixel — Status LED
WS2812B-2020 · Onboard component

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.

  • Dance & Music Mode — reacts to audio in real time, shifts with frequency, flashes white on beat.
  • Brightness cycling — steps through indicator colors as you adjust.
  • WiFi toggle — flashes to confirm on or off.

Every color and behavior is configurable in the Controls tab. Can be disabled entirely in System settings to eliminate light bleed.

Personality

Faces & Reactions.

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).

🔄
Updating from an older version? This changed in firmware 3.0.12. Button taps used to jump to a specific expression by tap count — now each tap steps to your next Face, and boops play Reactions. All your saved designs and settings carried over, and your first three slots are set as both Faces and Reactions, so boops feel exactly like before.
🔘

Faces — your moods

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.

👉

Reactions — your moments

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:

1
Idle
Your resting face. Everything returns here on its own.

2
Surprised
Face + Reaction · plays on 1 boop

3
Angry
Face + Reaction · plays on 4 boops. Rename it "Feral" if that's more your vibe.

4
Dead
Face + Reaction · plays on 8 boops. Perfect for dramatic moments.

5–8
Empty slots
Four more slots waiting for extra moods and reactions — enable them in the Editor.

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.

🎞️
HUB75 builds: any non-Idle slot can play an uploaded animated GIF instead of a drawn face — see GIF reactions in the face editor section.

The face does things on its own, too

A few automatic behaviors make the face feel alive without you doing anything:

Physical controls

The boop sensor & button.

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.

The boop sensor

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:

The boop menu — control everything with no button at all

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.

📌
The hold time to open the menu is adjustable from 2 to 6 seconds (default 5) in Controls → Touch. The cap is 6 seconds because the touch sensor hardware auto-releases after about 7 seconds of continuous touch.

The button — quick taps

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.


The button — holding

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 time LED What happens
2 sec Music Mode — face responds to sound as a visualizer
4 sec Dance Mode — full audio-reactive face animations
6 sec Fan speed — hold and release to cycle through fan speeds
8 sec Brightness — hold and release, then tap to cycle through brightness levels
10 sec WiFi toggle — turns the WiFi on or off (disabled by default)
📌
Every single one of these hold durations, LED colors, and on/off states is configurable in the Controls tab. You can shorten the timings, disable actions you don't need, and set the colors to whatever makes sense for your character.

Exiting Music and Dance modes

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.

🧭
Forget what does what? The WebUI's Help tab has a "Your controls right now" cheat sheet, generated live from your own settings — your suit carries its own quick-reference.
Performance modes

Music, Dance, and Glitch.

Three special modes that transform how the face behaves — all triggered hands-free from the button.

🎵 Music Mode

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.

● NeoPixel

The whole color matrix becomes a full spectrum analyzer, colored by your active gradient. Five visualizer styles are available in the Options tab:

📊
Bars
Classic frequency bars. Honest and satisfying to watch.
🦋
Mirror
Bars spread symmetrically from center out.
🌊
Waterfall
Frequency history scrolls down. Dense and hypnotic.
Pulse
Radial rings driven by bass, mid, and treble separately.
🔄
Auto
Cycles through all styles on its own.
● HUB75

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.

📌
On HUB75 the visualizer fills the entire panel rather than being constrained to the face shape — the most immersive reaction of any display type.
● MAX7219

Monochrome dot-matrix reacts through brightness instead of color. Three layered effects — enable any combination in Options:

  • Beat Slam — all modules jump to near-max brightness on every beat, then fade back fast. Very punchy.
  • Brightness Ripple — a wave of brightness radiates outward from the center of the face.
  • Display Shake — the whole face shifts a pixel left and right on the beat. A physical jolt, even at a distance.

Music Mode — audio spectrum visualizer reacting to sound in real time


🕺 Dance Mode

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.


👾 Glitch Mode

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

📌
The number of rapid taps that triggers Glitch Mode (default 10) is adjustable in the Controls tab.

🖼️ Custom reboot screen

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:

● HUB75

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.

● NeoPixel
● MAX7219

Show your own reboot text — your proto's name, a catchphrase — in place of the built-in boot text.

📌
Leave the image or text blank and the reboot sequence falls back to the built-in ProtoFrenz logo/text — exactly as before.
Con floor magic

Your proto says hi. 🐾

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.

Setting it up

Everything lives in the WebUI's Social tab:

🔒
Privacy first: the two switches are independent and both OFF by default — your suit never broadcasts or listens for anything unless you turn it on. Run either, both, or neither: you can announce without greeting, or greet without announcing.

Setup mode vs. Floor mode

The controller has one radio, shared between WiFi and Bluetooth — so greetings run while WiFi is off. Think of it as two hats:

🔧

Setup mode (WiFi on)

The WebUI is reachable and you can configure everything. Greetings are paused.

🐾

Floor mode (WiFi off)

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.

💡
There's a 60-second cooldown per fren between greetings — so standing next to your best fren all afternoon won't turn your face into a "HI" strobe.

Frenz Met

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.

📌
Each suit keeps its own list from its own radio. Greeting range and signal vary between suits, so two protos' counts won't always match — that's normal, not a bug.
Extra lighting

Glowing cheeks and accent rings.

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).

Effects

🎨
Solid
A steady color of your choosing.
🌈
Sync to face
The rings mirror your face's gradient — same colors, same speed — and shift when your Face does.
🫧
Breathe
A slow, calm pulse in your chosen color.
🌀
Rainbow
Hue cycles smoothly around the ring.
🎤
Audio react
The rings fill like a meter, driven by the microphone.

Wiring two cheeks

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:

💡
Brightness is capped for safety — the slider's 100% is a deliberately safe maximum, so two rings won't brown out your suit even on full white.
📌
This uses the NeoPixel connector, so it's available when your face is a HUB75 or dot-matrix display. If your face itself is a NeoPixel display, that connector already drives the face — cheek support for NeoPixel faces is planned for a future update.
Make it yours

The face editor.

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

Editor tab — face drawing canvases for eyes, nose, and mouth with preset navigation

Browsing presets

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.

Eye preset 1 — Round

Round

Eye preset 2 — Angled

Angled

Eye preset 3 — Sharp

Sharp

Eye preset 4 — Narrow

Narrow

Eye preset 5 — X Eyes

X Eyes

Eye preset 6 — Oval

Oval

Eye preset 7 — Arch

Arch

Eye preset 8 — Arrow

Arrow

Eye preset 9 — Slit

Slit

9 of 52 built-in eye presets — use the ◀ ▶ arrows in the Editor to browse the full library

Closed

Mouth preset 2 — Wave

Wave

Mouth preset 3 — Smirk

Smirk

Mouth preset 4 — Flat

Flat

Mouth preset 5 — Thin

Thin

Mouth preset 6 — Frown

Frown

Mouth preset 8 — Slight

Slight

Mouth preset 9 — Bumpy

Bumpy

Mouth preset 1 — Closed

Slice

Mouth preset 11 — Zigzag

Zigzag

10 of 33 built-in mouth presets — browse the full library with ◀ ▶ in the Editor

Drawing your own

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 & HUB75: each pixel can be set to follow the gradient or locked to a specific color. MAX7219: pixels are on or off — brightness is global, not per-pixel.
NeoPixel editor — gradient color mode with per-pixel color visible on all three canvases

NeoPixel editor — gradient color mode with per-pixel color visible on all three canvases


🌈 Animated eye presets

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.

Hearts
Pulsing, shrinking heart shapes
Stars
Twinkling star pattern
Pulse
Diamond expanding and contracting
Dizzy
Swirling spiral, overwhelmed look
Scan
Horizontal sweep line
Scan H
Vertical sweep line
Hypno
Classic hypnotic spiral
Pinwheel
Rotating pinwheel
Radar
Rotating radar sweep
Vortex
Inward-spiraling pixels
Galaxy
Drifting star field

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).


🎞️ GIF reactions ● HUB75

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.

📌
GIF slots are a HUB75 feature — MAX7219 and NeoPixel builds use the animated-eye presets for motion instead.

🎨 Colors, gradients & effects

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.

● NeoPixel

Gradient color overlay

Each slot has its own animated color gradient that flows across the face pixels. Configure it per-slot in the Editor tab.

  • Up to 6 color stops per gradient
  • 16 flow directions — left-right, diagonal, radial, square, triangle, and more
  • Adjustable scroll speed — slow and moody to fast and energetic
  • 16 built-in gradient presets: Rainbow, Fire, Ocean, Neon, Pastel, Pan, Trans, Lesbian, Nonbinary, Ace, Bi, White, Cyan, Purple — plus None (solid) and Custom
  • Save your own gradients and reuse them across slots
NeoPixel gradient editor

Gradient editor

NeoPixel effects

Effects overlay

✨ Background effects

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.

Sparkle
Random pixels twinkle and fade. Great as a subtle shimmer layer.
Fire
Flame simulation with heat-based colors. Intensity and speed adjustable.
Comet
Bright streak sweeps across with a fading tail.
Matrix Rain
Vertical falling streaks. Yes, exactly what you're thinking.
Breathe
The whole face gently pulses in and out. Very alive-feeling.
Reactive
Flashes on detected audio beats.
Scan
A bright line sweeps across the display.
Glitch
Persistent chaos. Seven sub-effects, all individually toggleable.
● HUB75

Full-panel gradient

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.

HUB75 gradient editor

✨ Background effects

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.

● MAX7219

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.

The app

Everything you need is in the browser.

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

NeoPixel Effects Overlay — all nine effects available, applied on top of the gradient

Editor
Your main workspace. Draw face designs, browse presets, set colors and gradients, and manage your 8 Face & Reaction slots — including each slot's "Used by" roles, Duration, and Boops count. Changes to one slot don't touch the others.
Controls
Remap the boop sensor and the button. The Touch section sets Reaction selection (by boop count or random) and the menu-hold time; the Button section sets tap timing, hold actions with LED colors, and the Dance/Music exit hold.
Social
Your proto's name and greeting settings. Name your proto (16 characters) and opt in to proximity greetings — Announce me, Greet frenz, and the greeting range all live here.
Options
Global settings. Brightness, mic sensitivity, glitch mode toggle, music visualizer style, edge fade, eye animation speed, mouth reactivity mode. Turn on Advanced Mode to unlock diagnostics.
System
WiFi, display type, and firmware. Change your WiFi settings, switch display types, and update firmware wirelessly. Factory reset lives here too.
Stats
Your suit keeps score. A private, on-device tally of boops, glitches, time in each mode, uptime and more — plus achievements you unlock, and the Frenz Met list of protos your suit has greeted. Everything stays on the device; clear it or turn it off anytime.
Help
Your suit's built-in quick reference. A "Your controls right now" cheat sheet generated from your own settings, a Faces-vs-Reactions explainer, LED color meanings, and quick fixes — right on the device, no manual needed.
See a "?" badge next to a setting? Tap it — every one opens a plain-language explanation of what that setting does. And settings save automatically as you change them — the only Save buttons left are for your drawings in the Editor. The 🐾 Floor button in the header switches WiFi off for Floor mode.
Options tab

Options tab — brightness, fan, mic, mouth mode, eye animation speed, Glitch Mode

Controls tab — button section

Controls tab (Button section) — hold actions with LED colors, mode exit duration

Connecting

Your suit has its own WiFi.

The controller broadcasts its own wireless network. No router, no home internet, no app install. Just connect and go.

Finding your network

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.

  1. Open WiFi settings on your phone or laptop.
  2. Find your network — it'll be ProtoFrenz-XXXX where XXXX is yours.
  3. Connect. No password by default.
  4. Open any browser and go to 192.168.4.1
  5. The WebUI opens immediately.
⚠️
Use http:// — not https://. Some browsers try to force secure connections automatically and will fail to load. If the page won't open, make sure you're typing http://192.168.4.1
📱
iPhone, iPad, and Mac users: Apple devices sometimes have difficulty loading the WebUI over the controller's built-in WiFi. This is a known iOS/macOS quirk on networks without internet — your controller is fine, but the page may stall on a loading bar that never completes.

If that happens, the easy fix is to skip the controller's hotspot entirely and add the controller directly to your home WiFi using a USB cable. See Configure Wi-Fi over USB in the Updates section. After that one-time setup, the WebUI is reachable from your Apple device through your home network just like any other website.

Two modes: Roaming and Home

🏟️
Roaming Mode
The controller only broadcasts its own WiFi hotspot. Nothing connects it to any external network. This is the default, and what you want at conventions — completely self-contained.
Default · Best for cons
🏠
Home Mode
The controller broadcasts its hotspot and connects to your home WiFi at the same time. Any device on your home network can reach the WebUI — useful for longer configuration sessions on a laptop.
Optional · Best at home

Setting a password

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.

💡
Forgot your WiFi password? Hold the button for 3 seconds while powering the controller on. The onboard LED will flash orange 3 times, which means the password has been cleared. The network goes back to open/no-password.

Turning WiFi off to save battery (and say hi)

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.

Keeping it current

Updates over WiFi. No files, no cables.

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.

Automatic update (preferred)

This requires your controller to be connected to your home network. If you haven't done that yet, see the WiFi section first.

  1. Open the WebUI and go to the System tab.
  2. Find the Firmware Update section and tap Check for Update.
  3. If a newer version is available, the Update Now button turns green and activates.
  4. Tap Update Now. The controller downloads and installs the new firmware automatically, then reboots. Takes about 2 minutes.
  5. That's it. All your WiFi settings, Faces, controls, and custom presets are preserved.
💡
No files to download, no USB cable, no Arduino IDE — ever. This is one of the things that sets ProtoFrenz apart from DIY builds. You can always check your current firmware version at the top of the System tab.

Manual upload (fallback)

If automatic update isn't available — for example, your controller isn't connected to a home network — you can upload a firmware file manually.

  1. Connect to your suit's WiFi (ProtoFrenz-XXXX) and open the WebUI at 192.168.4.1.
  2. Go to the System tab → Firmware Update section.
  3. Tap Choose File and select the .bin file.
  4. Tap Upload & Flash. A progress bar shows the upload — don't close the browser or power off during this.
  5. The controller reboots automatically when done. All your settings are preserved.
System tab — WiFi settings, firmware OTA update, and Factory Reset

System tab — Firmware Update section


Stuck or starting fresh? Install via browser.

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.

  1. Plug your ProtoFrenz into your computer with a USB-C cable.
  2. Click the green button below.
  3. When the browser asks, pick the device port labeled USB Serial with a port number (for example, USB Serial (Paired) COM3).
  4. Click InstallErase deviceNext. Wait for the progress bar (1–2 minutes).
  5. When it finishes, unplug the controller and plug it back in. Reconnect to your suit's WiFi to set up your network and customizations.
This browser doesn't support direct firmware installation. Open this page in Google Chrome or Microsoft Edge on a desktop or laptop computer. Firmware installation requires a secure (HTTPS) page connection.
⚠️
This installation method resets all your settings (WiFi, custom Faces, controls). After it finishes, you'll reconnect to your suit's WiFi and set things up again. After this one-time install, all future updates can happen wirelessly through the WebUI without resetting anything.

Configure Wi-Fi over USB

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.

  1. Plug your ProtoFrenz into your computer with a USB-C cable.
  2. Open this manual page in Google Chrome or Microsoft Edge on a desktop or laptop. (Works on Windows, Mac, and Linux. Safari and Firefox don't support the underlying USB API.)
  3. Scroll up to the green Install Latest ProtoFrenz Firmware button and click it.
  4. When the browser asks, pick the device port labeled USB Serial with a port number (for example, USB Serial (Paired) COM3).
  5. The dialog will offer two options. Click Configure Wi-Fi. (If your firmware is out of date, you may want to click Install first to update, then come back to this step.)
  6. In the form that appears, pick your home Wi-Fi network from the list (or choose Join Other… to type the name manually), enter the password, then click Connect.
  7. Wait about 15 seconds. The controller connects to your home network and the dialog displays a clickable link to its WebUI — something like http://192.168.1.42. Click that link to open the WebUI in your browser.
  8. That same URL also works from your iPhone, iPad, or Mac as long as they're on the same home WiFi. Bookmark it for easy access.
📶
The network list only shows compatible networks. The controller is 2.4 GHz only, so the picker only lists 2.4 GHz networks it can actually join. If your home network isn't in the list, it's almost certainly a 5 GHz network — connect to your router's 2.4 GHz network instead (many routers broadcast both under similar names). On firmware older than 3.0.9a the list stays empty; there, use Join Other… to type the name in.
💡
After this setup, your home Wi-Fi credentials are saved on the controller. Every time you power it on at home, it auto-connects to your home network and the WebUI is reachable from any device on that network — no further configuration needed. At conventions or when you're away from home, the controller falls back to its built-in WiFi network as usual.
⚠️
If you don't see a Configure Wi-Fi option in the dialog (only Install and Logs), your firmware is older than 3.0.8 — that version added the USB Wi-Fi setup. Click Install first to update, then close the install dialog completely and click the green button again. The Configure Wi-Fi option will appear in the new dialog after the device reboots.

Factory reset

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:

Something not right?

Let's fix it.

Most issues have a fast fix. Start here before anything else.

Connection issues — start here

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.

This helper needs Chrome or Edge on a computer (not a phone, not Safari/Firefox). On a phone, follow the written steps below instead.
Show technical details
📡I can't find the WiFi network+

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.

🌐The WebUI won't load+

Work through these in order — they fix the vast majority of cases:

  1. Turn off mobile data / cellular on your phone while connected to the suit's hotspot. With it on, your phone tries to load the page over cellular instead of from the suit, and it never loads. (The suit's hotspot showing "no internet" is normal and expected — it's a setup hotspot, not an internet connection.)
  2. Use a real browser, not the "Sign in to network" pop-up. That pop-up shows a small ProtoFrenz page with the address, but it can't run the full control panel itself. Open Chrome or Safari and go to 192.168.4.1.
  3. Type the full address including http://http://192.168.4.1. Some browsers silently switch to https://, which won't load.
  4. Still stuck? Try a private/incognito window, a different browser, or a laptop. The controller serves one user at a time — close any other connected tab.
💾My settings don't save across reboots+

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.

It loads partway, then disappears or sticks on "Connecting…"+

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."

  • Turn off mobile data, and when your phone asks "stay connected to a network with no internet?", choose Stay / Yes.
  • On Samsung/Android, turn off "Smart network switch" / "Adaptive Wi-Fi" / "Auto switch to mobile data" (Wi-Fi settings → ⋮ menu → Intelligent/Advanced Wi-Fi).
  • Hold the phone right next to the suit to rule out a weak signal.
  • Or use a laptop — laptops handle no-internet networks far more gracefully than phones do.
📶"Configure Wi-Fi" says Timeout / Unable to connect+

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.

  • Check whether your network even appears in the dropdown list. The suit can only see 2.4 GHz networks, so if yours isn't listed, that confirms it's a 5 GHz network — switch to the 2.4 GHz one.
  • Make sure you're giving it your 2.4 GHz network. You may need your router's separate 2.4 GHz name, or to temporarily turn off "band steering" in the router settings.
  • Quick test: turn on a phone hotspot set to 2.4 GHz and connect the suit to that. If it joins, your home network is the 2.4/5 GHz issue.
  • Double-check the password — it's case-sensitive.

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.

🔎Reading the diagnostics console (Logs & Console)+

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 again

Quick 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:

🟢 It's working — you see GET / and then GET /api/status repeating. Your phone and the suit are talking fine. If the page still looked stuck, just refresh it.
🟡 Loads, then sticks on "Connecting…" — you see 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.
🔴 Nothing happens — you see no 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.


Display issues

🖥️The face looks upside down or mirrored+

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.

💡Some pixels are the wrong color or completely off+

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.

The controller keeps restarting when the face gets bright+

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.

📶Flickering lines or stray dots on a P3 (HUB75) panel+

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.

🔁Dot-matrix (MAX7219) modules look mirrored or flipped+

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.

Sound issues

🎙️The mouth doesn't move when I talk+

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.

🎵Music Mode visualizer barely moves+

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.

Greeting issues

🐾My suit isn't greeting other suits (or they aren't greeting me)+

Work down this list — greetings need a few things lined up on both suits:

  • WiFi must be OFF on both suits — greetings only run in Floor mode (WiFi and Bluetooth share one radio). Tap the 🐾 Floor button or use the face menu.
  • Check the opt-ins: the suit being greeted needs Announce me on; the suit doing the greeting needs Greet frenz on (Social tab). Both are off from the factory.
  • Range: "Close" only triggers at booping distance — try "Same room" or "Across the hall".
  • Cooldown: each fren is greeted at most once per 60 seconds. Walk apart and come back.
  • Both suits need firmware 3.0.12 or newer.

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.

Button issues

🔘Button taps don't change Faces (or skip one you expected)+

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.

⏱️Hold actions don't trigger+

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.


Recently improved & fixed

What's new and fixed in recent updates:

💡
Still stuck? Join the ProtoFrenz Discord — the community there is full of people who've seen and solved almost every issue that comes up. And we're in there too.