VR Auto-Optimizer
1. Overview
VR Auto-Optimizer is a Windows desktop application built to streamline the process of launching VR flight simulators with maximum performance. It replaces the original batch script workflow with a modern, themeable WPF graphical interface.
The application handles the entire lifecycle of a VR sim session:
- Automatically detects installed simulators across Steam, Microsoft Store, and standalone installations
- Kills resource-hogging background applications before launch
- Applies system-level performance optimizations (power plans, service management, registry tweaks)
- Launches the selected simulator and configurable VR runtime (Virtual Desktop, PimaxPlay, or None)
- Monitors the simulator process and applies runtime optimizations (CPU affinity, priority, etc.)
- Automatically restores all changes when the simulator exits or the user cancels
1.1 Key Features
- Auto-detection of 9 simulator configurations across multiple storefronts
- Two optimization levels: Standard (safe, common tweaks) and Aggressive (deep system modifications)
- Per-tweak granular control over every optimization
- Custom kill/restart lists for user-specific applications
- Real-time stage-by-stage progress tracking during optimization
- Full system restoration on exit or cancellation â no permanent changes
- Session logging with automatic rotation
- Auto-run mode for single-click launch
- Aviation instrument-themed dark UI
- Configurable VR runtime support (Virtual Desktop, PimaxPlay, SteamVR, or None) with independent OpenXR runtime switching
- Content Creator Mode to protect streaming and recording tools (Discord, Chrome, Game DVR, Widget Service)
2. System Requirements
| Requirement | Details |
|---|---|
| Operating System | Windows 10 (21H2+) or Windows 11 |
| Runtime | .NET 8 Desktop Runtime (included in build or install separately) |
| Permissions | Administrator (required for service management, registry, power plans) |
| GPU | NVIDIA GPU recommended (for nvidia-smi persistence/performance modes) |
| VR | Virtual Desktop, PimaxPlay, or SteamVR (optional â selectable in Configuration; set to None by default) |
| Disk Space | < 10 MB for application + config + logs |
3. File Locations & Data Storage
The application stores all user data in the Windows AppData folder. No data is written to the application directory itself.
3.1 Configuration File
%APPDATA%\SimVROptimizer\vr_opt.cfg
This is a plain-text key=value configuration file. It stores all user preferences including kill/restart flags, optimization toggles, default simulator selection, and custom app entries. The file is human-readable and can be edited manually if needed, though the application UI is the recommended method.
3.2 Session Log
%APPDATA%\SimVROptimizer\sim_launcher.log
Timestamped log of all optimization sessions. Each session is bracketed by [SESSION START] and [SESSION END] markers. The log records every action taken: processes killed, services stopped, power plan changes, optimizations applied, and restoration steps.
Log Rotation
The log file automatically rotates under two conditions:
- File size exceeds 2 MB
- 10 or more sessions have been recorded
When rotation triggers, the current log is renamed to sim_launcher.log.old (overwriting any previous .old file), and a fresh log is started.
3.3 Full Path Reference
| Item | Location |
|---|---|
| Config file | %APPDATA%\SimVROptimizer\vr_opt.cfg |
| Session log | %APPDATA%\SimVROptimizer\sim_launcher.log |
| Rotated log | %APPDATA%\SimVROptimizer\sim_launcher.log.old |
| AppData folder | C:\Users\ |
%APPDATA%\SimVROptimizer and press Enter.4. Configuration File Reference
The vr_opt.cfg file uses a simple KEY=VALUE format. Boolean values use YES/NO. Lines starting with # or ; are comments. The file is organized into sections by comment headers.
4.1 Kill Flags
Controls which applications are force-closed before the simulator launches.
| Key | Default | Description |
|---|---|---|
KILL_ONEDRIVE | YES | Kills OneDrive.exe |
KILL_DISCORD | YES | Kills Discord.exe (overridden by Content Creator Mode) |
KILL_CHROME | YES | Kills chrome.exe (overridden by Content Creator Mode) |
KILL_EDGE | YES | Kills msedge.exe (overridden by Content Creator Mode) |
KILL_CCLEANER | YES | Kills CCleaner64.exe |
KILL_ICLOUDSERVICES | YES | Kills iCloudServices.exe |
KILL_ICLOUDDRIVE | YES | Kills iCloudDrive.exe |
4.2 Restart Flags
Controls which applications are restarted after the simulator exits.
| Key | Default | Description |
|---|---|---|
RESTART_EDGE | YES | Restarts Microsoft Edge |
RESTART_DISCORD | YES | Restarts Discord via Update.exe |
RESTART_ONEDRIVE | YES | Restarts OneDrive in background mode |
RESTART_CCLEANER | YES | Restarts CCleaner in monitor mode |
RESTART_ICLOUD | YES | Restarts iCloud (Store or Desktop version) |
RESTART_CHROME | YES | Restarts Google Chrome |
4.3 Defaults
| Key | Default | Description |
|---|---|---|
DEFAULT_SIM | (empty) | Simulator choice number (1-9) for auto-run |
| AUTO_RUN_ON_START | NO | If YES, launches DEFAULT_SIM immediately on app start |
VR_RUNTIME | None | VR runtime to launch (None, VirtualDesktop, PimaxPlay, or SteamVR) |
CONTENT_CREATOR_MODE | NO | Protects Discord, Chrome, Edge, Game DVR, and Widget Service for streamers/recorders |
| OPENXR_RUNTIME | DontChange | OpenXR runtime to set before VR launch (DontChange, SteamVR, OculusMeta, WMR, or PimaxXR). Saved and restored per session. |
4.4 Optimization Level
| Key | Default | Values |
|---|---|---|
OPT_LEVEL | Standard | Standard or Aggressive |
4.5 Standard Optimizations
These apply regardless of optimization level when enabled.
| Key | Default | What It Does |
|---|---|---|
OPT_POWER_PLAN | YES | Switches to Ultimate Performance power plan (reverts on exit) |
OPT_STOP_SYSMAIN | YES | Stops SysMain (Superfetch) service |
OPT_STOP_SPOOLER | YES | Stops Print Spooler service |
OPT_NVIDIA_PERSIST | YES | Enables NVIDIA persistence mode (nvidia-smi -pm 1) |
OPT_FLUSH_DNS | YES | Flushes DNS resolver cache |
OPT_HIGH_PRIORITY | YES | Sets simulator process to High priority |
OPT_CPU_AFFINITY | YES | Sets CPU affinity (Intel P-Core aware, AMD X3D safe) |
4.6 Aggressive Optimizations
These only apply when OPT_LEVEL=Aggressive. All changes are reverted on exit.
| Key | Default | What It Does |
|---|---|---|
OPT_DISABLE_GAMEBAR | YES | Disables Game Bar auto-game mode via registry |
OPT_DISABLE_GAMEDVR | YES | Disables Game DVR recording (overridden by Content Creator Mode) |
OPT_CLEAR_STANDBY | YES | Purges standby memory list via NtSetSystemInformation |
OPT_TIMER_RES | YES | Sets system timer to 0.5ms via NtSetTimerResolution |
OPT_DISABLE_FSO | YES | Disables fullscreen optimizations for the sim exe |
OPT_NVIDIA_MAXPERF | YES | Sets NVIDIA max performance mode |
OPT_DISABLE_POWERTHROTTLE | YES | Disables Windows power throttling |
OPT_KILL_WIDGETS | YES | Kills the Windows Widgets service (overridden by Content Creator Mode) |
OPT_DISABLE_NAGLE | YES | Disables Nagle's algorithm on all network interfaces |
OPT_NET_THROTTLE | YES | Sets NetworkThrottlingIndex to 0xFFFFFFFF |
OPT_DISABLE_MEMCOMP | YES | Disables Windows memory compression |
OPT_IO_PRIORITY | YES | Enables I/O priority boost for the sim process |
OPT_DISABLE_VISEFFECTS | YES | Sets visual effects to Best Performance |
4.7 Custom Entries
Custom kill and restart entries are stored as indexed lists:
CUST_K_COUNT=2 CUST_K_1=obs64.exe CUST_K_2=StreamlabsOBS.exe CUST_R_COUNT=1 CUST_R_CMD_1=C:\Program Files\OBS\obs64.exe CUST_R_ARGS_1=--startstreaming
These are managed through the Custom Apps Manager view in the application, but can also be edited manually.
5. Supported Simulators
The application supports 9 simulator configurations across three launch methods.
| # | Simulator | Launch Method | Process Name |
|---|---|---|---|
| 1 | MSFS 2024 (Steam) | Steam (AppID 2537590) | FlightSimulator2024.exe |
| 2 | MSFS 2020 (Steam) | Steam (AppID 1250410) | FlightSimulator.exe |
| 3 | DCS World (Steam) | Steam (AppID 223750) | DCS.exe |
| 5 | MSFS 2024 (Store) | Store (AUMID auto-detect) | FlightSimulator2024.exe |
| 6 | MSFS 2020 (Store) | Store (AUMID auto-detect) | FlightSimulator.exe |
| 7 | DCS World (Standalone) | Direct EXE launch | DCS.exe |
| 8 | X-Plane 12 (Steam) | Steam (AppID 2014780) | X-Plane.exe |
| 9 | X-Plane 12 (Standalone) | Direct EXE launch | X-Plane.exe |
6. Simulator Detection
The application uses multiple detection strategies depending on the simulator type. Detection runs automatically when the main menu loads and can be triggered manually with the Rescan button.
6.1 Steam Games
Steam games are detected by looking for app manifest files in all Steam library folders.
- The Steam installation path is read from the Windows registry (
HKLM\SOFTWARE\Wow6432Node\Valve\SteamorHKCU\Software\Valve\Steam). - The
libraryfolders.vdffile is parsed to discover all Steam library locations on the system. - For each library, the detector checks for appmanifest_
.acf files. - If found, the manifest is parsed to extract the install directory path.
6.2 Microsoft Store / GamePass
Store games are detected using PowerShell's Get-AppxPackage command.
- A PowerShell command queries installed packages matching known package family names.
- For MSFS 2024: searches for packages matching "Limitless" in the name.
- For MSFS 2020: searches for "FlightSimulator" while excluding "Limitless" (to avoid matching MSFS 2024).
- The resolved Package Family Name is combined with "!App" to create the AUMID used for launching.
6.3 DCS World (Standalone)
Standalone DCS uses a multi-method detection approach:
- Registry check: HKCU and HKLM under Software\Eagle Dynamics\DCS World (and OpenBeta variant).
- Prefers the bin subfolder over bin-mt (bin-mt is deprecated).
- Fallback: Scans drives C through J for common DCS installation paths.
6.4 X-Plane 12 (Standalone)
X-Plane uses the most extensive detection with six methods tried in order:
- Breadcrumb file: X-Plane writes
x-plane_install_12.txtto multiple AppData locations. - Desktop shortcuts: Scans user and common desktop for .lnk files containing "X-Plane".
- Start Menu shortcuts: Same approach across Start Menu folders.
- Registry: Checks multiple registry paths under HKLM and HKCU for X-Plane and Laminar Research keys.
- Uninstall registry: Searches the standard Windows uninstall registry for X-Plane entries.
- Drive scan: Scans drives C-J across 9 common directory patterns (X-Plane 12, Games\X-Plane 12, Simulators\X-Plane 12, etc.).
7. User Guide
This section walks through every screen and feature of the application.
7.1 Main Menu
The Main Menu is the home screen of the application. It appears on launch (unless Auto-Run is configured).
What You See
- SELECT YOUR SIMULATOR header with a detection status message
- INSTALLED SIMULATORS section (green header) â shows clickable cards for each detected sim with its install path
- NOT DETECTED section (dim header) â shows disabled cards for simulators not found on the system
- QUICK ACTIONS section (cyan header) with three buttons
Quick Actions
| Button | Action |
|---|---|
| Configure App Controls | Opens the Configuration view where you manage kill/restart flags, defaults, and access optimization settings |
| View Log | Opens the Session Log viewer |
| âŗ Rescan Simulators | Re-runs the full simulator detection scan |
Launching a Simulator
- Click any green simulator card in the INSTALLED SIMULATORS section.
- A confirmation dialog appears: "Launch [Sim Name]? The optimizer will prepare your system and start the simulator."
- Click Yes to proceed. The application navigates to the Running View.
7.2 Running View (Optimization Pipeline)
The Running View shows real-time progress through the five-stage optimization pipeline.
Stage Pipeline
| Stage | Name | What Happens |
|---|---|---|
| 1 | PREP | Saves current power plan, switches to Ultimate Performance, kills configured apps, stops services, applies standard/aggressive optimizations |
| 2 | VR LAUNCH | Launches the configured VR runtime (Virtual Desktop, PimaxPlay, SteamVR, or skip. Also swaps the OpenXR runtime if configureds if set to None), waits 8 seconds for initialization |
| 3 | SIM LAUNCH | Launches the selected simulator via Steam URI, Store AUMID, or direct EXE path |
| 4 | MONITORING | Polls for the simulator process every 5 seconds (up to 7 attempts = 35 sec). Once detected, applies runtime optimizations (priority, affinity, FSO). Then monitors every 15 seconds until the sim exits. |
| 5 | RESTORE | Restores power plan, restarts services, restores registry values, restarts configured apps, runs custom restart commands |
Stage Indicators
Each stage card shows a visual status:
- âŗ Waiting â Stage has not started yet (dim text)
- âļ Running/Active â Stage is currently executing (amber border and text)
- â Done/Complete â Stage finished successfully (green border and text)
- â Cancelled â Stage was skipped due to cancellation (red border and text)
Enjoy Banner
When the simulator is detected and running, an amber banner appears: "â Enjoy your flight! Do not close this application." This reminds the user that the optimizer needs to stay running to monitor the sim and restore changes on exit.
Cancelling
- Click the "â Cancel & Revert" button.
- A confirmation dialog asks: "Cancel the optimizer and revert all changes?"
- Click Yes. All remaining stages are marked Cancelled, and the RESTORE stage runs immediately to revert all system changes.
- Once restoration completes, a "Return to Menu" button appears.
7.3 Configuration View
Accessed via "Configure App Controls" on the Main Menu. This is the central settings hub.
Defaults Section
- Default Simulator: Dropdown to select which simulator auto-launches when Auto-Run is enabled. Options include all 9 supported sims plus (None).
- Auto-Run on Start: Toggle switch. When enabled with a default sim selected, the app skips the main menu and goes directly to the Running View on startup.
- VR Runtime: Dropdown to select which VR runtime launches before the simulator. Options: (None), Virtual Desktop, PimaxPlay, SteamVR. Set to None by default.
Content Creator Mode
A single toggle that protects streaming and recording tools from being disrupted by the optimizer. When enabled, the following overrides apply regardless of individual toggle settings: Discord is not killed, Chrome is not killed, Game DVR is not disabled (preserves NVENC encoding sessions for OBS), and the Widget Service is not killed (preserves overlay tools). All other optimizations continue to apply normally. This mode is designed for users who stream or record with OBS, Streamlabs, or similar tools alongside their simulator sessions.
Kill Apps on Launch
Seven toggle switches for built-in applications: OneDrive, Discord, Chrome, Edge, CCleaner, iCloud Services, and iCloud Drive. Each toggle controls whether that application is force-closed during the PREP stage.
Restart Apps After Sim Exit
Six toggle switches for post-session restarts: Edge, Discord, OneDrive, CCleaner, iCloud, and Chrome. Each controls whether the application is restarted during the RESTORE stage.
Optimization Settings Shortcut
A panel with description and an "Optimization Settings â" button that navigates to the Optimization View for Standard/Aggressive configuration.
Custom Apps Shortcut
A panel with an "Manage Custom Apps â" button that navigates to the Custom Apps Manager.
Saving
Click "Save Configuration" to write all changes to vr_opt.cfg. A themed confirmation dialog appears. Click "Cancel" or "â Back" to discard changes and return to the Main Menu.
7.4 Optimization Settings View
Accessed via the Configuration View. Provides granular control over every system optimization.
Optimization Level
Two radio buttons: Standard and Aggressive.
- Standard: Only the Standard Optimizations section is active. Aggressive tweaks are dimmed and disabled.
- Aggressive: Both sections are fully active. All toggles can be individually enabled/disabled.
Standard Optimizations (7 toggles)
- Ultimate Performance Power Plan â Switches Windows to the Ultimate Performance plan (creates it if missing, falls back to High Performance)
- Stop SysMain (Superfetch) â Stops the SysMain service to free memory and reduce disk I/O
- Stop Print Spooler â Stops the Print Spooler service
- NVIDIA Persistence Mode â Keeps the GPU driver loaded to reduce initialization latency
- Flush DNS Cache â Clears the DNS resolver cache
- Set Sim to High Priority â Sets the simulator process priority to High
- CPU Affinity (Physical Cores) â Vendor-aware affinity: Intel hybrid chips get P-Core affinity, AMD X3D chips skip affinity (cache topology safe), other AMD chips use scheduler-managed mode
Aggressive Optimizations (13 toggles)
- Disable Game Bar â Disables AllowAutoGameMode and AutoGameModeEnabled via registry
- Disable Game DVR â Disables GameDVR_Enabled in user registry and AllowGameDVR in machine policy. Skipped when Content Creator Mode is active (preserves NVENC encoding sessions for OBS).
- Clear Standby Memory â Purges the Windows standby memory list using NtSetSystemInformation API
- High-Res Timer (0.5ms) â Sets the system timer resolution to 0.5ms using NtSetTimerResolution
- Disable Fullscreen Optimizations â Adds DISABLEDXMAXIMIZEDWINDOWEDMODE to the sim's AppCompatFlags
- NVIDIA Max Performance Mode â Removes power limits via nvidia-smi
- Disable Power Throttling â Sets PowerThrottlingOff=1 in the registry
- Kill Widget Service â Terminates the Windows Widgets process. Skipped when Content Creator Mode is active (preserves overlay tools).
- Disable Nagle's Algorithm â Sets TcpAckFrequency=1 and TCPNoDelay=1 on all network interfaces
- Optimize Network Throttling â Sets NetworkThrottlingIndex to 0xFFFFFFFF (unlimited)
- Disable Memory Compression â Calls Disable-MMAgent -MemoryCompression
- Set I/O Priority (High) â Enables PriorityBoostEnabled on the sim process
- Disable Visual Effects â Sets Windows visual effects to Best Performance mode
Saving
Click "Save Optimization Settings" to persist. Returns to the Configuration View. All aggressive optimizations are reverted by the RESTORE stage after each session regardless of their saved state.
7.5 Custom Apps Manager
Accessed via the Configuration View. Manage user-defined processes and applications.
Custom Kill List
Processes to force-close during the PREP stage, in addition to the built-in kill list.
- Click "+ Add" to open the input dialog.
- Enter the process name (e.g.,
obs64.exe,StreamlabsOBS.exe). - Click Add to confirm. The entry appears in the list with a red indicator.
- To remove, click the â button on any entry.
Custom Restart List
Applications to restart during the RESTORE stage.
- Click "+ Add" to open the dual-field input dialog.
- Enter the full path to the executable (e.g., C:\Program Files\OBS\
obs64.exe). - Optionally enter command-line arguments (e.g., --startstreaming).
- Click Add to confirm. The entry shows the path and args with a green indicator.
- To remove, click the â button on any entry.
Click "Save Changes" to persist all custom entries to the config file.
7.6 Session Log Viewer
Accessed via "View Log" on the Main Menu.
Features
- Displays the full contents of
sim_launcher.login a read-only Consolas-formatted text area - Auto-scrolls to the bottom to show the most recent entries
- Refresh button (âŗ Refresh) reloads the log from disk
- Clear Log button (red-bordered) wipes the log file after confirmation, leaving only a "Log cleared by user" entry
- The log file path is displayed at the bottom of the view
Log Entry Format
Each line follows this format:
[2025-02-09 14:32:01] [PREP] Killed: Discord.exe [2025-02-09 14:32:01] [PREP] Power Plan: Ultimate Performance (existing) [2025-02-09 14:32:09] [VR] VR runtime started [2025-02-09 14:32:12] [LAUNCH] MSFS 2024 (Steam) launched [2025-02-09 14:32:47] [DETECT] Process active: FlightSimulator2024.exe [2025-02-09 14:32:47] [DETECT] Priority set to High
Log Tags
| Tag | Stage | Description |
|---|---|---|
| [SESSION START] | â | Marks the beginning of a new optimization session |
| [PREP] | Stage 1 | System preparation actions (kills, services, optimizations) |
| [VR] | Stage 2 | VR runtime launch status |
| [LAUNCH] | Stage 3 | Simulator launch confirmation |
| [DETECT] | Stage 4 | Process detection and runtime optimization results |
| [TIMEOUT] | Stage 4 | Simulator process was not detected within 35 seconds |
| [RESTORE] | Stage 5 | System restoration actions |
| [CANCELLED] | Any | User-initiated cancellation |
| [ERROR] | Any | Error encountered during operation |
| [LOG] | â | Log management events (rotation, clearing) |
| [SESSION END] | â | Marks the end of the session |
8. CPU Affinity Intelligence
The optimizer includes vendor-aware CPU affinity logic that adapts to the user's processor architecture. This ensures optimal thread scheduling without risking performance regressions on specialized hardware.
8.1 Detection Method
CPU information is gathered via WMI (Win32_Processor) at runtime, extracting: Manufacturer, Name, NumberOfCores, NumberOfLogicalProcessors, and L3CacheSize.
8.2 Behavior by CPU Type
| CPU Type | Detection | Affinity Action |
|---|---|---|
| AMD X3D (e.g. 7800X3D) | Name contains "X3D" or L3 cache âĨ 64MB | Skipped entirely â Windows scheduler handles CCD/cache topology correctly |
| AMD Non-X3D | AMD vendor, no X3D marker | Skipped â scheduler-managed, priority only |
| Intel Hybrid (P+E cores) | Intel vendor, logical > physical cores | P-Core affinity mask calculated (even-numbered logical processors) |
| Intel Non-Hybrid | Intel vendor, logical = physical | Skipped â priority only |
| Unknown Vendor | Neither Intel nor AMD | Skipped â priority only |
9. Application Architecture
For developers and maintainers: the application follows a view-based navigation pattern with service classes for business logic.
9.1 Project Structure
| File | Type | Purpose |
|---|---|---|
App.xaml / App.xaml.cs | Application | Entry point, merges Styles.xaml resource dictionary |
MainWindow.xaml / .cs | Window | Chrome-less shell with custom title bar, status bar, and ContentControl for view swapping |
Styles.xaml | ResourceDictionary | Complete theme: colors, brushes, button styles, toggle styles, combobox, section panels |
MainMenuView.xaml / .cs | UserControl | Sim selection grid with dynamic card generation, detection status, quick actions |
RunningView.xaml / .cs | UserControl | Five-stage pipeline display with real-time status, enjoy banner, cancel/return controls |
ConfigView.xaml / .cs | UserControl | Kill/restart toggles, default sim dropdown, auto-run, navigation to sub-views |
OptimizationView.xaml / .cs | UserControl | Standard/Aggressive level selector, 20 individual optimization toggles |
CustomAppsView.xaml / .cs | UserControl | Observable collections for custom kill/restart entries with add/remove UI |
LogView.xaml / .cs | UserControl | Read-only log display with refresh, clear, and path info |
ThemedMessageBox.xaml / .cs | Window | Custom dark-themed message box replacing system MessageBox |
InputDialog.xaml / .cs | Window | Single/dual field input dialog for custom entries |
OptimizerConfig.cs | Model | Data class with all config properties and defaults |
SimInfo.cs | Model | Data class for detected simulator information |
ConfigService.cs | Service | Load/Save config from %APPDATA% as key=value text file |
SimDetectorService.cs | Service | Multi-method sim detection (Steam, Store, registry, drive scan) |
OptimizerEngine.cs | Service | Core engine: 5-stage pipeline, process management, system optimization, restoration |
AssemblyInfo.cs | Metadata | Theme resource location hints |
9.2 Navigation
The MainWindow uses a ContentControl named MainContent to swap views. Navigation methods on MainWindow:
NavigateToMainMenu() â MainMenuView NavigateToConfig() â ConfigView NavigateToOptimization()â OptimizationView NavigateToCustomApps() â CustomAppsView NavigateToRunning(...) â RunningView(simChoice, simName) NavigateToLogView() â LogView
Each view obtains a reference to MainWindow via Window.GetWindow(this) to call these navigation methods and UpdateStatus().
9.3 Theme System
All visual theming is centralized in Styles.xaml (loaded via App.xaml). The palette uses an aviation instrument aesthetic:
| Resource | Color | Usage |
|---|---|---|
| PanelDarkBrush | #2B3240 | Main background, dialog backgrounds |
| PanelMediumBrush | #3A4556 | Title bar, status bar, button default background |
| PanelLightBrush | #4A5568 | Borders, hover states, toggle tracks |
| SurfaceBrush | #344052 | Section panel backgrounds |
| AmberAccentBrush | #E8A630 | Primary accent (headers, focus borders, status text) |
| GreenAccentBrush | #4CAF50 | Success states, toggle ON, installed indicators |
| BlueAccentBrush | #5B9BD5 | Sim launch button gradient, informational |
| RedAccentBrush | #E05555 | Destructive actions, kill indicators, close hover |
| CyanAccentBrush | #56C8D8 | Secondary accent (section headers, status bar text) |
| TextPrimaryBrush | #E0E4E8 | Main body text |
| TextSecondaryBrush | #9BA4B0 | Descriptions, subtitles, version text |
| TextDimBrush | #6B7685 | Disabled text, empty state messages |
9.4 Styled Components
The Styles.xaml defines these reusable component styles:
- CockpitButton â Standard button with hover/press/focus states
- SimLaunchButton â Larger button with blue gradient background for sim cards
- CockpitToggle â iOS-style toggle switch with green ON / gray OFF states
- SectionPanel â Rounded border with surface background for grouping content
- SectionHeader â Amber bold text for section titles
- StatusText â Cyan Consolas text for the status bar
- CockpitComboBox â Fully-themed dropdown with hover states and amber accent
10. Restoration Guarantee
A core design principle of the VR Auto-Optimizer is that it never makes permanent system changes. Every modification is tracked and reverted.
10.1 What Gets Restored
| Change | Restore Method |
|---|---|
| Power plan switch | Restores the GUID captured before switching (falls back to Balanced if unknown) |
| SysMain service stopped | net start SysMain |
| Print Spooler stopped | net start Spooler |
| NVIDIA persistence mode | nvidia-smi -pm 0 |
| Game Bar disabled | Registry values restored to captured state |
| Game DVR disabled | Both HKCU and HKLM registry values restored |
| Timer resolution (0.5ms) | Restored to default 15.625ms |
| Fullscreen optimizations | Registry key restored or deleted based on previous state |
| Power throttling disabled | Registry key removed |
| Nagle's algorithm disabled | All interface registry values restored to captured state |
| Network throttling index | Restored to captured value |
| Memory compression disabled | Enable-MMAgent -MemoryCompression |
| Visual effects changed | Registry value restored, desktop refreshed |
| Killed applications | Restarted per restart flags (built-in paths + custom entries) |
| OpenXR runtime changed | Registry ActiveRuntime value restored to previous path |
10.2 Restoration Triggers
Restoration runs in all of these scenarios:
- Normal exit: Simulator process exits on its own
- User cancellation: User clicks Cancel & Revert at any stage
- Error: An unhandled exception occurs during any stage
- Timeout: Simulator process is not detected within 35 seconds
Safety note: The _restored flag ensures restoration runs exactly once, even if triggered from multiple code paths. Restoration is wrapped in try/catch blocks to ensure partial failures don't prevent remaining items from being restored.
11. Troubleshooting
11.1 Common Issues
| Problem | Cause | Solution |
|---|---|---|
| No simulators detected | Steam not installed, or sims installed on unscanned drives | Click Rescan. Verify Steam is installed. Check that sim is in drives C-J. |
| Store sim not detected | PowerShell query timed out or package name changed | Run Get-AppxPackage manually. Check the 15-second timeout. |
| Optimizer reports errors | Not running as Administrator | Right-click the app > Run as Administrator |
| Power plan not switching | Ultimate Performance not available on laptop/OEM installs | App falls back to High Performance automatically |
| NVIDIA commands fail | nvidia-smi not in PATH or non-NVIDIA GPU | Install NVIDIA drivers with command-line tools. Non-NVIDIA users can disable these toggles. |
| Sim not detected during monitoring | Process name mismatch or slow launch | The detector checks multiple candidate names. 35-second window should be sufficient. |
| Config not saving | Permission issue in AppData | Check %APPDATA%\SimVROptimizer folder permissions |
| Log shows wrong path | LogView uses base directory instead of AppData | The engine writes to %APPDATA%; the viewer should be updated if paths diverge |
11.2 Resetting to Defaults
To reset all settings to factory defaults:
- Close the application.
- Navigate to
%APPDATA%\SimVROptimizer\ - Delete (or rename)
vr_opt.cfg - Relaunch the application. A new config with all defaults will be created automatically.
12. Credits
Greetings from VRFLIGHTSIM GUY, SHARK, g0|df!ng3R, and OverKill Simulations