Windows Standalone Audio Router

VDO.Ninja logo Powered by VDO.Ninja

VDO Cable

Publish audio from multiple Windows applications to separate VDO.Ninja stream IDs without a virtual driver. Each route gets its own WASAPI capture, websocket signaling session, and WebRTC audio publisher.

Download Installer Portable EXE ZIP Package Getting Started
VDO Cable app showing multiple application routes with Stream ID, Room, Password, status, and publish controls

Why this exists

Per-app routing

Select multiple active Windows audio sessions and publish each app independently.

No kernel driver

Uses WASAPI process loopback instead of a signed virtual-audio driver stack.

One route, one publisher

Every route has its own websocket, one RTC session, and one Opus audio track.

Duplicate ID guardrails

The app blocks local Stream ID collisions up front and surfaces server collision alerts when another publisher already owns the ID.

Room-aware workflows

Publish directly to stream IDs or place several routes inside the same VDO.Ninja room.

Release-safe downloads

Installer, portable EXE, and ZIP ship with fixed filenames so latest-download links never move.

Signed and scanned

Release automation is wired for Authenticode signing plus VirusTotal submission before publish.

Release assets

1

vdocable-setup.exe is the default signed installer with desktop and Start Menu shortcuts.

2

vdocable-portable.exe is a self-extracting build for quick local use without installation.

3

vdocable-win64.zip is the manual package for QA, scripting, and hash verification.

Built for release discipline

Desktop QA

Fast gate builds the app, runs CTest, smoke-launches the UI, and verifies packaging outputs.

Pages QA

Playwright checks the GitHub Pages site and stable release links before docs deploy.

Windows packaging

Qt deployment, NSIS installer creation, portable SFX creation, and stable alias generation are scripted.

Release checks

Signing and VirusTotal submission are integrated into both local scripts and tag-triggered GitHub Actions.

Conservative signaling

WebSocket pinging is disabled, reconnect attempts back off, and the app avoids fast reconnect loops when signaling is unstable.