vkdt dev diary, pt2

hm the question is of course which granularity makes sense for the ui. the modules you see in this ui will themselves consist of a set of connected nodes, which in turn correspond 1:1 to GPU kernels. so what you see here is an abstraction already. for instance the llap module does quite a bit of laplacian pyramid decomposition in a handful of cascaded nodes internally. so if you expose the splitting/laplacian fusion at the module level then only because you expect users to mess with the individual parts in creative ways…

this is done by moving a connected input pin into the void (this is the imnodes repo, not my code/idea). output pins can be connected to multiple different inputs, so you can’t delete a link this way on the other side.

sounds brittle to me. there are so many potentially overlapping lines, not sure i like this. also it sounds like there’ll be a modal dialog popping up when you innocuously move a node. i’ll probably port the insert before this node button from the pipeline config tab for this purpose.

oh absolutely. i was planning to port some hotkeys + add module and insert block to this view.

your crash recovery files are the backups of lighttable (db) and darkroom (cfg) work in progress that might not have been saved. the actual crash report is missing but you posted two .cfg :slight_smile:

Well, forgive my NodeRed reference but it has this feature that when putting a new node Z on an existing link between nodes A & B, the previous link becomes dotted and instead shows, in dotted line, what would the new link A<->Z<->B be if the user release the mouse click on this place. Otherwise, if you move the node again to an empty place, nothing happens A & B are still directly linked and Z is still in the void !
But I understand that you would not want to trickle into the nodes code itself or reimplement new functions in it :wink:

Arf, my bad … will upload tonight …

hm if you explain in such detail it sounds like a good feature. will see how hard that would be.

Shameless screenshot from NodeRed doc

Src: Wires : Node-RED

Addendum: there may be a few very good UI idea to “steal” to nodered :wink: (see on the page ‘Slicing wire’ or ‘Detaching node’)

… of course this is one of the operations that only works if the node has a unique input and a one main output channel (can’t have more inputs because i couldn’t plug them in and has to have one main output so i know what to connect to the next node). in simple imaging pipelines this is often the case though, so it’s worthwhile thinking about it.

1 Like

node-insert.mkv (2.9 MB)
maybe like this^ ?

3 Likes

Yummy :blush: :ok_hand:

Hanatos,
(forgive my many messages and questions)
Is there any way to emulate vibrance, and if so with which nodes ?
I like using vibrance (as opposed to saturation) as it has less “in your eyes” of an impact !
I’ve looked for “vibrance” is the module list (CTRL+M) to no avail.
Thanks

tested the ‘automatic’ node insert, works as expected :slight_smile:

there’s no implementation of that particular formula. but if you apply the gamut.pst preset, the colour module will switch the saturation to something that follows lines of same hue when changing saturation. also it will respect the combo box to limit the effect to a certain gamut. if you set that to srgb for instance, it will never increase saturation out of this set. since it compresses gradually near the boundary the effect may be similar (keep already saturated colours where they are, only boost the moderate ones).

Almost forgot about that crash !
vkdt-bt-414460.txt (36.0 KB)

hm stack trace is unintelligible. do you remember what you did to trigger it? can you still trigger it with new master? i fixed a thing or two in the meantime.

I was playing with nodes & CNN … I would not be able to reproduce.
I’ll upgrade & try again.

Playing again with modules … and this time with AB .

May I dare suggesting a visual cue to indicate which part corresponds to input A and which to input B ?

Usually, it’d be named “Before” & “After”, but since the user can build the graph he likes, ‘before’ & ‘after’ will probably be wrong 50% times, hence this idea to see A&B :

Addendum: cant wait for the day we can move the split with a handle directly on the pictures :wink:

Thanks

NB: the day you are fed up with my questions & suggestions, just say so ! :stuck_out_tongue_winking_eye:

Awesome looking graph view! Love it :heart:

As for the granularity question, take a look at the awesome work happening for the blender Geometry nodes. They expose very fine granularity, more advanced nodes such as llap can in that case be expressed as a group of nodes. The ability to group nodes (and group groups for that matter) and store these groups for reuse has proven extremely powerful over there.

right. i wanted to streamline this a little bit by using labels on the history stack (ctrl-h) and some automatic generation of sub-graphs and connection of an a/b module. gui overlays are on the agenda too, just takes a bit of time to do it (the rest of the ui is autogenerated from text files, that’s fast to do).

i think the difference is that i’m not trying to do a low-code interface to programming, but primarily a workflow thing to go through many images quickly. also, the nodes are exposed if you want to program, you can include them in any other module by calling them by full name (llap/assemble for instance). this is on a programming level though and probably not useful for photography.

also i really care about execution speed, and granularity has a big impact here. after every node/compute kernel, the pixels will be carried to global memory, and will be carried back to the SM when the next kernel starts. this means if the kernels are super fine grained (+ or / or so) it’ll waste a lot of memory bandwidth. an extreme example is the richardson lucy deconvolution which i initially implemented as a sequence of many div and mul kernels and later as a single kernel deconv which iterates directly in shared memory before writing back to global.

2 Likes

not quite what i thought would be the full fledged solution here but at least it’s sligthly less cumbersome to work with:

node-ab-compare.mkv (7.9 MB)

Would there be something in here that could be fairly easily tweaked to match or come closer to vkdt?? Or wishful thinking…

/* Graphs : histogram, navigation thumbnail and some items on tone curve /
@define-color graph_bg @grey_15;
@define-color graph_exterior shade(@graph_bg, 0.9);
@define-color graph_border @grey_05;
@define-color graph_fg @grey_75;
@define-color graph_fg_active @grey_95;
@define-color graph_grid @grey_05;
@define-color graph_overlay @grey_50;
@define-color inset_histogram alpha(@grey_65, 0.50);
/
Primaries selected for visual legibility across a variety of
gamuts, and to combine to pleasing secondaries. The combination of
all three must either to either the same number or >= 255 to
produce a neutral overlap. */
@define-color graph_red rgb(237,30,20);
@define-color graph_green rgb(28,235,26);
@define-color graph_blue rgb(14,14,233);

@define-color colorlabel_red rgb(230,0,0);
@define-color colorlabel_green rgb(0,230,0);
@define-color colorlabel_blue rgb(40,140,255);
@define-color colorlabel_yellow rgb(255,180,0);
@define-color colorlabel_purple rgb(230,0,230);

…maybe to illustrate, here’s what vkdt-cli generates for a very simple linear graph using --dump-nodes to visualise the finest level.
nodes.pdf (22.0 KB)
i find that not very convenient to work with.

sorry i have no idea about this part of darktable’s code.

hah :slight_smile: absolutely not.