[APP][5.0+][2020.12.22] CF.lumen v3.74

Search This thread

Chainfire

Moderator Emeritus / Senior Recognized Developer
Oct 2, 2007
11,452
87,856
www.chainfire.eu
About

CF.lumen adapts the colors on your Android device based on the position of the sun, or your custom configuration.

When using the default settings, your display will get a warmer tint (lower color temperature) when the sun is down, vastly reducing strain on the eyes. This will take some getting used to, though! The colors also match closer to common artificial light sources, than the daytime light you get from the sun. Blue light makes your brain want to stay awake, and a lower color temperatures reduces the amount of blue displayed; using this in the evening also reduces your brain's effort to keep you awake at night, and can be beneficial to your sleeping pattern.

During sleeping hours by default a red filter is used. Red strains your eyes the least, and retains your night vision.

Light sensor

The light sensor can be used to automagically adjust the color: switch to the sleep filter in full dark, or to the day filter (usually none) under bright lights.

Because light sensor quality varies wildly between devices, a calibration option is provided. Most devices seem to work fine with sliders set all the way to the left, others need them to be set all the way to the right. Experiment as needed, but be warned that some devices simply cannot distinguish between evening indoor lighting and full darkness, and this feature may thus not work well for you.

Color filters

Several filters are provided. Those named after a color (red, green, blue, amber, salmon) do not limit the display to those colors, but convert the displayed image to grayscale first, then display that image in levels of the selected color, instead of levels of all channels (white). This preserves details that would otherwise be lost.

Grayscale, invert colors, temperature adjustment and custom R/G/B adjustment filters are also provided.

Colorblindness

The master color filter setting also has an option for colorblindness enhancement, with settings for protanopia/anomaly, deuteranopia/anomaly and tritanopia/anomaly. These options redistribute colors across the spectrum, in theory enhancing clarity and color detail.

No claims are made to the effectiveness of these filters, but positive reports have been received from testers. Also note that these filters were thought up by Google engineers - CF.lumen just includes them.

Pro version

Upgrading to CF.lumen Pro will support my developments, remove all nags, unlock the option to start at device boot (make sure you test your configuration first), and unlocks notification options. It also enabled Tasker integration.

In Pro mode, the notification adds convenient buttons to quickly disable the current filter or switch to sleep mode, and you can switch the notification to when enabled mode, which shows the notification only when a color filter is active.

In non-Pro mode, the notification only asks you to upgrade to Pro. It may seem that notification is just there to annoy you, but it actually prevents Android from randomly killing the background service taking care of all the work. Getting rid of it without getting the service killed can be done by going to Settings -> Apps -> CF.lumen and unticking Show notifications.

As in the past CF.lumen was part of Chainfire3D, if you have the Pro package of the latter installed, Pro mode will also be enabled.

Drivers

CF.lumen currently supports three driver backends to adjust the display: the original CF.lumen driver, the KCAL kernel driver, and the rootless (non-root) overlay. See the driver section below for further details.

Performance

When no color filter is active, there should not be any noticeable performance impact. When a filter is active, impact depends on device and what you are doing. On some devices we have tested there was no performance impact at all, on others it was slightly noticeable.

Performance characteristics change based on the driver you are using. See the driver section below for further details.

History

Nightmode - now called 'sleep mode' in CF.lumen - was actually the kick-off of Chainfire3D's development, and the later arrival of the original CF.lumen additionally containing the functionality to change color temperature based on the sun's position. Completely different (and no longer possible) techniques were used to get similar results. There were fewer options, and the filters limited display to the selected channels instead of the currently used much higher quality method of displaying luminance levels on the selected channel.

Future

Keep in mind that Android's rendering system changes over time. This app was possible in the old days of Android, and then wasn't possible for a long time. Only with KitKat did it become possible to make this work again. As such, you should be aware that this app may simply stop working on future Android versions without the possibility of a fix.

Scary permissions

By far most permissions are used only for Google Maps to set your location, and Google Play to provide for In-App Purchases. I cannot make any claims as to what information the Google components do or do not send to Google servers, but no information is sent to me or anyone else (than Google).

Download

Get CF.lumen at Google Play

It needs Android 5.0 Lollipop or newer!

Screenshots
 

Attachments

  • screenshot-phone-small-ui-1.png
    screenshot-phone-small-ui-1.png
    71.8 KB · Views: 74,219
  • screenshot-phone-small-ui-2.png
    screenshot-phone-small-ui-2.png
    63.2 KB · Views: 71,919
  • screenshot-phone-small-home-day.jpg
    screenshot-phone-small-home-day.jpg
    38.7 KB · Views: 73,218
  • screenshot-phone-small-home-sundown.jpg
    screenshot-phone-small-home-sundown.jpg
    87.1 KB · Views: 71,544
  • screenshot-phone-small-home-sleep.png
    screenshot-phone-small-home-sleep.png
    161 KB · Views: 70,296
Last edited:

Chainfire

Moderator Emeritus / Senior Recognized Developer
Oct 2, 2007
11,452
87,856
www.chainfire.eu
Walkthrough video


GIF

cflumen-small.gif


Drivers

CF.lumen currently supports several driver backends to adjust the display: the original CF.lumen driver, the KCAL kernel driver, the PCC/RGB kernel driver, and the rootless (non-root) overlay. Driver selection will only be presented to you if multiple drivers are actually supported on your device.

Drivers: performance background

Software compositing is when your device takes the different surfaces on screen (the app's display, the status bar, the navigation bar, a popup window, these are all surfaces), draws them into a single buffer, then lets the hardware display this buffer. Virtually all modern devices can also do hardware compositing, where these different surfaces are presented to display hardware themselves, skipping one drawing step. It should be noted however, that hardware compositing only supports three surfaces (usually), so only the most basic scenes can be rendered this way. If more than the number of supported surfaces are displayed, the system falls back to software compositing automatically. Performance is slightly lower when this happens, but it happens all the time, and I doubt you've ever noticed it without looking for it.

One specific note about this is that "secure" content (DRM protected video rendering, for example) can only be hardware composited, as the software is not allowed to gain access to the surface. So if you are experiencing video disappearing, it's because the system has switched to software compositing. This can be due to CF.lumen's driver, a color overlay, or even just a system popup pushing the number of surfaces beyond the number of supported surfaces by the hardware compositor.

Drivers: CF.lumen

The CF.lumen driver requires software compositing, as it changes the colors displayed during the software compositing step. Of course, it lets the system go back to hardware compositing if it's not actively changing colors. This can slightly impact performance.

This driver changes colors on the surface content level, and can perform all sorts of calculus before deciding what to display. This usually gives it the highest possible image quality output. For example, in the color channel modes (red - night mode, green, blue, amber, salmon), the image is first converted to a luminance-based grayscale image, and then output in the selected color channels. This dramatically improves clarity and detail over only displaying the selected channels. Taking red mode as an example, this means that green and blue image content still shows up in a shade of red, whereas normally all colors devoid of a red component would show up as full black. Because of the surface-based manipulation, the invert filter may sometimes show unexpected results.

This driver affects both full-screen screenshots as well as app screenshots. Aside from normal screenshot/cast purposes, these are also used by the system for animations and in the recent task lists, and thus it may sometimes appear like a filter is applied twice during rotation or while browsing the tasks list.

Since v3.65 this driver comes in three different modes:

Drivers: CF.lumen: Compatibility mode

This driver mode should work on virtually all devices out there, however, on many firmwares it comes with an extra large performance penalty. Rendering quality is generally excellent, but various internal actions of Android itself (such as screen on, pattern unlock, app install, etc), as well as any app that triggers Android's accessibility options, may temporarily interfere with the rendering. This can cause a flash of the original colors being shown, instead of our manipulated colors.

Drivers: CF.lumen: Performance mode

This driver mode overrides Android's rendering system in a different way. While it doesn't work on all devices and firmwares, if it does work, it is often significantly faster than the compatibility mode. It also doesn't suffer from short flashes of the original colors being shown. This mode causes visible artifacts on some devices, though it isn't common.

Drivers: CF.lumen: Anti-flicker mode

This driver mode is a hybrid of compatibility and performance modes. It uses the same subsystem as performance mode, and thus it doesn't work on all devices and firmwares. This mode keeps the rendering from compatibility mode, but attempts to prevent the short flashes of the original colors being shown.

Drivers: KCAL

The KCAL driver is quickly becoming a popular kernel mod for Qualcomm devices. It allows color adjustments in the display hardware itself. There is no performance difference with this driver, but of course your kernel must support it. This is the fastest driver.

This driver changes colors on the display level, and is limited in the operations it can perform. It is fast, but the image quality can be less. In color temperature modes (probably your most used mode) there is no difference with the CF.lumen driver. In the color channel modes however, there is no luminance conversion. If you select for example the red mode, you will only see the red component of colors. Pure blue, pure green, or any color which is a mix of blue and green but not red, will appear black.

A gamma correction option is available for this driver. Some devices automatically gamma correct the values CF.lumen gives the kernel, the app needs to know about this, so it can take this into account in its calculations.

This driver affects neither full-screen screenshots nor app screenshots. It does not support the colorblind filter.

Drivers: PCC/RGB

This driver is very closely related to the KCAL driver, as they use the same hardware, so please read that section. Some kernels provide support for one but not the other. If both are supported, KCAL generally gives you a few more options than PCC/RGB, but there is no performance difference between the two.

This driver does not support the grayscale, invert or colorblind filters.

Drivers: rootless

The rootless fallback driver (for non-root users) uses a color overlay. This is an additional surface, causes at least one additional expensive full-screen rendering step, and is likely to throw your system into software compositing mode most of the time. This is the slowest (and ugliest) driver.

Image quality wise, it is no competition for the other drivers, but not everyone has root. Like the other screen color tint apps on the market (there are quite a few, and while CF.lumen is older than all of those, it is certainly not the best known or most popular one), a color overlay is used. Where the other drivers properly manipulate the displayed colors, this driver is more like putting a half-transparent colored sheet over a picture. While it somewhat does the job, it lowers contrast significantly.

On Android 6.0, various Android functions refuse to work when an overlay is present. This includes apps asking for permission, installing apps, etc. The app attempts to detect these situations and automatically turn off the filter. If you spot a situation where the filter is not automatically temporarily disabled, please let me know.

This driver affects only full-screen screenshots (but not full-screen animations), not app screenshots. It does not support the grayscale, invert, or colorblind filters.

Non-GApps firmwares

This app uses Maps for manual location setting, and Play for purchasing Pro. An increasing number of users do not have GApps, for privacy, security, and other concerns. If the app is installed on such a firmware, your location will be determined using the normal location API (without manual override, so your phone has to be able to determine your location). As I do not want to deprive anyone from the potential health benefits of sleeping better, the app operates in Pro mode if you do not have the Play store installed (PayPal'ing me beer money is always an option).

The APK is attached to this post for those not using Google Play (only).

Under no circumstances are you allowed to (re-)distribute this APK
(v2.00: 32, v2.05: 180, v2.10: 164, v2.16: 288, v2.25: 118, v2.40: 555, v2.50: 546, v2.60: 39, v2.61: 132, v2.66: 27, v2.71: 563, v2.74: 388, v2.75: 1042, v3.00: 4320; v3.65: 1376)
 

Attachments

  • CF.lumen-v3.00.apk
    818.9 KB · Views: 17,620
  • CF.lumen-v3.16.apk
    696.3 KB · Views: 17,018
  • CF.lumen-v3.66-20160330230912.apk
    1.9 MB · Views: 32,050
  • CF.lumen-v3.74-20201222214220.apk
    1.2 MB · Views: 1,398
Last edited:

Chainfire

Moderator Emeritus / Senior Recognized Developer
Oct 2, 2007
11,452
87,856
www.chainfire.eu
Changelogs

2020.12.22 - v3.74

- (c) 2020
- Remove references to G+
- Android 11 support
- Android 10+: Show warning about notification options not working
- Android 10+: Disable rootless mode
- Android 10+: Disable advanced/injection/anti-flicker/performance driver (needs further investigation to make work)
- Add foreground service permission
- Built for API 29
- Fix notification spam issue
- Fix maps crashing

2018.12.20 - v3.72-TEST
- Pie: Fix soft-bar transparency
- Pie: Fix boot-up launch
- Pie: Fix maps not working
- Pie: Fix greylist violations
- Oreo/Pie: Fix notifications
- Fix Magisk detection / root warning
- Fix system settings modification permission handling
- Fix location permission handling
- Fix performance driver injection on some 7.0 devices
- Fix several deadlocks
- Add option to detect which driver mode is the fastest
- Support for new KCAL paths
- Replaced root sockets with Binder-based IPC
- Removed colorblind options (available in Developer Options on all recent devices)
- Greyscale/Saturation filter: allow up to 2.0x factor (oversaturate)

2018.11.28 - v3.71-TEST
- (c) 2018
- Basic Pie fixes (far from complete!)
- Updated libsuperuser and librootjava
- CF.lumen performance driver: fixed injector for newer Android versions

2017.02.09 - v3.70
- (c) 2017
- Upgrade grayscale filter from a toggle to a saturation slider
- CF.lumen driver: fix 'performance mode' on Nougat (bypass new linker protections)
- CF.lumen driver: fix darken filter math issue (still doesn't work on invert, though)

2016.03.30 - v3.66
- CF.lumen driver: smoother filter switching
- CF.lumen driver in Performance mode: fix disable hardware overlays option sticking when CF.lumen is disabled
- Tasker: fix black screen on filter selection
- Tasker: fix brightness change on filter selection

2016.03.01 - v3.65
- Reworked raw remote control receiver
- Fix logcat spammed with notification errors regarding a missing icon
- Fix issue with "Bright light" setting
- Fix flicker on location update
- Reduce frequency of notification updates
- Add color checker to rgb/custom and temperature filter selection dialogs
- Underlined numbers next to sliders can now be tapped to input a text value
- CF.lumen driver: fix not closing properly when switching to KCAL
- CF.lumen driver: better monitor accessibility settings
- CF.lumen driver: added anti-flicker and performance modes
- KCAL driver: add gamma correction feature
- KCAL/CF.lumen drivers: Tune color temperature algorithm
- PCC RGB driver added
- Add "Darken filter" setting to "Brightness" option (sub-zero)
- Made "Brightness" setting on filter selection an icon
- Moved "Auto-update location" option to the Map activity

2016.02.18 - v3.62
- Fix driver not initializing on various devices

2016.02.17 - v3.61
- Slight performance improvement in root driver
- Change timeout handling code in root service
- Fix background ANR

2016.02.16 - v3.60 - RELEASE NOTES
- Play release of v3.53

2016.02.16 - v3.53 BETA
- Add notice to reboot first after installation if old driver found
- Fix some options in the settings screen not being disabled when they should be
- Adjust light sensor calibration texts and min/max values
- Add option to auto update location (enabled by default, passive listener, no power use)
- Add welcome message

2016.02.13 - v3.52 BETA
- Fix issue with system-based SuperSU
- Fix old driver not always being reset when switching drivers
- Fix KCAL driver not always resetting when setting to disabled (screen power cycle also works)
- Fix rootless overlay being applied twice on service restart
- Periodically and on certain actions, reset color matrix

2016.02.08 - v3.51 BETA
- Fix grayscale channel rendering
- Allow master mode without location
- Improve Marshmallow doze/standby handling
- Fix filters sometimes not showing on initial setup in Rootless mode
- Added warning if drawing over other apps is disabled in M+Rootless mode
- Added capability to detect permission dialogs and hide overlay in M+Rootless mode

2016.02.08 - v3.49 BETA
- Should work again on MIPS
- 4.4 support dropped, now 5.0+
- Fix FC on SuperSU prompt
- Completely new CF.lumen driver code
- Improved driver switching
- (C) 2016

2015.10.28 - v3.16
- Detect Enforcing SELinux without supolicy availability and warn user

2015.10.27 - v3.15
- Fixed a case of the new root driver not being injected (and thus nothing happening)

2015.10.26 - v3.11 BETA - RELEASE NOTES
- Fixed freezing issue
- Fixed Note5 (and others?) support

2015.10.19 - v3.10 BETA - RELEASE NOTES
- New root driver method
- Adjusted slider layouts
- Dropped MIPS support :(

2015.02.24 - v3.00 - RELEASE NOTES
- (C) 2015
- Added KCAL driver (see XDA thread for details)
- Added Rootless driver (see XDA thread for details)
- Added freeload option
- Backuptool script updated (requires un-/reinstall of driver to become active)

2014.12.22 - v2.75
- Change notification flags
- Fix driver detection issue which could lead to bootloops on devices with symlinked busybox
- Work-around one case of bootloops, detect that case, and warn about it

2014.12.02 - v2.74
- Fix remote control issue

2014.11.19 - v2.72
- Fix issue with in-app billing

2014.11.14 - v2.71
- Hide notification from (secure) lockscreens on L
- Check free space before installing driver

2014.11.06 - v2.70
- Tasker integration (Pro only)

2014.11.05 - v2.66 - RELEASE NOTES
- Android 5.0 fixes
- 64-bit fixes
- Performance improvement

2014.10.22 - 2.61
- Fix UI bug where settings wouldn't open sometimes

2014.10.22 - 2.60 - RELEASE NOTES
- Fixed a name issue with the recovery installer
- Automatically restart service when app is updated
- Expanded theme options, including material (basic)
- SELinux policy patches for LPX13D
- Experimental support for arm64, x86-64, mips64

2014.07.02 - 2.51
- Fix: ignore light sensor triggered sleep if forced awake during sleep hours

2014.07.01 - 2.50
- Installer fixes for latest AOSP
- Installer fixes for Android "L" Preview
- Added wake button to notification during sleep mode, which goes to sundown mode and is the default tap response - in contrast to disable, which disables all filters and is the default tap response while not sleeping
- Fixed issue where starting CF.lumen would not start the driver/service when not using Pro, and nothing would happen regarding screen colors, no matter which buttons you push

2014.04.16 - 2.40 - RELEASE NOTES
- Added brightness control to filters (actionbar option)
- Added option to wake from sleep mode when an alarm goes off
- Added option to install via custom recovery
- Added backuptool support (survive custom ROM nightlies) - un/re-install driver to activate if coming from an older version
- Fixed setting sleep filter to disabled using day filter at night instead of sundown filter
- Fixed filters occasionally sticking while modifying settings

2014.04.14 - 2.25 - RELEASE NOTES
- Various UI tweaks
- Added gradual filter fading, configurable for sunrise, sunset, sleep and sensor events
- Added notification icon options (keep notification but hide icon)
- Added light sensor based wake from sleep option
- Added driver update needed notification
- Added option to switch between light, dark, and device themes
- Added quick toggle menu items to main activity
- Improved (Pro) notification behavior - en/disable now default tap option when active
- Fixed kelvin and R/G/B choices not being saved between filter selections
- Fixed "Upgrade to Pro" from notification sometimes not working
- Fixed text wrapping on light calibration dialog

2014.04.11 - 2.15
- Fixed driver installation problem when using Superuser instead of SuperSU

2014.04.11 - 2.10
- Fixed crash on driver (un)install

2014.04.10 - v2.05
- Fixed a number of force closes

2014.04.10 - v2.00
- Initial public release
 
Last edited:

rlaw

Senior Member
Jul 13, 2011
999
320
Is there any practical difference between this and Lux?

Sent from my Nexus 5 using XDA Premium 4 mobile app
 

erikieperikie

Senior Member
Dec 7, 2011
157
48
Apeldoorn
EDIT: The latest update(s) fixed my problems. Thanks CF! Will buy if I like the app after a few days of use.

BUG:
I would love to include a logcat, but I simply don't have the time today or tomorrow. If needed, I'll post one this weekend.

When the app runs for the first time: grant su access, then I see the "please install cf.lumen driver". I click install, device reboots after a few secs, after reboot I wait for some time before opening the app again. When I open it, it asks me the same thing: install the driver. Wasn't the driver installed, or doesn't it detect the driver?

PHONE: Nexus 4, ROM: Paranoid Android 4.2 BETA 4 (that's Android 4.4.2 if you don't know), KERNEL: franco.Kernel #204.

On my first try I had Nexus Display Control (also by Franco) installed. My guess was the apps aren't compatible. After uninstalling both apps, reboot, installed cf.lumen again, install driver, reboot: same problem. So for now no cf.lumen for me. :( Just eye strain.

I hope this helps you find the bug or incompatibility I have!
 
Last edited:
  • Like
Reactions: Kürt Enes

Codename13

Senior Member
Jun 22, 2012
935
1,307
Excellent, and we need it for Android 4.0+

+1. Although I favour the cool-factor and performance of custom ROMs, it's always nice to be able to get a similar experience on stock ROM (which is ICS for me), considering that there are no stable custom ROMs on my device at the moment. I'm actually in the midst of custom ROM development for my device, though I work on CM10.2. (There are others who work on KitKat). It would be much appreciated if the @Chainfire could add support for lower Android versions.
 

Chainfire

Moderator Emeritus / Senior Recognized Developer
Oct 2, 2007
11,452
87,856
www.chainfire.eu
Is there any practical difference between this and Lux?

Seems to me (haven't actually tried), Lux (like several other solutions) uses an overlay for things like colortemperature and nightmode, which usually gives a lot worse image quality.

It's auto-brightness features on the other hand should work fine, and is something not really available from CF.lumen. Maybe one day one app will also be able to control the other.

Is it possible that you could add Tasker compatibility? If not, are there public intents available to control cf.lumen through Tasker intents? Thanks for updating this great app.

This is not available right now, but I've added it to my to-do list.

BUG:
I would love to include a logcat, but I simply don't have the time today or tomorrow. If needed, I'll post one this weekend.

When the app runs for the first time: grant su access, then I see the "please install cf.lumen driver". I click install, device reboots after a few secs, after reboot I wait for some time before opening the app again. When I open it, it asks me the same thing: install the driver. Wasn't the driver installed, or doesn't it detect the driver?

PHONE: Nexus 4, ROM: Paranoid Android 4.2 BETA 4 (that's Android 4.4.2 if you don't know), KERNEL: franco.Kernel #204.

On my first try I had Nexus Display Control (also by Franco) installed. My guess was the apps aren't compatible. After uninstalling both apps, reboot, installed cf.lumen again, install driver, reboot: same problem. So for now no cf.lumen for me. :( Just eye strain.

I hope this helps you find the bug or incompatibility I have!

A logcat will not help for this (its not a crash) - we'll need to investigate some other way. Can you confirm /system/lib/libcflumen.so is present?
 

Chainfire

Moderator Emeritus / Senior Recognized Developer
Oct 2, 2007
11,452
87,856
www.chainfire.eu
No love for 4.1 - 4.3 makes me a sad panda :(

+1. Although I favour the cool-factor and performance of custom ROMs, it's always nice to be able to get a similar experience on stock ROM (which is ICS for me), considering that there are no stable custom ROMs on my device at the moment. I'm actually in the midst of custom ROM development for my device, though I work on CM10.2. (There are others who work on KitKat). It would be much appreciated if the @Chainfire could add support for lower Android versions.

If I could easily do this, I would, but I can't, so I won't.
 

accountabc

Senior Member
Dec 14, 2008
332
6
A logcat will not help for this (its not a crash) - we'll need to investigate some other way. Can you confirm /system/lib/libcflumen.so is present?

Same issue here on N4 running CM11 M5 4.4.2. I do not have the system/lib/libcflumen.so file. I tried pressing install and reboot a couple of times to no avail.

Edit: just got an update from the play store. Ironically this update that says it fixes force closes now causes the app to force close when pressing ok to install the driver. Using ART by the way.
 
Last edited:

XXCoder

Senior Member
Jul 22, 2011
142
27
It does not seem to work at all in Cm11. It crashed once but even when it does not it don't change anything. It does flicker a small black square though.
 

Dante897

Member
Feb 24, 2013
23
3
Thessaloniki
The app crashes when I tap okay for the driver installation. I am using a Nexus 4 on 4.4.2 SlimKat build 3 with Matr1x 13.5 kernel and ART. I've added a Logcat for you, not sure if I did it right, let me know if it doesn't contain all the information you need. I think ART might be breaking it.
 

Attachments

  • Lumen.txt
    10.4 KB · Views: 103

kodirovshchik

Senior Member
Aug 23, 2013
200
73
Dneprodzerzinsk
Max Dark level - 100
Min Bright level - 250

Could you change Min Bright level to 101? Its logical, and I really need it on my nexus 7 2013.

Or, even better, could you make dynamic Max Dark/Min Bright level?
Max Dark - ( N ),
Min Bright - ( N + 1 )
 
Jan 11, 2014
45
8
I stand by XXCoder and tacosdelicioso on the CM11 issue. App crashes when asking for reboot, soon after permissions are given. I am running ART, FYI.

Enviado de meu XT925 usando Tapatalk
 

cba1986

Senior Member
Aug 8, 2010
2,409
621
Somewhere in Buenos Aires
The app crashes when I tap okay for the driver installation. I am using a Nexus 4 on 4.4.2 SlimKat build 3 with Matr1x 13.5 kernel and ART. I've added a Logcat for you, not sure if I did it right, let me know if it doesn't contain all the information you need. I think ART might be breaking it.

Happens the same to me. Using latest temasek v64, devil's kernel and dalvik.
 

scottharris4

Senior Member
Oct 5, 2011
844
71
FCs on me as soon as I press OK to restart to install the driver. Happens every single time. Restarted manually and opeed it up again and same thing
 

Top Liked Posts

  • There are no posts matching your filters.
  • 298
    About

    CF.lumen adapts the colors on your Android device based on the position of the sun, or your custom configuration.

    When using the default settings, your display will get a warmer tint (lower color temperature) when the sun is down, vastly reducing strain on the eyes. This will take some getting used to, though! The colors also match closer to common artificial light sources, than the daytime light you get from the sun. Blue light makes your brain want to stay awake, and a lower color temperatures reduces the amount of blue displayed; using this in the evening also reduces your brain's effort to keep you awake at night, and can be beneficial to your sleeping pattern.

    During sleeping hours by default a red filter is used. Red strains your eyes the least, and retains your night vision.

    Light sensor

    The light sensor can be used to automagically adjust the color: switch to the sleep filter in full dark, or to the day filter (usually none) under bright lights.

    Because light sensor quality varies wildly between devices, a calibration option is provided. Most devices seem to work fine with sliders set all the way to the left, others need them to be set all the way to the right. Experiment as needed, but be warned that some devices simply cannot distinguish between evening indoor lighting and full darkness, and this feature may thus not work well for you.

    Color filters

    Several filters are provided. Those named after a color (red, green, blue, amber, salmon) do not limit the display to those colors, but convert the displayed image to grayscale first, then display that image in levels of the selected color, instead of levels of all channels (white). This preserves details that would otherwise be lost.

    Grayscale, invert colors, temperature adjustment and custom R/G/B adjustment filters are also provided.

    Colorblindness

    The master color filter setting also has an option for colorblindness enhancement, with settings for protanopia/anomaly, deuteranopia/anomaly and tritanopia/anomaly. These options redistribute colors across the spectrum, in theory enhancing clarity and color detail.

    No claims are made to the effectiveness of these filters, but positive reports have been received from testers. Also note that these filters were thought up by Google engineers - CF.lumen just includes them.

    Pro version

    Upgrading to CF.lumen Pro will support my developments, remove all nags, unlock the option to start at device boot (make sure you test your configuration first), and unlocks notification options. It also enabled Tasker integration.

    In Pro mode, the notification adds convenient buttons to quickly disable the current filter or switch to sleep mode, and you can switch the notification to when enabled mode, which shows the notification only when a color filter is active.

    In non-Pro mode, the notification only asks you to upgrade to Pro. It may seem that notification is just there to annoy you, but it actually prevents Android from randomly killing the background service taking care of all the work. Getting rid of it without getting the service killed can be done by going to Settings -> Apps -> CF.lumen and unticking Show notifications.

    As in the past CF.lumen was part of Chainfire3D, if you have the Pro package of the latter installed, Pro mode will also be enabled.

    Drivers

    CF.lumen currently supports three driver backends to adjust the display: the original CF.lumen driver, the KCAL kernel driver, and the rootless (non-root) overlay. See the driver section below for further details.

    Performance

    When no color filter is active, there should not be any noticeable performance impact. When a filter is active, impact depends on device and what you are doing. On some devices we have tested there was no performance impact at all, on others it was slightly noticeable.

    Performance characteristics change based on the driver you are using. See the driver section below for further details.

    History

    Nightmode - now called 'sleep mode' in CF.lumen - was actually the kick-off of Chainfire3D's development, and the later arrival of the original CF.lumen additionally containing the functionality to change color temperature based on the sun's position. Completely different (and no longer possible) techniques were used to get similar results. There were fewer options, and the filters limited display to the selected channels instead of the currently used much higher quality method of displaying luminance levels on the selected channel.

    Future

    Keep in mind that Android's rendering system changes over time. This app was possible in the old days of Android, and then wasn't possible for a long time. Only with KitKat did it become possible to make this work again. As such, you should be aware that this app may simply stop working on future Android versions without the possibility of a fix.

    Scary permissions

    By far most permissions are used only for Google Maps to set your location, and Google Play to provide for In-App Purchases. I cannot make any claims as to what information the Google components do or do not send to Google servers, but no information is sent to me or anyone else (than Google).

    Download

    Get CF.lumen at Google Play

    It needs Android 5.0 Lollipop or newer!

    Screenshots
    128
    Walkthrough video


    GIF

    cflumen-small.gif


    Drivers

    CF.lumen currently supports several driver backends to adjust the display: the original CF.lumen driver, the KCAL kernel driver, the PCC/RGB kernel driver, and the rootless (non-root) overlay. Driver selection will only be presented to you if multiple drivers are actually supported on your device.

    Drivers: performance background

    Software compositing is when your device takes the different surfaces on screen (the app's display, the status bar, the navigation bar, a popup window, these are all surfaces), draws them into a single buffer, then lets the hardware display this buffer. Virtually all modern devices can also do hardware compositing, where these different surfaces are presented to display hardware themselves, skipping one drawing step. It should be noted however, that hardware compositing only supports three surfaces (usually), so only the most basic scenes can be rendered this way. If more than the number of supported surfaces are displayed, the system falls back to software compositing automatically. Performance is slightly lower when this happens, but it happens all the time, and I doubt you've ever noticed it without looking for it.

    One specific note about this is that "secure" content (DRM protected video rendering, for example) can only be hardware composited, as the software is not allowed to gain access to the surface. So if you are experiencing video disappearing, it's because the system has switched to software compositing. This can be due to CF.lumen's driver, a color overlay, or even just a system popup pushing the number of surfaces beyond the number of supported surfaces by the hardware compositor.

    Drivers: CF.lumen

    The CF.lumen driver requires software compositing, as it changes the colors displayed during the software compositing step. Of course, it lets the system go back to hardware compositing if it's not actively changing colors. This can slightly impact performance.

    This driver changes colors on the surface content level, and can perform all sorts of calculus before deciding what to display. This usually gives it the highest possible image quality output. For example, in the color channel modes (red - night mode, green, blue, amber, salmon), the image is first converted to a luminance-based grayscale image, and then output in the selected color channels. This dramatically improves clarity and detail over only displaying the selected channels. Taking red mode as an example, this means that green and blue image content still shows up in a shade of red, whereas normally all colors devoid of a red component would show up as full black. Because of the surface-based manipulation, the invert filter may sometimes show unexpected results.

    This driver affects both full-screen screenshots as well as app screenshots. Aside from normal screenshot/cast purposes, these are also used by the system for animations and in the recent task lists, and thus it may sometimes appear like a filter is applied twice during rotation or while browsing the tasks list.

    Since v3.65 this driver comes in three different modes:

    Drivers: CF.lumen: Compatibility mode

    This driver mode should work on virtually all devices out there, however, on many firmwares it comes with an extra large performance penalty. Rendering quality is generally excellent, but various internal actions of Android itself (such as screen on, pattern unlock, app install, etc), as well as any app that triggers Android's accessibility options, may temporarily interfere with the rendering. This can cause a flash of the original colors being shown, instead of our manipulated colors.

    Drivers: CF.lumen: Performance mode

    This driver mode overrides Android's rendering system in a different way. While it doesn't work on all devices and firmwares, if it does work, it is often significantly faster than the compatibility mode. It also doesn't suffer from short flashes of the original colors being shown. This mode causes visible artifacts on some devices, though it isn't common.

    Drivers: CF.lumen: Anti-flicker mode

    This driver mode is a hybrid of compatibility and performance modes. It uses the same subsystem as performance mode, and thus it doesn't work on all devices and firmwares. This mode keeps the rendering from compatibility mode, but attempts to prevent the short flashes of the original colors being shown.

    Drivers: KCAL

    The KCAL driver is quickly becoming a popular kernel mod for Qualcomm devices. It allows color adjustments in the display hardware itself. There is no performance difference with this driver, but of course your kernel must support it. This is the fastest driver.

    This driver changes colors on the display level, and is limited in the operations it can perform. It is fast, but the image quality can be less. In color temperature modes (probably your most used mode) there is no difference with the CF.lumen driver. In the color channel modes however, there is no luminance conversion. If you select for example the red mode, you will only see the red component of colors. Pure blue, pure green, or any color which is a mix of blue and green but not red, will appear black.

    A gamma correction option is available for this driver. Some devices automatically gamma correct the values CF.lumen gives the kernel, the app needs to know about this, so it can take this into account in its calculations.

    This driver affects neither full-screen screenshots nor app screenshots. It does not support the colorblind filter.

    Drivers: PCC/RGB

    This driver is very closely related to the KCAL driver, as they use the same hardware, so please read that section. Some kernels provide support for one but not the other. If both are supported, KCAL generally gives you a few more options than PCC/RGB, but there is no performance difference between the two.

    This driver does not support the grayscale, invert or colorblind filters.

    Drivers: rootless

    The rootless fallback driver (for non-root users) uses a color overlay. This is an additional surface, causes at least one additional expensive full-screen rendering step, and is likely to throw your system into software compositing mode most of the time. This is the slowest (and ugliest) driver.

    Image quality wise, it is no competition for the other drivers, but not everyone has root. Like the other screen color tint apps on the market (there are quite a few, and while CF.lumen is older than all of those, it is certainly not the best known or most popular one), a color overlay is used. Where the other drivers properly manipulate the displayed colors, this driver is more like putting a half-transparent colored sheet over a picture. While it somewhat does the job, it lowers contrast significantly.

    On Android 6.0, various Android functions refuse to work when an overlay is present. This includes apps asking for permission, installing apps, etc. The app attempts to detect these situations and automatically turn off the filter. If you spot a situation where the filter is not automatically temporarily disabled, please let me know.

    This driver affects only full-screen screenshots (but not full-screen animations), not app screenshots. It does not support the grayscale, invert, or colorblind filters.

    Non-GApps firmwares

    This app uses Maps for manual location setting, and Play for purchasing Pro. An increasing number of users do not have GApps, for privacy, security, and other concerns. If the app is installed on such a firmware, your location will be determined using the normal location API (without manual override, so your phone has to be able to determine your location). As I do not want to deprive anyone from the potential health benefits of sleeping better, the app operates in Pro mode if you do not have the Play store installed (PayPal'ing me beer money is always an option).

    The APK is attached to this post for those not using Google Play (only).

    Under no circumstances are you allowed to (re-)distribute this APK
    (v2.00: 32, v2.05: 180, v2.10: 164, v2.16: 288, v2.25: 118, v2.40: 555, v2.50: 546, v2.60: 39, v2.61: 132, v2.66: 27, v2.71: 563, v2.74: 388, v2.75: 1042, v3.00: 4320; v3.65: 1376)
    50
    Changelogs

    2020.12.22 - v3.74

    - (c) 2020
    - Remove references to G+
    - Android 11 support
    - Android 10+: Show warning about notification options not working
    - Android 10+: Disable rootless mode
    - Android 10+: Disable advanced/injection/anti-flicker/performance driver (needs further investigation to make work)
    - Add foreground service permission
    - Built for API 29
    - Fix notification spam issue
    - Fix maps crashing

    2018.12.20 - v3.72-TEST
    - Pie: Fix soft-bar transparency
    - Pie: Fix boot-up launch
    - Pie: Fix maps not working
    - Pie: Fix greylist violations
    - Oreo/Pie: Fix notifications
    - Fix Magisk detection / root warning
    - Fix system settings modification permission handling
    - Fix location permission handling
    - Fix performance driver injection on some 7.0 devices
    - Fix several deadlocks
    - Add option to detect which driver mode is the fastest
    - Support for new KCAL paths
    - Replaced root sockets with Binder-based IPC
    - Removed colorblind options (available in Developer Options on all recent devices)
    - Greyscale/Saturation filter: allow up to 2.0x factor (oversaturate)

    2018.11.28 - v3.71-TEST
    - (c) 2018
    - Basic Pie fixes (far from complete!)
    - Updated libsuperuser and librootjava
    - CF.lumen performance driver: fixed injector for newer Android versions

    2017.02.09 - v3.70
    - (c) 2017
    - Upgrade grayscale filter from a toggle to a saturation slider
    - CF.lumen driver: fix 'performance mode' on Nougat (bypass new linker protections)
    - CF.lumen driver: fix darken filter math issue (still doesn't work on invert, though)

    2016.03.30 - v3.66
    - CF.lumen driver: smoother filter switching
    - CF.lumen driver in Performance mode: fix disable hardware overlays option sticking when CF.lumen is disabled
    - Tasker: fix black screen on filter selection
    - Tasker: fix brightness change on filter selection

    2016.03.01 - v3.65
    - Reworked raw remote control receiver
    - Fix logcat spammed with notification errors regarding a missing icon
    - Fix issue with "Bright light" setting
    - Fix flicker on location update
    - Reduce frequency of notification updates
    - Add color checker to rgb/custom and temperature filter selection dialogs
    - Underlined numbers next to sliders can now be tapped to input a text value
    - CF.lumen driver: fix not closing properly when switching to KCAL
    - CF.lumen driver: better monitor accessibility settings
    - CF.lumen driver: added anti-flicker and performance modes
    - KCAL driver: add gamma correction feature
    - KCAL/CF.lumen drivers: Tune color temperature algorithm
    - PCC RGB driver added
    - Add "Darken filter" setting to "Brightness" option (sub-zero)
    - Made "Brightness" setting on filter selection an icon
    - Moved "Auto-update location" option to the Map activity

    2016.02.18 - v3.62
    - Fix driver not initializing on various devices

    2016.02.17 - v3.61
    - Slight performance improvement in root driver
    - Change timeout handling code in root service
    - Fix background ANR

    2016.02.16 - v3.60 - RELEASE NOTES
    - Play release of v3.53

    2016.02.16 - v3.53 BETA
    - Add notice to reboot first after installation if old driver found
    - Fix some options in the settings screen not being disabled when they should be
    - Adjust light sensor calibration texts and min/max values
    - Add option to auto update location (enabled by default, passive listener, no power use)
    - Add welcome message

    2016.02.13 - v3.52 BETA
    - Fix issue with system-based SuperSU
    - Fix old driver not always being reset when switching drivers
    - Fix KCAL driver not always resetting when setting to disabled (screen power cycle also works)
    - Fix rootless overlay being applied twice on service restart
    - Periodically and on certain actions, reset color matrix

    2016.02.08 - v3.51 BETA
    - Fix grayscale channel rendering
    - Allow master mode without location
    - Improve Marshmallow doze/standby handling
    - Fix filters sometimes not showing on initial setup in Rootless mode
    - Added warning if drawing over other apps is disabled in M+Rootless mode
    - Added capability to detect permission dialogs and hide overlay in M+Rootless mode

    2016.02.08 - v3.49 BETA
    - Should work again on MIPS
    - 4.4 support dropped, now 5.0+
    - Fix FC on SuperSU prompt
    - Completely new CF.lumen driver code
    - Improved driver switching
    - (C) 2016

    2015.10.28 - v3.16
    - Detect Enforcing SELinux without supolicy availability and warn user

    2015.10.27 - v3.15
    - Fixed a case of the new root driver not being injected (and thus nothing happening)

    2015.10.26 - v3.11 BETA - RELEASE NOTES
    - Fixed freezing issue
    - Fixed Note5 (and others?) support

    2015.10.19 - v3.10 BETA - RELEASE NOTES
    - New root driver method
    - Adjusted slider layouts
    - Dropped MIPS support :(

    2015.02.24 - v3.00 - RELEASE NOTES
    - (C) 2015
    - Added KCAL driver (see XDA thread for details)
    - Added Rootless driver (see XDA thread for details)
    - Added freeload option
    - Backuptool script updated (requires un-/reinstall of driver to become active)

    2014.12.22 - v2.75
    - Change notification flags
    - Fix driver detection issue which could lead to bootloops on devices with symlinked busybox
    - Work-around one case of bootloops, detect that case, and warn about it

    2014.12.02 - v2.74
    - Fix remote control issue

    2014.11.19 - v2.72
    - Fix issue with in-app billing

    2014.11.14 - v2.71
    - Hide notification from (secure) lockscreens on L
    - Check free space before installing driver

    2014.11.06 - v2.70
    - Tasker integration (Pro only)

    2014.11.05 - v2.66 - RELEASE NOTES
    - Android 5.0 fixes
    - 64-bit fixes
    - Performance improvement

    2014.10.22 - 2.61
    - Fix UI bug where settings wouldn't open sometimes

    2014.10.22 - 2.60 - RELEASE NOTES
    - Fixed a name issue with the recovery installer
    - Automatically restart service when app is updated
    - Expanded theme options, including material (basic)
    - SELinux policy patches for LPX13D
    - Experimental support for arm64, x86-64, mips64

    2014.07.02 - 2.51
    - Fix: ignore light sensor triggered sleep if forced awake during sleep hours

    2014.07.01 - 2.50
    - Installer fixes for latest AOSP
    - Installer fixes for Android "L" Preview
    - Added wake button to notification during sleep mode, which goes to sundown mode and is the default tap response - in contrast to disable, which disables all filters and is the default tap response while not sleeping
    - Fixed issue where starting CF.lumen would not start the driver/service when not using Pro, and nothing would happen regarding screen colors, no matter which buttons you push

    2014.04.16 - 2.40 - RELEASE NOTES
    - Added brightness control to filters (actionbar option)
    - Added option to wake from sleep mode when an alarm goes off
    - Added option to install via custom recovery
    - Added backuptool support (survive custom ROM nightlies) - un/re-install driver to activate if coming from an older version
    - Fixed setting sleep filter to disabled using day filter at night instead of sundown filter
    - Fixed filters occasionally sticking while modifying settings

    2014.04.14 - 2.25 - RELEASE NOTES
    - Various UI tweaks
    - Added gradual filter fading, configurable for sunrise, sunset, sleep and sensor events
    - Added notification icon options (keep notification but hide icon)
    - Added light sensor based wake from sleep option
    - Added driver update needed notification
    - Added option to switch between light, dark, and device themes
    - Added quick toggle menu items to main activity
    - Improved (Pro) notification behavior - en/disable now default tap option when active
    - Fixed kelvin and R/G/B choices not being saved between filter selections
    - Fixed "Upgrade to Pro" from notification sometimes not working
    - Fixed text wrapping on light calibration dialog

    2014.04.11 - 2.15
    - Fixed driver installation problem when using Superuser instead of SuperSU

    2014.04.11 - 2.10
    - Fixed crash on driver (un)install

    2014.04.10 - v2.05
    - Fixed a number of force closes

    2014.04.10 - v2.00
    - Initial public release
    39
    v3.72-TEST

    Another test version. Not everything I wanted to fix/add has been done, but my day is over :)

    This test version brings dozens of fixes to Oreo and Pie UI handling and background service operation. I think most issues should now be fixed, but please report back your findings (it's not a TEST release for nothing). Some additional performance driver fixes, some deadlocks fixed, completely untested support for those new KCAL paths. Better Magisk support too. Colorblind options have been removed as these are available from developer options on all modern devices. The greyscale/saturation filter can now also over-saturate instead of just under-saturate.

    In other words, a lot of small things that together took a lot of time to do. Unfortunately still no redesign of the notification options or adding quick settings. I had hoped to have time left today for that, but it'll have to wait some more.

    Compatibility vs Performance mode revisited

    Regarding my statements of Compatibility vs Performance mode of the previous test release ( https://xdaforums.com/showpost.php?p=78282459&postcount=2084 ), I've done some more research, and it seems to be impossible to devise a simple test that shows you which of the modes is faster, nor is it possible in a proper cross-device way for the app to detect.

    My earlier assumption that using Netflix to show DRM content would work was wrong. Android 7.0+ now has a path through the graphics pipeline that does allow GPU compositing with DRM content, if your device supports it, so it is no longer invisible.

    I've added a button that runs some tests and attempts to determine internal surfaceflinger state to see if GPU or HWC compositing is used. If the app can determine this, it will tell you which mode is advised. If not, I would personally advise to just use Compatibility mode on any mid-to-high-end device that shipped with Oreo or newer.


    EDIT: Download updated, initial download crashed on run. No idea why, just cleaned/rebuilt it and it works now :/
    34
    I'll look into the scheduling again when I have the time, hopefully before new year.

    I'm hammering on the Android version because in 8.0 and 9.0 they made a lot of changes to background processing handling. And CF.lumen is 99% a background service so this messes everything up quite thoroughly. So if you're having an issue, being on 7.0 makes a world of difference to being on 8.0 or 9.0.

    While great for battery life and overall performance, the changes they made run very deep. In upgrading CF.lumen's build, Android is now treating it as it were built for Oreo+ and enforces the full might of its oppression. It may well be another test release or two before I have the timing kinks worked out.

    The roots of CF.lumen are quite old, and though I put a lot of effort into having it use as few resources as possible, its design does not match well with Android's new methodology. Fixing these problems is not that big of an issue, but figuring out exactly where things go wrong is time consuming; especially with services that are based on the time of day, and Android using a lot of timeouts to decide what to do when. I can't simply make a change, run it, and consider it a good test - everything has to be closely examined and run (and monitored!) for a couple of days to know if the changes help or not. Behavior changes with screen on/off state and charging or not charging (or even connected) as well, so you can imagine how frustrating this is.

    Major overhauls like these are periodically necessary, but Google has thrown them at us devs every year or two. And having to redo half the innards of half the apps every year because Android is about as stable as a pink-haired teenager is one of the reasons I lost my passion for working on Android. And this has to be a labor of love, because it certainly doesn't pay the rent :)

    Keep close track of what does/doesn't work. When the screen should've changed but didn't, or did change but shouldn't have. Was the screen off for a long time? Was USB connected or not? Make sure you exclude CF.lumen from battery optimizations (though I hope it will run eventually without needing this) only in case of problems (and note if it is effective), and report back your findings including details of your setup. And please be patient while I try to fix it.