Here’s an idea on Masks relevant to the input/output question, possibly a little radical -
You could have a new Mask object and insert instances into the pipeline where you choose. Modules would no longer have mask functionality. New mask instances (hereafter just “masks”) could be inserted, amended and deleted.
The create and amend function would basically be the same as at present, however I don’t think the idea of input and output is needed - the mask would be be working on the output of the previous module, and its effect would be the input to the next module in the pipeline.
Perhaps masks could also be turned off, like modules.
A mask could be re-used by a later mask like now via the “raster” option, although this could maybe be re-named to somethng like “re-use previous mask” to be more intuitive.
A mask would always be calculated, unlike at present where it no longer exists if the module is turned off. At present this can catch you out if you re-use an earlier module-mask via the raster option.
I say “always calculated” but I suppose it would only need evaluating if something earlier in the pipeline changed.
I think that’s it.