Sync Mode: new algorithm
(Apple Silicon only)
Lunar can now read the real brightness value in nits from Apple displays and sync it more accurately to other monitors.
Most external monitors don't provide a way to read their min and max nits limits, so they start with a default range of 30-350 nits. Those limits can be adjusted from the Lunar interface:
Sync without a source
Sync Mode can now be used on all setups, even on those where there's no Apple display to sync from.
An All Displays slider will show up which will control the brightness and contrast of all screens in sync. Brightness keys will also control this special slider by default.
Any manual adjustment done to other monitors will be learnt and used by the All Displays slider.
The adaptive algorithm is now faster and more efficient, with an almost instantly responsive auto-learning curve. This is thanks to using better researched math formulas and new data structures tailored to brightness syncing.
The native brightness OSD will now show up on all monitors instead of only on the source display.
Polling is not used anymore, relying completely on a brightness change event based system, for less battery and CPU usage.
Sensor Mode: more sensors
(Apple Silicon only)
Lunar can now read ambient light lux values from sensors of Apple displays like:
- Studio Display
- Pro Display XDR
- LG UltraFine for Mac
- Thunderbolt Display
- LED Cinema
DIY ambient light sensors will now connect faster to Lunar, and keep a more stable connection between standby/wake states.
The sensor can also be configured more flexibly using the
defaults command on the Mac where Lunar is running. This is especially helpful for when the lunarsensor server.
There are three settings that affect where Lunar looks for the sensor:
sensorHostname set by default to
sensorPort set by default to
sensorPathPrefix set by default to
For example, if you would like to have Lunar listen for sensor events at
homeassistant.local:8123/lunar/events you would run the following commands:
defaults write fyi.lunar.Lunar sensorHostname homeassistant.local
defaults write fyi.lunar.Lunar sensorPort 8123
defaults write fyi.lunar.Lunar sensorPathPrefix /lunar
Sensor Mode now starts with a better researched and tested curve that converts the ambient light to real nits for each display.
On Apple Silicon, the estimated nits limits from Sync Mode will also be taken into account to compute an accurate brightness value for each display.
On Apple Silicon devices running macOS Ventura, BlackOut now uses a new API that can disconnect the screen completely.
The power button will show the action that it will do based on the modifier keys that are pressed:
When a screen is disconnected, it will appear at the bottom of the Lunar menu, with an option to enable the Auto Disconnect feature.
This will ensure the display stays disconnected between standby/wake and lid open/close cycles.
For the MacBook built-in screen, this also enables the previous Auto BlackOut feature which disconnects the MacBook screen when a monitor is connected, and turns it back on when all monitors are disconnected.
If you ever wanted to use a keyboard shortcut for connecting a Sidecar device, Lunar now supports that.
There's a new action in Apple Shortcuts that can connect a specific Sidecar iPad, and the
Connection actions have been updated to support the most recently used Sidecar:
BlackOut can also natively disconnect/reconnect Sidecar devices on Apple Silicon.
Support for brightness/volume control using DDC has been stabilised for the integrated HDMI port of the M1 and M2 chips.
The previous logic was also improved to avoid possible flickering and speed up DDC port matching.
Some settings have been regrouped, and some are now hidden if they aren't relevant to the hardware in use.
It's also possible now to use the Reset button from the Options menu to:
- Reset All Settings by
- Reset display-specific Settings by
Lunar is now using the native unified logging architecture on macOS.
Logs can now be viewed in Console.app or in the terminal with the following command:
log stream --level debug --source --style compact --predicate 'subsystem == "fyi.lunar.Lunar" AND category == "default"'
There is no log file on disk anymore, logs can be collected on demand when they're needed to avoid excessive disk writes.