LuxCurve is a lightweight, open-source macOS menu-bar app that replaces macOS's automatic brightness with curves you define. You calibrate it by adjusting the screen until it is comfortable for the current lighting and saving that point. Over time, LuxCurve maps your preferred brightness — and, optionally, color warmth — to each ambient light level.
Status: v0.1 — built-in display. Adapts both brightness and color warmth on the built-in display, with a guided calibration window, a Settings window, and launch at login. External-display (DDC) support is the main open contribution — see
ARCHITECTURE.md.
No Xcode required — download the ready-to-use app:
➜ Download the latest release
(LuxCurve.dmg)
- Open
LuxCurve.dmgand drag LuxCurve onto the Applications shortcut. (A.zipis also provided if you prefer it.) - The build is ad-hoc signed and not notarized, so on first launch macOS Gatekeeper blocks a plain double-click. Instead right-click LuxCurve → Open, then confirm Open. If macOS still refuses, go to System Settings ▸ Privacy & Security and click Open Anyway. This is a one-time step.
- Turn off System Settings → Displays → "Automatically adjust brightness" so that macOS and LuxCurve do not both control the display.
LuxCurve runs as a menu-bar item with no Dock icon — look for the sun glyph. The first launch opens a short guided calibration.
Why not notarized / on the App Store? LuxCurve uses private Apple frameworks (see below), which rules out the Mac App Store and lets it ship without a paid Apple Developer account. See
DISTRIBUTION.mdfor details.
- Apple Silicon Mac with a built-in display and ambient light sensor (for example, any MacBook). Verified on an M3 MacBook Air running macOS 26.4.
- macOS 14.0 or later.
- Measures ambient light with the Mac's built-in light sensor (lux).
- Smooths the reading so brief changes in lighting do not cause flicker.
- Maps each light level to a brightness value using a curve you build by calibrating.
- Optionally maps each light level to a color warmth as well — warmer in dim light, neutral in bright light — using the system Night Shift engine.
- Applies the result to the built-in display.
- Learns from manual brightness adjustments: an adjustment is recorded as a calibration point for the current lighting.
- Suggests a sensible starting point for the current lighting (informed by lighting ergonomics and circadian research) that you then fine-tune by eye.
- Settings (⌘,) let you tune responsiveness, an overall brightness level, and the brightness range; enable a gentle dim-at-night; start from a suggested curve; manage individual calibration points; and reset.
LuxCurve reads the light sensor and sets brightness/warmth through undocumented
Apple frameworks (IOKit/IOHIDEventSystem, DisplayServices, and CoreBrightness
for Night Shift). As a result:
- It cannot ship on the Mac App Store; install from a GitHub release or from source.
- A future macOS update could change these APIs. If adaptive brightness stops
working, run the diagnostic in
Tooling/sensor-probe/first. - All private-API use is isolated in one file,
LuxCurve/Bridge/LCBridge.m.
Only needed if you want to build it yourself or contribute. Requires Xcode 16 or later.
# From the repo root
open LuxCurve.xcodeproj # then press ▶, or:
xcodebuild -project LuxCurve.xcodeproj -scheme LuxCurve -configuration Debug buildSee ARCHITECTURE.md for the design and
DISTRIBUTION.md for cutting a release.
Your calibration curve and settings are stored in
~/.config/lux-curve/config.json (human-readable JSON). Delete the file to start
over, or use Reset in Settings.
MIT — see LICENSE.