Skip to content

Repository files navigation

Acuity

Active. Acuity provides supersampled HiDPI for standard-density QHD external monitors. It remembers your chosen "looks like" size and refresh rate per display and re-applies them on reconnect and at login via a small open-source LaunchAgent - no SIP disable, no private entitlements. The daemon is a plain plist you can inspect, edit, or remove.

Native HiDPI scaling for external monitors on macOS. No SIP. No private entitlements. Open source.

Swift 5.9+ macOS 13+ MIT

Why

macOS enables HiDPI ("Retina") scaling based on a display's pixel density, not its brand. High-density panels — 4K/5K and anything near ~220 PPI, or where a clean 2× integer scale applies — get HiDPI scaled modes automatically, Apple-branded or not. But a standard-density external monitor, such as a 27" QHD (2560×1440, ~109 PPI), gets no useful HiDPI scaled modes by default: you're left with native 1× (sharp but small UI) or blurry non-integer scaling.

The fix is the long-established EDID-override technique: write a plist to /Library/Displays/Contents/Resources/Overrides/ that macOS reads at boot to expose additional supersampled HiDPI modes (rendered at 2× and downsampled to the panel). No SIP disable, no kernel extensions, no private entitlements.

Acuity automates the override generation, switches modes live via public CoreGraphics APIs, and remembers your chosen mode (size and refresh rate) so a LaunchAgent re-applies it on reconnect and at login. If the remembered refresh rate isn't available at reconnect time, the resolution is still applied at the best available rate and the fallback is logged. The menubar and CLI are resolution-focused.

Sharpness ceiling. HiDPI improves anti-aliasing but cannot exceed the panel's physical pixel density. On a ~109 PPI panel it's clearly smoother than blurry scaling, but it is not true Retina — that requires a denser panel (4K ≈ 163 PPI, 5K ≈ 218 PPI), which then needs no override at all. Acuity helps most on sub-Retina panels where you want larger-but-sharp UI.

Requirements

  • macOS 13 (Ventura) or later
  • Apple Silicon or Intel Mac
  • A standard-density external display with an EDID (tested on the Dell S2721DGF, 27" QHD 2560×1440)

Install

Homebrew (recommended)

brew install --cask paulhkang94/acuity/acuity

From source

git clone https://github.com/paulhkang94/acuity.git
cd acuity
./scripts/install.sh

Setup

Once installed, enable HiDPI and start the daemon:

# 1. Enable HiDPI for all connected external displays (writes override plists; needs sudo)
sudo acuity enable --all --preset all

# 2. Reboot so macOS picks up the new display modes
sudo reboot

# 3. Install the daemon so overrides re-apply automatically on reconnect and at login
acuity install

Only the enable and reboot steps need sudo. Switching resolutions live with acuity set-resolution and installing the daemon with acuity install do not.

Commands

Command Description
acuity list List connected external displays and HiDPI status
acuity status Show override + current-mode status for each display
acuity enable --all Write HiDPI override plists for all external displays (default: 2× preset)
acuity enable --all --preset 2x 2× scaling (half-native, e.g. 1280×720 @2× on 2560×1440)
acuity enable --all --preset 1.5x 1.5× scaling
acuity enable --all --preset all Full resolution ladder
acuity enable --display 0xVID:0xPID Enable for a specific display
acuity disable --all Remove override plists
acuity set-resolution --all --width W --height H Switch live to a HiDPI "looks like" size - no reboot, no sudo
acuity set-resolution --all --width W --height H --hz N Same, pinned to a specific refresh rate (falls back to the best available rate if absent)
acuity set-resolution --all --width W --height H --no-hidpi Switch to the 1× (soft) variant - shows the difference HiDPI makes
acuity set-resolution --list List available HiDPI "looks like" sizes with zoom %
acuity install Install the LaunchAgent (menubar app, auto-restarts)
acuity uninstall Remove the LaunchAgent
acuity uninstall --clean Remove daemon and all override plists

Demo

$ acuity list

Connected external displays:

  1. Display 10ac:41da
     ID         : 0x10AC:0x41DA
     Native     : 2560×1440
     Connection : Unknown
     Status     : HiDPI ✓

$ acuity status

Display 10ac:41da [10ac:41da] — Unknown
  Resolution:  2560×1440 @ 144Hz
  HiDPI plist: ✓ installed
  Current mode: ✓ HiDPI active (1680×945 @2× @ 144Hz)
  Remembered:  1680×945 @ 144Hz

How it works

macOS exposes HiDPI modes when it finds a matching override plist under /Library/Displays/Contents/Resources/Overrides/DisplayVendorID-<vid>/DisplayProductID-<pid>. The plist contains a scale-resolutions array of binary-encoded logical resolutions.

Acuity generates these entries for standard scaled resolutions (2×, 1.5×, and a full ladder), writes them to the correct path, and sets the DisplayResolutionEnabled WindowServer default. On reboot, macOS picks up the new modes.

acuity set-resolution then switches between the unlocked modes at runtime using public CoreGraphics APIs (CGBeginDisplayConfiguration / CGConfigureDisplayWithDisplayMode / CGCompleteDisplayConfiguration) — no reboot, no sudo. Note this can only select modes that already exist; creating HiDPI modes still requires the override (or a reboot to pick up newly written ones).

The LaunchAgent runs the menubar app (acuity start) and uses CGDisplayRegisterReconfigurationCallback to re-apply the HiDPI mode when a known display reconnects — useful for docks and KVM switches.

Supported displays

Any external monitor with an EDID. Tested on:

  • Dell S2721DGF (QHD 2560×1440, 27", ~109 PPI)

If your display is not recognized or produces unexpected results, open an issue with the output of acuity list --json.

Contributing

  1. Fork and clone the repo
  2. swift build to build, swift test to run tests
  3. Open a pull request with a description of what changed and why

Bug reports with acuity list --json output and macOS version are appreciated.

License

MIT. See LICENSE.

About

Native HiDPI scaling for external monitors on macOS. No SIP. No private entitlements.

Topics

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages