Minimal Android TV remote over ADB (WiFi), works on PC and Pydroid
Project description
Android TV Remote 📺
A lightweight Python remote control for Android TV using ADB over network.
Works on desktop and mobile (Pydroid3).
✨ Features
- 📡 ADB over WiFi (no USB required)
- 🎮 Full D-Pad control (navigation + OK)
- 🔊 Volume & Power controls
- 🏠 System buttons (Home, Back, Menu)
- ⌨️ Send text input to the device
- 🧵 Async ADB calls (non-blocking UI)
- 📱 Responsive UI (auto scaling)
- ⌨️ Keyboard shortcuts support
- 📝 Logging system (remote.log)
📦 Requirements
- Python 3.8+
- ADB installed and accessible in PATH (PC only)
⚡ Quick Start
Option 1: Install with pipx (Recommended)
pipx install adbtvremote
adbtvremote
Why pipx? Keeps the app isolated in its own virtual environment, avoiding dependency conflicts with other Python projects.
Option 2: Install with pip
pip install adbtvremote
adbtvremote
Option 3: Run from source
git clone https://github.com/DanVerseDev/android-tv-remote.git
cd android-tv-remote
pip install -r requirements.txt
python main.py
Pydroid3 (Android)
Note: On Pydroid3, this app uses a pure Python ADB implementation (
adb-shell), so no ADB binary is required.
- Install the package via pip in Pydroid3:
pip install adbtvremote
- Create a new Python script (e.g.,
run.py) with the following content:
from adbtvremote.app import main
import tkinter
main()
- Run the script in Pydroid3.
Note: Make sure
customtkinteris installed and the ADB binary is available on your Android device (manual setup may be required).
⚙️ Setup (ADB over Network)
-
Enable developer options on your Android TV
-
Enable:
- USB debugging
- Wireless debugging (if available)
-
Connect once via USB (optional but recommended):
adb tcpip 5555
- Get device IP and connect:
adb connect 192.168.x.x:5555
🚀 Usage
After installation, simply run:
adbtvremote
Or if running from source:
python main.py
Connect
- Enter IP:
192.168.x.x:#### - Click Connect
Controls
- UI buttons for navigation and system actions
- Keyboard:
- Arrow keys → Navigation
- Enter → OK
- Backspace → Back
- Escape → Home
Send Text
- Click Send Text
- Input text and send directly to device
🧠 How it works
- Uses
adb shell input keyeventfor buttons - Uses
adb shell input textfor text input - Runs ADB commands in background threads
- Logs all activity for debugging to
remote.log
📁 Project Structure
.
├── main.py
├── remote.log (generated)
└── README.md
🔁 Smart Backend
The app automatically selects the best ADB method:
- 💻 PC → Uses system
adbbinary (fast, full compatibility) - 📱 Pydroid3 → Uses pure Python
adb-shell(no ADB required)
No configuration needed.
⚠️ Notes
- Device and host must be on the same network
- Some TVs may require pairing for wireless ADB
- Text input replaces spaces with
%s(ADB limitation)
🐞 Logging
All ADB calls and errors are logged in remote.log
📄 License
MIT License - Copyright (c) 2026 Daniel Martí
Built with ❤️ by Daniel Martí aka DanVerse
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file adbtvremote-0.1.3.tar.gz.
File metadata
- Download URL: adbtvremote-0.1.3.tar.gz
- Upload date:
- Size: 7.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48d5381b6426d95d240bb7cf5df46faade05664eb70506d087ea74bc54482e3a
|
|
| MD5 |
ea3c5ecd9b5c98fd679370666a3efe22
|
|
| BLAKE2b-256 |
27639e51d85fb74a8d65a3761a7885c7bdcc774407c40b62f1ea461a9ced3c4d
|
File details
Details for the file adbtvremote-0.1.3-py3-none-any.whl.
File metadata
- Download URL: adbtvremote-0.1.3-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f736a298149dc725e01eed47ec32889f4433401b5db8f8b8c701cc4f61f0a1ec
|
|
| MD5 |
b7d07e445a2d7bc9ac59ed33d00a8d36
|
|
| BLAKE2b-256 |
96fdc2a8c2add3802b0422162411d91fbc71286bc7874f838a66a6bba6de5258
|