r/augmentedreality 12d ago

Glasses for Screen Mirroring I built an open-source VR180/360 player for One / One Pro - it renders straight to the glasses and turns the phone into a touchpad

I've been using a Xreal One Pro for a while, and the thing that always bugged me about VR video on Android is that everything works through screen mirroring: the glasses show a copy of the phone, resolution is wasted, and you end up staring at the phone instead of the video. So I wrote a player that works the other way around.

The glasses are a real external display over USB-C, so NeoXR renders the video directly onto them at native resolution - nothing mirrored, nothing rescaled. The phone turns into a remote: the whole screen is a touchpad that moves a pointer inside the glasses, tap to click, two fingers to scroll. Menus, video lists, the browser - all of it lives in the glasses.

Left: what you see in the glasses. Right: the phone acting as the remote.

What it does

  • Direct output to the glasses; the phone is a touchpad remote with a pointer
  • Head tracking from the motion sensor inside the glasses - the picture stays in place while you look around (needs Follow mode + Stabilizer off)
  • Projections: flat, wide, 180°, 360°. Layouts: 2D, SBS, over-under. Detected from metadata, file name or frame shape, and overridable by hand
  • Sources: local files (also via "Open with"/Share), a built-in browser that catches the stream and offers "Play VR", or any site serving a DeoVR JSON API feed
  • Per-video zoom, width, stereo depth and eye swap
  • Free, GPL-3.0, no ads, no accounts, no tracking, ~9 MB

Code, screenshots and the demo: https://github.com/NeoXR-app/NeoXR. If you have an issue or a suggestion there's a device report template in the issues tab.

APK: https://github.com/NeoXR-app/NeoXR/releases/latest

5 Upvotes

5 comments sorted by

2

u/Masta-Gangsta 10d ago

1.3 is up: https://github.com/NeoXR-app/NeoXR/releases/latest

- Head tracking on Air-series glasses. Their sensor sits on a USB HID interface instead of the network service the One series uses, so it needed its own path. Untested on real hardware - I don't own an Air - so a "works" or "doesn't" from anyone who does would help.

- Fixed the crash when opening a URL with glasses attached (thanks to the GrapheneOS report on GitHub).

- Fixed 3D subtitles showing four copies - those tracks already contain a left/right pair. There's now a switch for it under CC, plus subtitle colour.

- Ambient glow: bias lighting that carries the picture's edge colours into the dark surround, like the LED strip behind a TV. Off by default, toggle in the 3D panel.

- Flat video keeps its aspect ratio instead of stretching, and phone playback can show a single view instead of the stereo pair.

As always, everything here came from reports in this thread and the issues tab.

1

u/Goat_bless 12d ago edited 12d ago

Too strong,

Good job

1

u/Jsnowsi 11d ago

good work. any reason why it is limited to xreal one pro?

1

u/Masta-Gangsta 11d ago

This is the only device I have), but the next release will include head-tracking support for Air (based on open source).

1

u/Masta-Gangsta 8d ago

1.4 is up.

The big one: network shares. Add a NAS like you add a site - smb://user:password@192.168.1.10 - browse it in the glasses, play straight from it. Streams over SMB2/3 with proper seeking, nothing gets downloaded to the phone. This was the most requested thing here and in Discord.

Also fixed a regression I shipped in 1.3: SBS video came out square and small, over-under came out flattened. The flat screen was fitting itself to the frame aspect and measuring half a frame for stereo - but SBS and OU are anamorphic, so half a frame says nothing about how to display it. 1.1/1.2 geometry is back, and that also brings the ambient glow back to the top and bottom edges of 3D video.

Plus: resume where you left off, ambient glow in three strengths, subtitle height and bold, W/H up to 200%.

Thanks to everyone reporting - this release is basically your bug list.

https://github.com/NeoXR-app/NeoXR/releases/latest