Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Screen Streamer

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.


Why Screen Streamer?

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.

Key Use Cases:

  • 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.

Mobile Controls & Gestures

Screen Streamer offers unified interaction modes and full touch navigation:

Gestures & Interactions

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

Toolbar Controls

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.

Zero-Screen Broken Display Recovery

Prerequisite: First-Time Setup

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-startup

Once 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!)

Headless Zero-Screen Channels

Once configured, when booting with a dead screen:

  1. 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/.
  2. Mobile Wi-Fi Hotspot:

    • Turn on your phone's Personal Hotspot (192.168.43.*, 172.20.10.*, or 192.168.137.*).
    • The PC auto-connects to your saved hotspot, and the subnet is auto-trusted for instant access.
  3. USB Flash Drive Auto-Dropper:

    • Plugging in any USB flash drive automatically creates a LAUNCH_STREAM.html file 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.
  4. ADB Auto-Connect (Android):

    • If an Android phone with USB debugging enabled is plugged in, Screen Streamer auto-detects the device, runs adb reverse port mapping, and launches Chrome directly into the authenticated desktop stream.

Features

  • High-Performance Screen Capture: Native Windows GDI BitBlt capture + 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 (8080 HTTP, 8081 WebSocket) are occupied.
  • Automatic Shutdown: Shuts down automatically after 5 minutes if no client connects, or 45 seconds after disconnection.

Requirements

  • 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.

Quick Start

  1. Clone the repository:

    git clone https://github.com/<your-username>/screen-streamer.git
    cd screen-streamer
  2. Install dependencies:

    pip install -r requirements.txt
  3. Start the server:

    python app.py
  4. 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.

Command-Line Options

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

Examples:

# 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

Stopping & Lifecycle

  • 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+C in the terminal to stop the process.

License

MIT License

About

Ultra-low-latency, zero-install PC-to-mobile screen streamer and remote controller for Windows with native touch gestures and trackpad controls.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages