the actual plugin mechanism works fine and is easy peasy to use but it would be more DRY (don't repeat yourself) if we use a base-class to inherit from.
the templating would benefit from adding support for masks. usecase: an exhibition room with a person / viewer in front of an artwork as template - the part of the picture where the person / viewer is standing shouldn't be overdrawn by default. ;)
to paste the generated images into photos of walls, rooms and alike (templating roadmap) the option to do some basic perspective transformation would be helpfull - ideally without numpy magic.
example: doing a filterchaining with pixelsort on a 4000x6000 input is timeconsuming and not necessary if the output will be used as a preview. the sw doesn't have to be fast (thats how we can avoid numpy dependency for now ;) but this little optimization would make lotso sense and is easy to implement.
loading all templates and recalculationg / adjusting every's box-size is not necessary and consumes time. if no random template should be selected then only loading the one specified is necessary.
a function to blend into a template allows some simple (brute) adjusting to the light-conditions and the texture of the template. (at least that's the idea ;)