vkdt devel diary

Would this be a good time to think about UI?

There have been some attempts to “fix the darktable UI”, for example #8453, and lots of comments like:

  • It would probably take several years, as this is a complete rewrite of the GUI #8497
  • “separat[ing] the view from the controller(s)” is work that would need to be done first and that’s a huge undertaking, reaching deep everywhere in the existing codebase, needing to clean up or work around all the existing work-arounds so that they don’t clash. Even designing the plan for that would take months #8485

So maybe the clean vkdt would be a good chance to rethink UI

I like the ui of vkdt :wink:

nobody stops you from thinking :slight_smile: and sure, new code with fewer lines means large changes are easier.

i did make an effort to keep every last bit of gui code out of the processing and modules. the description of the module ui is just a text file (here is a more complex example). the command line interface vkdt-cli completely ignores all that and thus doesn’t need to link/compile in any ui code at all.

to make this super painful for the programmer to accidentally mix the two, the core is in c and the gui in c++ (kinda unfortunately, but that’s what imgui is).

gui code doing pretty much anything is factored out in gui/api.h[h] and called from mouse clicks, hotkeys, and gamepad input.

so: i’m a big fan of modularity and separating concerns in code.

originally i thought i’d replace the std imgui sliders with some custom ones, same as the ones in dt. but.

in all honesty i stopped caring about the looks of the user interface. especially the discussions around it are tedious, time consuming and often lead nowhere because designers usually don’t code their proposals (like sometimes security people use fuzzing tools but can’t fix anything and researchers write papers which do not work in practice™).

also, you don’t write the user interface and it’s done (like some comments propose a project for a man month or so). if you look at dt screenshots over the years you’ll see many things evolve over time and style/guidelines change and focus shift. so keeping a “design” consistent requires more a core team member with a vision than an outsider bashing something together once in short time.

as long as it doesn’t get in my way i’m fine with many things. i think enabling workflow is much more important. so to get back to the sliders in the example above… they work just fine as they are! you can dial in numbers by ctrl-click (or triangle on the gamepad), you can step them with the mouse or with gamepad+fast/slow modifiers, and otherwise you don’t have to marry them.

that said, yes i think i’m happy with the core ability of the graph/pipeline now and i do want to focus more on streamlining the ui for workflows.

today’s new feature: temporary dspy output channels.

whenever a module has an output channel named dspy, it will be connected to a temporary display which is drawn just under the expander in the module ui. this can be used to display some visualisation to aid the user. for instance, the filmcurv curve module uses this to display the actual curve:

and the zones module shows the quantised/filtered regions:


from which you can see there is two zones for the clouds followed by three for the sky. you can use this as usual to brighten the clouds:

and to darken the sky:

this will work transparently with all modules with such a connector (no module code involved)

2 Likes

thanks for this summary jo. I wanted to test vkdt but I’m unable to install the .deb package:

(base) 16:01:36 aadm@psion:~/Downloads$ sudo apt install ./vkdt_0_git1638796936.84c87e5-0_amd64.deb 
[sudo] password for aadm: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'vkdt' instead of './vkdt_0_git1638796936.84c87e5-0_amd64.deb'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 vkdt : Depends: libjpeg62-turbo (>= 1.3.1) but it is not installable
E: Unable to correct problems, you have held broken packages.

I’m on Ubuntu 21.04.

Perhaps you have an easy solution for this?

the 21.04 binary might really old as the build was broken for a while. a fresh build is starting now. also it is often easier to just add the OBS repository instead of downloading the deb file manually.

1 Like

hi alessandro,

oh, unfortunately the debian package seems to only build for vanilla debian, not ubuntu, because clang is different: Build Log for Package vkdt (Project graphics:darktable:master) - openSUSE Build Service

maybe the solution is to build with gcc instead.

jpeg turbo is at version 2.1.1 on my system, requiring 1.3.1 seems to be not asking a lot. i suspect that the ubuntu vs. debian issue will likely introduce a random set of issues.

@darix… would it be easy to compile just the ubuntu version with gcc? it has a ton of warnings and an error that i could fix on my end, but you probably know how to edit the config.mk just on these systems.

1 Like

tbh i would rather understand why the clang package in debian supposedly doesnt do std=c++17 as that version should

the problem seems to be that the automagic of the debhelper on ubuntu seems to pass in -flto=auto -ffat-lto-objects

…and that is a rawspeed thing, so i don’t know much about it. i do pass -DRAWSPEED_ENABLE_LTO=off already, just in case, but it seems to trip over this thing during configuring already.

fwiw i pushed a change that at least compiles here with g++ 11.2.0. although it still has a ton of warnings and required some interesting c++. this language is like swearing… it always doubles the lines of code and it enables you to do really dirty things.

and no for deb builds it is either gcc for both for clang for both

sigh so gcc/g++ for both for now and i promise i’ll fix the warnings?

1 Like

hi sorry for the missing ubuntu debian package and thanks for the wait. new packages are now available: Show graphics:darktable:master / vkdt - openSUSE Build Service

in particular the ubuntu 21.04 is here: https://build.opensuse.org/package/binary/download/graphics:darktable:master/vkdt/xUbuntu_21.04/x86_64/vkdt_0~git1639154740.f738a29-0_amd64.deb

1 Like

I have a problem. I want to do this: I have a nice winter landscape where I only want to make the blue sky bluer. I have added and connected the saturate module but I want to add a mask where I mark the blue sky and only apply saturation to the sky. I tried to play around with the draw block, but no matter how I want to wire it, vkdt carshes. So what do I have to wire to what if the saturate module is between llap and filmcurv?
I also had a look at the draw.cfg example but it does not appear to help.

Well, this is without the mask.

…can you share the raw?

PC100217.ORF (18.4 MB)

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

thanks. the drawing subsystem is not much fun to use at this point, especially the setup. as i said… the next focus shall be gui streamlining/workflow. i started with this a little bit but didn’t touch the drawing yet. here’s my attempt:


(excuse the sloppy mask, including the sun, and the terrible saturation)

remove .txt from this one:
PC100217.ORF.cfg.txt (7.0 KB)


… or use the even less user friendly (for now) data-driven mode of colour correction to swap out the colour without drawing.

edit: here’s the super deep blue version:

edit 2: place this in the same directory, without the .txt extension, to get a duplicate with these parameters:
PC100217.ORF-2.cfg.txt (2.8 KB)
(the last three values in colour:01, target red green blue change the sky colour)

also: sorry i just fixed a segfault when adjusting white balance in the colour module. new packages are on the way but will take a few minutes to be available.

Hi @hanatos, all,

I’ve read your explaining thread about the GUI vs the functional side. So, I know :wink:
However, the display is a bit huge for bigger screens & resolutions.

I have a 27" screen in 3840x2160.
vkdt looks quite ‘big’ on screen

Here’s a screenshot, where I have opened the system menu, so that the font size I usually use may be used as a comparison with the font size used in vkdt

My config & system
image
and vkdt manually compiled.

Do you think there is something you could do for us, poor people using big hi-dpi screens (joke, ofc) w.r.t:

  • font size (everywhere)
  • thumbnail size (ctrl+scroll to change it and keep it adapted to the available screen estate would be fantastic)

Oh, and this new mask view (dspy) you just added … I tried to add it but alas, the pipeline wire config is way above my knowledge !
Do you think, at some point, you’ll be able to add it yet have the module being used defaulted into it ?

And, as usual, many thanks for this VERY promising piece of software …
The performance we have in vkdt just make other competitor (FLOSS or not) looks like slugs !

I really can’t wait for the day this is more user friendly (not only the GUI, for example missing tooltips in Favorites or Filmcurv to help the user understand the different sliders ) !

BRAVO and keep up this great work !

GLLM