Desktop remote control application for Android TV using direct connection
Project description
QT Android Remote
A desktop remote control application for Android TV devices using direct connection via the androidtvremote2 protocol.
Screenshot
Features
- Direct Connection: Connect directly to Android TV devices without requiring Home Assistant
- Device Discovery: Automatically discover Android TV devices on your network using Zeroconf
- Pairing Wizard: Easy step-by-step pairing process with Android TV devices
- Full Remote Control: Complete remote control functionality including:
- D-pad navigation (arrow keys, OK button)
- Power control
- Volume control and mute
- Media controls (play/pause, stop, rewind, fast forward)
- Home and back buttons
- App launching (YouTube, Netflix, and custom apps)
- Text input support
- Keyboard Shortcuts: Control your Android TV using keyboard shortcuts
- Multiple Remotes: Manage multiple Android TV devices
- Cross-Platform: Works on Windows, macOS, and Linux
- System Theme Support: Automatically adapts to your system's light/dark theme
Installation
From PyPI (Recommended)
pip install qt-android-remote
From Source
- Clone the repository:
git clone https://github.com/dmarkey/qt-android-remote.git
cd qt-android-remote
- Install dependencies:
pip install -e .
Usage
Starting the Application
qt-android-remote
Or if installed from source:
python -m qt_android_remote.main
Setting Up Your First Remote
- Launch the application and click the "+" button to add a new remote
- Device Discovery:
- Click "Scan Network" to automatically discover Android TV devices
- Or manually enter your Android TV's IP address
- Connection Details: Configure the client name that will appear on your Android TV
- Pairing:
- The app will connect to your Android TV and start the pairing process
- A pairing dialog will appear on your Android TV screen
- Enter the 6-digit pairing code shown on your TV
- Name Your Remote: Give your remote a descriptive name
- Done: Your remote is now ready to use!
Keyboard Shortcuts
- Arrow Keys: Navigate (D-pad)
- Enter/Space: OK/Select
- Escape/Backspace: Back
- Home: Home button
- M: Menu
- P: Power
- +/-: Volume up/down
Supported Android TV Devices
This application works with any Android TV device that supports the Android TV Remote protocol v2, including:
- NVIDIA SHIELD TV
- Google Chromecast with Google TV
- Sony Android TVs
- Philips Android TVs
- TCL Android TVs
- And many more Android TV devices
Requirements
- Python 3.10 or higher
- PySide6
- androidtvremote2
- zeroconf
- cryptography
- protobuf
Configuration
Configuration files are stored in platform-specific locations:
- Windows:
%APPDATA%\QTAndroidRemote\ - macOS:
~/Library/Application Support/QTAndroidRemote/ - Linux:
~/.config/qt-android-remote/
The configuration includes:
remotes.json: Remote configurationscerts/: SSL certificates for each paired device
Troubleshooting
Cannot Discover Devices
- Ensure your Android TV and computer are on the same network
- Check that your Android TV has "Network remote control" enabled:
- Go to Settings > Device Preferences > About > Android TV OS build
- Click 7 times to enable Developer options
- Go to Settings > Device Preferences > Developer options
- Enable "Network debugging"
Pairing Issues
- Make sure your Android TV is turned on and connected to the network
- Try restarting the Android TV Remote Service:
- Go to Settings > Apps > See all apps > Show system apps
- Find "Android TV Remote Service"
- Force stop and restart it
- Clear the Android TV Remote Service data if pairing continues to fail
Connection Problems
- Verify the IP address is correct
- Check firewall settings on both devices
- Ensure the Android TV Remote Service is running
- Try re-pairing the device
Development
Setting Up Development Environment
- Clone the repository:
git clone https://github.com/dmarkey/qt-android-remote.git
cd qt-android-remote
- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install development dependencies:
pip install -e ".[dev]"
Running Tests
pytest
Code Formatting
black qt_android_remote/
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- androidtvremote2 - The underlying Android TV remote protocol implementation
- ha-desktop-remote - UI inspiration and design patterns
- Google's Android TV Remote protocol documentation
Related Projects
- androidtvremote2 - Python library for Android TV remote protocol
- ha-desktop-remote - Home Assistant desktop remote control
Support
If you encounter any issues or have questions, please:
- Check the troubleshooting section
- Search existing GitHub issues
- Create a new issue with detailed information about your problem
Changelog
v1.0.0
- Initial release
- Direct Android TV connection support
- Device discovery via Zeroconf
- Complete pairing wizard
- Full remote control functionality
- Keyboard shortcuts
- Multi-device support
- Cross-platform compatibility
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 qt_android_remote-1.0.4.tar.gz.
File metadata
- Download URL: qt_android_remote-1.0.4.tar.gz
- Upload date:
- Size: 2.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d27612ca0a75e6c1c6d03838d89b6fffd98d977b418a99a60b0c050955229b4
|
|
| MD5 |
c95b939967f4027b0fc1f658e22d3c93
|
|
| BLAKE2b-256 |
d857e8a58e3af8358af2be6e332ac93cf1f2b8fe52c6de527f44cfec58045347
|
Provenance
The following attestation bundles were made for qt_android_remote-1.0.4.tar.gz:
Publisher:
publish.yml on dmarkey/qt-android-remote
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qt_android_remote-1.0.4.tar.gz -
Subject digest:
5d27612ca0a75e6c1c6d03838d89b6fffd98d977b418a99a60b0c050955229b4 - Sigstore transparency entry: 1228537380
- Sigstore integration time:
-
Permalink:
dmarkey/qt-android-remote@b787c87696b2e8cc3ed80ae77d1eb04579fe8b22 -
Branch / Tag:
refs/tags/v1.0.4 - Owner: https://github.com/dmarkey
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b787c87696b2e8cc3ed80ae77d1eb04579fe8b22 -
Trigger Event:
release
-
Statement type:
File details
Details for the file qt_android_remote-1.0.4-py3-none-any.whl.
File metadata
- Download URL: qt_android_remote-1.0.4-py3-none-any.whl
- Upload date:
- Size: 1.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6476004dd00c1e8751bf5520c63bcca42d87ea9c970e8b430b9f14ba15f0a86f
|
|
| MD5 |
74fd62d6416c89497c827a09f3a84ae8
|
|
| BLAKE2b-256 |
3d33004b8693fb664aa7a0d8fabff6ec00c185d43c0e91b09968b943f2528bee
|
Provenance
The following attestation bundles were made for qt_android_remote-1.0.4-py3-none-any.whl:
Publisher:
publish.yml on dmarkey/qt-android-remote
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qt_android_remote-1.0.4-py3-none-any.whl -
Subject digest:
6476004dd00c1e8751bf5520c63bcca42d87ea9c970e8b430b9f14ba15f0a86f - Sigstore transparency entry: 1228537395
- Sigstore integration time:
-
Permalink:
dmarkey/qt-android-remote@b787c87696b2e8cc3ed80ae77d1eb04579fe8b22 -
Branch / Tag:
refs/tags/v1.0.4 - Owner: https://github.com/dmarkey
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b787c87696b2e8cc3ed80ae77d1eb04579fe8b22 -
Trigger Event:
release
-
Statement type: