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

  1. Power on. Plug a USB-C power bank into the USB-C port on the left edge of the board. Watch for the onboard LED to light up — a solid colour means it's alive and running. The colour corresponds to your active expression (Idle by default).
    🔋
    Power bank tips: Any 5V USB-C bank works. For conventions and all-day wear, aim for 10,000mAh or higher with a port rated at 2A minimum (3–4A if you're running HUB75 RGB panels). A bank that supports "always-on" mode is ideal — some banks shut off automatically when they detect low current draw from the controller and need a button press to restart.
  2. Connect to the ProtoFrenz WiFi. Your controller broadcasts its own WiFi network — no router required. Look for a network named ProtoFrenz-XXXX (the last four characters are unique to your device). Connect to it, then open 192.168.4.1 in your browser.
    📱
    Phone showing "No internet" warnings? Your phone knows the ProtoFrenz network has no internet access and may ask if you want to switch back to a "better" network — or just quietly disconnect you. When prompted, tap "Stay connected" or "Use this network anyway". On iOS this happens automatically; on Android look for the notification and confirm you want to keep the connection. If the page doesn't load, check you're still connected to ProtoFrenz and haven't been bumped back to your home network.
  3. Select your display type. In the WebUI, tap the System tab. Find the Display Type selector and choose HUB75, MAX7219, or NeoPixel to match your hardware. Tap Apply — the controller will reboot in a few seconds. After the reboot, if you selected MAX7219 or NeoPixel, you'll also see a Module Count selector appear. Set it to the number of display modules in your chain and apply again. Your face should now appear on your display.
  4. Connect your hardware. Now plug everything in — refer to the Board Layout section for exact connector locations.
    • Display — HUB75 ribbon cable into the right-edge IDC connector, or MAX7219 5-pin / NeoPixel 3-pin into their connectors on the left edge.
    • Boop sensor — JST-XH 3-pin into the BOOP connector on the top edge. Mount the sensor pad on the face of your suit — it works through thin fabric or foam.
    • Button — JST-XH 2-pin into the BTN connector on the top edge. Route the button to wherever makes sense for your helmet.
    • Fan (optional) — 4-pin PWM fan into the FAN connector on the left edge. Speed is adjustable from the WebUI.
  5. See it come to life. Say something — the mouth should open and move in response to your voice. Touch the boop sensor and watch the eyes squint. Tap the button to cycle through your four expressions. Hold the button for 2 seconds to enter Music Mode, where the face reacts to everything around you in real time.
    🎤
    If the mouth isn't moving, head to the Options tab and nudge the Mic Sensitivity slider one notch in either direction. That triggers a fresh calibration. The mic calibrates for ambient noise on startup — if you powered on somewhere very quiet the mouth may be over-sensitive, or vice versa.

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

  1. Make it yours. Open the Editor tab in the WebUI to choose your eye, nose, and mouth presets — there are hundreds of combinations. Pick gradient colours for each expression, configure what the button does, dial in the fan speed, and adjust mic sensitivity to taste. Everything saves instantly and persists through 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 expressions, 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 expression 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 expression. 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 Button Config. Can be disabled entirely in System settings to eliminate light bleed.

Personality

Four expressions. All yours to configure.

Your face has four expression slots. Each one has its own eye, nose, and mouth design, its own color scheme, and its own personality. They're named by default, but you can rename them anything you want.

1
Idle
Your resting face. Always returns to this one automatically. No tap needed — it's the default.

2
Surprised
One tap. Holds for 6 seconds, then returns to Idle on its own.

3
Angry
Two taps. Also holds for 6 seconds. You can rename this "Feral" if that's more your vibe.

4
Dead
Three taps. Six seconds, then back to Idle. Perfect for dramatic moments.

The colored dots represent the onboard status LED color for each expression — so even inside the suit, you always know which expression you're in. All of this is fully customizable in the WebUI.

💡
The 6-second auto-return timer is completely adjustable per expression. Set it shorter for snappy reactions, longer for sustained moods, or turn it off entirely (set to 0) if you want expressions to hold until you manually switch away.

The face does things on its own, too

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

  • Blinking — the eyes close and open on their own every few seconds. Completely random timing so it never looks mechanical.
  • Nose breathing — the nose subtly expands and contracts on a slow 7-second rhythm. It's small enough that most people won't consciously notice it, but they'll feel the difference.
  • Boop squint — when someone touches the boop sensor on your face, both eyes narrow into a squint. It holds as long as they're touching. This is a fan favorite.
Physical controls

The boop sensor & button.

Two physical inputs — both fully configurable, and both usable while fully suited up.

The boop sensor

This is a capacitive touch sensor mounted on the face of your suit. It doesn't click — it just senses when someone (or you) is touching it. While you're holding it, the eyes squint. Release and they spring back to normal. It's purely about the hold — no tapping behavior.

The sensor can work through a thin layer of fabric or foam, so you can hide it invisibly in your suit's exterior.


The button — quick taps

Tapping the button switches expressions. The system counts how many times you tap in quick succession (you have about 700ms between taps before it locks in your count).

  • 1 tap → Surprised
  • 2 taps → Angry
  • 3 taps → Dead
  • 10 rapid taps → Glitch Mode (more on this in Modes)

These are the defaults. Every tap count — including which expression each number triggers and the Glitch Mode threshold — is fully reassignable in the Button tab of the WebUI.


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 Button Config 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

When you're in Music or Dance mode, just hold the button for 3 seconds. The face returns to normal. You can change that 3-second exit duration in Button Config too — anywhere from 1 to 10 seconds.

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 stops showing expressions and becomes a live audio visualizer — responding to music, voices, or any sound the microphone picks up. Exit by holding the button for 3 seconds.

Showing all display types. Select a display above to see only what's relevant to yours.

● NeoPixel

The whole matrix becomes a full-color spectrum analyzer. Five visualizer styles 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. Good for variety.
● HUB75

The full 128×32 RGB canvas becomes a spectrum analyzer with the same five styles as NeoPixel, rendered at higher resolution across both panels.

📌
HUB75 Music Mode uses the procedural face engine — the visualizer is generated in real time and fills the entire panel rather than being constrained to the face shape.
● MAX7219

No color display, so the reaction happens through brightness. Three layered effects — each independently toggleable 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. Adds a physical jolt sensation.
● NeoPixel

The whole color matrix becomes a full spectrum analyzer. 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. Perfectly balanced.
🌊
Waterfall
Frequency history scrolls down. Dense and hypnotic.
Pulse
Radial rings driven by bass, mid, and treble separately.
🔄
Auto
Cycles through all four styles on its own.

The visualizer colors follow your active expression gradient, so the color palette shifts with whatever you've configured.

● HUB75

The full 128×32 RGB panel canvas becomes a spectrum analyzer rendered at high resolution across both panels. Same five styles as NeoPixel:

📊
Bars
Full-width frequency bars across both panels.
🦋
Mirror
Symmetrical bars from center — striking at this resolution.
🌊
Waterfall
Frequency history scrolling across the full panel width.
Pulse
Radial rings driven by bass, mid, and treble separately.
🔄
Auto
Cycles through all styles automatically.
📌
HUB75 Music Mode uses the procedural face engine — the visualizer fills the entire panel canvas rather than being constrained to the face shape, giving you the most immersive reaction of any display type.
● MAX7219

Monochrome dot-matrix can't do a color spectrum, so Music Mode reacts through brightness instead. Three layered effects — enable whichever combination you like in Options:

  • Beat Slam — all modules jump to near-max brightness on every beat hit, then fall back fast. Very punchy and physical-feeling.
  • Brightness Ripple — a wave of brightness radiates outward from the center of the face with each beat. Like a shockwave through the pixels.
  • Display Shake — the whole face shifts a pixel left and right on the beat. Adds a physical jolt sensation even at a distance.

All three can run simultaneously for maximum impact, or you can dial it down to just one for a subtler effect.

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


🕺 Dance Mode

Hold the button for 4 seconds. The face keeps showing expressions, but everything gets more reactive and energetic — gradient colors shift faster, brightness pulses with the beat, background effects go into overdrive.

On color matrix builds, connected LED strips also sync up if you have them. On dot-matrix builds, beat-reactive brightness slams on every detected hit.

Three beat effects layer together on dot-matrix displays:

  • 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 out from the center of the face. Like a shockwave.
  • Display Shake — the whole face shifts a pixel left and right on the beat. Adds a physical "jolt" sensation.

You can mix and match these — all three at once, or just the ones you like. Each has its own toggle in Options.


👾 Glitch Mode

Tap the button 10 times really quickly. The face goes haywire — expressions 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

📌
You can set how many taps it takes to trigger Glitch Mode in Button Config. The default is 10, but it has to be higher than your highest expression tap count — so if you've assigned expressions up to 5 taps, Glitch Mode needs to be 6 or higher.
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 expression gradient) or a fixed solid color.

  • Undo steps back one drawing action at a time
  • Reset reverts to the last saved version
  • Clear wipes the whole canvas so you can start fresh
  • Save As creates a new named preset so you can reuse it across expressions

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. You'll see them in the preset list with small symbols in front of the name.

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


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

Select a display above to see only what applies to yours. Or read on for the full comparison.

● NeoPixel

Gradient color overlay — each expression gets its own animated color gradient that flows across the face pixels. Up to 6 color stops, 16 flow directions, adjustable speed, saved presets.

Background effects (8 total) — layered on top of the gradient, these sit behind the face shape, adding depth without covering the expression:

Sparkle
Random pixels twinkle and fade.
Fire
Flame simulation. Intensity and speed adjustable.
Comet
Bright streak with a fading tail.
Matrix Rain
Vertical falling streaks.
Breathe
Whole face pulses gently in and out.
Reactive
Flashes on detected audio beats.
Scan
A bright line sweeps the display.
Glitch
Persistent chaos. Seven sub-effects, all toggleable.
NeoPixel gradient editor

Gradient editor

NeoPixel effects overlay

Effects overlay

● HUB75

Full-panel gradient — same gradient system as NeoPixel but rendered across the full 128×32 canvas, not constrained to the face shape. The gradient fills the entire panel and the face floats on top of it.

Same 8 background effects, rendered at full panel resolution. At this scale effects like Fire and Matrix Rain are particularly striking.

HUB75 gradient editor
● MAX7219

Monochrome dot-matrix has no color layer — the face looks exactly as you draw it: sharp white pixels on black. No gradients, no effects overlay.

What it does have is a global brightness slider, and in Dance/Music mode the brightness reacts dynamically to audio. The aesthetic is clean, readable, and legible from distance — a different kind of appeal entirely.

● NeoPixel

Gradient color overlay

Each expression has its own animated color gradient that flows across the face pixels. Configure it per-expression 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 expressions
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 expression.

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. Same configuration options as NeoPixel: up to 6 color stops, 16 flow directions, adjustable speed, and the same 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 available, rendered at full panel resolution. At 128×32, effects like Fire and Matrix Rain use the whole canvas for an immersive result.

Sparkle
Subtle shimmer across the full panel.
Fire
Full-width flame simulation.
Comet
Bright streak with a fading tail.
Matrix Rain
Vertical falling streaks at panel width.
Breathe
Whole panel pulses gently.
Reactive
Flashes on detected audio beats.
Scan
A bright line sweeps the full display.
Glitch
Persistent chaos. Seven sub-effects.
● 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, and in-suit adjustment via the button hold. The whole display scales up or down uniformly, which is useful for low-light environments or battery conservation.

In Dance and Music modes, brightness becomes dynamic — reacting to audio beats with the Slam, Ripple, and Shake effects. This is how a monochrome display still manages to feel alive in a music-reactive way.

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 custom face designs, browse presets, set colors and gradient effects. Four tabs at the top let you switch between which expression you're editing — changes to one don't touch the others.
Expressions
RGB Panel display only. Configure the procedural face — pick eye, mouth, and nose shapes from a library, set the contour glow effect, and assign a per-expression gradient.
Button
Remap everything about the button. Set which tap count triggers which expression. Configure hold action durations, LED indicator colors, and the exit hold time for Dance and Music modes.
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 network name, set a password, choose Roaming or Home mode, switch display types, and update firmware wirelessly. Factory reset lives here too.
Options tab

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

Button Config tab

Button Config tab — tap counts, 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

You don't need WiFi on while you're actually wearing the suit — only when you're configuring it. You can disable it in System tab → Auto-start WiFi on boot, or assign a button hold action to toggle it on and off while you're suited up.

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, expressions, button config, 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 expressions, button config). 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:

  • Keep drawings — resets all settings (brightness, WiFi, button config, etc.) but keeps all your custom drawn presets and saved faces
  • Delete drawings — full wipe, including your custom artwork. True blank slate.
Something not right?

Let's fix it.

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

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.

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.

Button issues

🔘Button taps don't switch expressions+

Check that the expression is enabled in the Button Config tab — each expression has a checkbox that can disable it. Also check that you're tapping fast enough: taps more than 700ms apart reset the counter and the system waits for a new sequence.

⏱️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 Button Config. 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.

Connection issues

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.

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