ledoge / dwm_lut Goto Github PK
View Code? Open in Web Editor NEWApply 3D LUTs to the Windows desktop for system-wide color correction/calibration
License: GNU General Public License v3.0
Apply 3D LUTs to the Windows desktop for system-wide color correction/calibration
License: GNU General Public License v3.0
Whenever I enable dwm lut g sync stops working.
Read all the information from the DisplayCAL forum and I still don't understand the recommendation to use the Windows built in sRGB profile as the display profile.
dwm_lut applies the lut to everything displayed on screen but color managed apps would still benefit from an sRGB profile created for the display with DisplayCAL no?
My reasoning is a program needs to know some display characteristics to render stuff correctly otherwise they assume some standard and a sort of reference display and squeeze all pixels displayed into that standard. In most cases they assume a 1:1000 contrast a gamma 2.2 or sRGB tone curve ..., obviously a display is from factory most of the time different than this assumed common denominator standard.
So wouldn't it make sense to create a display profile aka. sRGB in DisplayCAL use it as default ICC profile generate 3DLUT from it with a preferred gamma of 2.2 as an example and apply the 3DLUT with dwm_lut?
My only concern with this approach is vcgt that might be applied 2x (Display CAL profile loader + dwm_lut), not sure if it would be the case. I could set tone curve as measured in DisplayCAL when creating the profile to avoid this.
What are your thoughts on this topic?
My aim is to give apps info about the display like contrast white point and so on via ICC so they don't assume stuff while globally applying a 3dlut on top.
It would just be something like a pixel value going from:
0.2343 -> 0.2143 (what the app thinks it should be in sRGB --> 0.2142 (what the actual lut applied would show at the end)
My concern is app doing this
In file 0.2343 -> 0.2452 (some assumptions in the app without profile) -> 0.2243 final value based on wrong value from the app when dwm_lut is applied.
Hope you get the example and looking forward to your answer.
Hi, I'm pretty new to color calibration and I got a (stupid) question. When I use your application, so I have to remove the current icc profile? Not using displaycal(only during calibration to get the 3dlut file). Thank you!
I was previously using this with an RTX 3070ti with no issues, I upgraded to an RX7900xt and now when I launch the game my frames are almost capped at 120 or something. As soon as I turn it off my frames shoot back up to 200fps. Is this not compatible with AMD or is there a weird setting I am missing somewhere?
PC Build - i9-13900k
32gb ddr4 @3600
When changing ports used for monitors after having already used DWM_LUT, it fails to start. The only way to fix it is by removing all config files.
I tried to apply the AIW_Vondel1 I downloaded, but the DwmLutGUI app kept showing: “failed to load or initialize dll. This probably means that a lut file is malformed or that dwm“
i suddenly saw that my temperature on my cpu was over 10 degrees hotter then it normal at idle then i ran malware bytes and it discovered a trojan horse with a crypto miner... DO NOT DOWNLOAD THIS!
every version of 3,9 is working but it is making my ram memory go crazy. they are spiking to 99% and causing lag and stuttering ingame, I hope there is a way to fix it.
This may not be an issue but I wanted to ask if it would be possible to mask dwm_lut with a program or manually?
Do you plan to develop support for GNU/Linux? Thank you
I can't find a symbol for IOverlaySwapChain anywhere, and the constructor looks all mangled up.
Hello there !
I would like to know if your software works with Windows Vista.
Hello there, general ledoge, thanks again for your awesome work :) however I can't use the 3.2 version, the antivirus deletes .exe immediately with a message "Trojan:Win32/Wacatac.B!ml", I've used every single version and it's the only one that behaves like that, sadly
Hello,
I found this great application thanks to the good people at the DisplayCAL forum. Here is the link to the background thread that lead to creation of this request here: https://hub.displaycal.net/forums/topic/8-bit-vs-10-bit-monitor-whats-the-practical-difference-for-color/#post-31082
My use case:
I have a wide color gamut gaming monitor with 160% sRGB and 96% DCI-P3. Running both photo apps and other non-color managed apps and games on Windows. Issue: Oversaturated colors in non-color managed apps, games and Windows desktop.
Your application appears to solve the issue very nicely. The question is now about more automation for creation of the required profiles, LUTs, etc and automation of enabling and switching between the active profiles.
Vincent at DisplayCAL forum suggested creation of a synth profile, creating a LUT based on it and using it in your app, in combination with default (I assume sRGB) profile in OS. This should be working great for color managed apps.
Another usage is to create a calibration DisplayCAL profile for the monitor, create a LUT based on it and use it in your app, which works well for Windows desktop, games and other non-color managed apps, but desaturates color managed apps too much.
Hence the need of switching both active OS profile and the active LUT in your app - 2 pairs of profiles and LUTs at least.
And therefore the request for more automation, e.g. integration with the tray app of DisplayCAL, activation of combinations of profiles and LUTs, creation of the synth profile from the calibrated profile. The sky is the limit :)
At the simples level, can I ask for documentation on how to configure activating the LUT on Windows startup in the latest GUI version? I assume it is the latest and greatest version to be used.
I hope I explained the request in an clear way (I am new to the topic and still trying to learn to get enough understanding).
It appears dwm_lut is no longer working on Windows 11 22H1 build 22000.706. I'm wondering if Microsoft rolled some of the changes that break 22H2 back into 22H1 22000.706.
On Windows 11. Says active but no change in color output is seen. Oddly with a generic Microsoft driver active did work as expected. According to GPU-Z the generic driver supports OpenGL 2.1, the Intel driver supports OpenGL 3.1 with many report on the web talking about wonky OpenGL support.
Any testing I can do? Let me know.
I hope GitHub issues are the right place for feature requests, if not, feel free to close this.
I stumbled upon this repo by accident when I was calibrating my friend's brand new OLED TV last weekend and I am absolutely loving it so far. I can't believe I didn't find it sooner, because I posted around 5 years ago on ReShade's forum trying to get ReShade to do what you are doing by hooking the DWM and have been desperate to find something since then.
Which leads me right into this request. Web content, specifically YouTube, is often rife with banding and the video rendering pipelines of desktop browsers like Chrome and Firefox are optimised for performance and battery life and so do all levels conversion in 8 bit, making the banding even worse.
I already noticed a reduction in banding when using dwm_lut over the standard GPU gamma table, but the inclusion of a debanding shader would make it even better.
ReShade already includes an open source debanding effect, but it is written in ReShade's own effect language which according to its author is based on HLSL. I hope porting it to actual HLSL is easy.
https://github.com/crosire/reshade-shaders/blob/slim/Shaders/Deband.fx
Thanks!
Firstly, thank you for the work on this! I stumbled upon this randomly when I was searching for applying 3D LUT in Windows.
I know you have a long thread in DisplayCAL forum. I wonder if it's a good idea to use dwm_lut to replace/enhance DisplayCAL's profile loader? The motivation for this integration is mainly so that when user does a calibration, DisplayCAL will know to disable the LUT temporarily.
If integration is not possible, is it possible for dwm_lut to detect the start of DisplayCAL's calibration session and disable itself, provided DwmLutGUI is running in background?
Is there any way to decrease the latency on this piece of software, it doubles when opened, from 5.5 to 13-15.
Thanks
It used to work on my PC nothing changed i dont think and ive tried deleting updates using both releases and every release each dev made. It will start then show the little icon in the bottom right (i cant interact with it) then it will disappear. No error on crash and im windows 10.
My laptop, even when running off of a power brick, cuts all program frame rates in half when this program applies a LUT. I am running a dedicated graphics card through an Intel graphics adapter. Is there a fix for this? This is not the behavior that I experience on my computer normally, even on battery, and it doesn't happen at all on my desktop computer.
.
I've noticed that dwm_lut ties to the DisplayPort Connector instead of each unique monitor which is causing problems for me since I dock my laptop at multiple docks. This means that I need to go in and manually change the SDR LUT every time I dock my computer at a different desk (where I've already calibrated that monitor).
Would it be possible to change dwm_lut so that it can uniquely identify each display by serial number or something like that?
I assume this would then also fix another problem I've experienced which is that the LUT doesn't load if I switch video ports on my computer. For example, if I'm using DisplayPort #1 and I re-plug the monitor into DisplayPort #2 then it doesn't load the LUT. Also, I then load the LUT to DisplayPort #2 then it won't load again if I switch back to DisplayPort #1. I assume this is also related to dwm_lut being tied to the "Connector".
Thanks!
I'm surprised to find out that contrary to the description, the lut does work in exclusive fullscreen apps.
At the same time, it breaks VRR. I'm on Nvidia with g-sync compatible monitor. Using monitor's OSD I see that when dwm_lut is active, refresh rate locks to native regardless of FPS cap and also when GPU is overloaded and FPS drops naturally, causing visible stutter. When disabled, refresh rate follows FPS cap as expected without stutter. Confirmed with 3 games. Same result with full screen optimizations disabled and enabled, and with windowed g-sync enabled or disabled, and it's not caused by the GUI.
I also notice that it significantly increases GPU load in game (50% to 80% in one, and 70% to 85% in another game, capped FPS), probably due to the considerable VRAM bandwidth usage mentioned in the other issue.
Hi, I would like to thank you for the tool and suggest an UI change:
maybe it is possible to make UI look more like a DisplayCal Loader - where you select a monitor and below you have a selectable list of LUT files for this monitor.
For example, in my case I have 3 profiles - for Full Gamut L75, Full Gamut L100 and sRGB emulation L100 - currenly it is not very convenient to select the profile - you have to navigate to a folder every time (multiple folders if profiles are in different folders).
Anyone else struggling with this? I have downloaded multiple different loaders and the game will always uninject the filters. I am curious if anyone else is running into this issue and if they are, how they fixed it
@ledoge First of all I want to thank you for your work and for this product. It is trully a great tool and it saved me the trouble and money because I was set on buying a new monitor before finding this tool!
Now, the problem I encountered. My laptop has 2 GPU's. An integrated one and a dedicated one. My laptop is always in hybrid mode because I usually use my laptop on different places and I need the battery life when I'm on the go.
If the laptop is in hybrid mode, when I use both monitors at the same time (in extended mode), both monitors are assigned the same number (1) in DWM_LUT. This causes the program to assign the lut but a few seconds later the screen goes black and then the program goes to the state of "inactive".
If I disable hybrid mode (dedicated gpu only), the program assigns different numbers to the displays, Laptop display number one and external display number 2, and the luts are applied.
Maybe a simple fix would be to not allow the program to assign the same number to different monitors. If a number is already assigned, then the program assigns a different number.
I must be doing something wrong here....
So, I have a benq SW270C.
So far so good and I've been doing this ever since I got this monitor. But then...
But when I run DisplayCAL's Verification step again, the report shows the colors are completely wrong. Here's the summary.
Criteria | Nominal | Recommended | # | Actual | Result |
---|---|---|---|---|---|
Measured vs. assumed target whitepoint ΔE*00 | <= 2 | <= 1 | 4.61 | NOT OK ✖ | |
Measured vs. display profile whitepoint ΔE*00 | <= 1 | 4.95 | |||
Average ΔE*00 | <= 1.5 | <= 1 | 5.39 | NOT OK ✖ | |
Maximum ΔE*00 | <= 4 | <= 3 | 322 | 11 | NOT OK ✖ |
What's happening here? Why is DisplayCAL's verification step failing?
Did I miss something fundamental in my workflow above?
@ledoge Have you considered creating an installer/uninstaller with an option in dwm_lut to automatically start with Windows and then also automatically restart it when the power state has changed?
I've accomplished the automatic start and restart on power state change here with a scheduled task: https://hub.displaycal.net/forums/topic/i-made-a-tool-for-applying-3d-luts-to-the-windows-desktop/page/10/#post-34665
I think this would make the tool even more accessible in a professional environment.
when ever i run it and click apply it says "failed to load or initialize DLL. This probably means that a LUT file is malformed or that DWM got updated." i have uninstalled it and reinstalled it. i am not good at stuff like this and I'm not sure what to do if anyone knows how to help please lmk. thank u
When playing DRM protected content, HDCP activates and causes one or two black flashes of the screen. The LUT is unloaded. The application status becomes "Inactive". And the video begins playing.
As a reminder, High-bandwidth Digital Content Protection (HDCP) is used for DRM on video streaming services.
Instructions:
dwm_lut
and press ApplyI don't know what you could do about this. Maybe reactivate once HDCP is no longer active?
OS: Win10 x64 21h2
Trying to make a video tutorial on this but found the weirdest quirk.
Using OBS still shows you the original color when capturing.
Hi there,
I'm wondering if PNG LUTs (like those used for ReShade) can be supported. I haven't been able to find a tool that can convert my PNG LUTs into .CUBE.
Is this possible ive heard you can use OBS and have it pickup the filter am i wrong?
quand je lance le logiciel j'ai une error:not running as system
Hi,
Thanks for making this program! When I apply a 3dlut, Adaptive Sync is disabled. I do not game, but the windows Movies & TV UWP video player uses Adaptive Sync to match the display + video framerates to eliminate judder. Is this something that can be fixed?
Hi, first of all I would like to greatly thank ledoge for making this working system-wide lut loader (it is better than Dell PremierColor which causes posterization and banding).
One issue I noticed is the higher power consumption perhaps due to dithering? In YouTube I am seeing 15W power consumption vs 3W without dwm_lut. I am using a 3D lut for sRGB->Display P3 conversion since I have a P3 wide gamut monitor and Windows apps are all oversaturated by default.
If I use Intel Graphics Command Center to turn down saturation (similar effect to applying a desaturate lut), power consumption is unchanged. There is no color banding either. However this is worse than using an sRGB->Display P3 lut as it causes inaccurate blue colors (P3 covers a greater range of red and green but not much increase in blue, so a generic desaturate filter doesn't match up with sRGB perfectly)
Thus, I am wondering how Intel Graphics Command Center is able to do gamut mapping/color mapping without an increase in power consumption, and if it is possible to have dwm_lut use the same method?
hey im using an icm profile in novideo_srgb just fine. scrolling through the hue in photoshop color picker results in no obvious banding. using the same profile converted to a cube file used in dwm_lut gives heavy banding instead . i guess its not the fault of the program but rather a conversion issue.
I used DisplayCAL-3DLUT-maker.exe to convert back but maybe you know a better way , would be nice if we could just load the icm like novideo_srgb does
So I have one PC connecting to monitor A and B through DP ports. However, monitor A also connects to the same PC over an HDMI port with a KVM switch in between. Monitor A, therefore, is identified as two displays in the system, but as they are in duplicate mode, still shows same image.
Here comes the problem. When I have monitor A connects only through HDMI or DP, the 3dlut works great. But if I connect it through HDMI and DP at the same time, the color is washed out.
The color of monitor B is not affected though.
Im getting "Failed to load or initialize DLL. This probably means that a LUT file is malformed or that DWM got updated." on Windows 11 Version 22H2 (OS Build 22581.100)
Hi ledoge,
I'm getting the following error when I hit the Apply
button, after selecting a LUT to apply.
Any ideas on what might be causing it?
For context, the very first time I ran the tool it worked fine, then after trying to load a different LUT file it started throwing this error and I wasn't able to get it working again.
My OS details:
Edition Windows 11 Home
Version 21H2
Installed on 23/08/2022
OS build 22000.856
Experience Windows Feature Experience Pack 1000.22000.856.0
A scenario where this is useful: sRGB EOTF vs power gamma 2 content, where you can use the key-bind for trial and error indemnification or when you already know you need sRGB.
Video games, and movies, already get all the love they need on IPS from Gamma 2.2 but for proper internet browsing and experience with some images, it's necessary to often switch back to the sRGB .cube
Hello, nice tool!
I have this error in compiling dll dwm_lut.c:4:10: fatal error: MinHook.h: No such file or directory
I installed msys2 and this packages: mingw-w64-x86_64-gcc and mingw-w64-x86_64-MinHook.
In C:\msys64\mingw64 i see MinHook.h in include.
I try to compile from the UCRT64 msys console
What could be the problem?
Thanks!
thanks
Any hope for a mac os version?
Applying the LUT while the Netflix app is running causes the screen to become pixelated and unusable. Disabling the LUT immediately resolves the issue. I also tried with the native Hulu and Amazon Prime Video apps and it did not reproduce. Not a big deal to turn it off, though.
Example of the issue
https://photos.app.goo.gl/r4ta6sHf8H8NBUUZ8
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.