PyRokuMe is a single-file Python remote control for Roku devices. It auto-discovers Rokus on your network, presents a full button layout in a compact resizable window, and gets out of your way. It uses Roku's built-in ECP (External Control Protocol) over HTTP — no Roku account, no cloud, no tracking.
- Auto-discovery — finds Roku devices via SSDP multicast and a parallel IP range scan; manual IP entry as fallback
- Full remote layout — Back, Home, Mute, Power, D-pad, OK, Vol±, Ch±, Rewind, Play/Pause, FF
- Keyboard shortcuts — full keyboard mapping, fully remappable via ⚙ Settings → Edit Key Bindings
- App launcher — browse and launch installed channels directly from the remote
- Input switcher — quickly switch HDMI inputs from a popup
- Send text — type and send text character-by-character to your Roku via ECP
- Wake on LAN — send a magic packet to wake your Roku/TV from sleep; fires automatically on Power press if a MAC is saved
- Now playing — live status bar showing what's currently playing
- System tray — minimises to tray; right-click for quick actions
- Multi-device — save and quick-switch between multiple Rokus
- 6 colour themes — Dark, Terminal, Ice, Sunset, Midnight, Light — switch live with no restart
- Opacity control — slide the window transparency from 20% to 100%
- Always on Top — optional setting to keep the remote above other windows
- Auto-reconnect — silently re-establishes connection if the Roku goes to sleep and wakes
- Portable or Standard — choose on first launch: config next to the exe, or in
%APPDATA% - Resize from corner — drag the bottom-right grip to resize; drag the title bar to move
- Windows 10/11
- Python 3.8+ (not needed if using the compiled
.exe) requests(auto-installed on first launch if missing)
All other dependencies (tkinter, socket, threading, ctypes) are part of the Python standard library.
Download PyRokuMe.exe from Releases and run it. No Python required.
On first launch you'll be asked whether to run in Portable mode (config saved next to the exe) or Standard mode (config saved to %APPDATA%\PyRokuMe\PyRokuMe.json).
git clone https://github.com/VisaHolder/PyRokuMe.git
cd PyRokuMe
pip install requests
python PyRokuMe.pywpip install pyinstaller
pyinstaller --onefile --windowed --icon=app.ico --name PyRokuMe PyRokuMe.pyw| Key(s) | Action |
|---|---|
W / ↑ |
Up |
S / ↓ |
Down |
A / ← |
Left |
D / → |
Right |
Enter / Space / O |
OK / Select |
Backspace / B |
Back |
Escape / H |
Home |
I |
Info |
, / R |
Rewind |
. / F |
Fast Forward |
/ / P |
Play / Pause |
[ / - |
Volume Down |
] / + |
Volume Up |
\ / M |
Mute |
All bindings are remappable from ⚙ Settings → Edit Key Bindings.
| Name | Description |
|---|---|
| Dark (default) | Deep navy background, cyan accent |
| Terminal | GitHub-dark palette, blue accent |
| Ice | Cold deep-blue tones, sky accent |
| Sunset | Warm dark reds, orange accent |
| Midnight | Deep indigo, purple/magenta accent |
| Light | White background for bright environments |
Switch themes from the 🎨 button in the title bar. Changes apply instantly.
PyRokuMe communicates with your Roku using its built-in External Control Protocol (ECP) — a simple HTTP API that every Roku device exposes on port 8060. No pairing, no authentication.
Discovery uses two methods simultaneously:
- SSDP — sends a multicast probe to
239.255.255.250:1900and listens for Roku responses - TCP scan — probes
192.168.2.1through192.168.2.99in parallel threads, checking if port8060is open
PyRokuMe/
├── PyRokuMe.pyw # entire application — single file
├── PyRokuMe.json # auto-created: saved devices, theme, position, keybinds
├── app.ico # application icon
├── requirements.txt # pip dependencies (requests only)
├── CHANGELOG.md # version history
├── LICENSE
└── README.md
See CHANGELOG.md for the full version history.
MIT — see LICENSE for details.