Getting Started

Documentation

Everything you need to get NVRemote up and running. From installation to advanced configuration.

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
Tip
For the best experience, connect both machines to your router via Ethernet. Wi-Fi 6 or newer is acceptable but wired connections will always give the lowest and most consistent latency.

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)

1

Download NVRemote

Get NVRemote-Setup.exe from the Downloads page. This is the same app used for both client and host.
2

Switch to Host mode

Open NVRemote, go to Settings → App Mode and select Host or Both (to stream and receive on the same machine).
3

Register your machine

Follow the setup wizard to enter your bootstrap token and register. Your machine will appear in the dashboard for any of your signed-in devices to connect to.

Linux (headless / Jetson / DGX)

1

Download the host agent

Get the Linux host bundle from the Downloads page.
2

Install and run

Extract the tarball and run sudo ./install.sh to install as a systemd service, or run ./NVRemoteAgent directly for interactive setup.
Note
On Windows, NVRemote does not require a separate host service installation. Host mode runs directly inside the Electron app and communicates with the GPU streamer via a local named pipe.

Install Client#

The NVRemote Client connects to your host and renders the stream. It handles input capture, hardware video decode, and display.

1

Download the client

Get NVRemote-Setup.exe from the Downloads page.
2

Install and launch

Run the installer and launch NVRemote Client. Sign in with the same account you used on the host.

Connect#

Once both the host and client are installed and signed in with the same account, connecting is straightforward.

1

Your host appears automatically

Open the NVRemote Client. Your host machine will show up in the dashboard with its online status, GPU info, and current load.
2

Select a streaming profile

Choose Competitive, Balanced, or Cinematic depending on your workload. You can switch profiles mid-session.
3

Click Connect

NVRemote establishes a P2P connection, negotiates the optimal codec and settings, and starts streaming. The overlay shows real-time latency and quality metrics.
Connection negotiation (simplified)
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 begins

Streaming 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

MAX FPS240
RESOLUTIONUp to 1080p
CODECH.264
BITRATE20–40 Mbps
PRIORITYFPS > Quality

Ideal for: Competitive gaming, real-time collaboration, live coding

Recommended

Balanced

Best of both worlds

TARGET FPS120
RESOLUTIONUp to 1440p
CODECHEVC
BITRATE15–30 Mbps
PRIORITYAdaptive

Ideal for: General desktop use, game development, web browsing

Cinematic

Maximum visual fidelity

MAX FPS60
RESOLUTIONUp to 8K
CODECHEVC / AV1
BITRATE40–200 Mbps
PRIORITYQuality > FPS

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

Tip
Start with Balanced for most workloads. Switch to Competitive for fast-paced tasks where input latency is critical. Use Cinematic for creative work where visual quality is the priority.

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:

Config location
%APPDATA%\NVRemote\host-config.yaml
host-config.yaml (example)
# 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 quality

Client Configuration#

client-config.yaml (example)
# 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 position

API Reference#

The NVRemote Control Plane API is available at https://api.nvremote.com/api/v1. All endpoints except authentication use Bearer JWT tokens.

Authentication#

MethodEndpointDescription
GET/auth/googleInitiate Google OAuth login
POST/auth/refreshExchange refresh token for new token pair
GET/auth/meGet current user profile and preferences
PATCH/auth/meUpdate profile and streaming preferences

Sessions#

MethodEndpointDescription
GET/sessionsList sessions for the current user
POST/sessionsCreate a new streaming session
GET/sessions/:idGet session details with ICE config
POST/sessions/:id/offerSend SDP offer for WebRTC signaling
POST/sessions/:id/endEnd a streaming session

Hosts#

MethodEndpointDescription
GET/hostsList registered host machines
POST/hosts/registerRegister a new host (bootstrap token)
POST/hosts/heartbeatSend host heartbeat (X-Host-Token header)

Monitoring#

MethodEndpointDescription
GET/healthHealth check (returns 200 with uptime)
GET/metricsPrometheus metrics (public)
Example: List your sessions
curl -H "Authorization: Bearer <access_token>" \
  https://api.nvremote.com/api/v1/sessions
Tip
Interactive API documentation is available at /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
Note
For issues not covered here, check the GitHub Issues page or start a Discussion.

Full source code and extended documentation available on GitHub.

View on GitHub