Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

NVDA-Patch

DONT TRUST THIS SOURCE IT CAN COMPLETLY CRANK DOWN YOUR SYSTEM!

A standalone, interactive Install → Patch → Enable → Revert tool for getting NVIDIA's legacy Web Driver 387.10.10.10.40.140 working on Pascal-class GPUs under macOS versions where Apple no longer ships or supports NVIDIA drivers.

Supported Pascal GPUs include:

  • NVIDIA GeForce GTX 1050
  • NVIDIA GeForce GTX 1060
  • NVIDIA GeForce GTX 1070
  • NVIDIA GeForce GTX 1080
  • NVIDIA TITAN X (Pascal)
  • NVIDIA TITAN Xp
  • NVIDIA Quadro P-series
  • Other Pascal-based NVIDIA GPUs supported by the legacy Web Driver

The project is a simplified, self-contained implementation inspired by the model-specific NVIDIA Web Driver patching approach used by OpenCore Legacy Patcher.

This is not a replacement for OpenCore Legacy Patcher.

OCLP handles many additional aspects of unsupported macOS installations, including APFS system-volume snapshots, re-sealing, re-blessing, root patches, configuration management, and hardware-specific edge cases that this tool does not handle.


Features

The tool uses a simple numbered terminal menu.

No command-line arguments are required.

After starting the program, select an operation by entering its number:

========================================================================
 NVIDIA Pascal Web Driver 387.10.10.10.40.140
========================================================================
Platform: Darwin

Dry run: OFF    Force GPU check: CHECK    Rebuild KC: ON
Workdir: nvidia_webdriver_work
Pkg URL: https://...

------------------------------------------------------------------------
 [ 1] Install   (download + expand driver package)
 [ 2] Patch     (copy kexts into place, back up originals)
 [ 3] Enable    (set NVRAM flag, rebuild kernel collection)
 [ 4] Revert    (undo Patch/Enable from backup)
 [ 5] Run All   (Install -> Patch -> Enable)
 [ 6] Toggle dry run                  [OFF]
 [ 7] Toggle skip GPU check           [OFF]
 [ 8] Toggle rebuild kernel collection [ON]
 [ 9] Edit working directory
 [10] Edit package URL
 [11] Select local .pkg file
 [12] Quit
------------------------------------------------------------------------
 [ 0] Quit

Choose an option:

The interface is designed to be usable directly from Terminal without needing to remember command-line flags.


What it does

The tool provides five main operations.

Operation Description
Install Downloads or uses a local NVIDIA Web Driver .pkg and extracts its driver components.
Patch Backs up existing files, installs the Pascal Web Driver components, and removes the stock NVDAStartup.kext.
Enable Sets the nvda_drv=1 NVRAM variable and optionally rebuilds the kernel collection.
Revert Restores the original files from the backup, removes the nvda_drv NVRAM variable, and optionally rebuilds the kernel collection.
Run All Performs Install → Patch → Enable automatically.

Run All

Selecting:

[5] Run All

performs:

Install
   ↓
Patch
   ↓
Enable

Revert is never automatically included in Run All.

Use option 4 when you explicitly want to undo the patch.


Supported Platforms

Operation macOS Windows Linux
Install
Patch
Enable
Revert
Run All Install only Install only

macOS

macOS is the intended platform for the complete tool.

The following operations require macOS:

  • Patch
  • Enable
  • Revert
  • Run All beyond the Install stage

Windows / Linux

The program can still be started on Windows or Linux.

Install can download and retain the NVIDIA Web Driver package.

However, Patch, Enable, and Revert will refuse to execute because they depend on macOS-specific components such as:

  • .kext kernel extensions
  • /System/Library/Extensions
  • /Library/Extensions
  • kmutil
  • nvram
  • csrutil

A Windows or Linux installation cannot load a macOS .kext.

If you download the .pkg on Windows, you can transfer it to the Mac afterward.


Requirements

macOS

For the complete Patch / Enable / Revert workflow:

  1. A real Mac running a compatible macOS version.
  2. Python 3.
  3. Root access.
  4. Internet access for downloading the Web Driver, unless using a local .pkg.
  5. SIP disabled for operations that modify protected system locations.
  6. A recovery method available before modifying the system.

Run the program with:

sudo python3 NVDA-Patch.py.py

Depending on the filename you use, for example:

sudo python3 NVDA-Patch.py

SIP Requirements

Before attempting to patch protected macOS system files, SIP must be disabled.

Boot into macOS Recovery and run:

csrutil disable

For systems using a sealed system volume, the script also expects:

csrutil authenticated-root disable

Then reboot back into macOS.

Check the current SIP state with:

csrutil status

The program also performs its own SIP check before non-dry-run patching operations.

Important: Disabling SIP reduces macOS security. Do this only when you understand the consequences.


Getting Started

1. Download the script

Place the script somewhere convenient, for example:

~/Downloads/NVDA-Patch.py.py

2. Open Terminal

Navigate to the directory containing the script:

cd ~/Downloads

3. Start the program

sudo python3 NVDA-Patch.py.py

4. Use the numbered menu

The recommended first step is:

[6] Toggle dry run

Turn Dry Run ON.

Then use:

[5] Run All

Dry Run allows the script to show what it intends to do without making the actual system modifications.


Menu Options

1 — Install

Downloads the NVIDIA Web Driver package and expands it into the configured working directory.

The default driver version is:

387.10.10.10.40.140

The default package URL is:

https://us.download.nvidia.com/Mac/Quadro_Certified/387.10.10.10.40.140/WebDriver-387.10.10.10.40.140.pkg

The downloaded package is stored in:

./nvidia_webdriver_work/

The expanded payload is stored under:

./nvidia_webdriver_work/expanded/

On Windows or Linux, automatic macOS package extraction is skipped. The .pkg is retained so it can be transferred to a Mac or manually inspected with a suitable archive tool.


2 — Patch

Patch installs the Pascal-specific NVIDIA Web Driver components.

Before changing anything, the script backs up existing files.

The main system locations are:

/System/Library/Extensions
/Library/Extensions

The following system-volume bundles are installed:

GeForceAIRPluginWeb.bundle
GeForceGLDriverWeb.bundle
GeForceMTLDriverWeb.bundle
GeForceVADriverWeb.bundle

The following extensions are installed:

GeForceWeb.kext
NVDAGP100HalWeb.kext
NVDAResmanWeb.kext
NVDAStartupWeb.kext

The stock:

NVDAStartup.kext

is removed so that the Web Driver can take priority.


3 — Enable

Enable sets the following NVRAM variable:

nvda_drv=1

This is the flag checked by the NVIDIA Web Driver.

If Rebuild Kernel Collection is enabled, the script also runs:

kmutil install --volume-root / --update-all

After enabling the driver, reboot the Mac.


4 — Revert

Revert attempts to undo the changes made by Patch and Enable.

It:

  1. Restores backed-up system files.
  2. Restores backed-up data-volume extensions.
  3. Restores the original NVDAStartup.kext if one existed.
  4. Removes files that did not exist before patching.
  5. Clears:
nvda_drv
  1. Optionally rebuilds the kernel collection.

Run Revert if you need to return to the pre-patch state.


5 — Run All

Run All executes:

Install
   ↓
Patch
   ↓
Enable

This is the easiest option for a complete installation.

Recommended workflow

First:

[6] Toggle dry run → ON
[5] Run All

Review the output.

If everything looks correct:

[6] Toggle dry run → OFF
[5] Run All

The script will request confirmation before performing destructive operations.


Settings

6 — Toggle Dry Run

Dry Run prevents actual filesystem/NVRAM modifications.

When enabled, the menu shows:

Dry run: ON

Use this before performing the real patch.


7 — Toggle Skip GPU Check

By default, Patch checks for a Pascal-class NVIDIA GPU using:

system_profiler SPDisplaysDataType

The script looks for Pascal-related identifiers such as:

GTX 1050
GTX 1060
GTX 1070
GTX 1080
TITAN X (Pascal)
TITAN Xp
Quadro P
P100

If your GPU is not detected automatically but you know it is compatible, enable:

[7] Toggle skip GPU check

The status will change to:

Force GPU check: SKIP

Do not enable this option unless you know your GPU is compatible with the driver.


8 — Toggle Rebuild Kernel Collection

Controls whether the script rebuilds the kernel collection after Enable or Revert.

When enabled:

Rebuild KC: ON

The script uses:

kmutil install --volume-root / --update-all

Working Directory

9 — Edit Working Directory

The default working directory is:

./nvidia_webdriver_work

It contains the downloaded package and extracted driver payload.

You can change it from the menu:

[9] Edit working directory

For example:

/Users/sten/NVIDIA-WebDriver

Package URL

10 — Edit Package URL

The default URL points to NVIDIA's legacy Web Driver package.

You can replace it with another package URL using:

[10] Edit package URL

This is useful if the original NVIDIA download location becomes unavailable.


Local Package

11 — Select Local .pkg File

If you already have:

WebDriver-387.10.10.10.40.140.pkg

you do not need to download it again.

Choose:

[11] Select local .pkg file

and enter the full path.

For example:

/Users/sten/Downloads/WebDriver-387.10.10.10.40.140.pkg

The next Install operation will use the local package instead of downloading it.


Backups & Reverting

Backups are stored at:

/Library/Application Support/patch_nvidia_pascal/backup

The structure is:

backup/
├── system_extensions/
├── data_extensions/
└── system_removed/

System extensions

backup/system_extensions/

contains backups of existing files from:

/System/Library/Extensions

Data extensions

backup/data_extensions/

contains backups of existing files from:

/Library/Extensions

Removed system files

backup/system_removed/

contains files such as the original:

NVDAStartup.kext

if they existed before patching.


Important Backup Behavior

Existing backups are not overwritten by subsequent Patch operations.

This is intentional.

It means the backup represents the state from before the original patch rather than the state from the most recent patch attempt.


Verifying the Driver

After Patch and Enable complete, reboot the Mac.

After reboot, check the NVRAM setting:

nvram nvda_drv

Expected:

nvda_drv	1

You can also check loaded NVIDIA extensions:

kextstat | grep -i nvda

Depending on the macOS version and driver-loading mechanism, output can vary.


Kernel Collection

If you did not enable automatic rebuilding, you can manually run:

sudo kmutil install --volume-root / --update-all

Then reboot.


Important: APFS Sealed System Volume

This tool directly modifies locations under:

/System/Library/Extensions

Modern macOS versions use a sealed APFS system volume.

As a result, simply copying files into the filesystem may not be enough for the changes to persist or become bootable.

This project does not fully manage:

  • APFS system snapshots
  • System-volume sealing
  • Re-sealing
  • Re-blessing
  • Snapshot selection
  • OpenCore root patching

This is one of the major differences between this project and OCLP.

If the Mac fails to boot after patching, Recovery may be required.


Limitations

This project intentionally has a narrow scope.

It does not attempt to replace OpenCore Legacy Patcher.

It does not:

  • Manage OpenCore config.plist
  • Install or configure OpenCore
  • Manage APFS system snapshots
  • Automatically re-seal the system volume
  • Automatically re-bless the system
  • Restore GPUCompiler.framework for OpenCL compatibility
  • Handle every NVIDIA GPU generation
  • Handle Tesla-specific driver files
  • Handle Kepler-specific driver files
  • Guarantee compatibility with every macOS release
  • Guarantee that NVIDIA's legacy download URL remains available
  • Automatically recover an unbootable system

The driver version is specifically:

387.10.10.10.40.140

and the project is specifically focused on Pascal-class NVIDIA hardware.


NVIDIA Web Driver Compatibility

The Web Driver was designed for older macOS releases.

A working installation depends on more than simply copying .kext files.

Compatibility can depend on:

  • macOS version
  • kernel version
  • GPU model
  • system architecture
  • framework versions
  • driver signing
  • SIP configuration
  • APFS system-volume state
  • NVRAM
  • kernel collections

Therefore, successful execution of the script does not guarantee that the NVIDIA driver will actually load.


Troubleshooting

"No Pascal GPU detected"

If your GPU is compatible but system_profiler does not report one of the expected names:

No Pascal GPU detected via system_profiler.

Enable:

[7] Toggle skip GPU check

Then retry Patch.


"This action needs root"

Start the program with:

sudo python3 NVDA-Patch.py.py

"SIP is not fully disabled"

Boot into Recovery and run:

csrutil disable
csrutil authenticated-root disable

Then reboot.


Driver does not load

Check:

nvram nvda_drv

Then:

kextstat | grep -i nvda

Also check:

system_profiler SPDisplaysDataType

If the system volume is sealed, the files may not be active even though they were copied successfully.


Mac no longer boots

Do not repeatedly run Patch.

Boot into macOS Recovery and use the available recovery options.

If a backup exists, the script's Revert operation can restore the files it changed:

[4] Revert

However, Revert cannot guarantee recovery from problems caused by APFS system snapshots or other boot-level changes.

For serious boot problems, Recovery, Time Machine, reinstalling macOS, or OCLP's root-patch removal/recovery mechanisms may be required.


Safety

This program modifies critical macOS components.

It can modify:

/System/Library/Extensions
/Library/Extensions
NVRAM
Kernel collections

These changes can cause:

  • Driver loading failures
  • Graphics problems
  • Kernel panics
  • Boot failures
  • Loss of hardware acceleration
  • An unbootable system

Before patching

Make sure you have:

  • A current backup
  • Access to macOS Recovery
  • A working keyboard
  • A way to boot the Mac without the NVIDIA driver
  • Familiarity with Recovery Terminal

Always perform a Dry Run first.


Recommended Workflow

The safest workflow is:

1. Start the program

sudo python3 NVDA-Patch.py.py

2. Enable Dry Run

[6] Toggle dry run

3. Run the complete pipeline

[5] Run All

4. Review the output

Make sure the detected GPU and paths look correct.

5. Disable Dry Run

[6] Toggle dry run

6. Run All again

[5] Run All

Confirm the destructive operations when prompted.

7. Reboot

After the operation completes, reboot macOS.

8. Verify

nvram nvda_drv

and:

kextstat | grep -i nvda

Disclaimer

This project is provided for testing, research, and educational purposes.

It modifies protected macOS system files and NVRAM and can potentially make a system unbootable.

Use it at your own risk.

The author does not guarantee compatibility with any particular Mac, NVIDIA GPU, macOS version, kernel version, or system configuration.

For production or daily-driver systems, OpenCore Legacy Patcher is recommended because it provides a considerably more complete and tested root-patching workflow.

OpenCore Legacy Patcher


License

See the repository's license file for licensing information.

About

Macos NVDA Pascal Patch. Go give it a try.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages