vkdt dev diary pt 8, windows port

Hello @hanatos

maybe it’s best if i write a dedicated i-tif input module

I was just comparing VKDT with other softwares (mostly RawTherapee, Affinity, Dxo Photolab)
With RawTherapee, for instance, you can open most formats including TIFF

Do you plan to code an inpaint feature as well, in the future?
I suppose it is not available yet…
Currently, GIMP allows to inpaint an image (through G’MIC filters); KRITA has a similar option.
On this computer (12th Gen Intel(R) Core™ i7-12700H (20 CPUs), ~2.7GHz) G’MIC is pretty fast (inpaint > multi-scale filter) even with big TIFF
Darktable and RawTherapee have “only” the clone tool option so far

I have read GEGL has a similar option but, judging from some comments on gitlab, at present, it sucks (no offence here) :slight_smile:

there’s the inpaint module best used with the inpaint.pst preset. it’s not very smart but works to remove some dust or even some cables against a smooth sky.

it’s not very smart

Probably it needs some AI :slight_smile:

Thanks!

Hello @hanatos

In case you are interested…
Just tried to export some RAW (NEF) to DNG with DXO Photolab 7.3
Every DNG does not work with vkdt: same display problem as TIFF (see previous report)
These same DNG work fine with RawTherapee - ART - Windows Photo - Affinity Photo (not tested on darktable)

Here one of them in case you want to download and test it on your side (dropbox link):

:rofl:

thanks for the dng. that was straight with the windows zip, i.e. the rawspeed code path? i can confirm it looks broken here.

Hello @hanatos

Basically every dng exported with Dxo photolab 7.3 is broken on vdkt.

With Dxo there is also the option to export your dng with some more tweaks (e.g. the lens corrections applied internally by Dxo) but I didn’t try this option since the standard mode was already not working … :slight_smile:

okay i think i can get it running through the rawler codepath:

but it’s not pretty because the data is not raw. need to think about how to make this work well.

I think there should be a separate saturation module in vkdt. Sometimes the amount of saturation that is possible with the colour module is not enough, plus it could be used in combination with masks. And it should also be possible to reduce saturation with such a module.
Creating a second instance of colour does not seem to work because it also changes the white balance.
Of course, the best thing would be if Aurélien ported his color balance rgb to vkdt.

hm maybe you can give an example of what you’re after?

for some usage of the colour module, let me demonstrate on this playraw image:

go to the graph editor (ctrl-n) and add the gamut.pst (ctrl-p, select gamut) and place a ciediag module instead of the hist module:

now we get some visualisation of the colour saturation. the point cloud in the upper right corner will move outwards as we saturate. let’s try:

ugh that wen’t straight through the roof. we can limit the outer bound of saturation to certain gamuts. spectral locus:

underwhelming. now that our eyes are burnt, let’s keep it this way. ctrl-click on the saturation slider and set it to 30:

note how the point cloud extends all the way to the spectral locus. we can limit to smaller ranges too (my screen will not display these colours, also note how i needed to disable filmcurve and llap since they don’t play well with negative rgb values):

… you get the idea. if that is not enough, or you want to selectively saturate only some hues, you can use the colour mapping radial basis function bulit into the colour module, to stretch, say, only the red shades away from white:


(compare to the input image all the way up)

i had to look this up here, let’s try:
apply the dogde-guided preset


swap in a grade module instead of the exposure module:

draw a sloppy brush stroke and mess with gain:

1 Like

_1280045.ORF (17.7 MB)

This work is licensed under CC BY-NC-SA 4.0

This is what I could achieve with vkdt:

_1280045.ORF.cfg (3.2 KB)

As you can see in the sidecar file, contrast and staturation are at the maximal value. But for my taste it’s not vivid enough.

This interpretation I created with darktable and it’s more what I would imagine:

Besides, sometimes for very artistic effects, somthing like pop art or so, extreme saturation and contrast are needed, or other times some parts of the photo need to be almost colorless.

Btw I will ask more questions about the grade module and I was wondering if it’s possible to do this with it but so far I had a quick look at it and I find it rather difficult to use…

And one more example in a different post.

Edit: first I forgot to add the cfg.

How do you get such a big brush in the draw module? Whenever I switch it on, the brush is tiny. Sometimes is is bigger but I don’t know how and why it gets bigger.

Edit: never mind, just figured it out.

Ah, ok, thanks, first I did not see this.

Still, I think a separate saturation module with a mask would be the easiest tool to use in certain situations:

This is what I was able to do with the ctrl+click on the saturation slider. However, the problem is now that the color of the sky is a tiny bit too intense. And it would be even more intense if the photo wasn’t converted to srgb. Same thing here, the sky is too intense compared to the city:

I tried to fix this with grade+mask but somehow I was not able to do it. As far as I see, the grade+mask module is there to paint with a certain color over a certain area. But that’s not what is needed here, is it?
I mean, in color balance rgb it’s just a click on the chroma/staturation highlights slider.

hm okay just had a look at the colour balance rgb module. i think it does something different entirely. in this case i’d route a graph like so to desaturate the sky:

to play with saturation in a 2nd instance of colour. no idea what you had with the white balancing earlier, but you need to set the module to operate with a rec2020 matrix then (i.e., bypass the colour matrix/clut). saturation set to 3 again:

2 Likes

Ah, thank you, that’s what I was asking, the rec2020 thing and the wiring… pretty complicated though…

Because that’s what happens if I leave the default settings in the 2nd colour module:

any idea how to make this easier to understand? currently requires knowledge that the internal pixel format in the pipeline is rec2020. so if you set colour to that it’ll be an identity transform. maybe should i label the combobox entry “bypass” instead?

1 Like

The problem is more that “image” is the default matrix setting for the second colour instance - how would anybody know that it is necessary to change the matrix setting? There are so many settings in that module… maybe create a preset with a mask if it’s possible to set the matrix to rec2020 in the preset?

hm preset is totally possible. the alternative is to overwrite the matrix in the image information that is passed along the graph. maybe this notion would be a good idea for embedding profiles in exported images too. in this case the module with default settings would pick up the identity matrix (because image in the combobox) and not do anything. probably is a matrix multiply less efficient (don’t think is measurable).

hello, last vkdt nightly build 20240215 lost some win dll
libfreetype-6.dll and so on

rawler release are ok
but crashed after few secondes

I got also a new error

[qvk] error VK_TIMEOUT executing vkWaitForFences(qvk.device, 1, &graph->command_fence[f], VK_TRUE, ((uint64_t)1)<<30)!

oh, apparently i just updated the dll collection script for the rawler image. should be building a new one now.

any more details here? what are you trying to load? can i try to reproduce somehow?

a new timeout also doesn’t sound overly promising. what’s your hardware? would you be affected by recent changes wrt non-float-atomic hardware?

I think one raw file inside my collection causes the crash. I have to find out which one.
new release ok now for dll

[pipe] base directory C:\Users\olivier\Downloads\vkdt-0.7.99-297-g66454e77-win64\vkdt
[pipe] home directory C:\Users\olivier/vkdt/config
[pipe] loaded 76 modules
[gui] glfwGetVersionString() : 3.3.9 Win32 WGL EGL OSMesa MinGW
[gui] monitor [0] Generic PnP Monitor at 0 0
[gui] monitor [1] Generic PnP Monitor at 137 -1050
[gui] monitor [2] Generic PnP Monitor at 1920 43
[gui] vk extension required by GLFW:
[gui]   VK_KHR_surface
[gui]   VK_KHR_win32_surface
[qvk] dev 0: vendorid 0x8086
[qvk] dev 0: Intel(R) Iris(R) Xe Graphics
[qvk] max number of allocations 4188197
[qvk] max image allocation size 16384 x 16384
[qvk] max uniform buffer range 134217724
[qvk] num queue families: 1
[qvk] picked device 0 without ray tracing and without float atomics and without coopmat support
[qvk] available surface formats:
[qvk] B8G8R8A8_UNORM
[qvk] B8G8R8A8_SRGB
[qvk] R8G8B8A8_UNORM
[qvk] R8G8B8A8_SRGB
[qvk] colour space: 0
[gui] no joysticks found
[gui] you have more than 2 monitors attached! only the first two will be colour managed!
[gui] no display profile file display.Generic PnP Monitor, using sRGB!
[gui] no display profile file display.Generic PnP Monitor, using sRGB!
[qvk] available surface formats:
[qvk] B8G8R8A8_UNORM
[qvk] B8G8R8A8_SRGB
[qvk] R8G8B8A8_UNORM
[qvk] R8G8B8A8_SRGB
[qvk] colour space: 0
[db] allocating 1024.0 MB for thumbnails
[mem] images : peak rss 0.00390625 MB vmsize 0.00390625 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 0.000244141 MB vmsize 0.000244141 MB
[perf] time to load images 0.000s
final handle C:\Users\olivier\Downloads\vkdt-0.7.99-297-g66454e77-win64\vkdt\default.i-raw
final handle C:\Users\olivier\Downloads\vkdt-0.7.99-297-g66454e77-win64\vkdt\default.i-raw
[mem] images : peak rss 0.0820313 MB vmsize 0.0820313 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 0.100708 MB vmsize 0.100708 MB
[mem] images : peak rss 0.0820313 MB vmsize 0.0820313 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 0.100708 MB vmsize 0.100708 MB
[mem] images : peak rss 0.0820313 MB vmsize 0.0820313 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 0.100708 MB vmsize 0.100708 MB
[mem] images : peak rss 0.0820313 MB vmsize 0.0820313 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 0.100708 MB vmsize 0.100708 MB
[mem] images : peak rss 305.7 MB vmsize 341.625 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 47.7145 MB vmsize 47.7145 MB
[mem] images : peak rss 0.0820313 MB vmsize 0.0820313 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 0.100708 MB vmsize 0.100708 MB
[mem] images : peak rss 318.626 MB vmsize 338.328 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 45.0073 MB vmsize 45.0073 MB
[mem] images : peak rss 0.0820313 MB vmsize 0.0820313 MB
[mem] buffers: peak rss 0 MB vmsize 0 MB
[mem] staging: peak rss 0.100708 MB vmsize 0.100708 MB
[qvk] available surface formats:
[qvk] B8G8R8A8_UNORM
[qvk] B8G8R8A8_SRGB
[qvk] R8G8B8A8_UNORM
[qvk] R8G8B8A8_SRGB
[qvk] colour space: 0
f