A powerful terminal-based remote control for Roku devices with fuzzy search, favorites, and advanced features.
- Fuzzy Launcher (
/) - Instant search across all apps with smart matching- Try typing "nflx" to find Netflix
- Shows favorites first
- Real-time filtering as you type
- Favorites - Save up to 9 apps for one-key launch
- Press
Fthen1-9to set a favorite - Press
1-9anytime to launch - Favorites highlighted in yellow in apps list
- Press
- Complete directional pad (↑↓←→)
- OK, Back, Home buttons
- Playback: Play/Pause, Rewind (b), Fast Forward
- Volume: -/= for down/up, m for mute
- Info (i) and Replay (r) buttons
- Typing Mode (
t) - Send text to Roku for search - Perfect for entering search queries, passwords, etc.
- Mouse wheel scrolls apps list (super fast, continuous wrap-around)
- Mouse wheel in Remote mode sends navigation to Roku
- Intelligent debouncing prevents command spam
- Three-panel layout: Quick Keys | Remote | Apps
- Color-coded elements
- Favorites in yellow with [F1-F9] markers
- Selected items highlighted
- Online/offline status indicator
- Real-time status messages
- Help overlay (
?) with all shortcuts
# Roku CLI tool (required)
npm install -g @dlenroc/roku
# Or check: https://github.com/dlenroc/node-roku# Clone
git clone git@github.com:Extended3652/roku_control.git
cd roku_control
# Run
python3 roku_remote_tui_main.py| Key | Action |
|---|---|
Tab |
Switch focus (Remote ↔ Apps) |
↑↓←→ |
Navigate (context-aware) |
Enter |
OK / Launch selected |
Backspace |
Back |
/ |
Open fuzzy launcher |
| Key | Action |
|---|---|
h |
Home |
Space |
Play/Pause |
r |
Replay (in Remote mode) |
i |
Info |
b |
Rewind |
m |
Mute |
- / = |
Volume down/up |
| Key | Action |
|---|---|
F |
Enter favorite assign mode |
1-9 |
Launch favorite (or set if in assign mode) |
t |
Typing mode (send text) |
r |
Refresh apps (in Apps mode) |
| Key | Action |
|---|---|
? |
Toggle help overlay |
q |
Quit |
roku_remote_tui/
├── app.py # Main application & event loop
├── __main__.py # Entry point
│
├── roku/
│ └── cli.py # Roku CLI wrapper with error handling
│
├── ui/
│ ├── renderer.py # All drawing/display (3-panel layout, overlays)
│ └── input_handler.py # Keyboard & mouse with debouncing
│
├── state/
│ └── app_state.py # Application state & business logic
│
├── storage/
│ └── favorites.py # Persistent favorites (JSON)
│
└── utils/
└── fuzzy.py # Fuzzy search algorithm
- Modular: Clean separation of concerns
- Responsive: Debounced inputs, fast UI updates
- Stateful: Remembers favorites, scroll positions
- Robust: Error handling, graceful offline mode
- Favorites:
~/.config/roku_remote_tui/favorites.json - Cache:
~/.cache/roku_remote_tui/
- First time? Press
?to see all shortcuts - Can't find an app? Press
/and start typing - Set up favorites for your most-used apps (Netflix, Hulu, etc.)
- Mouse wheel works great for scrolling long app lists
- Typing mode (
t) is perfect for search boxes in apps
Apps not loading?
- Ensure Roku is on same network
- Run
roku appsto test CLI connection - Check Roku IP in
~/.roku/config.json
Mouse wheel too slow/fast?
- Adjust
_wheel_min_gap_appsinui/input_handler.py
Contributions welcome! This project uses:
- Python 3.7+ with curses
- No external dependencies beyond roku CLI
MIT
Built with:
- Python's curses library for TUI
- @dlenroc/roku CLI tool