[APP] LUMOS v1.0 *FINAL* (Complete HTC Auto-Backlight replacement) [UPD.:08-02-2011]

Search This thread


Senior Member
Feb 24, 2008
. . . .

. . . . (current version 1.0 FINAL)
More control. More battery. More comfort.

Lumos is fully customizable automatic backlight level changer developed as a complete replacement for stock HTC auto-backlight service. A wide range of HTC branded devices is supported starting from HTC Diamond/Touch Pro up to the current WM flagship HD2.

Lumos focuses on minimal CPU usage, maximum battery saving, low memory footprint while maintaining maximum backlight change smoothness and responsiveness. Lumos combines the best from all available auto-backlight solutions and adds many extras for your tweaking needs :)

- simple and clean installation and uninstalation
- extremely low CPU usage when working, 0.05-0.3% on polling
- NO battery and CPU overhead (drainage) unless you actively use your device's display
- low memory profile considering all the options
- simple and reliable configuration GUI with easy step-by-step calibration process
- many options that let you change every aspect of how your backlight works
- program exceptions to set different backlight for any application
- relative excaptions allow you to amplify/attenuate the automatic backlight for specific applications
- ability to force display ALWAYS ON for certain application
- integrated tool to detect all active application names, leave it running in the background and it will log all application names you use
- configuration failsafe. No matter what you do, Lumos won't crash, just tell you what is wrong and use defaults.
- supports vast majority of HTC branded devices since HTC Diamond
- many supported languages

Just install the CAB, start LumosWizard from programs or soft reset and you're all set!
- Lumos always installs to the device (no matter what you chose)
- Installer will create auto-start entry (Lumos will start after a soft-reset)
- Installer will create a shortcut to LumosWizard in your programs
- should any problem arise after first installation, try to soft-reset your device before consulting our FAQ below

Program installs to \Program Files\Lumos\
Lumos.exe = starts/stops auto backlight service, accepts commandline switches
LumosWizard.exe = graphical tool to configure all aspects of Lumos
settings.txt = configuration file is not included in the package, it will be automatically generated by LumosWizard after successful calibration, you can edit it manually in your PC or by using LumosWizard, text edits in device are probably no longer possible because of unicode encoding.
LumosStarter.exe = (re)starts Lumos service without any visual feedback (used for startup after soft-reset and for special issues)

You can take these simple steps to troubleshoot any problem, perform both steps and if your device reacts differently than described try fixes marked ">" one by one starting from the top. Please restart your device before you start, your problem might fix itself.

1) Run LumosWizard, start Calibration and proceed to second step (max sensor), Lumos should report positive values as you move the device near to light source.
> move the damn finger! xD
> another application exclusively locked the sensor, try to disable other apps using light sensor
> sensor drivers or sensor SDK is missing, try if different application like G-Light works, report the problem if it does, update your ROM if it doesn't
> your sensor may be defective, try some 100% compatible ROM like Energy just in case and consider RMA if unsuccessful

2) Run LumosWizard, start Calibration and proceed to third step (minimum and maximum backlight setting). The backlight should actually change as a preview when you move the slider.
> check if windows built-in auto backlight is disabled in power settings
> another application may be forcing the backlight level, try to soft reset and disable other apps that can change backlight level or manage backlight in user profiles
> original HTC backlight utility DLLs may be missing in certain early WM6.5 ROMs, try to install BacklightHotfix.CAB attached to this post and reboot. If it just won't work, try another program like G-light, if you're still out of luck, try to contact your ROM chef about this.
You can send a symbolic DONATION if you with to reward me for my efforts.
Show that you care :)

There have been over 22500 downloads for RC2 version - just from XDA.


Donations will be used solely to buy muffins and pizza for late-night coding sessions... mmm :)


New files in additional languages pack:



  • BacklightHotfix.CAB
    22.1 KB · Views: 7,066
  • NETCFv35.ppc.armv4.cab
    6.4 MB · Views: 3,791
  • LumosSetupV10F.CAB
    292.3 KB · Views: 4,793
Last edited:


Senior Member
Feb 24, 2008
What exactly is the calibration for, backlight is still the same after calibration?
The calibration ensures Lumos can detect the detection range of your light sensor properly and lets you set minimum and maximum possible backlight easily.
It has 4 steps:
1) Minimum value the sensor can read (probably 0 on all devices)
2) Maximum value the sensor can read (expect this to be something around 1400), you need to use a light bulb tor this step.
3) Minimum brightness you want. Lumos will calculate everything with minimum value reported by your device, but it will not let the backlight go below this value. (like if you want to have backlight 2 in shade because 1 is too dark for you)
4) Maximum brightness you want. Lumos will calculate everything with maximum value reported by your device, but it will not let the backlight go above this value. (You may notice that backlight level 7 and 10 is a little difference and can be both read in direct light, however if you limit the maximum to only 7 here, you will save a lot of battery)
5) After you are done with the calibration, you can review your setting on the settings tab and click 'Apply+Save' to exit LumosWizard and actually start Lumos service. There is no auto-backlight while the configuration Wizard is open, it defaults at level 6!

How program exceptions work?
- Switch to the Windows tab and start for example TomTom, leave TT and click it's name in the window list, then specify the backlight you want for this app and tap Add.
- If you disable "Exc. for active window only" on settings tab, you need to specify exact window name and exception will be triggered even for inactive application (minimized for example).
- If you activate "Exc. for active window only" on settings tab, you only need to specify part of the window name in exception settings (useful in case part of the window name changes). If the window name is "AdobeReader - document.pdf", only add exception "AdobeReader -". Be aware enabling this option increases CPU requirements of Lumos by about 20% (means roughly 0.06% total for slow diamonds).
Note that you will probably need to enable "Exc. for active window only" on settings tab for exceptions to work on WM6.5.

How to set a program exception step by step?
1. run lumos wizard
2. switch to the tab "windows" (the last one) and let the wizard run in background
3. run your program(s) you want to add
4. close the program(s)
5. switch back to lumos wizard -- voila, all the window names you visited are there!
6. tap the program name you want in the window list, it will switch you to the "exceptions" tab and fill the form for you
7. set the backlight level you want (1-10) and tap add to exceptions

What is a Relative Exception?
- relative exception does not force one specific level but rather amplifies and attenuates normal auto-backlight behaviour for the application in question.
Consider this scenario:
 - my allowed backlight ranges in levels 2-7
  - I want to use a navigation app in car and it is kind of difficult to see on sunlight, shades in car would read for level 3 or 4 and that is not bright enough
  - I can either create an exception and force backlight all the way to 7, but that might not be optimal on battery
  - therefore I create a Relative Exception of +2
  - for the navigation application if the backlight would normally be set to 3 by Lumos, it will be amplified by two to 5. What would normally be level 6 will get amplified to 7, since that is my maximum level.
- You can also use negative values in Relative Exception to decrease the backlight for certain app by certain amount to save battery for example.

How backlight modes work?
- Backlight modes are individual equations used to determine proper backlight level from current sensor value.
- Linear - this mode is equally sensitive in dark and light environment.
- Root - this mode is more sensitive in dark environment and is best suitable for human eye and therefore default.
- Quadratic - this mode is more sensitive in light environment.
- Custom - this mode features customizable graph, you can draw a graph yourself with stylus or click on the blue area under each level number to input border sensor value manually.
Levels outside your min-max boundaries are hidden.
- Note that using custom mode do not affect CPU requirements in any way.

Commandline switches?
- There are 4 switches that can be used
"+" will increase backlight by one
"-" will decrease backlight by one
"s" will run normal Lumos operation without restart prompt after +/- tasks are completed
"q" will quit Lumos after +/- tasks are completed
Example to increase backlight by 3 and disable automatic:
"...iles/Lumos.exe" +++q

My *insert a game using G-sensor* is lagging strangely, can I fix it?
- guys from HTC thought it would be a cool idea to tie all sensors together in a framework, unfortunatelly it appears that when one program locks a sensor for read, other sensors may get locked as well on some devices. There is only one solution that will de-lag such game - not to use the sensor while it runs.
- Create a non-relative exception for the game in question and your lag should go away.

Backlight is not changing at all, it's the same all the time?
1) go to Start - Settings - System tab - Power - Backlight tab and DISABLE the 'Auto adjust backlight' feature.
2) close the configuration Wizard with "Save+Apply" button, auto-backlight service is disabled when you are configuring Lumos or when there is no configuration specified.

Program won't start at all?

You NEED .NET 3.5 Compact Framework Redistributable. It is faster and more stable and offers more stuff for developers than the 2.0 you probably have. It is rumored it may even make your device work faster (or at least .NET based apps).
Download it HERE (only about 3MB on device, don't be scared by the installer size as it contains support for more processors)

(changes prior to RC1 version dropped)
! non linear backlight in the GLight style for people all over the net who are demanding this
! exceptions now need only part of the window name in "detect only active windows" mode
! recalibrated sensor readings for more sensitivity
! fixed bug in custom graph mode
! faster loading
(below only in RC2 version)
! fixed custom mode alignment
(below in 1.0 Final)
! add support for relative level in exceptions
! add support to keep alive only as exception
! add command line support (change level & quit, +, -)
(below ideas for future development)
- add support for alternative backlight handling (WM default without HTC drivers)

(changes prior to RC1 version dropped)
! support for setting linear, quadratic and root/logaritmic backlight
! support for custom backlight mode with interactive graph
! support for changing keyboard backlight delay on RAPH
! improved max/min detection in wizard
! forcing consistency between settings and graph plotting
! switching language in flight
! faster loading times
! support for language packs
! smaller text to allow better translations
! bigger tabs for better finger friendliness
! fixed minor flaws from beta2 connected with translations
! improved settings tab scrolling redraw speed
! settings tab will back off from deploying soft keyboard
! added new languages: Bulgarian, Czech, Francais, Japanese, Nederlands
(below only in RC2 version)
! fixed Window detector taking you to the Mode tab instead of Exceptions
! fixed settings tab layout width
! added another failsafe mechanism against saving invalid min/max backlight and polling interval
! added warning message for options with potentially negative effect on battery
! added new languages - currently Bulgarian, Czech, French, German, Greek, Japanese, Dutch, Polish, Russian, Sim./Trad. Chinese
(below in 1.0 Final)
! set "BL=1 below" option to be relative to the sensor minimum
! set calibration to disregard sensor minimum 0 until the driver is initialized
! add support to release sensors on active exception
! add wizard warning if built-in auto backlight currently overrides Lumos control
! ability to recognize missing sensor drivers and the need for Backlight Hotfix package
! add support for relative level in exceptions
! add support to keep alive only as exception
(below ideas for future development)

- support for forced "on wakeup" backlight level
- = bug / missing part
? = possible bug/not able to reproduce/not verified/idea
* = in development
+ = fixed bug / completed part
! = fix/feature included in released version

Please disregard the hacks from previous versions and always set your sensor minimum and maximum to real values (0-xxxx)! Some sensors might have different minimum than 0 - this is a hardware defect and you need to use the defected value for Lumos to work correctly.
Last edited:


Senior Member
Jul 6, 2006
Austria, Vienna
To admit it, I haven't installed it yet, but I'm tempted. Just one question which might also be of interest for others:

What's the advantage of your app compared with G-Light?

And not to forget:
Thank you for your work! I still find it amazing that many xda-devs are building programs for free just for a "thank you" by the community.


Senior Member
Feb 24, 2008
Well I tried G-Light and LevelSight but will only compare it to G-Light as LevelSight does things a bit differently IMO. I set G light to 3s polling interval to make the comparsion accurate. I don't like to put dirt on someone elses app, G-Light is a fine piece of software and I encourage the developer to implement some of my ideas to match mine and make it even better :)

- G-Light can behave competely unpredictably, it pumps up the backlight when you're in shade (this is because of the luminosity spikes)
- Lumos eliminates any spikes by the 4-read interpolation keeping your backlight more comfortable and smooth
- Lumos uses a tolerance which further prevents the backlight to unexpectedly changing (and causing a CPU spike)

-G-light rarely reaches below 1% of CPU usage (1-7%usage is common) which can drain your battery as a side effect
- Lumos rarely crosses above 0.5% CPU usage on default settings (0.05-3% usage is common) (NOTE: this will even improve in future versions)

- in G-Light You cannot change how fast the luminance values are read from sensors, they are read on change = further battery drain. You can only change how often to set backlight
- In Lumos you can set sensor read interval and backlight change in its multiplies to save CPU and power while retaining smoothness.

- Memory usage: GLightRunner 595.43KB , Lumos 311.53KB (but this will get a bit more later)
- No noticable memory leak in either applicaiton

- G-Light has a frontend app to set up
- Lumos has none yet but you can change the configuration file

- Neither Lumos nor GLightRunner can be completely shut down without using task manager (Lumos will once it has frontend GUI).

- G-Light can exclude applications
- Lumos can't yet

-G-Light settings is pretty much still limited compared to Lumos

To sum up it's definitely worth trying :D


Senior Member
Feb 24, 2008
Lumos v02

Lumos Version 02 has been released, all the changes are logged as (!) in the bug tracker above.

Default settings response time is shorten to 2s, while CPU usage is pretty much the same as v01 with 3s refresh.

Memory usage: 339.53KB
CPU usage: 0.05-0.25% on scan, 3.15% on backlight change
Power consumption is 2mA better than v01

If you want to achieve more sensitivity of backlight transition without CPU overhead, set tolerance to 0 (CPU usage bug is fixed now).

Configuration file is now idiot-proof, program will tell you what is wrong on syntax/logical error :)

EDIT: 02b contains one more bugfix, the auto backlight range cap finally works 100%

Enjoy :D
Last edited:


Senior Member
Feb 24, 2008
Yes it in fact goes to 1 (backlight disable) as lowest on default. You may want to increase it to 2 in the config file if it's too dark for you. :)

The point of this app is YOU set how it should behave, there are virtually no limitations unless you enter a complete nonsense to the config. And even then the program should just notify you about the incorrect settings and not crash, so don't worry and edit! :)

The program needs to be restarted in order to apply new settings. Either kill it via process/task manager or soft reset if you don't have one. Note that this acts like a program, it won't start again automatically if you kill it or soft reset. And also it won't store anything in your registry or enywhere else on the device, so it's perfectly safe to "just try". I will make a manager app later that will let you setup and control this underlying process.
But FIRST we need to make sure the service is bug free and does everything we need before I even start building the front-end app ;)

Also you may share your custom settings you find best with me and if it's performing well I can select that one as default for future.
Last edited:


Senior Member
Jul 6, 2006
Austria, Vienna
Thank you Niker! V2 is working great for me. Only one thing:

The lightlevel changes linear as you've explained and that's basically working fine (and much more smoothly than G-Light for example). But it tends to get to dark. I've now changed the minimum setting to "3" to get the average backlight-level I prefer. BUT: I like to read late at night in bed and it would than be nice to have the backlight at level "1". So would it be possible to exclude light level 1 & 2 from the linear alignment and to only use those levels if it's "really dark"? ;)


Senior Member
Jul 6, 2006
Austria, Vienna

Just to give you a bit more information about my personal preferences and what I want to achieve:

I actually like the default HTC auto-backlight. It more tends to bright than to dark backlight and it's making the level changes very smoothly so you almost don't notice them.

The only thing i don't like about it is that the minimum level is hardcoded to level 3 which is too bright for me when I read in bed with no additional light in the room.

Of course those are my personal preferences and that of course doesn't necessarily mean that your app is meant to handle that way! ;)


Senior Member
Feb 24, 2008
Well I have an idea, I wonder if .NET CF 3.5 supports external scripting as the PC version does. Basically that might allow you to replace the backlight algoritm without compiling the program yourself. You could quite easily make exceptions binded to really low lumen values or time of day with just 2-3 lines of code.

EDIT: I fear this is not possible, System.CodeDom.Compiler is awfully stripped down, I would have to make up my own scripting language for this to work and that would be very difficult.

But I think I can add this as a setting to the configuration file.

- disabled (default)
- below 25/750 lumens

very simple and I think this would do about what you want :)
Expect this in the new version.
Last edited:


Senior Member
Feb 24, 2008
Thanks for your suggestions.
Lumos v02c is out, it contains your 2 desired options (for backlight 1 and 2 separately). You will however be disappointed by the sensitivity of raphael sensor, it reports 0 like all the time.

This change theoretically lets you set lumen values for the 2 lowest values manually and once the sensor reads larger values, the MIN/MAX_BACKLIGHT kicks in. It's possible to have 4-8 auto and dim to 1 or 2 on low light, so you can kinda simulate the behaviour of LevelSight if you want to.

Oh and as the cherry on top I disabled tolerance by default, for more smoothness, the impact on CPU and battery should be minimal < 0.05%

The next version should include a tool to easily restart Lumos to apply settings, it will be needed for the graphical user interface later.



Senior Member
Feb 24, 2008
Major version released:
Lumos v03
- all bugs connected with dynamic backlight should be fixed now
- changing settings.txt is even safer (program should never crash, just tell you where is problem and use defaults)
- includes LumosKiller.exe that can start/restart/shutdown Lumos easily

In case no bugs are found until friday, I will start building GUI. :)


Senior Member
Apr 10, 2005
Could you integrate special brightness normally only used when starting the camera? You'd probably need to debug the camera application to find out about the special ICOTLs for that. I did that with my Magician back in the days.


Senior Member
Feb 24, 2008
Program-specific exceptions will be added after the GUI is done, I still need to figure out how to list running windows by name. If you have any experience with this using C# or C++ I'd be happy if you PM me, but I guess uncle google knows how to do this, just refuses to share it with me right now :p


Senior Member
Aug 19, 2008
Uz to testujem, zatial to vali krasne a v pohode ;-)

I just wrote that I'm currently testing it, no problems so far.
Thank you and please keep up the good work ;-)


Feb 14, 2007
San Isidro
Great application Nik3r!!

i like so much, because don´t touch my registry, It´s light,and also have minimal resources consumption

But, i need your help with the configuration file,
i have htc diamond, and the battery of this device drain fast

how can set the settings to obtain best battery duration?

Thanks a lot!!:)


Senior Member
Feb 24, 2008
You can increase the polling interval, enable some tolerance and lower the maximum brightness.
Try to make these changes:


set minimum backlight to whatever is reasonably visible in shade
.. this will set your polling interval to 1,5s and make your brightness change every 3s instead of 2. The tolerance prevents brightness changess less than 2 units. It's the brightness change that eats most CPU (up to 3% spike) and thus battery and the tolerance makes sure it's not changing until a larger change is required.

And make sure you killed the old v01/02x version or soft reset before using 03 because older versions can't be killed by LumosKiller and two of them running may ruin your battery.

... hmm by the way I wonder why I didn't call it "Nox" instead of LumosKiller (any similarity with HP books is completely unintentional :D)

Good luck :)
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 3
    Final Version

    Lumos version 1.0 FINAL
    has been officially released.

    Most notable new features:
    - stability/performance fixes
    - Relative Exceptions (see FAQ)
    - exceptions that prevent device sleep
    - support for simple command-line services (see FAQ)
    - support for QVGA / HVGA displays
    - fixed issues and detection of defective light sensors that never report 0
    - automated handling of built-in auto backlight related issues (may require restart after installation to apply fix)
    - some ability to identify missing HTC drivers and offer a solution

    Please note you can freely update over RC2 version and keep most of your settings but you will lose all per-app exceptions due to compatibility problems.

    Also note that some new features may appear in English as they are not yet translated. Fixed translations may be released in the future if there is demand.

    Download the new version in first post.

    FAQ is in second post and is being updated if you have any questions about the new features.
    You're right, someone should write the documentation... someone.. :D

    For now this will have to do:
    Backlight change 2500 (ms) - set to 1250 means
    Lumos checks for backlight every poll but doesn't usually change the backlight on every single poll to save CPU cycles.

    Basically you are looking for light every 1250ms (looking at sensor is quite cheap if it's not polled extremely often) and you use a multiplier of 2x for backlight change 1250*2=2500ms (actually performing the BL change is most CPU costly thing Lumos does, about 3,5% peak).

    BL = min below (lumens) dims the display to absolute minimum regardless of other settings once sensor is below the value.

    HW keyboard dim timeout - obviously keyboard backlight duration when you slide open/type.

    CLP was removed in last version, it had no practical use.

    MODE tab specifies how backlight behaves in relation to sensor values, there are 3 presets or you can mix your own flavor. The default is best for most users.

    Relative exception (and this IS explained in the FAQ I believe) means amplification/attenuation of the automatic backlight for some app rather than one fixed level. Retais auto-levelling but increases or decreases the result by some amount when your app is running. Basically gets you better readability for some apps and still saves battery compared to static level. Or it can be used to decrease backligh by an amount for some apps.. can't think of an usage scenario but I'm sure there is one ;)

    I tried to explain the stuff that is not self-explanatory in the FAQ (second post here) take a look.
    I remember now why I haven't implemented it. The problem is when you turn the device on under direct sunlight, this behaviour would make you unable to see anything for the duration of one cycle (little over a second in worst case scenario on stock settings). That's why this should be an option if anything and not forced. I for one like it the way it is and having high-ish (last used) backlight for a second is better than not seeing anything for a second.

    Your argument that you turn the display off and on often just proves my point. When there's sunlight, you would have to wait every time for the backlight to adjust to current conditions, instead of having it rather brighter and then dimming to appropriate levels if it got darker since you last used it.

    I suppose it's a matter of preference, but current model is unarguably more practical outside and the effect on battery is actually positive.

    Lumos remembers the last backlight used, so unless you change bright and dark places between the switches, it doesn't need to do any work at all, actually doing less adjustments in the long run - saving CPU time and in turn battery, since the actual BL change is most costly task.

    If the display is darkened when you turn it on, unless you are indoors in minimal light, Lumos will have to do at least the same number of changes as now in best case scenario - making more work in the long run (not saving battery) and making you miserable in the process, delaying the first interaction with your device by over a second in some conditions.
    Lumos for Android is now available at Google Play Store
    looking forward to trying and testing it.

    OK - I'll make sure to send a beta link your way when I *think* it should work. I'm kind of blindfolded at the moment.
    The changes are not dramatic, you can see all changes in the second post it's mainly tweaks and bugfixes.