MENTIFABERThe workshop · drawn at night
Sheet
08 / 41
Grid
MF-01·07
Drawn
Anders
Date
28.10.2026
Fig. 1 · Phosphor, on the bench: power it on to run it hereMF-01·07

01Why it exists

The TV was already listening

Every Roku runs a small web server on port 8060, the External Control Protocol, and it accepts button presses from anything on the same network: no pairing, no PIN. The official app wraps that in an account and a store listing. Phosphor just talks to it directly, and the remote below shows you every request it sends.

02Parts list

  1. Finds the TVSSDP discovery over UDP (an M-SEARCH for roku:ecp), or add one by IP. Several TVs are saved, and the last one used is remembered.
  2. Every buttonD-pad and OK, Back, Home, Replay and Options, play, rewind and fast-forward, volume and mute. Hold a direction and it sends keydown, lets the TV repeat, then keyup.
  3. Inputs and channelsAntenna, HDMI 1–4 and AV, one tap each. The installed channels come from /query/apps as an icon grid; tap one to launch it.
  4. A real keyboardType into whatever field has focus on the TV. Every character goes out as Lit_, so search boxes and sign-in forms stop being a d-pad ordeal.

03Construction

Why a server

A browser can't open the raw UDP socket that SSDP discovery needs, and a TV doesn't send the headers a web page would need to talk to it cross-origin. So a tiny Node server sits on the same network and relays: the page talks to the server, the server talks to the TV, and nothing leaves the house.

The relay checks that every device address is a plain IPv4 address before it will reach for it, so it can't be pointed at hostnames, ports or URLs.

NodeExpressSSDPRoku ECPvanilla JS

Desktop shortcuts

Arrow keys move, Enter is OK, Backspace is Back, Escape is Home. With the keyboard field focused, typing goes to the TV instead.

04Tolerances

Button presses need one setting on the TV: Control by mobile apps set to Enabled. Roku OS 14.1 and later ship it on Limited, which answers questions but refuses every key press, and the app says so when it finds a TV like that. Power off works on every TV. Power on (the app sends a Wake-on-LAN packet, then PowerOn) only works on Roku TVs with Fast TV Start enabled: a TV that's fully off has taken its network down with it, so nothing can wake it remotely. The demo has one TV of each kind so you can see the difference. The relay has no login: it's meant for a home network, and anyone on that network could use it, just as they could use the TV's own protocol. The Android app talks to your real TVs. A browser can't reach a TV on your network, so the TV and relay on this page are simulated; the requests are the real ones, and the real proof is the living-room TV.

what it is not, said plainly

05Inscription

The remote was always a web page. It just never had one.

06The same room