Prerequisites#
Before you begin, make sure both your host (streaming) PC and client (receiving) device meet the following requirements.
Host Machine (Stream FROM)
- Windows 10 or 11 (x64)
- NVIDIA GPU (GTX 900 series or newer)
- NVIDIA Driver 535 or newer
- 8 GB RAM minimum
- 20 Mbps upload speed
Client Machine (Stream TO)
- Windows 10 or 11 (x64)
- Any GPU with hardware video decode
- 4 GB RAM minimum
- 20 Mbps download speed
- Controller or keyboard/mouse
Install Host#
On Windows, host mode is built into the NVRemote app — no separate download needed. On Linux (headless servers, Jetson, DGX), use the standalone host agent.
Windows (one app does everything)
Download NVRemote
NVRemote-Setup.exe from the Downloads page. This is the same app used for both client and host.Switch to Host mode
Register your machine
Linux (headless / Jetson / DGX)
Download the host agent
Install and run
sudo ./install.sh to install as a systemd service, or run ./NVRemoteAgent directly for interactive setup.Install Client#
The NVRemote Client connects to your host and renders the stream. It handles input capture, hardware video decode, and display.
Download the client
NVRemote-Setup.exe from the Downloads page.Install and launch
Connect#
Once both the host and client are installed and signed in with the same account, connecting is straightforward.
Your host appears automatically
Select a streaming profile
Click Connect
Client -> Signaling Server -> Host
1. Client requests session
2. Server brokers P2P connection via ICE/STUN
3. Direct P2P tunnel established (no relay)
4. Codec negotiation (H.264 / H.265 / AV1)
5. Streaming beginsStreaming Profiles#
NVRemote offers three streaming profiles, each optimized for different workloads and network conditions. You can switch between profiles at any time during a session.
Competitive
Maximum performance, minimum latency
Ideal for: Competitive gaming, real-time collaboration, live coding
Balanced
Best of both worlds
Ideal for: General desktop use, game development, web browsing
Cinematic
Maximum visual fidelity
Ideal for: Creative work, video editing, 3D rendering, single-player games
Creative
Up to 8K, 4:4:4 chroma, color-accurate for editing
CAD / Engineering
Up to 8K AV1, precision work, text clarity
Mobile Saver
720p, low bandwidth, battery-friendly
LAN
Up to 8K@240fps, 300 Mbps, same-network streaming
Configuration#
NVRemote works out of the box with sensible defaults, but you can fine-tune settings for your specific setup.
Host Configuration#
The host configuration file is located at:
%APPDATA%\NVRemote\host-config.yaml# NVRemote Host Configuration
capture:
method: nvfbc # nvfbc (recommended) or dxgi
monitor: 0 # Monitor index (0 = primary)
encoder:
codec: auto # auto, h264, h265, or av1
preset: p4 # NVENC preset (p1=fastest, p7=highest quality)
max_bitrate: 100000 # Max bitrate in kbps
rate_control: vbr # cbr or vbr
network:
port: 42587 # UDP port for streaming
stun_server: stun:stun.l.google.com:19302
qos:
mode: balanced # competitive, balanced, or cinematic
adaptive: true # Enable adaptive qualityClient Configuration#
# NVRemote Client Configuration
display:
vsync: false # Disable for lowest latency
fullscreen: true
resolution: native # native, 1080p, 1440p, 4k, 5k, or 8k
decoder:
method: hardware # hardware (recommended) or software
low_latency: true # Minimize decode buffer
input:
mouse_mode: relative # relative or absolute
controller: auto # auto-detect connected controllers
overlay:
show_stats: true # Show latency/FPS overlay
position: top-left # Overlay positionAPI Reference#
The NVRemote Control Plane API is available at https://api.nvremote.com/api/v1. All endpoints except authentication use Bearer JWT tokens.
Authentication#
| Method | Endpoint | Description |
|---|---|---|
GET | /auth/google | Initiate Google OAuth login |
POST | /auth/refresh | Exchange refresh token for new token pair |
GET | /auth/me | Get current user profile and preferences |
PATCH | /auth/me | Update profile and streaming preferences |
Sessions#
| Method | Endpoint | Description |
|---|---|---|
GET | /sessions | List sessions for the current user |
POST | /sessions | Create a new streaming session |
GET | /sessions/:id | Get session details with ICE config |
POST | /sessions/:id/offer | Send SDP offer for WebRTC signaling |
POST | /sessions/:id/end | End a streaming session |
Hosts#
| Method | Endpoint | Description |
|---|---|---|
GET | /hosts | List registered host machines |
POST | /hosts/register | Register a new host (bootstrap token) |
POST | /hosts/heartbeat | Send host heartbeat (X-Host-Token header) |
Monitoring#
| Method | Endpoint | Description |
|---|---|---|
GET | /health | Health check (returns 200 with uptime) |
GET | /metrics | Prometheus metrics (public) |
curl -H "Authorization: Bearer <access_token>" \
https://api.nvremote.com/api/v1/sessions/api/docs when running the API locally with ENABLE_SWAGGER=true.Troubleshooting#
Host not appearing in client
- - Ensure both devices are signed in with the same account
- - Check that the host service is running (system tray icon should be green)
- - Verify your firewall allows UDP port 42587
- - Try restarting the host service from the system tray
High latency or stuttering
- - Switch to a wired Ethernet connection if on Wi-Fi
- - Try Competitive mode to reduce quality overhead
- - Lower the max bitrate in host configuration
- - Ensure no other bandwidth-heavy applications are running
- - Check that hardware decode is enabled on the client
Black screen or no video
- - Update your NVIDIA driver to version 535 or newer
- - Ensure NvFBC is supported (desktop GPUs; most laptops use dGPU passthrough)
- - Try switching capture method to DXGI in host config
- - Check if another screen capture application is running
Audio not streaming
- - NVRemote captures system audio by default; check volume levels
- - Ensure the correct audio output device is selected on the host
- - Check client audio settings are not muted
Full source code and extended documentation available on GitHub.
View on GitHub