Skip to content
Parra-IncPublic

About

Keep multiple Apple Studio or Pro Displays in sync

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Sundog

A macOS menu bar app for controlling the brightness of Apple displays — Studio Display, Pro Display XDR, the LG UltraFine line, and the built-in panel — individually or all at once.

macOS treats external Apple displays as second-class citizens for brightness: the keyboard keys only reach one of them, Control Center buries the rest, and there's no way to keep several displays in step. Sundog puts a slider for every connected display in the menu bar and adds the coordination features the system is missing.

The repo is named multi-studio-display (its working title); the app it builds is Sundog.

Features

  • Per-display sliders — every connected Apple display gets its own brightness control in the menu bar, updated live when brightness changes elsewhere (Control Center, the display's own controls, other apps).
  • Sync mode — move one slider and every display follows, preserving relative offsets between displays.
  • Auto-brightness follow — pick one display as the ambient-light source; it adapts to the room and every other display stays locked to it (with per-display offsets).
  • Scenes — save named setups of every display's level and modes, and apply them from the menu, Shortcuts, or a URL.
  • Global hotkeys — step all displays up/down from anywhere (default ⌃⌥⌘↑ / ⌃⌥⌘↓, customizable in Settings), with an on-screen brightness HUD.
  • Presets — one click to 0/25/50/75/100%.
  • Wake & reconnect restore — displays come back at the brightness you actually had (each one at its own level, even in sync/follow modes), instead of the level macOS or the panel firmware picks after sleep, docking, or replugging. Optional: turn it off in Settings to leave connecting displays untouched.
  • Scriptable — App Intents for Shortcuts/Spotlight and a sundog:// URL scheme for the shell, Raycast, Hammerspoon, etc.
  • Quality of life — launch at login, menu bar icon that reflects the current level (and can hide when no displays are connected), optional control of the built-in panel.

Requirements

  • macOS 26.5 or later
  • Xcode to build (no dependencies — the project builds with a plain xcodebuild or ⌘R)
  • Displays whose brightness macOS itself can control: Apple displays (Studio Display, Pro Display XDR, built-in panels) and LG UltraFine monitors. Generic DDC/CI monitors are not supported.

Building

git clone <this repo>
cd multi-studio-display
open multi-studio-display.xcodeproj   # then ⌘R

or from the shell:

xcodebuild -project multi-studio-display.xcodeproj -scheme multi-studio-display -configuration Release build

Releasing

scripts/release.sh [version] builds a Release configuration with the version stamped in, and produces a downloadable Sundog-<version>.zip, a drag-to-Applications .dmg, and a SHA256SUMS.txt in dist/. It signs with a Developer ID identity when one is in the keychain (and notarizes if NOTARY_PROFILE names a notarytool keychain profile); otherwise it packages the Xcode-signed app, which downloaders must right-click → Open the first time.

Automation

Shortcuts / Spotlight

Sundog exposes App Intents: Set Brightness (all displays or one by name), Step Brightness, Get Brightness, Set Sync, and Apply Scene. These also work from the command line via shortcuts run, and unlock time-of-day or Focus automations with no in-app scheduler.

URL scheme

sundog://set?value=55[&display=<hardwareKey or name fragment>]
sundog://step?by=-6.25                  # percent points; sync/follow aware
sundog://sync?state=on|off|toggle
sundog://auto?source=off|<hardwareKey or name fragment>
sundog://scene?apply=<name>
sundog://scene?save=<name>
sundog://refresh

Values ≤ 1 are treated as fractions, larger values as percentages. Example:

open "sundog://set?value=40&display=studio"

How it works

There is no public macOS API for setting brightness on external Apple displays. Sundog uses the same private DisplayServices.framework the system (and apps like MonitorControl) uses, resolving the symbols at runtime with dlopen/dlsym so the app degrades gracefully if they ever change (see DisplayServices.swift). On top of that, DisplayManager.swift handles display detection, sync/follow coordination, and reconciling the app's state with changes made outside it — including guarding against macOS re-applying stale brightness after wake without ever fighting the user's own adjustments.

Because it relies on a private framework, Sundog is not sandboxed and is not App Store material — it's a build-it-yourself utility.

License

MIT

About

Keep multiple Apple Studio or Pro Displays in sync

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages