Load a modified VBIOS for NVIDIA GPUs on Windows through the driver's registry override, without flashing
Python
30
6 commits
updated Oct 19, 2026
English | Español
Loads a modified VBIOS for an NVIDIA GPU on Windows without flashing it. The image is stored in the
GPU's driver registry key, where the NVIDIA driver looks for a VBIOS override when the device starts, and
the device is restarted. unload removes it again. The card's flash chip is never written.
Thanks to @pantsoftime (overclock.net), whose original vbios_override work
this project family is built on. Without it, none of this would have been possible.
To modify the VBIOS, use NVIDIA VBIOS Vix Editor. For Linux, see NVIDIA Linux VBIOS Vix Loader. This repository only loads the VBIOS on Windows.
This project is not affiliated with or endorsed by NVIDIA. NVIDIA and GeForce are trademarks of NVIDIA Corporation.
Warning. A modified VBIOS can raise power, clocks and voltages beyond the card's design limits. You can damage hardware. Keep a copy of your original ROM and use this at your own risk.
load writes these values in the GPU's driver key,
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\NNNN:
| Value | Type | Content |
|---|---|---|
vbios | REG_BINARY | The VBIOS image chain from your file: from the legacy image to the end of the last image. Bytes before and after it in the file are not stored. |
EnableGpuFirmware | REG_DWORD | 0x11 (GSP firmware on, fallback allowed). |
VixLoaderPreviousEnableGpuFirmware | REG_SZ | The previous EnableGpuFirmware value, or absent. Saved on the first load only, so unload can restore it. |
It also deletes romOverride00 to romOverrideFF if present, flushes the key, reads the values back and
restarts the GPU with pnputil /restart-device. If the restart fails, restart Windows.
These are the same vbios and EnableGpuFirmware values that mVolt+ writes when it loads a BIOS file, so a
BIOS loaded with mVolt+ on the same GPU is replaced. This project is not affiliated with mVolt+. Other values
in the key are left alone.
unload deletes vbios and any romOverride records, restores EnableGpuFirmware (or deletes it if it was
absent), deletes VixLoaderPreviousEnableGpuFirmware and restarts the GPU.
It does not flash the card, edit the VBIOS, or change clocks, fans or power limits by itself. unload
returns the key to its state before the first load, except that an override written by another tool
(mVolt+ vbios or romOverride records) is not restored; in that case load says so, and unload leaves
EnableGpuFirmware as that tool set it.
| GPU family | State |
|---|---|
| Blackwell GB20x (GeForce RTX 50, RTX PRO Blackwell) | Uses the same registry values that mVolt+ uses to load BIOS files on Blackwell. Tested on an RTX 5070 (driver 617.42): an edited VBIOS loaded and worked after a GPU restart, without restarting Windows. |
| Ada AD10x (GeForce RTX 40, RTX Ada) | Tested on an RTX 4090 (VBIOS 95.02.18, driver 617.42) with an ada-relocated-v2 payload: a raised power limit (671 W) and core clock offset range (+1200 MHz) applied. Other Ada GPUs are untested. |
| Ampere GA102–GA107 (GeForce RTX 30, RTX A series) | Tested on an RTX A2000 (driver 617.42) with an ampere-relocated-v1 payload: a lowered power floor (5 W) applied. Other Ampere GPUs are untested. GA100 (A100, A30, A800) is not supported. |
If you try it, please open an issue with the GPU, driver version and result.
status shows the version).The file must contain exactly one VBIOS for this GPU's PCI ID with a valid checksum. Full flash dumps with
two banks are refused: export a single-chain payload with Vix Editor's command-line tool (nvbios.exe).
With Vix Editor 0.1.11 or newer, saving an edited Ada or Ampere copy also saves <name>-loader.bin next to
it: load that file. The commands below do the same from the command line.
.\nvbios.exe normalize edited.rom payload.bin..\nvbios.exe normalize edited.rom payload.bin --representation ada-relocated-v2. Larger
payloads are refused..\nvbios.exe normalize edited.rom payload.bin --representation ampere-relocated-v1.vbios-loader-gui.exe from the releases and check it against SHA256SUMS.load), read the confirmation (GPU, file, registry changes) and accept. With
Restart the GPU now on, the GPU is restarted (this can take up to 45 seconds); with it off, restart
Windows afterwards.unload).Every result and warning is also written in the Messages area. The window is in Spanish when Windows
is; the Language menu, or vbios-loader-gui.exe --lang en / --lang es, changes it. It is dark when
Windows uses the dark app mode; the Theme menu, or --theme light / --theme dark, changes it.
Download vbios-loader.exe from the releases, check it against SHA256SUMS, and open an elevated PowerShell
in its folder.
# List NVIDIA GPUs: index, PCI location, driver version and override state.
.\vbios-loader.exe status
# Show what would be written, without writing anything.
.\vbios-loader.exe load .\payload.bin --gpu 0 --dry-run
# Store the override and restart the GPU.
.\vbios-loader.exe load .\payload.bin --gpu 0
# Remove it and restart the GPU.
.\vbios-loader.exe unload --gpu 0
--gpu INDEX (as shown by status) or --pci BUS:DEV.FN (for example --pci 01:00.0).
With a single NVIDIA GPU the selection can be omitted.--no-restart writes the values without restarting the GPU; they apply at the next restart.--json prints machine-readable output.0 done, 1 refused or failed (nothing written unless the message says so), 2 invalid
command-line arguments (nothing written), 3 values written but the GPU restart failed (restart Windows),
70 unexpected internal error, 130 interrupted (Ctrl+C).The override stays in the GPU's registry key until you remove it, so it applies again at every Windows
start. A clean driver installation or a driver update can recreate the driver key and drop the override. Run
status after updating and load again if needed.
From source, with Python 3.11 or newer: pip install . then vbios-loader status or vbios-loader-gui, or
python -m nvidia_vbios.windows_loader status / python -m nvidia_vbios.windows_loader.gui with src on
PYTHONPATH.
Test first on a GPU that is not driving your display (use the integrated graphics or another card for
the screen), so you can always run unload.
If Windows shows no image or the GPU fails in Device Manager:
vbios-loader-gui.exe, select the GPU, turn off Restart the GPU now and click Remove override;
or, in an elevated PowerShell, run .\vbios-loader.exe unload --gpu 0 --no-restart (use the GPU's index
from status). Then restart Windows normally.regedit and go to
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}.
Open the numbered subkey whose DriverDesc is your GPU (status shows it as driver_key). Delete
vbios. Set EnableGpuFirmware back to the value saved in VixLoaderPreviousEnableGpuFirmware, or delete
EnableGpuFirmware if it says absent. Then delete VixLoaderPreviousEnableGpuFirmware and restart.PYTHONPATH=src python -m unittest discover -s tests
The tests use synthetic files and a fake registry; they run on Linux and Windows and never touch a GPU or
the real registry. The workflow in .github/workflows/build.yml runs them on Windows, builds
vbios-loader.exe and vbios-loader-gui.exe with Nuitka, checks that the window opens (with a
screenshot), and publishes tagged versions as releases with SHA256SUMS and the third-party license texts.
Copyright (C) 2026 panchovix. GNU General Public License v3.0 or later (GPL-3.0-or-later), see
LICENSE: you can use, study, change and share it, and changed versions you share must stay under
the same license. See also THIRD_PARTY_NOTICES.md. Version 0.1.0 was released under
the MIT license.
Load a modified VBIOS for NVIDIA GPUs on Windows through the driver's registry override, without flashing
Python
30
6 commits
updated Oct 19, 2026
English | Español
Loads a modified VBIOS for an NVIDIA GPU on Windows without flashing it. The image is stored in the
GPU's driver registry key, where the NVIDIA driver looks for a VBIOS override when the device starts, and
the device is restarted. unload removes it again. The card's flash chip is never written.
Thanks to @pantsoftime (overclock.net), whose original vbios_override work
this project family is built on. Without it, none of this would have been possible.
To modify the VBIOS, use NVIDIA VBIOS Vix Editor. For Linux, see NVIDIA Linux VBIOS Vix Loader. This repository only loads the VBIOS on Windows.
This project is not affiliated with or endorsed by NVIDIA. NVIDIA and GeForce are trademarks of NVIDIA Corporation.
Warning. A modified VBIOS can raise power, clocks and voltages beyond the card's design limits. You can damage hardware. Keep a copy of your original ROM and use this at your own risk.
load writes these values in the GPU's driver key,
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\NNNN:
| Value | Type | Content |
|---|---|---|
vbios | REG_BINARY | The VBIOS image chain from your file: from the legacy image to the end of the last image. Bytes before and after it in the file are not stored. |
EnableGpuFirmware | REG_DWORD | 0x11 (GSP firmware on, fallback allowed). |
VixLoaderPreviousEnableGpuFirmware | REG_SZ | The previous EnableGpuFirmware value, or absent. Saved on the first load only, so unload can restore it. |
It also deletes romOverride00 to romOverrideFF if present, flushes the key, reads the values back and
restarts the GPU with pnputil /restart-device. If the restart fails, restart Windows.
These are the same vbios and EnableGpuFirmware values that mVolt+ writes when it loads a BIOS file, so a
BIOS loaded with mVolt+ on the same GPU is replaced. This project is not affiliated with mVolt+. Other values
in the key are left alone.
unload deletes vbios and any romOverride records, restores EnableGpuFirmware (or deletes it if it was
absent), deletes VixLoaderPreviousEnableGpuFirmware and restarts the GPU.
It does not flash the card, edit the VBIOS, or change clocks, fans or power limits by itself. unload
returns the key to its state before the first load, except that an override written by another tool
(mVolt+ vbios or romOverride records) is not restored; in that case load says so, and unload leaves
EnableGpuFirmware as that tool set it.
| GPU family | State |
|---|---|
| Blackwell GB20x (GeForce RTX 50, RTX PRO Blackwell) | Uses the same registry values that mVolt+ uses to load BIOS files on Blackwell. Tested on an RTX 5070 (driver 617.42): an edited VBIOS loaded and worked after a GPU restart, without restarting Windows. |
| Ada AD10x (GeForce RTX 40, RTX Ada) | Tested on an RTX 4090 (VBIOS 95.02.18, driver 617.42) with an ada-relocated-v2 payload: a raised power limit (671 W) and core clock offset range (+1200 MHz) applied. Other Ada GPUs are untested. |
| Ampere GA102–GA107 (GeForce RTX 30, RTX A series) | Tested on an RTX A2000 (driver 617.42) with an ampere-relocated-v1 payload: a lowered power floor (5 W) applied. Other Ampere GPUs are untested. GA100 (A100, A30, A800) is not supported. |
If you try it, please open an issue with the GPU, driver version and result.
status shows the version).The file must contain exactly one VBIOS for this GPU's PCI ID with a valid checksum. Full flash dumps with
two banks are refused: export a single-chain payload with Vix Editor's command-line tool (nvbios.exe).
With Vix Editor 0.1.11 or newer, saving an edited Ada or Ampere copy also saves <name>-loader.bin next to
it: load that file. The commands below do the same from the command line.
.\nvbios.exe normalize edited.rom payload.bin..\nvbios.exe normalize edited.rom payload.bin --representation ada-relocated-v2. Larger
payloads are refused..\nvbios.exe normalize edited.rom payload.bin --representation ampere-relocated-v1.vbios-loader-gui.exe from the releases and check it against SHA256SUMS.load), read the confirmation (GPU, file, registry changes) and accept. With
Restart the GPU now on, the GPU is restarted (this can take up to 45 seconds); with it off, restart
Windows afterwards.unload).Every result and warning is also written in the Messages area. The window is in Spanish when Windows
is; the Language menu, or vbios-loader-gui.exe --lang en / --lang es, changes it. It is dark when
Windows uses the dark app mode; the Theme menu, or --theme light / --theme dark, changes it.
Download vbios-loader.exe from the releases, check it against SHA256SUMS, and open an elevated PowerShell
in its folder.
# List NVIDIA GPUs: index, PCI location, driver version and override state.
.\vbios-loader.exe status
# Show what would be written, without writing anything.
.\vbios-loader.exe load .\payload.bin --gpu 0 --dry-run
# Store the override and restart the GPU.
.\vbios-loader.exe load .\payload.bin --gpu 0
# Remove it and restart the GPU.
.\vbios-loader.exe unload --gpu 0
--gpu INDEX (as shown by status) or --pci BUS:DEV.FN (for example --pci 01:00.0).
With a single NVIDIA GPU the selection can be omitted.--no-restart writes the values without restarting the GPU; they apply at the next restart.--json prints machine-readable output.0 done, 1 refused or failed (nothing written unless the message says so), 2 invalid
command-line arguments (nothing written), 3 values written but the GPU restart failed (restart Windows),
70 unexpected internal error, 130 interrupted (Ctrl+C).The override stays in the GPU's registry key until you remove it, so it applies again at every Windows
start. A clean driver installation or a driver update can recreate the driver key and drop the override. Run
status after updating and load again if needed.
From source, with Python 3.11 or newer: pip install . then vbios-loader status or vbios-loader-gui, or
python -m nvidia_vbios.windows_loader status / python -m nvidia_vbios.windows_loader.gui with src on
PYTHONPATH.
Test first on a GPU that is not driving your display (use the integrated graphics or another card for
the screen), so you can always run unload.
If Windows shows no image or the GPU fails in Device Manager:
vbios-loader-gui.exe, select the GPU, turn off Restart the GPU now and click Remove override;
or, in an elevated PowerShell, run .\vbios-loader.exe unload --gpu 0 --no-restart (use the GPU's index
from status). Then restart Windows normally.regedit and go to
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}.
Open the numbered subkey whose DriverDesc is your GPU (status shows it as driver_key). Delete
vbios. Set EnableGpuFirmware back to the value saved in VixLoaderPreviousEnableGpuFirmware, or delete
EnableGpuFirmware if it says absent. Then delete VixLoaderPreviousEnableGpuFirmware and restart.PYTHONPATH=src python -m unittest discover -s tests
The tests use synthetic files and a fake registry; they run on Linux and Windows and never touch a GPU or
the real registry. The workflow in .github/workflows/build.yml runs them on Windows, builds
vbios-loader.exe and vbios-loader-gui.exe with Nuitka, checks that the window opens (with a
screenshot), and publishes tagged versions as releases with SHA256SUMS and the third-party license texts.
Copyright (C) 2026 panchovix. GNU General Public License v3.0 or later (GPL-3.0-or-later), see
LICENSE: you can use, study, change and share it, and changed versions you share must stay under
the same license. See also THIRD_PARTY_NOTICES.md. Version 0.1.0 was released under
the MIT license.