The whole system, one script action on its way to the motor, and the access tiers. The numbers come from the spec and the firmware as of October 2026.
The system
Blue is motion going out, violet is information coming back. The radio chip only moves bytes; everything that decides anything runs on the ESP32-P4.
The planner keeps a 128 ms buffer of positions, one per millisecond. A planner stall shorter than that does not reach the motor. Below it, the low-power core gets a speed that stays valid for 4 ms, renewed every millisecond. If the main cores hang, the motor keeps its last speed for at most 4 ms, then stops.
How a funscript action reaches the motor
Every stage runs on the same clock. The player sends each action 900 ms early, the hub holds it until it is due, Kinetic² renders it on a 1 ms grid into a 128 ms buffer, and the low-power core turns that into quadrature. The curve is real planner output; the wire leg is slowed down to be visible.Steps 01 to 05 run in Phosphor, 07 to 10 on the machine. The dashed line is what comes back.
The machine picks how far ahead it accepts motion: 250, 500 or 1000 ms, and it ships at 1000. Phosphor sends each segment up to 100 ms short of that look-ahead limit, so 900 ms by default. A Wi-Fi stall shorter than that doesn't reach the stroke, because the machine already holds the next stretch.
V8 and V9, the oscillation axes, take a separate path. Phosphor resamples them at the rate the machine grants and sends them about 176 to 226 ms ahead on their own stream, and the planner adds them on top of the stroke.
Access tiers and pairing
Each tier includes the one below it. A paired client gets control unless it asked for configure and someone with configure said yes.
Anyone can watch, and anyone connected can stop the machine. Moving it takes a pairing. The page the machine serves from its own address gets control through a one-time token, never configure. A factory-fresh machine gives configure to the first client that asks, since that is normally the owner setting it up.
The Pair button
Gesture
What it does
Status
Press
Opens a 120 s pairing window. The first client to ask gets in.
spec · details draft (RFC-114)
Double press
Says yes to the one client waiting for configure. If two are waiting, it approves neither.
draft (RFC-114)
Hold 5 s
Drops every paired client to watch and ends their sessions. Pairings stay on file.
draft (RFC-114)
Hold while powering on
Config mode: Bluetooth and USB only, no Wi-Fi. The first client to ask gets configure.
spec (§13.4.1)
Power-cycle three times (no button)
Three boots in a row, each shorter than 10 s, open the pairing window on the next boot.
spec (§12.3)
Press while offline
Approves the one configure request that came over Bluetooth or USB.
draft (RFC-117)
Draft gestures are in the firmware and can change before the spec adopts them. The spec also asks for a factory-reset gesture, which is not built yet.