Skip to content

feat(vdd): add virtual display management#5114

Draft
fatebugs wants to merge 4 commits into
LizardByte:masterfrom
fatebugs:pr/vdd
Draft

feat(vdd): add virtual display management#5114
fatebugs wants to merge 4 commits into
LizardByte:masterfrom
fatebugs:pr/vdd

Conversation

@fatebugs
Copy link
Copy Markdown

@fatebugs fatebugs commented May 14, 2026

Description

Integrate Parsec VDD to enable dynamic virtual display management on Windows. This allows Sunshine to create and manage virtual displays without requiring a physical monitor, which is essential for headless streaming setups.

Key changes

  • VDD Core (vdd_control.cpp/h): Virtual display lifecycle management — create, remove, enumerate displays, and handle display mode/resolution configuration
  • Configuration (config.cpp/h): New VDD configuration options (enable/disable, adapter selection, display count, resolution presets)
  • REST API (confighttp.cpp): Endpoints for runtime VDD control (add/remove display, query status)
  • Startup (main.cpp): Automatic VDD initialization on service start when enabled
  • System Tray (system_tray.cpp): Quick VDD controls in tray menu
  • Web UI (VirtualDisplay.vue): Full management panel for virtual displays with add/remove/resolution controls
  • Web UI integration (AudioVideo.vue, config.html): Navigation and display area integration
  • i18n (en/zh/zh_TW): Full translations for all VDD-related UI strings
  • Build (cmake + third-party/parsec-vdd): VDD header integration, compile definitions

Screenshot

iShot_2026-05-14_21 02 04 iShot_2026-05-14_21 02 51

Issues Fixed or Closed

  • N/A

Roadmap Issues

  • N/A

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

Copilot AI review requested due to automatic review settings May 14, 2026 11:57
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@ReenigneArcher ReenigneArcher marked this pull request as draft May 14, 2026 12:35
@fatebugs
Copy link
Copy Markdown
Author

@ReenigneArcher What else do I need to do to merge this PR into the master?

@ReenigneArcher

This comment was marked as resolved.

@sonarqubecloud
Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
1 New issue
1 New Code Smells (required ≤ 0)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@neatnoise
Copy link
Copy Markdown
Contributor

That is useful for headless setups. I tried it out.
Few remarks when headless setup was used:

  • I managed to make it work by setting manually these vars (I couldn't set vdd_enabled and vdd_refresh_rate via gui):
vdd_display_count = 1
vdd_enabled = 1
vdd_refresh_rate = 60
  • I had to force right adapter with adapter_name setting
  • I had an issue to save display settings via sunshine gui. It got lost after the sunshine restart even when display was added and clicked "Save" + "Apply"
  • I suggest to add some information about the parsec VDD installation requirement and links to the drivers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants