Skip to content

PeterPhuTran/nvidia-surround-toggle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NVIDIA Surround Toggle — 3× 1440p @ 144 Hz

Span three different 1440p monitors into a single 7680×1440 @ 144 Hz NVIDIA Surround display, with one‑click shortcuts to flip between Surround and normal extended mode — using the free, open‑source DisplayMagician.

It also documents the fix for the very common "Surround only offers 60 Hz" problem you hit when your three panels aren't identical, and a couple of non‑obvious gotchas that cost me an evening.

Works for any 3‑monitor NVIDIA Surround setup — just substitute your own resolutions/refresh.

My setup

Role Monitor Native max
Left LG 27GL850 2560×1440 @ 144 Hz
Middle (primary) Dell S2721DGF 2560×1440 @ 165 Hz
Right Acer VG270U P 2560×1440 @ 144 Hz

GPU: NVIDIA RTX 5080 (driver 610.47), Windows 11. All three on DisplayPort.

Goal — two shortcuts:

  • Surround → one 7680×1440 @ 144 Hz display
  • Default → three independent displays at native refresh (Dell 165 Hz, LG/Acer 144 Hz)

Why a tool at all?

NVIDIA provides no command line or shortcut to toggle Surround. Tools that can (DisplayMagician, Helios) wrap NVIDIA's NVAPI "Mosaic" interface: you build Surround once in the NVIDIA Control Panel, the tool snapshots that state into a named profile, and a shortcut replays it. The tool doesn't compute the layout — it restores a saved one.


Step 1 — Install DisplayMagician

Grab the latest installer from the releases page. It runs in the system tray. (No winget package as of writing.)

Step 2 — Fix "Surround only shows 60 Hz" (the important part)

If your three panels aren't identical, the Surround wizard will likely only offer 60 Hz.

Why: Surround fuses the panels into one logical display, which requires all three to use an identical display timing — not just the same resolution and refresh number, but the same blanking, sync widths, and sync polarities. Each panel's native (Automatic) timing is different, so NVIDIA falls back to the one mode they all implement the same: generic 60 Hz.

Here are my three panels' native timings (see monitor_default_settings/ for the screenshots):

Panel Shown H total V total V‑sync polarity Pixel clock
LG 27GL850 144 Hz 2640 1496 Negative 568.72 MHz
Dell S2721DGF 165 Hz 2640 1480 Negative 644.67 MHz
Acer VG270U P 144 Hz 2720 1500 Positive 587.52 MHz

Different totals, different sync widths, opposite V‑sync polarity on the Acer → no common 144 Hz timing.

The fix — give all three the same formula‑based timing:

For each monitor:

  1. NVIDIA Control Panel → Display → Change resolution.
  2. Select the monitor → Customize… → ☑ Enable resolutions not exposed by the displayCreate Custom Resolution.
  3. Set 2560×1440, 144 Hz, Progressive, 32‑bit.
  4. Timing → Standard: change AutomaticCVT reduced blank. ← the key step. It computes timing purely from resolution + refresh, so all three panels get identical timing.
  5. Test → keep it.
  6. Repeat on the other two, then set each monitor to the new custom 144 Hz mode.

After this, the Surround wizard will offer 144 Hz. (If a panel rejects CVT‑RB, use Manual and copy one panel's exact timing onto all three.)

Step 3 — Build Surround and capture the two profiles

  1. In DisplayMagician → Display Profiles, save your current 3‑monitor layout as DefaultSave to Desktop.
  2. NVIDIA Control Panel → Configure Surround, PhysX → ☑ Span displays with SurroundConfigure. Arrange the panels left→right, pick 7680×1440 @ 144 Hz, bezel correction off, Apply.
  3. Alt‑Tab to DisplayMagician → save the spanned layout as SurroundSave to Desktop.

You now have two desktop shortcuts, each of which just runs:

DisplayMagician.exe ChangeProfile "<PROFILE-UUID>"

Step 4 — Gotcha: never run DisplayMagician elevated

This one silently wasted an hour. Symptom: double‑clicking a shortcut does nothing — no error, no change.

Cause: DisplayMagician's exe is asInvoker (no admin needed). But if an instance is already running elevated (e.g. the installer auto‑launched it under the elevated installer), your normally‑launched shortcut starts a non‑elevated instance, which tries to hand the job to the elevated one — and Windows UIPI blocks a normal‑privilege process from driving an elevated one. The switch no‑ops.

Fix / avoid:

  • Make sure DisplayMagician is not running as administrator (Task Manager → Details → check, or just exit it from the tray and relaunch normally).
  • Don't tick Run as administrator on the exe or the shortcuts.
  • If you enable "start with Windows," make sure it isn't an elevated scheduled task.

With everything at the same (normal) privilege level, the shortcuts toggle correctly.

Gotcha: the window hangs after switching (issue #351)

DisplayMagician 2.7.2.1 occasionally leaves an unresponsive window after a successful profile switch (issue #351) — you have to close it via Task Manager. The display change itself applies fine; only the window hangs.

Workaround: tools/surround-switch.ps1 launches the switch, waits for it to actually apply, then closes any lingering DisplayMagician window. Point each shortcut at it instead of calling DisplayMagician.exe directly:

powershell -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass \
  -File surround-switch.ps1 -Uuid <PROFILE-UUID> -ExpectedWidth <width>

(<width> is the GPU's horizontal resolution once the profile is applied — e.g. 7680 for the spanned display, 2560 for the 3-monitor layout. Find your profile UUIDs in %LOCALAPPDATA%\DisplayMagician\Profiles\DisplayProfiles.json.)

Important: the script waits ~20 s before force-closing. DisplayMagician saves its Settings.json during shutdown, and killing it too early corrupts that file ("Error loading the Program Settings" on next launch) — the delay guarantees the save finishes first. Setting ShowSplashScreen: false and MinimiseOnStart: true in DisplayMagician's settings makes the brief window unobtrusive.

Step 5 — Optional: registry backup (if Surround reverts to 60 Hz after a reboot)

High‑refresh Surround sometimes drops back to 60 Hz after a reboot because the custom timing doesn't persist (the profile replays the mode, not the timing). The timings live in the registry, so you can back them up and restore + reboot if it ever happens:

  • Custom‑resolution timings: CustomDisplay (binary) under HKLM\SYSTEM\CurrentControlSet\Control\Video\{ADAPTER-GUID}\0000..\0003
  • Surround config: the MosaicRegistryData / MosaicConfig / MosaicResolutionPruning values in the same keys
  • Persisted applied modes: ModePersistence, NV_Modes

Back them up with:

reg export "HKLM\SYSTEM\CurrentControlSet\Control\Video\{ADAPTER-GUID}" backup.reg /y

(The actual dumps are machine‑specific — they encode your hardware/EDID — so they are not included in this repo.) Note the adapter GUID changes after a clean driver reinstall (DDU), in which case you just recreate the custom resolutions.


What to expect

  • Each toggle takes ~10–25 seconds with several black‑screen flashes — that's normal for enabling/disabling Surround, not a failure.
  • Surround forces a common refresh, so the 165 Hz Dell runs at 144 Hz only while Surround is active; it returns to 165 Hz in Default mode.
  • DisplayMagician's log may show screen width is 0 / Mosaic … NOT VALID lines — these are harmless; the apply still reports success.

Repo contents

  • monitor_default_settings/ — the per‑monitor custom‑resolution timing screenshots I used.

  • DisplayMagician_Profiles/ — notes on the two shortcuts (the actual .lnk files are kept local; they embed machine‑specific tracking data).

  • tools/surround-switch.ps1 - shortcut wrapper that auto-closes the hung DisplayMagician window after a switch (issue #351 workaround). The per-profile .lnk files are kept local.

Credits

DisplayMagician by Terry MacDonald, derived from Helios Display Management by Soroush Falahati.

About

Toggle NVIDIA Surround across three 1440p monitors (7680x1440 @144hz) with one-click shortcuts — DisplayMagician setup + the 60Hz-Surround fix.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors