Releases: tB0nE/nightfall
v0.6.0
MAJOR Image quality improvement! 😈
Right after the previous release I was working on some minor positioning bugs, but stumbled upon an optimisation that improves the image quality wildly. By moving from rendering a mesh to using an OpenXR composition layer, the screen and UI look nearly native on the Quest 3s.
This did require redoing pretty much all the UI, but it was totally worth it. Test it out, you should find the streaming quality to be very pleasing to the eyes now.
I also made some improvements to fix the screen positioning that was moving about, and the UI and keyboard moving and tilting has been improved.
SNEAKY EDIT: PCVR SUPPORT! - I've added a linux appimage to run the application over WiVRN. I only tested as far as connecting onto a stream and moving around the desktop, but would love to get feedback.
v0.5.0
Nightfall v0.5.0
This is the first real public release of Nightfall! A VR first gamestream client for the Quest 3/3s. I am excited for people to try it out and hear your feedback (and lots and lots of bugs!)
Usage should be straight forward, download the apk, sideload it to the quest, start the app, find your sunshine/apollo server and pair it. B brings up the menu, A brings up a keyboard, if needed. Moving screens around works like the Quest OS roughly. I would recommend using a curved screen and smoothing on 20-30%. Performance isn't great at 4k, but I am working on it!
NOTE: If you don't see anything on start up, just look around for the screen and the UI menu, it is meant to appear in front of you, but in my testing it likes to appear in completely the wrong place.
Features
- VR-native streaming - floating screen in 3D space with grab bars, corner resize, and curvature options
- HEVC hardware decoding - NDK MediaCodec pipeline for low-latency H.265 on Quest 3/3S
- AI Stereoscopic 3D - real-time AI depth conversion via MiDaS turns any 2D game into stereoscopic 3D, no server-side setup required
- SBS support - Stretch and Crop modes for native side-by-side 3D content
- Shader smoothing & sharpening - Gaussian blur plus CAS adaptive sharpening on the stream
- Flexible stream configuration - resolution presets (720p–4K including 4:3 and 21:9), 30–120 FPS, auto or manual bitrate, auto display refresh rate matching
- Touch-style pointer - laser pointer with trigger-to-click, grip for right-click, thumbstick scroll; circle or arrow cursor
- Passthrough - see your real room with the stream floating in front of you
- Curved screen - toggle curvature from the menu; flat, slight curve, or full wrap with optional bezel
- Quest Touch Plus models - real controller models instead of placeholder boxes
- Compatibility - works with any GameStream-compatible server
- Ease of use - pair and connect in seconds; AI 3D requires no additional server-side configuration
v0.4.0
Nightfall v0.4.0 — UI Overhaul
New Features
- Screen curvature — Flat / Slight Curve / Curved modes with proper UV mapping
- Screen tilt — Pitch on grab (no roll), 3° sticky snap, adjustable sensitivity
- Black bezel border — Curves and resizes with screen, toggleable
- Starfield environment — 3-state passthrough: On → Off → Starfield
- Welcome screen — Connect/Options buttons on screen mesh, click-forwarding via UV
- Right-click via grip — Correct Limelight button code with debounce
- Scroll via thumbstick — OpenXR vector2, adjustable sensitivity
- Quest Touch Plus controller models — Runtime FBX loading with textures
- Corner resize handles — Proper curved placement, thicker collision
Fixes
- Right-click now uses Limelight button code 3 (was sending middle-click)
- UV mapping uses asin() for curved screens
- Corner handles track _mesh_size (not screen_mesh.mesh.size which is zero on ArrayMesh)
- B button toggles UI via OpenXR is_button_pressed("by_button")
- Connect button shows "Connecting..." and disables during pairing
- UI panel starts hidden, menu grab bar lowered
- Starfield stops during streaming, resumes on disconnect
v0.3.0
What's New
- Passthrough support — see your real environment through the Quest cameras while streaming. Toggle with the Passthrough button. Requires Meta OpenXR vendors plugin v5.0+.
- Corner resize handles — L-bracket handles at each corner for 16:9 aspect-ratio-locked symmetric resizing (screen stays centered).
- Improved grab bars — shortened to 0.3m, subtle opacity (1% idle / 10% hover / 30% grab), repositioned below screen edge.
- Host resolution auto-detect — queries Sunshine serverinfo API, falls back to MaxLumaPixelsHEVC threshold. Auto-scales bitrate to match (20/40/80 Mbps).
- FPS selector — cycle 60/90/120 Hz with button, auto-restarts stream on change.
- Stream stats overlay — resolution, fps, bitrate, decoder name, queue size, frames decoded/dropped, network events.
- Refactored architecture — main.gd split into
src/modules (StreamManager, XRInteraction, InputHandler, UIController, AutoDetect). - ENV mode removed — always pointer interaction, grab bars for repositioning.
Installation
- Sideload the APK to your Quest 3/3S
- Pair with your Sunshine host IP
- Passthrough starts automatically; toggle with the Passthrough button
v0.2.0
Nightfall v0.2.0
Moonlight gamestream client for Meta Quest 3 with HEVC hardware decoding and stereoscopic 3D.
Install
- Sideload
Nightfall-Android-arm64-v8a.apkvia SideQuest, ADB, or Meta Developer Hub - Ensure Sunshine is running on your host PC
- Launch Nightfall, enter your host IP, and pair
Features
- HEVC hardware decoding via NDK MediaCodec
- 1080p60@20Mbps streaming (up to 4K60 supported)
- Side-by-side stereoscopic 3D (2D / SBS Stretch / SBS Crop)
- SBS auto-detection
- XR hand raycasting with grab bars for screen repositioning
- Full gamepad, keyboard, and mouse passthrough
- Numpad UI for IP entry with saved connection history
- Live stats overlay (decoder, resolution, FPS, frame drops)
Controls
| Input | Action |
|---|---|
| Trigger | Click UI / capture mouse to stream |
| Ctrl+Alt+Shift | Release captured mouse |
| B / A button | Switch Stream / Env mode |
| WASD | Move in Env mode |
| Tab | Toggle Stream / Env mode |
| Gamepad | All inputs forwarded to host |