Skip to main content
Virtual Display Driver provides dedicated display outputs perfect for streaming and recording workflows. Create virtual monitors specifically for capture software without affecting your primary workspace.

Overview

VDD enhances streaming and recording by enabling:
  • Dedicated capture displays: Isolate streaming content from your main workspace
  • Custom aspect ratios: Create displays matching your streaming format (16:9, 21:9, 4:3)
  • Multi-source setups: Different virtual displays for different scenes or sources
  • Clean output: No desktop clutter or personal information in your stream
  • Performance optimization: Minimize GPU overhead with optimized virtual displays
VDD works seamlessly with OBS Studio, Streamlabs OBS, XSplit, Sunshine, Moonlight, and other capture software.

OBS Studio Integration

OBS Studio is the most popular open-source streaming and recording software.

Basic OBS Setup

1

Configure a virtual display for streaming

Create a virtual display matching your stream resolution in C:\VirtualDisplayDriver\vdd_settings.xml:
<monitors>
  <count>1</count>
</monitors>
<resolutions>
  <resolution>
    <width>1920</width>
    <height>1080</height>
    <refresh_rate>60</refresh_rate>
  </resolution>
</resolutions>
For 1440p streaming:
<resolution>
  <width>2560</width>
  <height>1440</height>
  <refresh_rate>60</refresh_rate>
</resolution>
Match your virtual display resolution to your streaming output resolution for best quality and performance.
2

Position the virtual display

In Windows display settings:
  1. Open Settings > System > Display
  2. Identify your virtual monitor
  3. Position it adjacent to your primary display
  4. Set to Extend these displays
  5. Click Apply
3

Add Display Capture in OBS

In OBS Studio:
  1. Create a new scene or select an existing one
  2. Click the + button in Sources
  3. Select Display Capture
  4. Name it (e.g., “Virtual Display Stream”)
  5. In the properties:
    • Display: Select your virtual monitor (e.g., “Display 2: 1920x1080 @ 60Hz”)
    • Capture Method: “Windows 10/11 (1903+)”
    • Capture Cursor: Enable if desired
  6. Click OK
4

Arrange your streaming content

Move the applications and windows you want to stream to the virtual display:
  • Game windows
  • Browser windows
  • Chat applications
  • Music visualizers
Everything on this display will be captured by OBS.

Multi-Scene Streaming Setup

Create multiple virtual displays for different scenes.
1

Create multiple virtual monitors

Configure multiple displays in vdd_settings.xml:
<monitors>
  <count>3</count>
</monitors>
<resolutions>
  <resolution>
    <width>1920</width>
    <height>1080</height>
    <refresh_rate>60</refresh_rate>
  </resolution>
</resolutions>
This creates three independent 1080p virtual displays.
2

Assign roles to each display

  • Display 1: Gaming content
  • Display 2: “Just Chatting” scene with overlays
  • Display 3: Browser/media content
3

Create OBS scenes for each display

In OBS:
  1. Create a scene named “Gaming”
    • Add Display Capture source for Display 1
  2. Create a scene named “Chatting”
    • Add Display Capture source for Display 2
  3. Create a scene named “Media”
    • Add Display Capture source for Display 3
4

Switch scenes seamlessly

Use OBS scene transitions to switch between different virtual displays:
  • Set up hotkeys for quick scene switching
  • Use Stream Deck or similar for hardware control
  • Configure scene transitions (fade, cut, stinger)

Canvas and Vertical Streaming

Create custom aspect ratios for different platforms.

TikTok/Reels (9:16 Portrait)

<resolution>
  <width>1080</width>
  <height>1920</height>
  <refresh_rate>60</refresh_rate>
</resolution>

Ultrawide (21:9)

<resolution>
  <width>2560</width>
  <height>1080</height>
  <refresh_rate>60</refresh_rate>
</resolution>

Square (1:1 for Instagram)

<resolution>
  <width>1080</width>
  <height>1080</height>
  <refresh_rate>60</refresh_rate>
</resolution>
After adding custom resolutions, restart the system and configure OBS canvas size to match.

Sunshine & Moonlight for Game Streaming

Sunshine is an open-source game streaming host, and Moonlight is the client.

Sunshine Configuration

1

Install Sunshine

Download and install Sunshine from GitHub:
winget install LizardByte.Sunshine
2

Create a gaming virtual display

Configure a virtual display optimized for game streaming:
<monitors>
  <count>1</count>
</monitors>
<resolutions>
  <resolution>
    <width>1920</width>
    <height>1080</height>
    <refresh_rate>60</refresh_rate>
  </resolution>
  <resolution>
    <width>2560</width>
    <height>1440</height>
    <refresh_rate>60</refresh_rate>
  </resolution>
  <resolution>
    <width>3840</width>
    <height>2160</height>
    <refresh_rate>60</refresh_rate>
  </resolution>
</resolutions>
This provides flexibility for different client devices.
3

Configure Sunshine to use virtual display

In Sunshine web interface (https://localhost:47990):
  1. Navigate to Configuration > Audio/Video
  2. Set Output Name to your virtual display adapter
  3. Configure resolution and framerate options
  4. Set encoder to hardware (NVENC, AMF, or Quick Sync)
  5. Save settings
4

Add games to Sunshine

In Sunshine:
  1. Go to Applications tab
  2. Click Add New
  3. Configure game settings:
    • Application Name: Game title
    • Command: Path to game executable
    • Output: Select virtual display
    • Resolution: Match virtual display
  4. Save
5

Connect with Moonlight client

On your client device:
  1. Install Moonlight (available for PC, mobile, Raspberry Pi)
  2. Scan for Sunshine host
  3. Enter the PIN to pair
  4. Select your game and stream

Optimizing for Low Latency

Configure Sunshine to use hardware encoding:
  • NVIDIA: NVENC (H.264 or H.265)
  • AMD: AMF (H.264 or H.265)
  • Intel: Quick Sync (H.264 or H.265)
Hardware encoding significantly reduces CPU usage and latency.
For game streaming, use these settings:
<colour>
  <SDR10bit>false</SDR10bit>
  <HDRPlus>false</HDRPlus>
  <ColourFormat>RGB</ColourFormat>
</colour>
<cursor>
  <HardwareCursor>true</HardwareCursor>
</cursor>
Disable unnecessary features to reduce overhead.
  • Use wired Ethernet connection when possible
  • Reduce bitrate for wireless connections
  • Enable QoS on your router for streaming traffic
  • Close bandwidth-intensive applications

Streamlabs OBS

Streamlabs OBS works similarly to OBS Studio.
1

Configure virtual display

Set up your virtual display as described in the OBS Studio section.
2

Add Display Capture source

In Streamlabs OBS:
  1. Click + in Sources
  2. Select Display Capture
  3. Choose your virtual monitor
  4. Adjust settings:
    • Capture Cursor: Optional
    • Capture Method: “Windows 10/11”
3

Use Streamlabs widgets on virtual display

Place Streamlabs widgets on your virtual display:
  • Alert box
  • Chat box
  • Event list
  • Donation goals
These will be captured along with your main content.

XSplit Broadcaster

XSplit is a popular alternative to OBS.
1

Add screen capture source

In XSplit:
  1. Click Add Source > Screen Capture
  2. Select Specific Display
  3. Choose your virtual monitor from the dropdown
  4. Click Add
2

Configure capture settings

  • Enable hardware acceleration
  • Set capture resolution to match virtual display
  • Configure frame rate (30 or 60 fps)

Recording Workflows

Tutorial Recording Setup

Create clean tutorial recordings without desktop clutter.
1

Create a tutorial display

Configure a high-resolution virtual display:
<resolution>
  <width>2560</width>
  <height>1440</height>
  <refresh_rate>60</refresh_rate>
</resolution>
2

Set up clean workspace

On the virtual display:
  • Clean desktop background
  • Organized windows
  • No personal information visible
  • Clear taskbar
3

Configure OBS for recording

  1. Add Display Capture for virtual monitor
  2. Set recording format:
    • Format: MP4 or MKV
    • Encoder: Hardware (NVENC, AMF, Quick Sync)
    • Rate Control: CQP or CRF for quality
    • Preset: Quality or High Quality
  3. Set output resolution to match virtual display
4

Record with cursor highlighting

  • Enable Capture Cursor in Display Capture
  • Use mouse highlighting software:
    • Pointer Focus: Circles cursor
    • PointerStick: Magnifies cursor area
    • Carnac: Shows keyboard input

Multi-Track Recording

Record different virtual displays to separate video tracks.
  1. Create multiple virtual displays
  2. Configure OBS with multiple Display Capture sources
  3. Enable multi-track recording in Settings > Output
  4. Assign each source to a different track
  5. Edit tracks independently in post-production

PowerShell Automation for Streaming

Automate virtual display management for streaming sessions.

Pre-Stream Setup Script

# pre-stream-setup.ps1
# Run before starting stream

# Enable VDD
pnputil /enable-device "ROOT\VDD\0000"

# Wait for initialization
Start-Sleep -Seconds 5

# Set streaming resolution
.\changeres-VDD.ps1 -width 1920 -height 1080

# Set refresh rate
.\refreshrate-VDD.ps1 -rate 60

# Extend displays
.\winp-VDD.ps1 -mode extend

Write-Host "Virtual display ready for streaming!"

Post-Stream Cleanup Script

# post-stream-cleanup.ps1
# Run after stream ends

# Optional: Disable VDD to save resources
.\toggle-VDD.ps1

Write-Host "Stream ended, VDD disabled."

Dynamic Resolution Switching

Switch resolutions based on streaming platform:
# stream-platform-switch.ps1
param(
    [string]$platform
)

switch ($platform) {
    "twitch" {
        .\changeres-VDD.ps1 -width 1920 -height 1080
        Write-Host "Configured for Twitch (1080p)"
    }
    "youtube" {
        .\changeres-VDD.ps1 -width 2560 -height 1440
        Write-Host "Configured for YouTube (1440p)"
    }
    "tiktok" {
        .\changeres-VDD.ps1 -width 1080 -height 1920
        Write-Host "Configured for TikTok (9:16)"
    }
    default {
        Write-Host "Unknown platform. Using default 1080p."
        .\changeres-VDD.ps1 -width 1920 -height 1080
    }
}
Usage:
.\stream-platform-switch.ps1 -platform twitch

Best Practices for Streaming

Set your virtual display resolution to exactly match your stream output:
  • 720p stream: 1280×720 virtual display
  • 1080p stream: 1920×1080 virtual display
  • 1440p stream: 2560×1440 virtual display
This eliminates scaling overhead and maintains quality.
For most streaming scenarios, 60Hz is optimal:
<refresh_rate>60</refresh_rate>
Higher refresh rates:
  • Increase GPU load
  • Don’t benefit most streams (30-60 fps)
  • Use only for high-framerate gaming streams
HDR adds overhead and compatibility issues:
<colour>
  <HDRPlus>false</HDRPlus>
  <SDR10bit>false</SDR10bit>
</colour>
Most streaming platforms don’t support HDR anyway.
Configure OBS to use hardware encoding:
  • NVIDIA: NVENC H.264 or HEVC
  • AMD: AMF H.264 or HEVC
  • Intel: Quick Sync H.264
This frees up CPU for game performance.
Keep an eye on GPU load:
  • Open Task Manager > Performance > GPU
  • Aim for 80-90% max GPU usage
  • If hitting 100%, reduce:
    • Game settings
    • Virtual display resolution
    • Streaming bitrate/resolution

Troubleshooting Streaming Issues

Solution:
  1. Ensure virtual display is enabled and active
  2. Move a window to the virtual display to activate it
  3. In OBS, change Capture Method to “Windows 10/11 (1903+)”
  4. Restart OBS
  5. If still black, try “BitBlt” or “Windows Graphics Capture” method
Solution:
  • Lower virtual display resolution
  • Reduce OBS output resolution
  • Lower streaming bitrate
  • Use hardware encoding (NVENC/AMF/Quick Sync)
  • Close unnecessary applications
  • Disable preview in OBS when not needed
  • Lower game graphics settings
Solution: Enable hardware cursor in VDD:
<cursor>
  <HardwareCursor>true</HardwareCursor>
  <CursorMaxX>128</CursorMaxX>
  <CursorMaxY>128</CursorMaxY>
  <AlphaCursorSupport>true</AlphaCursorSupport>
</cursor>
In OBS Display Capture properties:
  • Enable Capture Cursor
  • Try different capture methods
Solution:
  1. Verify virtual display resolution in vdd_settings.xml
  2. Restart system after changing resolution
  3. In OBS, right-click the source > Transform > Fit to screen
  4. Set OBS canvas size to match virtual display resolution
  5. Check Windows display scaling is set to 100%
Solution:
  • Ensure color format is set to RGB in vdd_settings.xml:
    <ColourFormat>RGB</ColourFormat>
    
  • In OBS Settings > Advanced:
    • Set Color Format to NV12 or I444
    • Set Color Space to 709
    • Set Color Range to Partial
  • Disable any color corrections in graphics drivers

Advanced Streaming Scenarios

Dual PC Streaming Setup

Use VDD on a dedicated streaming PC:
  1. Gaming PC: Runs games on physical display
  2. Streaming PC: Has VDD installed
  3. Capture card sends gaming PC output to streaming PC
  4. Virtual display on streaming PC for overlays and scenes
  5. Stream from streaming PC to Twitch/YouTube

Multi-Language Streaming

Create different virtual displays for different language overlays:
  • Display 1: English stream with English overlays
  • Display 2: Spanish stream with Spanish overlays
  • Display 3: Japanese stream with Japanese overlays
Switch scenes in OBS to change languages.

Interactive Streaming

Dedicated virtual display for viewer interaction:
  • Browser source with channel points overlay
  • Interactive games or polls
  • Live chat display
  • Viewer-controlled elements

Configuration Guide

Complete reference for configuring virtual displays

PowerShell Scripts

Automate display management for streaming workflows

Troubleshooting

Resolve common issues and optimize performance

VR Streaming

Combine VDD with VR for unique streaming setups

Build docs developers (and LLMs) love