Skip to content

Your monitors, finally the same brightness.

A free Mac menu bar app that matches brightness across every display, including the external monitors macOS gives you no slider for. Not the same percentage on each screen. The same light.

brew install --cask secondhorizonstudio/tap/brightness-controller

Or download version 1.16.0 and drag it to Applications. Signed and notarized by Apple, so it opens with a normal double-click. Apple Silicon, macOS 14 or newer. Free.

Brightness Controller’s Mac menu bar popover: one master brightness slider above a slider for each display, built-in, LG and ASUS, set to 78, 72 and 83 percent so all three look equally bright
The entire app. Note the three numbers: 78, 72, 83. That is what matched looks like; identical percentages would not.

01 · The idea

Matched, not merely equal. Why 50% isn’t 50%

Setting three monitors to 50% doesn’t make them look alike. Panels differ in how bright and how dim they can physically go, so the useful range is the one where yours actually agree. Your least-dimmable monitor decides how dark the set can get, and your least-bright one decides how bright.

The master slider travels only that range. Push past either end and one screen would sit pinned at black or at full while the others kept moving, which is the opposite of matched.

The longer version: why two monitors at 50% look different.

Every panel's range is real hardware, and they don't line up. The master travels the overlap, because past either edge one screen would stop following. On my desk that is 16.7 to 77.1, both edges set by the LG.

02 · Two ways to match

Proportional needs no setup. Calibrated is set by eye.

Proportional needs no setup. Set each screen where you like it once, then ride the master.

Calibrated asks for two passes: set every screen by eye while the room is dim, then again when it’s bright. The app blends between those two readings as the light changes. It won’t accept the second pass until the light has genuinely moved, because two passes made in similar light are a guess.

Turn on auto-follow and the whole set tracks your MacBook’s ambient light sensor.

The walkthrough’s opening screen: you’ll set your monitors by eye once while the room is dim and once while it’s bright, in two separate sittings, and the app blends between the two as the light changes
1 of 5
It tells you the method first. Two passes, two sittings, in genuinely different light. No sensor to trust, no curve to tune, just what you see, twice.

03 · Accountability

It can tell you what it did, and why

Brightness apps have a reputation for changing things you didn’t ask for. This one keeps a plain-text log of every adjustment and its cause: a monitor woke and came back wrong, the light sensor moved, you dragged something. So “why did my screen change?” has an answer instead of a shrug.

The Displays tab shows the same thing as state: how each monitor is being controlled, where its calibration sits, and the range over which the set stays together.

The Displays tab: the master's travel across the top, then a block for each monitor: how its brightness is being controlled, its current level, where its two calibration points sit, and the range over which it stays on scale
Master travel here is 16.7 to 77.1, not 0 to 100, because that is the range where these three particular monitors actually agree. The panel scrolls, a block per screen, exactly as it does in the app.

04 · Depth

Depth for external monitors, kept out of the way

The menu stays a menu. Everything below lives behind a gear and stays hidden until you turn on advanced settings, because a first-time user should not be able to wander into a switch that makes their screen unusable.

  • Software dimming for monitors that accept no brightness command: on HDMI, behind a dock, or over AirPlay and Sidecar. They still move with the master.
  • Sub-zero dimming, for when the room is darker than your monitors can go.
  • A backlight floor, so the panel never drops into the range where it flickers.
  • Wake and docking timing, because some monitors drop out when spoken to too soon after waking.
  • A per-monitor override, for when a display misreports what it supports.
  • Brightness keys that move every screen rather than just the built-in one.
The Advanced tab in full: wake timing for displays that ignore brightness commands after sleep, software dimming for monitors that never accept them, how many times to re-read a monitor, keyboard shortcuts, dimming below the hardware floor, and the reset controls at the bottom
Every setting says what it is for and what it costs. Scroll the panel and you can read all of them. Defaults reproduce the app's normal behavior, so an untouched panel changes nothing.

05 · Compatibility

Will it work with my monitor?

Usually, but it depends on the cable more than the monitor. USB-C, Thunderbolt and DisplayPort are reliable. HDMI is less so, and on some Macs the built-in HDMI port can’t send brightness commands at all. Docks, cheap adapters and KVMs often block them too.

Two things worth checking on the monitor itself: DDC/CI has to be switched on in its own menu, and some monitors ignore commands while in a Game or Movie picture preset.

If a monitor still won’t respond, the app dims it in software instead, so it keeps moving with the others rather than sitting there stuck.

And when something is off, the app has a Troubleshoot window that looks at your actual monitors rather than handing you a generic checklist. Four situations, each with the live facts above the advice: a monitor that won’t respond, one that’s too bright even at its dimmest (it names the panel sitting at its hardware floor), one that won’t get bright enough, and brightness that changed on its own.

New to all this? Start with how to control external monitor brightness on a Mac. Some of that is hardware, not software: when the answer is no. And there’s a full troubleshooting guide, why your monitor ignores brightness commands, that applies whichever app you use.

The dim command rides the same cable as the picture, and most “it doesn't work” reports are one of these three breaks. When nothing gets through, the app dims that monitor in software instead.

06 · The field

There are other good brightness apps

Lunar, BetterDisplay, MonitorControl and DisplayBuddy are all capable tools, and for some setups one of them is the better choice. What none of them do is per-display matching from two points you set by eye. That’s the one idea this app exists for.

AppPriceBuilt aroundCompared
MonitorControlFree, open sourceBrightness keys & OSD for externalsvs MonitorControl
Lunar$23 lifetimeAlgorithmic adaptive brightnessvs Lunar
BetterDisplay$21.99Deep display plumbing of every kindvs BetterDisplay
DisplayBuddy$24.99Presets and one-click scenesvs DisplayBuddy
Brightness ControllerFreeKeeping several screens matched·

Prices as of July 2026. Check each app’s own site, they change. The full comparison, including when not to pick this app, is in the field guide.


07 · Privacy

Privacy: what leaves your Mac

No account, no login, and nothing about you is sent anywhere. The app keeps a plain-text log on your Mac of every change it made and why, so “the brightness moved on its own” is answerable rather than mysterious. That file never leaves the machine.

Once a day it asks GitHub whether a newer version exists. That’s a web request like any other, so GitHub sees an IP address; nothing is downloaded or installed, and you can switch it off.

There is also an anonymous usage report: which monitors work, which fail. It is off by default. The app mentions it at most three times, ever. If you switch it on, you can read the exact report first; it carries no serial numbers and no timestamps finer than a day, its grouping code is random and thrown away every 90 days, and this site’s server keeps only the report and the day it arrived, for at most 400 days, never the address it came from. The full field list is on the privacy page; the reasoning is in It sends nothing about you.

This website counts page views with Vercel’s cookieless analytics, served from its own origin: no cookies, no third-party request, no profile.

The whole traffic map. The log stays on disk, the version check is one small question a day, and the usage report is off until you say otherwise. One small report a day after you do, readable in full before you decide.

From the notes

Backlight

All notes