My improved LUT, "finally some good f-ing gamma" edition
I improved the current "gold standard" LUT and fixed its most glaring issues:
- Inconsistent brightness variation between levels. They should now be pretty evenly spread, except the lowest 4 vs the rest.
- Ugly and inconsistent white balance shifts between levels. It should now stay at a neutral gray at every brightness level.
- Very evident black crush and wrong gamma at the lower 4 levels.
Please note i developed this LUT on my two OLEDs. If any LCD user could test them and report any feedback I'd be grateful!
The new table is attached to this issue
EDIT: see the following comment
EDIT: I managed to further improve my LUT:
- Even smoother brightness level changes
- Even more consistent white balance
- Further reduction in black crush at the lowest levels (pretty much fixed, further black crush reduction is impossible i think, since the display is almost off at that low brightess.. blacks are gonna crush)
Once again, my LUT was developed on two OLED models (with two VERY different panel behaviours, i may add). If you own an LCD please test it and report back any issues
The diff:
--- /Users/paul/Downloads/vitabright-2.0/vitabright_lut.txt 2022-03-18 15:14:30
+++ /Users/paul/Downloads/vitabright-2.0/vitabright_lut.new.txt 2025-05-03 13:19:30
@@ -1,24 +1,17 @@
-# This is a modified gamma table, more information here: https://github.com/devnoname120/vitabright/wiki/What-is-the-format-of-the-OLED-gamma-table%3F
-# Four Extra Bright Custom Values, Including Maximum Capable Brightness Of The Screen
-D8 DA FF BA C2 B2 BF C8 B8 E1 E5 DE D4 CE D3 FA ED E6 2F 00 2F
-C5 C6 E9 C5 CD BC BE C7 BA DF E3 D7 D4 CE D3 FA ED E6 2F 00 2F
-B8 B8 DA C7 D0 BF BF C7 B9 E1 E5 DB D4 CE D3 FA ED E6 2F 00 2F
-AA AA C9 CC D5 C7 C0 C8 B9 E1 E3 DB D4 CE D3 FA ED E6 2F 00 2F
-# The Bellow Five Values Were Taken From The Default Slider, Including The Default Brightest, And The Default Dimmest
-9F 9F BE CF D7 C9 C2 CB BB E1 E3 DE D6 D0 D3 FA ED E6 2F 00 2F
-# Games that set the CPU freq to 444 Mhz will only make the below values usable
-# The Bellow Value Is The Same Default Maximum Brightest Available On 444 Mhz Games
-91 91 AC D3 DA CE C5 CD BE E3 E3 E0 D7 CA D3 FA ED E6 2F 00 2F
-89 89 A2 D5 DB CF C8 CF C2 E3 E3 E1 D9 C7 D3 FA ED E6 2F 00 2F
-82 81 99 D6 DD D1 CA CF C3 E4 E3 E3 DA C2 D3 FA ED E6 2F 00 2F
-79 78 8D D9 DF D5 CB CF C5 E5 E0 E4 DC B8 D4 FA ED E6 2F 00 2F
-# Seven Extra Dim Custom Values, Including Dimmest Before Screen Loses Too Much Contrast & Colour
-72 71 84 E3 DF E0 DB D1 D7 E2 CA DE E6 57 D0 DD 00 00 00 00 00
-68 67 79 E4 DF E1 DE D1 DC E3 BC DC E7 00 4E 98 00 00 00 00 00
-5F 5E 6E E7 E0 E6 E1 D0 DE E1 AD E0 C4 00 00 00 00 00 00 00 00
-57 55 66 E9 E1 E8 E7 D5 E4 E5 9F DE C6 00 00 00 00 00 00 00 00
-51 4E 5F EB E4 EC EA D4 E7 E9 8B E1 BF 00 00 00 00 00 00 00 00
-4D 49 5B EB E1 EB EA CF E9 E6 22 D9 B7 00 00 00 00 00 00 00 00
-48 43 56 F0 E4 EE EA CC EC DF 00 E2 B7 00 00 00 00 00 00 00 00
-# Not On Slider
-48 43 56 F0 E4 EE EA CC EC DF 00 E2 B7 00 00 00 00 00 00 00 00
+D2 CF FF B9 C0 B2 BE C8 B8 E4 E8 E1 D7 D1 D6 FF F2 EB 36 0C 39
+C0 BF EB C5 CB B8 BC C6 B9 E4 E4 DA D9 D1 D6 F9 EF E9 36 0D 3A
+B5 B4 DD C8 CF BF C0 C7 B9 E5 E8 DE D8 D1 D6 FE F0 E9 37 0C 39
+A8 A6 CC CD D5 C7 C1 C8 B9 E5 E6 DE D8 D1 D6 FE F0 E9 37 0C 39
+9D 9B C0 D0 D7 C9 C3 CB BB E4 E5 E0 DA D2 D5 FE EF E8 36 0B 38
+8E 8D AE D3 D9 CD C6 CD BE E6 E5 E1 DB CC D4 FE EF E7 35 0B 38
+86 85 A4 D6 DB CF C8 CF C2 E5 E5 E2 DB C9 D4 FC EF E7 35 0B 38
+7E 7D 9B D5 DC D1 CB CF C3 E6 E5 E5 DC C4 D5 FB EE E5 35 0B 35
+75 74 92 DA E0 D3 CD CF C4 E3 E3 E6 DC C0 D7 F5 ED E6 35 0C 35
+6B 6A 86 D5 DA D1 CF D2 C8 E7 E2 E2 DC B5 D0 FA EA E0 34 0A 33
+64 63 80 CC D3 C9 CC CC C4 EB DD D9 DC BA CE FA E5 DE 35 09 30
+5E 5D 77 D0 D5 CA C7 C4 C0 ED DB DD E0 BA CA F7 E7 E2 35 0B 36
+53 53 6A CA CB C6 B5 A1 A9 DE C5 CE C2 A4 C1 5C 3F 3E 4B 2D 4C
+4F 4F 66 CC C3 C6 B6 AB AD D5 C1 C7 B7 8D AE 5A 54 42 4A 2D 49
+49 46 60 C6 B4 B7 D3 99 D5 D1 95 C1 A7 6E 8B 4A 3C 2B 39 35 2D
+41 3E 55 D4 B6 CD D8 97 BA C3 AB B8 C6 7F 82 44 43 40 28 2D 24
+48 43 56 F0 E4 EC EA CC EA DF 00 E1 B7 00 00 00 00 00 00 00 00
Please note i developed this LUT on my two OLEDs.
Could you share the OLED screen models you built your LUT for? iirc it should show up in the logs that should appear in ur0:data/vitabtight_log.txt
If the logs don't show up then try this old beta version with logging enabled: https://github.com/devnoname120/vitabright/issues/13#issuecomment-1069218847
It's fine if it doesn't work for applying the LUT because it doesn't support all OLED models but it will display in the logs the model type, which is what I'm looking for.
If any LCD user could test them and report any feedback I'd be grateful!
LCD doesn't use LUT tables because it just changes the backlight intensity. OLED needs a LUT because there is no backlight it's the pixels directly that bright and colors have have a non-linear luminance responses with regard to the applied voltage.
Each brightness line is 21 values: 7 luminance levels for each of the 3 colors and intermediate luminance levels are linearly interpolated.
They both display supplierId 0x0, elective data 0x806 and starting address 0x1E00, so i guess they are the same manufacturer and they differ just because one OLED decayed more than the other
@red9350 Cool then it's the same model as the current LUT is based on. Let's get more people to test your changes and confirm and then I can merge it :)
cc @buzeak
In regards to the LCD i don't quite get it: do you mean that the LUT is not used to shift the white balance around, and it's just interpreted as "backlight" brightness? So they don't jump around in white temperature and they instead just rise or lower the brightness? I'm asking because i got asked on reddit if it's possible to use a custom LUT to combat a yellowing LCD and bring it back to neutral white
@red9350 Yes exactly. With the LCD models the OS only has control of PWM of the backlight rather than its color or temperature. If you turn off the backlight, the pixels stay all on and unaffected but you will barely see them (just like the screen of a GameBoy Color).
For LCD the OS just sends a command to the screen with a value between 0 and 255, indicating how bright the backlight should be: https://github.com/devnoname120/vitabright/blob/dd2d75c8705a43b9976a3855b79d6a18d1f9ce7b/lcd/hooks.c#L25-L26
I see, thanks for the info! In any case please don't merge my edits yet, as i'm still trying to further tweak the table
Don't worry i'm not dead, i was on a business trip! I came back 2 days ago and the new update is coming along nicely, but i have since discovered that one of the images in the LUT editor (this one) has tinted greys instead of neutral ones (the thin gradient in the bottom half is tinted blue, while the large squares underneath it are tinted red!). This has slowed me down significantly as i had to pretty much start from scratch, but in the mean time i found another image that would be very useful if integrated in the lut editor: this one
I have an oled vita that I can try the table out on. I dont really enjoy the stock brightness or colors. I will post anything here if need be.
Hi! I'm finally attaching the V3 here. I think i'm pretty much done with this experiment, as i'm ok with how it came out! If you guys find some glaring issue please report back!
Hey, I just downloaded and loaded up the config on my vita. Ill play some games and let you know how things go.
From first impressions, whites are a little blue. Not bad though. I prefer the blue tint over the orange tint my old file had. Low brightness is noticeably blue though. I know thats probably not something that can be changed much.
Anyway ill shut up now and go play some stuff. So far looking good.
Low brightness tint shift is something i really fought with, on my models it tints green so it's something that probably changes from unit to unit
@DatGuyBarney try this custom LUT and see if it fixes your blue tint issue at lower brightness:
Note that on one of my vitas it makes everything very red at those lower levels, almost like a F.lux filter, so i wouldn't consider it as a release candidate
Hi! I'm finally attaching the V3 here. I think i'm pretty much done with this experiment, as i'm ok with how it came out! If you guys find some glaring issue please report back!
In my case, version 3 seems better than version 2, as I see no blue tones in the white colors. I am checking both versions when my device is around half level brightness.
I am checking both versions when my device is around half level brightness.
Try looking for color tones from the brightness slider panel, since it has a useful gray gradient as a background and it's easy to see if there are tint issues overall, or only in certain parts of the gradient. It's also easily controlled by the DPad to change from step to step
So here is the V4 (and hopefully last version). In this version i improved slightly the loss of contrast at the top 4 levels of brightness. vitabright_lutV4.zip
Now, this LUT may display some blue tinting at the lower levels, like @DatGuyBarney reported back, and in that case you should instead use this edited one: vitabright_lutV4_AntiBlueLow.zip
If instead you get (like on one of my models) a yellow shift at the very max brightness level, try this other edited one: vitabright_lutV4_AntiYellowMax.zip
Other than fixing those specific issues, the LUTs are equal, and if in doubt one should choose the "normal" V4
@red9350,
I agree, version 4 is almost ideal. Thanks!
My OLED model is other (offset 0x1E00).
Version 4 is looking good so far. I'll report back if I have any issues! Thanks dude!
Hello, came straight from the reddit post- well I've tried all of the V4 ones, and compared to one I had before (found somewhere on reddit i think) they all have an insanely blue tint... It isn't as natural as it was stock. The highest level ones are fine though (mostly)
Y'all should all share your OLED model when you report because if you have different models it doesn't make sense to try to find a middle ground, there will always be someone unhappy.
There are three groups of OLED models:
-
4(offset:0x1AB8) -
5(offset:0x1C20) - other (offset:
0x1E00)
Each of these has a different and distinct LUT. The original one from vitabright is based on “other”, because it dates from before support for the 4 and 5 OLED models was added.
Vitabright will support per-model lookup tables some day.
That would be a fantastic feature, but more than that i'd love a little program to quickly swap between different LUTs, a kind of "AutoPlugin2" that presents a list of LUTs and their description, and with one click it'll download and apply one
About what @DionKill reported: i must admit the LUT did become colder over time from the V2 to the latest: my eyes became used to the temperature and i didn't notice i strayed further and further from the proper white balance i once had. I'm adjusting that for a final release but it'll take a while, since pretty much all levels are slightly colder at different brightnesses, and tweaking a spot also affects other spots. It's like pulling a blanket up: you'll leave your feet uncovered
@red9350 too much work for me and I'd rather have a good middle ground that works for a given vita model rather than multiple LUTs. Someone could create such as selector though, it can be done in Lua just renaming the files.
Here are the original LUTs:
https://github.com/devnoname120/vitabright/blob/6dadb5c9ab8f3bb55279e8abee8218b6948d2764/oled/luts/orig/vitabright_lut_orig.txt (other)
https://github.com/devnoname120/vitabright/blob/6dadb5c9ab8f3bb55279e8abee8218b6948d2764/oled/luts/orig/vitabright_lut_4_orig.txt (model 4)
https://github.com/devnoname120/vitabright/blob/6dadb5c9ab8f3bb55279e8abee8218b6948d2764/oled/luts/orig/vitabright_lut_5_orig.txt (model 5)
I didn't add support in the code though (currently it always reads vitabright_lut.txt no matter your model).
@devnoname120, Thanks for the information. Now I understand why red9350's lut files fit my OLED screen quite well as both of us have the same OLED model (other).
Are there any other differences between the oled models? I can't seem to find any info on this at all
@red9350 I'm not sure what the differences are, apart the fact that the gamma table used by the PS Vita is different depending on the model variant.
The original LUT of the base OLED model (= other) is exactly the same one as can be found in the datasheet of AMS495QA04 (see the wiki). I'm not sure if variants (i.e. 4 and 5) of this OLED model are also branded AMS495QA04 or if they come by other names.
OK I made some research and here is what I found about the OLED models:
supplier_elective_data value:
-
0x0804: ? -
0x0805: Samsung AMS495QA01 -
0x0806: Samsung AMS495QA04
I cannot find a single difference between the specification of these two models on the internet, they have the same controllers, interfaces, etc. So I suppose it's down to differences in the organic matrix itself although I couldn't find any info about that.
I documented a bit more stuff on the Vita Dev Wiki:
- https://wiki.henkaku.xyz/vita/OLED
- https://wiki.henkaku.xyz/vita/SceOled
Thanks @devnoname120 for continuing to help, researching the different screen models, and for everyone sharing their tables. As someone suggested here, it would be great to have an app that lets you swap between tables to find the most suitable for each Vita. I think an new Vitabright app would be a good entry for the current ReiHEN homebrew contest: https://itch.io/jam/reihen-ps-vita-homebrew-contest