A GNOME Shell extension that dynamically adjusts hardware screen brightness based on the active screen content luminance. Designed to provide eye comfort, especially when switching between light and dark content on laptop screens. Instead of capturing entire screen, this extension collects sample pixels to calculate your screen's luminance. This provides less cpu usage and longer battery life. While this extension provides a convenient, user-space solution for dynamic brightness on GNOME, it comes with certain architectural trade-offs: 1) Resource Usage: Because the extension periodically collects sample pixels and analyzes screen content via JavaScript (Shell.Screenshot) at set intervals, it introduces a continuous, minor CPU overhead. 2)Battery Impact: Frequent sampling and pixel data processing can impact battery life more than a native, hardware-level daemon would. Looking for a Battery-Efficient Alternative? If you are running Wayland and require a truly deep, native, and power-efficient solution for content-aware screen brightness (without the overhead of a GNOME extension), I highly recommend checking out wluma. It operates as an external, low-level daemon specifically optimized for performance and battery conservation. UPDATE: Screen brightness handling interface changed after Gnome 49, this version of extension supports both old and new interface
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 9 ungated console.log/warn/error calls (threshold: 5).
extension.js:133
console.log("[DEBUG] Dynamic Brightness extension loaded (Standby mode).")
extension.js:145
console.log("[DEBUG] Dynamic Brightness Disabled.")
extension.js:159
console.log("[DEBUG] Dynamic Brightness loop started by user.")
extension.js:169
console.log("[DEBUG] Dynamic Brightness loop stopped by user.")
extension.js:283
console.log(`[DEBUG] Brightness adjusted! New Target: ${targetBrightness}% (Luminance: ${luminanceRatio.toFixed(2)}%)`)
extension.js:208
console.error(`[ERROR] Silent content capture error: ${e}`)
extension.js:253
console.error(`[ERROR] Async processing error: ${err}`)
extension.js:262
console.error(`[ERROR] Image stream error: ${err}`)
extension.js:306
console.error(`[ERROR] Native DBus error: ${e}`)
EGO-L-003 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
extension.js:112
this.toggle.connect('notify::checked', () => {
this._indicator.visible = this.toggle.checked;
})