-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Should be easier to make quick edits to multiple images #16688
Comments
Faster:
|
Awesome. I think that already handles the majority of what I wanted out of this proposal. Does it seem like having a faster way to copy single-module configs would be helpful? Alternately, would it be helpful to have a non-shortcut way to accomplish some of this. (Lastly, for my own education, is there somewhere I should have looked on my own to learn about selecting images and using selective copy and paste from darktable mode?) |
The Lua scripting API provides a lot of tools or implementing workflows. For you specific exposure issue, did you try automatic mode for the exposure module? |
Some further thoughts You can set only one module open at a time in preferences to help with the scrolling issue. You can assign keyboard shortcuts to function such as the history stack copy and paste functions |
If you hold down the 'h' key, you'll get a listing of all the keyboard shortcuts available in the current view (lighttable/darkroom/etc), including those you've defined yourself. Virtually any GUI action can be bound to a keystroke, including not just sliders, buttons, and menu items, but also styles and module presets. You can also define shortcuts which combine keystroke and mouse actions, e.g. hold 'e' and scroll to adjust exposure. The reason all non-trivial GUI programs have keyboard shortcuts is because they are faster even than a dedicated button on the screen (no need to move the mouse to the button with enough accuracy to actually hit it), never mind an item buried in a submenu. |
@ralfbrown Right, I know why keyboard shortcuts are useful. I think what I'm brainstorming is: I'm a professional photographer, and this has been slowing me down for years. I'm trying to reflect on why that happened, and whether there are any changes that might make sense to help guide users like myself to the faster approach. I think these are important bits of information that I did not have:
Since this discussion is related to UI affordances, I would offer this as a way for us to make sure we're using the same terminology to discuss how the UI works and what hints it offers to the user: Using that terminology, I would say that the Darktable UI relies a lot on hidden affordances, and given its UI style, doesn't benefit from a lot of the pattern affordances that users may be otherwise familiar with (from other GTK apps, especially). What's extra challenging is that even the features that are designed to help users get un-stuck are behind hidden affordances (like holding "h"). |
And to add to all that, Darktable's selection behavior and targeting of image operations has long been really confusing, and continues to be really confusing. My personal sense is that it would be good to pick some major version to break UI backwards compatibility in order to fix this and make it make sense. In particular, as related to this topic, it's extremely confusing that the target of the keyboard shortcut actions always follows the mouse, even when the obvious behavior is something else. This is one of the ways that Darktable fails to benefit from the pattern affordances that have been established by selection behavior in other apps.
Then once multiple images in the filmstrip have been selected, the only way to _de_select them is to use a keyboard shortcut. This is a case where Darktable just behaves in a way that is technically consistent by conceptually inconsistent between darkroom mode and lighttable mode. But then if I click on a different image, darkroom mode switches to that other image without clearing the image selection. That is both technically inconsistent and also conceptually inconsistent between darkroom mode and lighttable mode. |
@wpferguson My exposure example was one of a whole bunch of examples. Just yesterday, I needed to tweak rotation, cropping, color calibration, and tone curve. Also, I think my broader issue (which is out-of-scope for this bug) is that there are a bunch of cases where Darktable scrolls the module pane when I don't want or expect it to. |
* Omari Stephens ***@***.***> [04-29-24 16:08]:
@wpferguson My exposure example was one of a whole bunch of examples. Just yesterday, I needed to tweak rotation, cropping, color calibration, and tone curve.
Also, I think my broader issue (which is out-of-scope for this bug) is that there are a bunch of cases where Darktable scrolls the module pane when I don't want or expect it to.
set the module pane to: "expand a single processing module at a time"
…--
(paka)Patrick Shanahan Plainfield, Indiana, USA @ptilopteri
http://en.opensuse.org openSUSE Community Member facebook/ptilopteri
Photos: http://wahoo.no-ip.org/piwigo paka @ IRCnet oftc
|
And that would destroy my workflow as well as that of many others. I've been using darktable since 1.6.x. For years I didn't know about the hovering because I clicked on the image, then moved into the panel and clicked on the operation. Since I wasn't over an image, it was never a problem. Then I saw a discussion about the hovering and decided to try it and see what all the fuss was about. I learned, after some experimentation, that it was MUCH faster to use hover and keyboard shortcuts to speed up my workflow. The mouse clicks were just slowing me down.
Did you read the manual? Meaning, did you read the manual and it didn't make sense, or you hadn't used darktable enough for it to make sense, or did you skip reading the manual and try and figure it out on the fly (that's what I did 😄)? |
What could be done maybe is to have a synchronize from darkroom.
That is the "do synchronize" action takes the last edited module and apply it to all selected images. This new action could be activated with "ctrl+shift+s" or whatever. @xsdg : How does that sound ? |
I think there's a solution where these workflows coexist and don't conflict, but that's not achieved by the current implementation. The following is one idea of how this could work, but this should count more as "brainstorming" than as the right solution.
Mentally, I think the current implementation is really confusing because there's no clear notion of "inactive" versus "active" places for the mouse to be. People like me who never intend to use hovering as a targeting approach end up having to jump through lots of hoops in order to have darktable always behave as expected (for me, I specifically try to place my mouse between the images in the lighttable grid. This wastes a lot of time). I suspect that it's just as confusing for hover users, because if they miss the hover target even by a tiny bit, then an action will happen to target the default-selected image, which might not even be visible on the screen if the user has scrolled away from it. So for me, it feels like the current implementation is kind of the worst of both worlds in terms of behaving predictably.
I've been using Darktable for 13 or 14 years (since pre-0.9), and I don't periodically reread the manual 🤷. I care a lot about how selection works in part because it's one of the first parts of darktable that I had worked on. I remember when I first encountered selective copy, and it seemed pretty intuitive to use. So I just used it, and I developed inferences around how it worked based on how the UI worked around it. That's why (again, using the terminology from that link) affordances and signifiers are so important. Because no user is going to be a perfect expert in how the UI behaves, and the UI should work to help users improve over time, not to cause them to suffer when they don't know what they don't know. I feel like the UI does a very good job of offering hints about details — the tooltips on everything have helped me become significantly better at using darktable as things have changed over the years. And the version selectors for things like module order or filmic color science let me know when there are new, breaking changes that I should consider trying out. But I think there's still an opportunity for it to do a better job of teaching users the broader patterns that they might not be aware of. |
@TurboGit Just to make sure I'm following, it sounds like synchronize would mostly just be selective copy + auto-select top item + some form of paste. I think that would be handy, but I'm not sure it's worth introducing a whole new concept for it. If there's a creative way to make it just a specialization of selective-copy (maybe "selectively copy last modification") and you could set a keyboard shortcut for it, I think that would be close to perfect for my particular usecase, and would hopefully avoid complicating things more than necessary. In the time since @ralfbrown's response, I've been using that workflow extensively (hundreds of images) and it works really well for my needs. The example I offered (needing to match exposures) is more simplistic than my actual needs, which are more like the following for a 10-image sequence: "okay, set the white balance, then paste it across a few images. Oh, it looks like some clouds moved in, so I need to alter the white balance and paste it back two to three images in addition to forward for 4 more images. Wait, the clouds went away again, so I need to copy the initial white balance and paste it onto the final image in the sequence." Likewise with corrective image rotation, which I'll often do as a separate pass of modifications. |
This is similar to a timelapse workflow. If a timelapse processing solution existed, would that work for you? |
@wpferguson I'm not familiar with time lapse post-processing, so it's hard for me to comment on. That said, I think the challenges one would encounter with a time lapse wouldn't fully capture the challenges I tend to encounter. Here's a very specific example of a usecase of mine, just to illustrate the combination of photo volume and chaos that I regularly need to manage. Also, consider that I shoot with two bodies with zoom lenses, so all settings can change pretty rapidly, and the two lenses might render colors slightly differently, which is something else I'll end up needing to account for. The following is a (very small) subset of photos from a track meet I photographed recently: You can see how there's more consistency in consecutive images (vertical dimension) but very little consistency across larger periods of time (horizontal dimension). But even among consecutive images, just left of center, you can see one athlete jumping from the shade (one white balance) to the sun (a different white balance) and landing back in the shade again (original white balance). If a person turns from facing towards the sun to away from the sun, that's a different white balance. If they run past me towards the sun, that's different white balance, different crop, and a lot of times different corrective rotation in case my sense of horizon got off as I was panning. And because of the bright red track surface, bright green grass and trees, and bright blue sky, AWB usually doesn't work very well. I'm not delivering all of these particular images by any stretch of the imagination. But the challenges illustrated here are a pretty good representation of the challenges that I actually do face within a given set of images. And I've delivered plenty of 80+-image sets before. |
Timelapse processing is basically selecting a start and end image for a set (key frames), adjusting them, then applying a process to incrementally adjust the set to have a smooth transition from one key frame to the other. The exposure module offers an exposure mapping mode where you select an area of an image (say the red track) and apply that to the red track in the other images. There is also a color mapping mode in color calibration to adjust colors. |
This issue has been marked as stale due to inactivity for the last 60 days. It will be automatically closed in 300 days if no update occurs. Please check if the master branch has fixed it and report again or close the issue. |
I also thought that it would be nice if I could apply my edits to multiple images without the need to hit the combo of When I edit my pictures I can see well in advance via filmstrip that the next X images have the same conditions and that I will copy and paste my edits to them once I am through with the first image of the sequence. It would be awesome if all I had to do was select these X images and start working on one of them and the edits would be propagated automatically to the rest. I would probably leave this setting always on and only use copy and paste for some manual adjustments or corrections. |
I am working on an alternative implementation that addresses your complaints but it will take more time before it is ready. If you want, you can have a look here #16850. There are other related issues linked within that one. |
That would require considerable re-architecting, since a parameter commit in a module could affect arbitrarily many images, not just the one showing in the center view. And then there's the issue of whether parameter changes in the "other" images should be absolute or relative. |
* Jan Kaufmann ***@***.***> [07-23-24 14:41]:
I also thought that it would be nice if I could apply my edits to multiple images without the need to hit the combo of `Ctrl-C` and `Ctrl-V` (sometimes with or without shift modifier) while taking care to hover the right image during copy and the right image during pasting.
When I edit my pictures I can see well in advance via filmstrip that the next X images have the same conditions and that I will copy and paste my edits to them once I am through with the first image of the sequence. It would be awesome if all I had to do was select these X images and start working on one of them and the edits would be propagated automatically to the rest.
I would probably leave this setting always on and only use copy and paste for some manual adjustments or corrections.
consider hovering above an image on lighttable and rolling the mouse wheel
to increase/decrease the number of images displayed to determine which
images you need to select to apply the "edit copy".
…--
(paka)Patrick Shanahan Plainfield, Indiana, USA @ptilopteri
facebook/ptilopteri
Photos: http://wahoo.no-ip.org/piwigo paka @ IRCnet oftc
|
* Jan Kaufmann ***@***.***> [07-23-24 14:41]:
I also thought that it would be nice if I could apply my edits to multiple images without the need to hit the combo of `Ctrl-C` and `Ctrl-V` (sometimes with or without shift modifier) while taking care to hover the right image during copy and the right image during pasting.
When I edit my pictures I can see well in advance via filmstrip that the next X images have the same conditions and that I will copy and paste my edits to them once I am through with the first image of the sequence. It would be awesome if all I had to do was select these X images and start working on one of them and the edits would be propagated automatically to the rest.
I would probably leave this setting always on and only use copy and paste for some manual adjustments or corrections.
addendum:
consider hovering above an image on lighttable and rolling the mouse wheel
while holding <ctrl>
to increase/decrease the number of images displayed to determine which
images you need to select to apply the "edit copy".
…--
(paka)Patrick Shanahan Plainfield, Indiana, USA @ptilopteri
facebook/ptilopteri
Photos: http://wahoo.no-ip.org/piwigo paka @ IRCnet oftc
|
I was thinking: apply the module to all selected images with a delay. Start once another module is used or once a new images is put in focus (to avoid applying the changes every time a slider is moved which would probably freeze darktable). Does it make it easier to apply the module with such a delay instead on every change within a module?
I was thinking relative. In which situation would that be a bad idea? Sorry, I am obviously not familiar with the code in question...
Is that an alternative way to select images? I am fine with the selection step. I was asking about a way to automate the copy and paste with the key bindings since most of the time it will be "everything I just did" to "all the images that are selected" |
* Jan Kaufmann ***@***.***> [07-23-24 18:17]:
> That would require considerable re-architecting, since a parameter commit in a module could affect arbitrarily many images, not just the one showing in the center view.
I was thinking: apply the module to all selected images with a delay. Start once another module is used or once a new images is put in focus (to avoid applying the changes every time a slider is moved which would probably freeze darktable). Does it make it easier to apply the module with such a delay instead on every change within a module?
> And then there's the issue of whether parameter changes in the "other" images should be absolute or relative.
I was thinking relative. In which situation would that be a bad idea? Sorry, I am obviously not familiar with the code in question...
> consider hovering above an image on lighttable and rolling the mouse wheel ...
Is that an alternative way to select images? I am fine with the selection step. I was asking about a way to automate the copy and paste with the key bindings since most of the time it will be "everything I just did" to "all the images that are selected"
select an image you are satisfied with the edits
copy the "pertinent" edits
select images you wish to apply the same edit(s)
append the "copies", <ctrl><v>
not a lot of work. and no coding necessary
…--
(paka)Patrick Shanahan Plainfield, Indiana, USA @ptilopteri
facebook/ptilopteri
Photos: http://wahoo.no-ip.org/piwigo paka @ IRCnet oftc
|
Having a delay makes the code more complicated. Using relative adjustments is not a bad idea, but is more complicated - you need to track the previous value, and for some settings the change is best expressed as a percentage of the previous values (most anything where effects are nonlinear without having an explicitly nonlinear scale like EV) while for others it is best to use absolute differences (most anything using EV or a linear scale with linear effects). Plus the relative change could cause the setting in one of the other images to hit the hard limit for the parameter and thus appear to have no effect. |
Interesting. I did not think about non-linearities and wonder if it can even be done in a relative way. There are also tone curves that extrapolate between the markers and probably some non-symmetric functions. Calculating and applying the right delta might be impossible. Absolute values work if the user makes sure to create a fresh instance of the module. In that case what ever changes are done in the fresh module instance could be copied one-to-one to all other images. |
Is your feature request related to a problem? Please describe.
Sometimes, I want to make quick changes to small groups of photos. A common example is if I spend 15 minutes taking photos at a track meet with variable light conditions. Then I want to normalize the exposures in darktable. All of the shots in a given burst will have the same ideal exposure settings, but separate bursts will often need different settings.
The current UI for engaging Selective Copy works, but is too heavy for this usecase, and ends up wasting a lot of time. Also, it requires a bunch of fairly precise mouse movements, which makes things even slower.
I show my typical steps below. And keep in mind that I need to run these steps for every edit of every burst in the set. That's a huge amount of time just spent clicking on the exact same things.
Set exposure on image 1 of burst 1
Hit "
l
" to return to lighttable modePotentially scroll so that the history stack "module" is visible in the sidebar
Click "selective copy…" at the right side of the screen
Click "select none" at the bottom of the dialog, which is in the center of the screen
Click the very small "include" checkbox for exposure, at the top of the dialog
Click "ok" back at the bottom of the dialog
Select the rest of the images in burst 1, at the top of the screen
Click "paste" which is a half-screen down and at the far right.
Double-click image 1 of burst 2
Scroll through modules to get to exposure
Set exposure on image 1 of burst 2
Describe the solution you'd like
From a UX perspective, it would help a lot to have a way to perform a simplified Selective Copy from darktable mode. Here are two ways I could imagine that happening:
Then for the paste side of things, here are some options that come to mind:
Alternatives
Additional context
The text was updated successfully, but these errors were encountered: