Features
- Custom Presets: save the current brightness/contrast as a preset that you can apply later
- Allow hiding most stuff in the QuickActions menu to get a smaller menu without unneeded functions
- Apply custom presets from the CLI:
lunar preset "Night Owl"
- Allow changing Min/Max Brightness on built-in and other non-DDC displays
Improvements
- The QuickActions menu now grows to the bottom instead of from the center to create a smoother feel
- Make sliders smoother by offloading adaptive mode work from the main thread when changing brightness fast
- Allow hiding Standard Presets from the
Options
menu - Group resolutions by refresh rate
- Add images to differentiate resolutions easier
- Change some text fields to the system monospaced font because I like it
- Lower CPU usage overall by throttling events that happen too fast
Fixes
- Fix QuickActions menu appearing outside the screen edge
- Fix QuickActions menu redrawing at the center/bottom of the screen when changing specific settings
Features
- XDR Brightness: go past the
500
nits limit of the new 2021 MacBook Pro and Pro Display XDR- Warning: this is experimental. The system may become unresponsive for a few seconds when toggling this option
- Animation glitches are expected when this is enabled
- Sub-zero dimming: dim brightness below 0%
- QuickActions redesign:
- Input Hotkeys redesign:
- Add BlackOut without mirroring checkbox in the Controls menu of each display
- Add BlackOut other displays action on holding
Option
+Shift
- Add Allow brightness to reach zero checkbox in the Controls menu for built-in displays
- By default this is disabled to avoid turning off the display by mistake
- Implement BlackOut for AirPlay/Sidecar/DisplayLink (it’s just a pitch black overlay really, but that’s the most I can do)
Improvements
- Add Emergency Kill Switch for BlackOut
- Press the ⌘ Command key more than 8 times in a row to force disable BlackOut
- F.lux detection improvements
- Ensure Overlay gets activated
- Add note about Shifty as an alternative
- Update AppleScript for Monterey
- Allow Preferences window to be moved by its background
- Add selector for switching between System and Lunar adaptive brightness
- Disable overlay temporarily when taking a screenshot
Fixes
- Fix Gamma flashing bright from time to time
- Remove Software Dimming delay if it’s the only control enabled
- Fix displays having low/high brightness after wake/reconnection
- Fix overflow crash in Clock Mode
- Fix BlackOut being stuck when using it without mirroring
- Fix contrast getting stuck to 0 when Lunar is restarted while BlackOut is on
- Check for vendor ID on BetterDummy screens
Note: Starting from v5.5.0
Lunar will require macOS 11.0+
Fixes
- Fix deadlock on screen wake/reconnection
Features
- Efficient Sync Mode
- A new internal system API is used to react to built-in display brightness changes instead of polling continuously for them
- This lowers the CPU usage to
0.1%
on average when no brightness change occurs - This new method can be disabled by setting the Sync Polling Interval to a value greater than
0 seconds
- If brightness syncing stops working after the update, try setting the Polling Interval to
2 seconds
- Add
lunar blackout
command to CLI - Add
lunar gamma --restore-color-sync
command for resetting to system default color settings
Improvements
- Update
ddcutil-server
for Raspberry Pi OS 64-bit - Improve Lunar CLI help
Fixes
- Fix software dimming not going back to 100% after app restart on more recent macOS versions
- Fix BlackOut dialog appearing wrongly
Fixes
- Fix sudden brightness changes because of brightness being read incorrectly on some monitors
- Delay when retrying sensor requests
- Fix radius value disappearing on editing
Features
Client-server architecture for the Lunar CLI
The lunar
command can now control the running Lunar app directly instead of spawning a new instance.
If the Lunar app is not running, the CLI will automatically use the old method of running the command directly.
New arguments:
--remote
forces thelunar
command to never spawn a new instance and fail if there’s no Lunar app already running--host
configures the hostname where to send the command- This means you can now also control Lunar apps running on other Macs
--key
configures the API key for authenticating thelunar
command against the Lunar app server- This is only needed when controlling Lunar instances running on other systems
--new-instance
forces thelunar
command to always run the command locally and spawn a new instance even if there’s a Lunar app already running
BlackOut improvements
Added BlackOut without mirroring on holding Shift
.
- Added logic to automatically disable BlackOut when monitors are disconnected and the only remaining display is blacked out
- Configured mirroring as
.appOnly
so that the system doesn’t remember the BlackOut mirroring state after Lunar is quit
Improvements
Fixes
- Fix BlackOut getting stuck in some rare cases
- Release leaking memory on Intel DDC implementation with AMD GPU
Improvements
- Move the Volume keys control all monitors setting to make its effect clearer
Fixes
- Fix crash caused by reading built-in brightness on a different thread
- Add 1 second delay between switching input and applying defined brightness on Input Hotkeys
Improvements
- Move the Auto Blackout setting to the main preferences screen
Fixes
- Fix crash caused by SimplyCoreAudio deadlock
Improvements
- Add a way to extend the range of Color Gain for professional displays like the Wacom Cintiq Pro
- Add a way to disable re-apply on wake for Color Gain
- Security updates to dependencies
Fixes
- Fix colors being washed out because the Color Gain value of the monitor didn’t match what Lunar had stored
Improvements
- Show slider values on the knob
- Improve slider contrast
- Add glass material to QuickActions
- Detect HDMI port properly on the M1 Pro and M1 Max
- This will disable DDC automatically for that port as there’s still no way to send DDC commands through it
Fixes
- Hide second background of QuickActions when Reduce Transparency is active
- Make sure to re-enable adaptive brightness on built-in after switching from Manual to other modes while in an App Preset
Fixes
- Make sure that monitors with Network Control disabled don’t get matched with a Pi controller
- Remove the Lunar Test flashing text properly after onboarding
Improvements
- Add an IOService event detector to re-create the I2C service port cache when the IOKit tree changes
- This should help with cases when the monitor is not responding to Lunar’s brightness/volume/input changes until app restart
Fixes
- Fix fetching script dir in Lunar sensor install script
- Remove HDMI port detection logic for M1 Pro/Max because it causes false positives
- Will resume work on this when my MacBook arrives
Note: if you have a monitor connected to the HDMI port of the MacBook, disable DDC manually
Improvements
- Make brightness key forwarding optional in Advanced settings
- If the built-in display brightness is not persisting properly, try enabling this setting
Fixes
- Reset BlackOut state if brightness is greater than 1
- Don’t show OSD for built-in brightness when forwarding media keys to the system
- Fix crash because of wrong datapoints for the Location Mode chart
- Fix Input Hotkey dropdown in Dark Mode
Features
- Auto BlackOut
- Turn off the built-in display automatically when an external monitor is connected
- Turn back on the built-in display when all external monitors are disconnected
- Simpler visual design for Quick Actions
Improvements
- Automatically switch to Gamma on the HDMI port of the M1 Pro/Max MacBook
- Don’t re-apply brightness if App Presets is empty (avoids jittery brightness on some displays)
- Make sure we don’t accidentally disable “Automatically adjust brightness”
Fixes
- Fix option key being wrongly taken into account when pressing brightness keys
- Update Sparkle auto-updating framework to fix some GUI bugs
- Update diagnostics text to include the MacBook HDMI limitation
- Fix
checkSlowWrite
for DDC which could wrongly mark smooth transitions as unsupported - Make sure to remove the Lunar Test marker when closing diagnostics/onboarding
Features
- Add possibility to stream logs to the developer in real time for more efficient troubleshooting
Improvements
- Make Gamma/Overlay changes faster when using sliders
- Make the Adaptive Mode dropdown easier to click
- Add note about how to adjust contrast independently on the Hotkeys page
- Make App Presets more reliable on single monitor setups by not caring about the window visibility
- Make Ultrafine AmbientLightCompensation detection more strict
- It seems there are some models that report that AmbientLightCompensation is enabled while HasAmbientLightCompensation is false
Fixes
- Fix contrast media keys
- Fix internal sensor detection
- Fix contrast locking by itself when showing/hiding advanced settings
Improvements
- Correctly set max DDC brightness to 255 on LED Cinema displays
Fixes
- Fix clamshell mode detection for some special setups
- Fix brightness OSD not showing in some cases (missed some stuff)
- Fix brightness keys not working in previous release
Features
- Add back the Adaptive Mode dropdown in the QuickActions menu
- Add more useful buttons at the bottom of the QuickActions menu:
- Preferences
- Restart
- Quit
Improvements
- Add menu item to Relaunch the onboarding process
- Improve QuickActions menu height formula
- Add notice about how to relaunch onboarding if needed
- Improve brightness slider for built-in display
Fixes
- Fix Sync Source button text being unreadable
- Fix overlay artifacts appearing when disconnecting iPad Sidecar
- Fix brightness OSD not showing in some cases
- Fix Clock Mode schedules being reverted to the current brightness on some occasions
- Fix App Presets window detection by intersecting the window frame with the raw display bounds
Fixes
- Fix detection for Samsung U28E850
Fixes
- Fix issue where adjusting brightness with keys would double the change for external displays
Features
- Add Volume Slider show/hide toggle inside the DDC menu of external displays
- Add Copy from display for Curve Factors
- Add possibility to show slider values
- Separate brightness and contrast for app presets when Merge brightness and contrast is disabled
- Add Jitter After Wake function for monitors that wake up with dimmed brightness
- Can be activated from the terminal using
defaults write fyi.lunar.Lunar jitterAfterWake 1
- Can be activated from the terminal using
Improvements
- Make contrast syncing snappier
- Make the CLI DDC values a bit smarter
- If the value is in the form of
0x1F
,x1F
or1Fh
it is parsed as hex - Otherwise it is parsed as decimal
- Passing
--hex
will always parse values as hex
- If the value is in the form of
- Work around the system issue where the built-in display brightness is reverting automatically after a manual change
It seems that some MacBooks don’t support brightness change event notifications which causes the manual adjustments to not be reflected in the system brightnesss curve.
In this update we try to detect if a MacBook is missing that support and instead of controlling its brightness, we forward the brightness key events to the system and let it do the brightness changing.
Using the sliders for changing the built-in brightness will still have the reverting problem though, because we can’t forward those events to the system.
Fixes
- Don’t ask for permissions on every launch if the user doesn’t need that functionality
- Don’t force focus Lunar window if dark mode is toggled
Fixes
- Fix lag and wrong monitor assignment when DDC was used for two identical monitors
- Fix crash when getting current resolution for some displays
- Fix Sync Mode for Ultrafines that report having ambient light adaptive brightness enabled when in fact they don’t
Improvements
- Add all MCCS VCP codes to
lunar ddc
- Add Use current brightness button in Clock Mode
- Add Merge brightness and contrast checkbox on the Configuration page
- Allows for reverting to the previous behaviour of controlling brightness and contrast separately
Fixes
- Fix crash in diagnostics/onboarding when closing the window
- Automatically restart app when memory usage goes above 1GB
- The Advanced button on the Configuration page was not clickable on the top part
Features
- Support for M1 Pro and M1 Max
- Onboarding process on first launch
- Redesigned Diagnostics
- Redesigned Quick Actions menu
- The menu appears on click instead of hover over the menu bar icon now
- The native menu can be shown using:
- Right click (or two finger Trackpad click) on the menu bar icon
- Click on the three dots icon in the top right of the Quick Actions menu
- Sliders everywhere
- Merged brightness and contrast slider
- Volume slider in the QuickActions menu
- Only possible with the incredible help of @waydabber, maker of BetterDummy
- Redesigned Display Settings menus
- Restart Lunar menu item and hotkey
- Overlay/Gamma switcher button inside the Controls menu
- App presets now work for the built-in display as well
- Adding Option key to the BlackOut hotkey will turn off monitor completely through DDC
- Example: let’s say you have configured BlackOut to activate on
Ctrl
–Command
–6
- Then pressing
Ctrl
–Command
–Option
–6
will allow you to turn off the monitor completely (just like pressing its physical power button) if the monitor supports that function
- Example: let’s say you have configured BlackOut to activate on
- Rounded corners for any display
Improvements
- Enable the power button in the Lunar window to also work when the Allow BlackOut on single screen option is enabled
- Add high memory usage checker to aid in fixing memory errors in the future
- Use Apple Native smooth transitions using private macOS APIs on Apple vendored displays
- Smooth transitions can now happen in parallel if there are multiple displays with different controls
- Cut the memory usage in half by replacing large images in the UI with vector-drawn bezier paths
- Improved BlackOut logic when using a dummy display
- Filter checkbox for showing/hiding dummy displays
- Hotkeys changing the display with the cursor now affect all monitors in a mirror set
- This improves support for apps like BetterDummy
Fixes
- Software overlay for Sidecar now appears correctly on first connection
- Notify the system when changing built-in brightness to allow the system curve to readapt
Features
- Useful Info menu item in menu bar that can also be hidden
- Allow BlackOut on single screen advanced setting for people that:
- mostly use BlackOut from the keyboard
- have the need to turn off the external monitor while the MacBook is in clamshell mode
- Option to show brightness and contrast of the active display beside the menu bar icon
- Option to hide the orientation switcher in the QuickActions menu
- Hide QuickActions when clicking anywhere outside of it
Improvements
- Change Apply Gamma checkbox to an enable/disable button that also disables value editing
- Close QuickActions menu faster when moving the cursor away from it
- Better possible clamshell mode detection to avoid setting external monitor brightness to 0 when closing the MacBook lid
Fixes
- Fix crashes that happened because of accessing AVService/I2C cache from multiple threads
- Make sure to update some text fields that were not updated on launch
Features
- Clock Mode: schedule brightness and contrast presets based on sunset/sunrise/noon or a specific time
- Dark Overlay dimming for displays that don’t support Gamma or DDC (DisplayLink and Sidecar usually)
- Curve Learning now works with external brightness changes if Refresh values from monitor settings is enabled in Advanced settings
- Contrast does nothing when the overlay is used
- Sensor Mode can now use the internal light sensor of the M1 MacBooks
- Add option to disable checking for DDC responsiveness in Advanced settings
- Display filters for deciding what to show in the Preferences window:
- Virtual displays
- AirPlay displays
- Projectors
- Disconnected monitors
Improvements
- Improve dynamic gain on the TSL2591 external light sensor by checking for overflows
- You will need to reinstall the ambient light sensor firmware to get this improvement
- Improve Gamma smooth transitions by removing unnecessary animations and allowing it to appear on Mission Control
- Thanks to @waydabber for finding out this edge case and for suggesting that the window needs to be set as
stationary
to fix it
- Thanks to @waydabber for finding out this edge case and for suggesting that the window needs to be set as
- Recover Facelight state after screen sleep/wake
- Improve smooth and slow transitions for Apple vendored displays that can use Native Controls
- Reset audio device cache on wake and on display reconnection to avoid volume controls not working in some cases
- Do network requests asynchronously where possible to improve responsiveness and fix some memory leaks
- Simplify menu bar icon menu
Fixes
- Fix crash when the DDC faults storage was accessed from multiple threads
- Fix crash that happened on modifying the I2C controller cache when the IO registry tree changed
Fixes
- Fix crash because of gamma smooth transition logic
- Fix crash when Sensor Mode would update brightness on a non-main thread
- Avoid app entering a not responding state when in Location mode and waking the screen
Improvements
- Make sure Gamma never goes below
0.08
on brightness 0 to retain visibility - Allow press-and-hold detection to be disabled for users that encounter p