Control your PC volume and media playback from your phone using a secure PIN, QR auto-connect, and a public tunnel that works across different networks.
This project includes a resilient local server with auto-reconnect logic for tunnel drops, so your remote control link stays available much longer without manual restarts.
This app has two parts:
- PC App (Node.js server): runs on your computer and controls system audio/media.
- Web App (mobile UI): open on phone and connect using QR + PIN.
Works over:
- Same Wi-Fi network.
- Different networks (4G/5G/Wi-Fi) through localtunnel.
This project was built to solve a simple real problem: controlling PC sound is often inconvenient when you are away from your keyboard.
Why this is useful:
- You are watching movies/music on PC from bed and do not want to get up for volume changes.
- Your PC is connected to speakers/TV in another room.
- You want quick media control from phone during meetings, presentations, or streaming.
- You need remote access even when phone and PC are not on the same Wi-Fi.
When to use it:
- Home media setup (PC as media hub).
- Small office/presentation environments.
- Personal automation projects where lightweight remote sound control is needed.
In short, this project turns your phone into a practical remote control for PC audio and playback, with secure PIN access and reconnect-safe behavior.
- QR-based auto connect flow.
- 4-digit PIN authentication.
- Live volume read and control.
- Mute/unmute toggle.
- Media keys: previous, play/pause, next.
- Tunnel auto-reconnect with retry strategy.
- Heartbeat monitoring to recover stale tunnel sessions.
- Auto-restart batch launcher for long-running use.
- Backend: Node.js, Express, localtunnel, loudness.
- Frontend: HTML, CSS, JavaScript, Bootstrap, html5-qrcode.
- OS Integration: PowerShell media key events on Windows.
From the project root:
cd pc-app
npm installDouble click start-app.bat or run:
start-app.batYou will see:
- A QR code in the terminal.
- A PIN code.
- A public URL generated by localtunnel.
- Open the web app URL generated by localtunnel.
- Enter the PIN.
- Control volume and media.
This project now includes:
- Tunnel close/error recovery.
- Health-check heartbeat every 30 seconds.
- Automatic tunnel rebuild if heartbeat fails repeatedly.
- Auto-restart loop in
start-app.batif Node process exits.
If your tunnel subdomain is busy, it automatically falls back to a random URL.
Optional custom subdomain:
set SC_TUNNEL_SUBDOMAIN=my-sound-control
start-app.bat- QR/PIN not visible:
Keep the
start-app.batwindow open (minimized is okay). - Phone shows disconnected: Wait a few seconds for auto-reconnect, then rescan QR if tunnel URL changed.
- Media keys do not respond: Try running terminal as normal desktop user session (not service/remote context).
- Port 3000 already in use:
Close conflicting app or change port in
pc-app/index.js.
- Access is guarded by a 4-digit session PIN.
- PIN is regenerated each time server starts.
- Protected routes require
x-auth-pinheader.
For stronger security, keep usage limited to trusted devices.
Have an idea? We'd love to hear it:
- Check existing requests
- Create a new issue with:
- Detailed description
- Use case explanation
- Potential implementation ideas
I built this for myself, but I'd love to see what you can add! Here's how to contribute:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request🎯
Star | Issue | Discussion
This project is licensed under the MIT License - see the LICENSE file for details.
TL;DR: You can use this freely, modify it, sell it, whatever. Just don't blame me if something ______!😪
This tool is created for educational and research purposes only. Do not use it for any illegal activities. The creator is not responsible for any misuse, damage, or legal consequences caused by the use of this tool. By using this project, you agree that you are doing so at your own risk and for learning purposes only.
Made with ❤️ and lots of 💦 by BotolMehedi


