Open-source VR desktop experiment

Your screen. In VR.

Turn an iPhone and a cardboard viewer into a wired virtual display. No expensive headset. No cloud. Just USB and an unreasonable amount of curiosity.

  • 10–60target FPS
  • USBwired first
  • GPL-3.0open source
NERDLENS // LIVE 30 FPS
DISPLAY 01 YOUR DESKTOP
ESCAPED.
STREAMING OVER USB
JPEG // TCP :12345
The pitch

A virtual monitor should not require another mortgage. NerdLens explores the scrappy version: hardware you already have, a cable you already own, and a stack you can take apart.

Under the hood

One screen.
Four hops.

The whole system is deliberately legible. Capture it, compress it, tunnel it, render it. No black-box streaming service in the middle.

01

Capture

The Svelte desktop UI grabs the display or window you choose.

getDisplayMedia()
02

Compress

Frames become straightforward JPEG payloads in the Tauri host.

image/jpeg · 0.8
03

Tunnel

A tiny TCP protocol rides a local USB tunnel to the phone.

iproxy :12345
04

Render

Unity paints each frame onto a display inside Cardboard VR.

Texture2D.LoadImage
Dial it in

Your viewport,
your rules.

Preview the stream, watch the connection, choose a target frame rate, and push the display deeper into your virtual space—all from the desktop host.

Live preview Distance control Reconnect attempts
STREAM CONTROL CONNECTED
LIVE FEED
DISPLAY DISTANCE 38
1,842frames sent
30target FPS
3456×2234resolution
Source-build friendly

Three moves.
Then headset.

NerdLens is a proof of concept, so setup is still a hands-on affair. Bring an iPhone, Google Cardboard, Unity 6, and a Mac with Xcode.

Read the full setup guide
nerdlens — zsh
# 01 — clone it
$ git clone https://github.com/ThatXliner/NerdLens.git

# 02 — tunnel it
$ iproxy 12345 12345

# 03 — launch it
$ cd NerdLens/desktop
$ bun install --frozen-lockfile
$ bun run tauri dev
The screen is not the limit

Strap in.
Ship pixels.

NerdLens is early, open, and asking to be made delightfully overengineered.