Ultra-low-latency, zero-install PC-to-mobile screen streamer and remote controller for Windows.
Stream your Windows desktop to any smartphone, tablet, or browser on your local Wi-Fi, mobile hotspot, or USB tethering with touch, trackpad, and word-buffered keyboard controls. No client apps, no hardware dongles, and no root permissions required.
Whether dealing with a damaged laptop display, needing a secondary touch display, or monitoring and controlling a PC remotely, Screen Streamer provides an instant, zero-friction solution.
- Dead or Broken Laptop Display: Emergency display access to navigate Windows, run commands, or rescue files when your laptop screen is dead, black, or shattered, without needing an external HDMI monitor.
- Zero-Install Mobile Mirroring: Turn any smartphone or tablet (iOS / Android) into a live Windows mirror directly in the mobile browser—no App Store downloads or APK installations required.
- Wireless Trackpad & Remote Control: Control presentations, media playback, or long-running tasks across the room with touch gestures or a virtual trackpad mode.
- Private & Local: Streams directly over your local network, phone hotspot, or USB tether with zero cloud relay.
Screen Streamer offers unified interaction modes and full touch navigation:
| Gesture / Action | Mode | Effect |
|---|---|---|
| Single Tap | Touch | Left-click at touch location (direct 1:1 mapping) |
| Single Tap | Select | Click / release selection point |
| Single Tap | Trackpad | Left-click at current cursor position (without jumping) |
| Double Tap | Touch / Select | Double-click (opens files, applications, folders) |
| Long Press (> 0.5s) | All Modes | Right-click (opens context menu) |
| One-Finger Drag | Touch | Move mouse cursor smoothly across screen |
| One-Finger Drag | Select | Hold left mouse down and drag (box select files, drag windows, highlight text) |
| One-Finger Drag | Trackpad | Relative cursor glide (like a laptop touchpad) |
| Two-Finger Tap | All Modes | Alternative Right-click |
| Two-Finger Drag | All Modes | Smooth vertical scroll (when unzoomed) or Pan (when zoomed) |
| Pinch (2 Fingers) | All Modes | Pinch-to-zoom (1.0x to 3.5x) smoothly |
| Control | Description |
|---|---|
| Mode (Touch / Select / Trackpad) | Single cycle button switching between direct Touch (1:1 tap), Select (mouse drag/highlighting), and Trackpad (relative glide). |
| ⊞ Win | Instant 1-tap trigger sending the Windows key (VK_LWIN) to toggle the Start Menu and auto-hiding taskbars without fighting with mobile bezels. |
| Zoom (1.0x / 1.5x / 2.0x / 3.0x) | Cycles through zoom magnification presets or resets back to standard 1.0x view. |
| Rotate | Toggles widescreen landscape orientation. Intelligent axis detection ensures mouse and trackpad directions stay aligned whether the phone is physically turned or forced via CSS. |
| Keyboard | Opens floating remote keyboard dock with Word-Buffered Typing. Words are held until Spacebar or Enter is pressed, preventing autocorrect or swipe errors from sending garbled inputs. Backspacing when empty sends a Windows Backspace. |
| Quality | Switch between Ultra, High (60 FPS), Balanced, Performance, and Eco streaming profiles, or toggle the real-time FPS counter. |
| Close | Prompts to disconnect the session and trigger an immediate clean shutdown on the PC. |
Important
You will need an external display (HDMI cable to a TV or monitor) just once for the initial setup. If your laptop screen is already 100% black or shattered and you have never set up Screen Streamer before, Windows cannot magically run unconfigured Python code on its own.
Hook up an HDMI cable to your TV or an external monitor one time to clone this repository, install requirements, and run:
python app.py --install-startupOnce that one-time installation is done, disconnect the HDMI cable and pack away the external screen! On every future boot, Screen Streamer will launch completely headless in the background, auto-detect your phone, and mirror your desktop without ever needing a physical display again.
(And here's wishing your screen gets repaired or replaced soon so you don't have to navigate your digital life through emergency mobile life support forever!)
Once configured, when booting with a dead screen:
-
Direct USB Cable (USB Tethering) - Recommended:
- Plug your Android phone into the PC with a standard USB cable and toggle USB Tethering in phone settings.
- This creates an isolated hardware subnet (
192.168.42.*) between the PC and phone. - Screen Streamer automatically identifies this as a trusted direct hardware connection and authenticates automatically—no access keys, passwords, or QR codes required! Simply navigate to
http://192.168.42.x:8080/.
-
Mobile Wi-Fi Hotspot:
- Turn on your phone's Personal Hotspot (
192.168.43.*,172.20.10.*, or192.168.137.*). - The PC auto-connects to your saved hotspot, and the subnet is auto-trusted for instant access.
- Turn on your phone's Personal Hotspot (
-
USB Flash Drive Auto-Dropper:
- Plugging in any USB flash drive automatically creates a
LAUNCH_STREAM.htmlfile on the drive containing direct connection links to all active network adapters. - Opening this file from another computer, tablet, or phone immediately connects to the stream.
- Plugging in any USB flash drive automatically creates a
-
ADB Auto-Connect (Android):
- If an Android phone with USB debugging enabled is plugged in, Screen Streamer auto-detects the device, runs
adb reverseport mapping, and launches Chrome directly into the authenticated desktop stream.
- If an Android phone with USB debugging enabled is plugged in, Screen Streamer auto-detects the device, runs
- High-Performance Screen Capture: Native Windows GDI
BitBltcapture + SIMD JPEG compression delivering responsive 60+ FPS over local Wi-Fi. - Auto-Closing Desktop QR Card: Displays a desktop QR code window that closes automatically as soon as a mobile client connects.
- Pinch-to-Zoom & Pan: Smooth 1.0x–3.5x magnification with accurate touch coordinate translation for small UI elements.
- Virtual Trackpad Mode: Relative cursor glide and tap-click controls for precise mouse operations.
- Word-Buffered Mobile Typing: Keeps typed text buffered on the phone until Spacebar or Enter is tapped, preventing erratic keystrokes from mobile predictive keyboards.
- Orientation Lock Bypass: Rotate the canvas 90° into landscape view inside the browser without requiring phone system auto-rotate.
- Windows Keep-Awake: Automatically prevents Windows from sleeping, locking, or powering down the display while streaming.
- Auto-Start on Boot: Supports installing a silent background launcher into the Windows Startup folder.
- Auto-Port Allocation: Automatically binds to free ports if default ports (
8080HTTP,8081WebSocket) are occupied. - Automatic Shutdown: Shuts down automatically after 5 minutes if no client connects, or 45 seconds after disconnection.
- Operating System: Windows 10 or 11 (64-bit recommended)
- Python: 3.10 or higher
- Network: PC and mobile device on the same Wi-Fi network, mobile hotspot, or USB tether.
-
Clone the repository:
git clone https://github.com/<your-username>/screen-streamer.git cd screen-streamer
-
Install dependencies:
pip install -r requirements.txt
-
Start the server:
python app.py
-
Connect your mobile device:
- Scan the QR code displayed in the desktop window or printed in the terminal.
- Alternatively, navigate to the printed URL (e.g.
http://192.168.1.100:8080/?token=...). - The desktop QR card automatically closes once the connection is established.
| Flag | Description | Default |
|---|---|---|
--port <number> |
Starting port for HTTP web interface | 8080 |
--view-only |
Mirror screen only; disables remote mouse and keyboard input | Disabled |
--no-timeout |
Disable automatic idle shutdown timer | 5 min idle / 45s disconnect |
--token <key> |
Specify a custom static access token | Cached in .token |
--new-token |
Generate and save a new random access token | Disabled |
--no-qr |
Suppress terminal QR code output | Disabled |
--no-gui |
Suppress desktop QR popup card | Disabled |
--no-minimize |
Keep terminal open instead of auto-minimizing on connect | Auto-minimize enabled |
--install-startup |
Install silent launcher (ScreenStreamer.vbs) to Windows Startup folder and exit |
None |
--uninstall-startup |
Remove launcher from Windows Startup folder and exit | None |
# Run view-only screen sharing on port 9000 without auto-shutdown
python app.py --port 9000 --view-only --no-timeout
# Register Screen Streamer to start automatically on Windows boot
python app.py --install-startup
# Remove Screen Streamer from Windows startup
python app.py --uninstall-startup- Mobile Toolbar: Tap the Disconnect & Shut Down button in the mobile HUD to terminate the server.
- Client Disconnect: Closing the mobile browser tab initiates a 45-second reconnection countdown before the server shuts down automatically.
- Idle Timeout: If no client connects within 5 minutes of server launch, it exits automatically.
- Console: Press
Ctrl+Cin the terminal to stop the process.
MIT License