NVDA add-on that streams system audio between two Windows machines using NVDARemoteAudioServer as a relay. NVDA Remote already carries NVDA speech — this carries everything else (music, games, browser, Discord, etc.) without re-sending NVDA's own output.
addon/— the NVDA add-on (Python, manifest, docs).helper/— a .NET 9 Windows helper EXE that does the actual capture, Opus encode, UDP, decode, and playback. Bundled into the add-on.build.ps1— builds the helper and packages a.nvda-addon.
The add-on is just a launcher and a settings UI. The helper does the audio work in a separate process so audio glitches and network jitter cannot stall NVDA.
- On both machines, download
remoteAudioClient-<version>.nvda-addonfrom Releases and open it. NVDA installs it. - Restart NVDA.
- On the machine that will send audio: open
NVDA menu > Tools > NVDA Remote Audio > Install audio server (this machine sends audio).... The add-on downloads NVDARemoteAudioServer from GitHub, installs it underC:\NVDARemoteAudioServer\(or%LOCALAPPDATA%\NVDARemoteAudioServer\if the first isn't writable), starts it, registers a per-user Startup shortcut so it auto-starts at sign-in, and prompts for UAC to add Windows Firewall inbound allow rules for TCP+UDP 6838. Decline UAC and the rest still installs; pickAdd firewall rules for audio server...later if you want to retry. - On both machines, open
NVDA menu > Preferences > Settings > NVDA Remote Audioand set:- Server host — IP/hostname of the machine running the server.
- Audio port — 6838 (default).
- Key — same string on both sides. Required, no default.
- Restart NVDA, or pick
Receive remote audio(client) /Send this computer's audio(server) from the Tools menu. PickingSendon a machine without the server installed offers to install it on the spot.
The add-on does not change anything in NVDA Remote. Use NVDA Remote on its usual port (6837) the same way you always have.
- Windows 10 build 20348 or newer (process-loopback exclusion API). This includes Windows 10 22H2 with recent updates and all Windows 11.
- NVDA 2025.1+.
- Inbound TCP+UDP 6838 reachable on the server side.
In publisher mode the helper opens a WASAPI process loopback capture with PROCESS_LOOPBACK_MODE_EXCLUDE_TARGET_PROCESS_TREE against the running nvda.exe PID. NVDA's audio (speech, tones) is never read off the device, so it cannot be sent. Everything else playing on the default render endpoint goes through Opus and UDP to the server.
Wire format: 48 kHz stereo Opus, 15 ms packets (3 × 5 ms frames repacketized), with packet-loss concealment on the receiver. Receiver picks a jitter-buffer profile from the host you set:
| Profile | Picked when host is | Prebuffer | Output latency | Buffer cap |
|---|---|---|---|---|
| LAN | private/loopback IP | 30 ms | 40 ms | 200 ms |
| Tailscale | 100.64.0.0/10 or *.ts.net |
90 ms | 80 ms | 450 ms |
| Internet | anything else | 150 ms | 120 ms | 800 ms |
Override with Settings > NVDA Remote Audio > Latency profile.
If C:\NVDARemoteAudioServer\NVDARemoteAudioServer.exe or %LOCALAPPDATA%\NVDARemoteAudioServer\NVDARemoteAudioServer.exe exists on the machine, the add-on starts as publisher (sends). Otherwise it starts as subscriber (receives). Override under Startup action in settings.
You need the .NET 9 SDK. From an elevated-or-not PowerShell at the repo root:
.\build.ps1That publishes the helper, stages it into addon/bin/, and produces remoteAudioClient-<version>.nvda-addon at the repo root. See helper/README.md and addon/README.md for details.
Audio is sent unencrypted over UDP. Don't use this on the open internet without a VPN or Tailscale. The server's "key" is a shared identifier, not a secret — anyone who can reach port 6838 with the right key can join the channel.
MIT. See LICENSE.
Wire protocol and relay server: haitun001/NVDARemoteAudioServer. This repo only ships the client side; you still need to run that server somewhere.