A high-performance Remote Controller that streams keyboard inputs from a mobile device or web browser directly to your PC.
Ever wanted to play keyboard-heavy games like Hollow Knight or navigate your media player from your couch without wearing out your laptop keyboard or buying an expensive gamepad? ROV turns your mobile phone (via a dedicated Android app or any web browser) into an ultra-low latency virtual controller. It pairs instantly via a QR code and simulates native hardware key inputs on your host machine.
- Zero Configuration Pairing: Start the server and scan the generated QR code to connect instantly.
- Dual Client Support: Use the native Android APK client or access the web-based controller page via any browser.
- Minimal Latency: Driven by low-overhead WebSockets for real-time responsiveness.
- Glassmorphic Design: A gorgeous, touch-optimized visual keyboard using modern glassmorphism aesthetics.
- Auto-reconnect & Latency Testing: Automatically measures latency in real-time and handles network dropouts gracefully.
- Native OS Simulation: Simulates keypresses at the OS level, working seamlessly with games and system shortcuts.
- Backend Server: Python 3,
asyncio,websockets,pyautogui,qrcode,pillow - Web Client: Vanilla HTML5, modern CSS3 (Glassmorphism design, Inter/Outfit typography), native ES6 WebSockets
- Mobile Client: Flutter / Dart (APKs pre-compiled)
sequenceDiagram
participant WebClient as Web / APK Client (Mobile)
participant HostServer as Python Server (Host PC)
participant OS as OS Input Queue
HostServer->>HostServer: Auto-resolve Local IP
HostServer->>HostServer: Generate QR Code for ws://<ip>:8765
WebClient->>HostServer: Scan QR & Establish WebSocket
Note over WebClient,HostServer: Connection established
loop Controller Loop
WebClient->>HostServer: "down:w" (Key Press)
HostServer->>OS: pyautogui.keyDown('w')
WebClient->>HostServer: "up:w" (Key Release)
HostServer->>OS: pyautogui.keyUp('w')
end
- Python 3.8 or higher.
- Make sure both your PC and mobile device are connected to the same local Wi-Fi network.
- Ensure that any VPN client is turned off on both devices.
Clone the repository and install the dependencies:
git clone https://github.com/aryan/Controller.git
cd Controller
pip install -r requirements.txtRun the python server from the root directory:
python src/server.pyThis will:
- Detect your local IP address.
- Launch a window displaying a QR code.
- Start the combined Web (HTTP) and WebSocket (WS) server on port
8765.
Open your phone's browser and navigate to:
http://<YOUR_PC_IP>:8765
(The exact URL will be printed in the server log on startup. You can also scan the QR code to open it directly if your QR reader supports web URLs). The web client will load a premium controller UI and automatically connect!
- Find the pre-compiled APK in the
/releasesfolder (ROV_V_2.4.5.zipcontainsrov_1.3.apk). - Sideload the APK onto your Android device.
- Open the app, tap Scan, and scan the QR code displayed on your PC screen.
Controller/
│
├── .github/ # GitHub workflows & issue/PR templates
│ └── workflows/
│ └── lint.yml # CI Linting check
│
├── assets/ # High-quality banners and logos
│ ├── banner/
│ └── logo/
│
├── docs/ # Detailed project documentation
│ ├── ARCHITECTURE.md # In-depth system design & data flow
│ ├── CONFIGURATION.md # Ports, arguments, and network settings
│ ├── CONTRIBUTING.md # Setup environment & coding standard
│ ├── FAQ.md # Latency, firewall, and connection troubleshooting
│ └── INSTALLATION.md # Setup, executable packaging, and sideloading
│
├── releases/ # Bundled pre-built binaries (EXE & APK)
│ ├── ROV_V_1.8.2.zip
│ └── ROV_V_2.4.5.zip
│
├── src/ # Core source code
│ ├── client/
│ │ └── index.html # Modern Glassmorphic Web Client
│ └── server.py # Combined WebSocket and HTTP host server
│
├── CODE_OF_CONDUCT.md # Open-source community guidelines
├── SECURITY.md # Vulnerability disclosure policy
├── CHANGELOG.md # Version history
├── LICENSE # MIT License
├── requirements.txt # Pip dependency list
└── pyproject.toml # PEP 518 project config metadata
For advanced setup and development guides, refer to:
- Architecture Details — How the protocol and simulated input loop works.
- Installation Manual — Detailed setup, PyInstaller bundling, and Android APK deployment.
- Configuration Guide — Port customisation, CLI args, and key bindings.
- FAQ & Troubleshooting — Solving latency, firewall, and Wi-Fi pairing issues.
- Contributing Guide — How to submit pull requests and set up local development.
This project communicates unencrypted over your local network. It is intended strictly for private home Wi-Fi networks. Do not share your server's QR code or run the server on public, untrusted networks, as anyone on the network could simulate keystrokes on your system. See SECURITY.md for more details.
Distributed under the MIT License. See LICENSE for more details.
- Developed out of passion to play Hollow Knight without wearing out physical keyboards.
- Special thanks to the open-source python
pyautoguiandwebsocketslibrary maintainers.