Before we get started, a few words that are important to me.
MSI Afterburner is and remains the best Nvidia GPU tool on the market. What Alexey "Unwinder" Nicolaychuk has accomplished over the years is nothing short of extraordinary. Afterburner is the gold standard for GPU tuning, OSD, fan control and advanced curve editing. NV-UV does not want to replace Afterburner. Not today, not tomorrow. NV-UV is a Companion Tool, it simplifies getting started with undervolting on Blackwell and automates things like preset switching, crash recovery and scanner-based optimization. But for fine-grained curve editing, overclocking, OSD and everything beyond undervolting, Afterburner remains the tool of choice. Once you've found your stable UV setting with NV-UV, you can close NV-UV and let AB take over, the profile sits in AB and runs normally from there.
NV-UV started as a small side project, for my own RTX 5090 and for friends I wanted to introduce to undervolting. That it has turned into something so many people actually want to use, I honestly never expected. I'm overwhelmed by all the interest.
Special thanks go to my NV-UV Discord community, testers who spent hours pushing the scanner to its limits, testers who helped me refine the UI, and everyone whose feedback made NV-UV better piece by piece. Also to my friends and family who put up with me being pretty scarce these past weeks. And a special thank you to the tech press, especially Raphael (PCGH) who discovered the tool and brought it to a wider audience, and Andreas (Hardwareluxx) who took a closer look at NV-UV. Thanks also to PCGH Hardware for giving NV-UV a home in their forum. This is exactly what the PC community has been about for years: tweaking, testing, gaming and having fun. Thank you, from the bottom of my heart. ❤️
— Christian
NV-UV is a GPU undervolting tool for the NVIDIA RTX 50 Series (Blackwell) and, as of recently, also the RTX 40 Series (Ada Lovelace, still experimental). It simplifies the undervolting process, which normally requires manually editing MSI Afterburner's curve editor.
NV-UV uses Afterburner as its backend, so you need MSI Afterburner + RTSS installed.
| 🎚️ Voltage Lock | One click, GPU runs at an exact voltage/frequency point |
| 📊 4 Preset Levels | Eco · Balanced · Performance · Max, community-validated values per GPU |
| 🔍 Stock Curve Discovery | Automatically reads the real VF curve of your specific GPU from AB |
| 🔬 OCS → UV | Import AB OC Scanner results, build chip-specific UV curve |
| 🎮 Game Replay | Automatic step-down on crash, with per-game learning loop |
| ✈️ UV-Pilot | Detects 588 games automatically, switches to the optimal preset |
| ⚡ Voltage Step Scanner | Stage 1 (highest stable frequency) + Stage 2 (lowest stable voltage), DX12/DXR stress engine |
| 🎯 Optimize Point NEW | Stage 2 — find the lowest voltage for a fixed frequency, fine-tuning after Stage 1 |
| 📐 V-Step Compensation NEW | Scanner automatically compensates V-Droop for more precise tests |
| 🖥 Smart Hz | Desktop 60Hz, gaming native Hz. Saves ~10W idle. |
| 🌍 DE/EN | Full UI in German/English, live toggle in the footer |
| 🔥 3D Stress Test | DX12 + DXR render engine (headless) with heartbeat load patterns |
| ⚓ Anchor Profile | Right-click on slot, UV stays active when NV-UV is closed |
| 🧊 Idle Optimization | Low voltages = stock, saves power at desktop/idle |
| 🔧 V-Step Fix | Compensates for the Blackwell point-before-flatten bug |
| 📐 Mini View | Compact view, perfect alongside AB's curve editor |
| 🎨 3 Skins | Dark + UV-Party + Royal Blue |
| ⏻ System Tray | Runs in background. Autostart will be added once the EXE is signed. |
| What | Details |
|---|---|
| GPU | NVIDIA RTX 5090, 5080, 5070 Ti, 5070, or 5060 Ti / 5060 (experimental) Ada cards (RTX 4090 / 4080 / 4070 Ti Super / 4070 Ti / 4070 Super / 4070) also supported (experimental) |
| Driver | Latest NVIDIA driver |
| MSI Afterburner | Version 4.6.6+ with RTSS |
| Windows | Windows 11 (64-bit) |
0 mV, the V-Lock won't apply correctly,
and the scanner returns wrong results. Steps 1 and 2 below are
mandatory, not optional.
Enable hardware control and monitoringEnable low-level IO driverEnable low-level hardware access interface → user modeUnlock voltage control → standard MSI ⬅ criticalUnlock voltage monitoring ⬅ criticalGPU voltage ⬅ without this no V-LockGPU power905 mV) instead of 0 mV. If
it still shows 0, AB didn't accept the change — go back to step 1 and make
sure both Unlock options are really set.
Unlock checkboxes by itself.
If the voltage reading suddenly drops to 0 mV after a while, just walk through
steps 1+2 again. We're working on an automatic fix for this.
C:\NV-UV\, double-click NV-UV.exe (no admin needed).
NV-UV is portable, just copy the new EXE over the old one. Settings are preserved (%LocalAppData%\NV-UV\).
Afterburner's built-in OC Scanner tests how much extra frequency your GPU can handle at each voltage. The result alone is very conservative. NV-UV takes that chip-specific data and combines it with the proven Balanced preset as a baseline. Result: A UV curve based on your silicon.
Right-click for options: V-Lock / Multi-Point / Verify with Scanner.
The scanner tests a single voltage point and finds the maximum stable frequency. Ideal for validating a UV setting or finding the sweet spot for your GPU.
Stage 1 finds the highest stable frequency at a given voltage. Stage 2 reverses it: starting from a stable point, NV-UV searches for the lowest voltage at which that frequency still holds. This squeezes out another 10–30 mV without losing frequency.
Two-step workflow:
Example: Stage 1 finds 2992 MHz @ 910 mV as stable. Stage 2 then
tries 2992 MHz @ 905 / 900 / 895 / 890 mV until the GPU crashes.
If 895 mV was the last stable point, you now run the same performance at 15 mV
less voltage — fewer watts, less heat, identical frequency.
Until recently, NV-UV would only save the single point you picked in the optimize result dialog — all the other measured voltage probes were thrown away once the dialog closed. That hurt particularly badly when too aggressive undervolting drove the driver into a render-thread crash and the picker dialog became unresponsive: every measurement lost, Stage 2 from scratch.
Starting with v0.126, NV-UV writes the full optimize run to history before showing the picker. You then see a new entry in the history with a 🎯 marker, holding all probes from the run as expandable sub-entries:
🎯 from 925 mV · 11 probes · clean or after a crash
🎯 from 985 mV · 9 probes · TDR @ 935 mV. Click the header
to expand.
Why this matters: if you realize after the picker that your chosen point was too aggressive, you don't have to re-run the search — just expand the group and pick one of the more conservative probes (e.g. 5 or 10 mV higher). And if a driver crash kills NV-UV in the middle of a run, the entire group including all probes is still there after restart.
Right-click on a history entry → Verify runs an extended stress test with that exact frequency/voltage pair. Use this to double-check a Stage 1 or Stage 2 result with a longer run (e.g. 10 minutes instead of 3) before committing it to a slot.
In the scanner window: 🧪 VRAM-only Test button. Locks the core to stock and tests only the VRAM offset you set. Useful when you want to isolate whether a crash comes from VRAM OC or from core UV: lock the core to a verified value first, then push VRAM separately.
| NVAPI Direct Mode | Scanner now writes frequency/voltage directly through the driver instead of going via AB profiles, ~50 ms instead of ~2 s per point. Drastically faster scans. |
| VRAM OC from Phase 1 | If you set a VRAM offset in the scanner, it's now active during the frequency search, not only during verification. Stability verdicts become much more realistic. |
| Stage 2 Optimize Point | Find the lowest stable voltage for a fixed frequency, see above. |
| V-Step Compensation | Dedicated checkbox in the scanner. Automatically compensates V-Droop under load. See the "Optional Features" section. |
| FMA Math-Error Detection | Compute shader detects GPU calculation errors in the background |
| WHEA Pre-Crash | Windows hardware error events detect instability before a hard crash |
| Plateau Detection | Automatically stops when the GPU can't boost higher at a given voltage |
| Offset Cap | Start offset capped at +1000 MHz (or +1200 with Boost Override) |
| Warmup once per session | Only the first step warms up, subsequent steps start immediately |
| Power Limit Slider | Full PL range in the scanner, from GPU minimum (~60%) to maximum |
| Skip Warmup | Optional, for water-cooled setups where GPU temp is already stable |
Just play, Game Replay handles the rest. On a UV crash, frequency is automatically lowered.
Game Replay now remembers crash adjustments per game. On the next launch of the same game, UV-Pilot automatically applies the reduced frequency. A game crashes once, next time the safe profile is loaded directly.
| Type | What happens |
|---|---|
| Soft Crash (TDR) | Driver recovers, 15s cooldown, downstep written live, keep playing |
| Hard Crash (Page Fault) | Downstep saved, automatically applied on next NV-UV start |
🎮 Replay toggle in toolbar, right-click for settings. Strategy: lower frequency (default), raise voltage, or both. Step sizes and safety limits configurable.
Built-in DX12 + DXR stress test that simulates realistic gaming load. The engine constantly switches between idle and full load (heartbeat pattern), creating the transients that cause UV instability.
| Resolution | Recommended for |
|---|---|
| 1440p | 5080 5070 Ti 5070 |
| 4K Supersampled | 5090 |
UV-Pilot detects running games and automatically switches to the matching UV profile.
| Tier | Description |
|---|---|
| 🔥 Max | Highest performance, Cyberpunk 2077, Alan Wake 2 |
| 🚀 Performance | Strong, Elden Ring, Hogwarts Legacy |
| ⚡ Balanced | Standard, CS2, Valorant, most games |
| 🌿 Eco | Efficient, older/lighter games |
Right-click a slot: "Add to UV-Pilot" creates a custom profile. Assignable per game in the game database.
Right-click UV-Pilot → 🎮 Game Database. 588 games + benchmarks, tier assignments adjustable, custom games addable.
3DMark is recognized but no UV tier is assigned — your active profile stays as-is. This lets you benchmark with your chosen UV without the Pilot switching profiles. A custom profile can optionally be assigned via the Game Browser.
Right-click UV-Pilot → "📐 Mini View on Gaming". Automatically switches to Mini View on game detection, saving GPU overhead from the WPF main window. Disabled by default.
Sets all voltage points below 850 mV to stock frequency. Saves power at desktop/idle.
Compensates for the Blackwell point-before-flatten bug. Under load, the GPU uses the voltage point before the lock (~10 mV less). V-Step Fix compensates automatically.
Applies to: Quick-Lock in the main window (V-Lock mode). Available as a checkbox next to the voltage slider.
The scanner window has its own V-Step Compensation checkbox. It does something different from V-Step Fix above, so here's a clear comparison:
| Feature | Where | What it does |
|---|---|---|
| 🔧 V-Step Fix | Main window (when applying a V-Lock) |
Shifts the lock point up by one VF step so the GPU doesn't fall to the point before it under load. |
| 📐 V-Step Compensation | Scanner window (during a scan) |
Continuously measures the difference between the requested voltage and the voltage actually arriving at the chip (V-Droop) and corrects subsequent test steps accordingly. |
When should I enable it? When you want precise voltages in the scanner. Example: you ask for 910 mV but MAHM reports 905 mV — the 5 mV delta gets added internally so the next test steps actually hit 910 mV at the chip, not just 905. This makes scan results far more reproducible, especially if you're using Stage 2 (Optimize Point) where every millivolt matters.
Fully automatic, runs silently in the background. In the log you'll see lines
like [VDroop] adapted: req 910 mV → MAHM 905 mV (Δ+5) → comp 5 mV.
Enabled by default.
Slider limits maximum power draw. Eco presets set PL to 85%, Performance/Max to 100%.
Memory clock offset. Default: 0 MHz. GDDR7 rarely benefits from memory OC.
Removes the 50 MHz safety margin below stock maximum. Advanced users only.
% button in the footer. Steps: 100% through 300%. All windows scale together.
Automatically switches desktop to 60Hz when no game is running, native refresh rate when a game starts. Saves ~10W idle. Toggle is in the toolbar — tooltip shows "experimental" as multi-monitor support is still limited.
Compact view without curve. 📐 Mini in toolbar, ↩ Full to return. Always on top. All features available: Slots, Presets, V-Lock, PL, VRAM, Scanner, OCS → UV.
Right-click UV-Pilot → "📐 Mini View on Gaming" enables automatic switch to Mini View when a game is detected. Returns to full view when the game exits. Disabled by default.
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 910 mV | 2430 MHz | 85% |
| ⚡ Balanced | 935 mV | 2887 MHz | 90% |
| 🚀 Performance | 1025 mV | 3105 MHz | 100% |
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 850 mV | 2800 MHz | 88% |
| ⚡ Balanced | 900 mV | 2800 MHz | 90% |
| 🚀 Performance | 925 mV | 2980 MHz | 100% |
| 🔥 Max | 975 mV | 3150 MHz | 100% |
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 850 mV | 2500 MHz | 80% |
| ⚡ Balanced | 900 mV | 2800 MHz | 90% |
| 🚀 Performance | 935 mV | 2955 MHz | 100% |
| 🔥 Max | 950 mV | 3000 MHz | 100% |
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 850 mV | 2600 MHz | 80% |
| ⚡ Balanced | 900 mV | 2750 MHz | 90% |
| 🚀 Performance | 940 mV | 3000 MHz | 100% |
| 🔥 Max | 975 mV | 3150 MHz | 100% |
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 800 mV | 2500 MHz | 80% |
| ⚡ Balanced | 875 mV | 2700 MHz | 90% |
| 🚀 Performance | 925 mV | 2900 MHz | 100% |
| 🔥 Max | 975 mV | 3000 MHz | 100% |
Note: The 5060 (non-Ti) uses this table as fallback. Since it's a smaller GB206 cut with lower TBP, it caps itself via the power limit and the values stay safe.
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 875 mV | 2400 MHz | 100% |
| ⚡ Balanced | 900 mV | 2550 MHz | 100% |
| 🚀 Performance | 925 mV | 2670 MHz | 100% |
| 🔥 Max | 950 mV | 2745 MHz | 100% |
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 875 mV | 2400 MHz | 100% |
| ⚡ Balanced | 900 mV | 2520 MHz | 100% |
| 🚀 Performance | 925 mV | 2640 MHz | 100% |
| 🔥 Max | 950 mV | 2700 MHz | 100% |
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 925 mV | 2550 MHz | 100% |
| ⚡ Balanced | 940 mV | 2640 MHz | 100% |
| 🚀 Performance | 950 mV | 2730 MHz | 100% |
| 🔥 Max | 975 mV | 2820 MHz | 100% |
| Preset | Voltage | Frequency | PL |
|---|---|---|---|
| 🍃 Eco | 900 mV | 2400 MHz | 100% |
| ⚡ Balanced | 925 mV | 2550 MHz | 100% |
| 🚀 Performance | 940 mV | 2670 MHz | 100% |
| 🔥 Max | 975 mV | 2790 MHz | 100% |
No. NV-UV uses Afterburner as its backend. AB must be installed. For OC, OSD and advanced curve editing, AB is still the go-to tool.
No voltages are increased, only lowered. Everything resettable via Stock button or Recalibrate. However, I assume no liability for any damage that may occur directly or indirectly through undervolting.
Quick check: look at Afterburner's main window. Does the
"VOLT" field also show 0 mV? Then AB itself isn't reading voltage
either — the problem is in AB, not in NV-UV. Fix:
Unlock Voltage Control ✓ and Unlock Voltage Monitoring ✓
GPU voltage ✓
905 mV). Only then can NV-UV see the voltage too.
Detailed walkthrough with all recommended checkboxes: see Installation → Steps 1 + 2 above.
Note for Reference-Design RTX 5090: on some cards
Afterburner occasionally resets the Unlock checkboxes by itself.
If the voltage reading disappears after a while, just walk through steps 1+2
again.
Normal GPU boost behavior. NV-UV sets a V-Lock at e.g. 950 mV, but the GPU only boosts to the voltage it thermally/power-wise needs. With a UV profile (curve flattened at lock point), there's no incentive to boost higher. Not a bug.
Two possible reasons:
1. Safe Limit: Scanner stops 50 MHz below stock max by default. Enable "Override Safe Limit" to remove it.
2. Driver Limit: NVIDIA caps frequency offset at +1000 MHz per voltage point. Solution: Test at a lower voltage where there's more headroom.
Fixed in Antares! Plateau detection automatically stops the scanner when the GPU can't boost higher. If you're on an older version: update to Antares.
Normal! Not every GPU can handle every preset. Try the next higher preset, or use the scanner for individual optimization. With Game Replay: just keep playing, the frequency is lowered automatically, ideally while still in the game or after the crash on the next launch.
V-Lock fixes the GPU to one voltage/frequency point. Simple, reliable, recommended method.
Multi-Point sets multiple points on the curve (e.g. from OCS Import). More complex but potentially more efficient across the voltage range.
Self-contained .NET 9 runtime. No installation needed, just run the EXE.
Not planned. DXR stress testing requires Windows 11.
Experimental. NV-UV detects RTX 40 cards (Ada Lovelace), reads the stock curve and Apply UV works. What's still rough is the import of existing AB profiles on Ada, the curve formula differs from Blackwell and some profiles don't come through cleanly yet. Stock-curve based workflows (presets, V-Lock, Scanner) should work. If you hit issues on Ada, especially around AB profile import, please send logs + your AB profile via PCGH forum or Discord so we can close the remaining gaps.
The WPF main window uses GPU resources for rendering and DWM compositing. In 3DMark this can cost ~200-500 points. Solution: Use Mini View, minimize NV-UV to tray, or enable Auto-Mini on Gaming (right-click UV-Pilot). Your UV profile stays active in AB even when NV-UV is minimized/closed.
False positive. Self-contained .NET SingleFile EXEs are sometimes flagged. NV-UV is safe, you can add an exception.
%LocalAppData%\NV-UV\ contains: UV profiles, slot names, Game Replay adjustments, scanner history, OCS data, stock curve, CCB cache, logs.
Via the Log Export button below the log panel. The log file is exported and can be sent directly to Christian.
Always back up your profiles manually before experimenting. If profiles are lost: check the NV-UV folder at %LocalAppData%\NV-UV\, that's where saved data, OCS curves and scanner history are stored.
Settings → General, disable Start with Windows. This prevents an unstable profile from being loaded automatically at boot, in case a UV setting kills the driver during startup. Only re-enable AB autostart once your UV setting has been verified stable in games.Latest NVIDIA driver installed? Start NV-UV after Windows desktop has loaded.
AB + RTSS must be running. Enable voltage monitoring in AB (see FAQ above). Restart AB.
Enable Unlock Voltage Control in AB. Missing stock curve? Click 🔄 Recalibrate.
Try a higher preset, or use the scanner. Game Replay lowers frequency automatically.
Please post feedback directly in the Feedback thread on the PCGH forum or to Christian on Discord, screenshot + text.
%LocalAppData%\NV-UV\nv-uv.log, please include with bug reports! Exportable via the Log Export button below the log panel.NV-UV uses NvApiNative.dll, a native NVAPI bridge derived from the open-source project Green Curve by aufkrawall. Green Curve demonstrated how to access the VF curve on Blackwell GPUs directly via NVAPI entry points. NV-UV applies this approach for Scanner Direct Mode and Point Optimization.
Project repository: https://github.com/aufkrawall/green-curve
The full text of the MIT license is reproduced below:
MIT License Copyright (c) 2026 aufkrawall Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Many thanks to aufkrawall for Green Curve and for making the project available under an open license.