darktable-org / darktable-org/darktable
[Discussion] A new, consolidated maksing workflow (aka "Flexi" masks)
@TurboGit is already working on this.
Since Aug 27, 2026.
- Dominant language
- C
- Stars
- 13.1k
- Forks
- 1.4k
- Avg merge
- 22h 14m
- Merged PRs (30d)
- 198
Description
TL;DR
Do we want to merge Flexi masks in darktable? If yes, how?
About Flexi
In this post on Pixls I have introduced a working, fully implemented proposal (although still drafty wrt code quality) to revamp the masking UX in darktable.
The new system:
- Uses a much simper, more intuitive mental model
- Is much more powerful and expressive than the classic one
- Subsumes the embedded mask panel + mask editor and provides a unified, streamlined modern masking UI (with margin for improvement, of course)
See the README and user documentation for user-facing docs and more details. I won't repeat the same things here to avoid wasting your time. The Pixls post also has some video demos, even though they are a bit outdated.
The proposal has been received quite enthusiastically by the community, and it has already undergone a few iterations of refinement.
I think that it's a good time to start considering the opportunity of merging it into master.
So, the first question is: do we want to upstream this change?
NOTE: The code is to be perfected, revised and polished (I have been iterating on it heavily and quickly),for sure there are bugs that didn't surface yet, and stuff that can be optimized, but the feature is code complete, it does what it should and it does it pretty well. So, if we decide to upstream it we can start doing it today.
What do you think?
I have not heard a lot from devs on Pixls, so I am really looking forward to hearing your thoughts.
To inform this decision, I (with the help of Claude) have prepared a couple of more technical documents:
-
A description of the Flexi data model, and how it diverges from classic. Note that:
- Flexi doesn't add a new kind of mask, and it doesn't change what a DT_MASKS_GROUP form is
- All the changes are entirely in what gets read out of bits that are already there, or added to the end of structs that are already there. I.e., it is a relatively small data model change, for a very significant capability and simplicity boost.
IMPORTANT: At this stage, the discussion should really not be about what we like or don't like about the UI. If we decide that the change is overall desireable, then we want we will have plenty of time to iterate on the fine print.
@TurboGit of course your opinion is paramount, but I would like to hear from the others too.
Thank you all in advance 😃
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.