3

Is there any raster graphics editor which can do the standard things, like rasterizing fonts, drawing shapes, working with layers, etc. but is also easy to extend with custom 'filters' (i.e. algorithms on a pixel matrix)? I know that Photoshop is extendable, via scripts and via Lua for actual plugins, that Lua route seemed a bit overkill for me to learn (with all the GUI stuff), and with scripts, I don't know how effectively one can read and write image data. GPU acceleration and being free software would be sweet, but not mandatory. Ideally, I'd like to write the filters in Python, being able to use the OpenCV and Pillow libraries. Also, it would great if it would be possible to create filters with more than one input layer, so that you can e.g. apply a filter on two layers that are fed seperately into the algorithm (and possibly treated in different ways) to produce one output image.

As a simple example, assume I want to perform convolution to a layer, but with a different convolution matrix for each pixel. Say, the convolution matrix is the polynomial ax+by+cxy multiplied with some bump map and the parameters a, b, c are taken from the RGB values of another layer. It wouldn't be hard to write a Python script that takes two images and performs exactly this, also GPU acceleration is feasible, but I'd like to integrate it smoothly into the workflow of some design software, it must not be the most powerful, but should cover the basic features.

[EDIT] OK, so I just learned there is GIMP Python, which should be basically what I was looking for. Also, apparently there is an image editor in Blender, which is also Python extendable. Still, I leave this open, just in case there are other options I don't know of yet, or someone can comment on how it feels to do it in Photoshop, which is not free, of course, but still the software I'm most familiar with!

4
  • Is Filter Forge already explored? That's a very high level filter building framework and the filters can be reached from Photoshop, too.
    – user82991
    Oct 13, 2019 at 10:19
  • No, I will look into that, thanks!
    – fweth
    Oct 13, 2019 at 10:23
  • With this new info i suggest that you take a comp app. As plugins generally have a awful time of picking info out of other layers than the current one in most Photoshop like applications. whereas comp applications naturaly work on multiple sources at once. It is hard to call these layers since its not a stack as such but a network.
    – joojaa
    Oct 13, 2019 at 12:15
  • Also many comp apps work on GPU by default unlike say GIMP or photoshop
    – joojaa
    Oct 13, 2019 at 12:32

2 Answers 2

2

If you prefer python you should probably use numpy (or scipy) package, with PIL as loader. Basically for the speedup that you get from its matrix manipulation tool set gets you doing anything quite quickly (see here). Or if you want to do it in real time use OpenCV instead.

With your additions it seems clear that your not looking at all into a software with same calssification as photoshop or GIMP. Rather you want the other major line of pixel editors the comp application. Comp applications come in 2 versions basically after effects and node based.

You have even managed to find a application in this class namely Blender which has a internal comp app (others are blackmagic fusion and nuke). Typically what you ask can be done in these apps without any scripting just directly in the GUI, even your layer manipulation script usually drops in the GUI directly and is universally going to be python (VFX artists standardized on python somewhere in late 1990's, except adobe who went javascript route but the javascipt of photoshop has no fiter design access), which is bound on a much deeper level than in graphics design applications.

The reason you usually see animators and vfx artst using node based apps is simply that a node based application gives animation for free of charge (with minimal complexity increase in other uses, but then animation is way more technical). And for this reason they also have very high emphasis of performance so they frequently compile your stuff into a gpu computation.

These are designed for your usecase, for the others its more incidental rather than the aim of the software.

14
  • I worked with NumPy already, and I liked it, but I miss the workflow of an image manipulation program, where you can comfortably use your algorithms as tools and play around with them. If you know excactly what you want, it doesn't matter much, of course, but for actual design work, where you need to try a lot of things until something fits (at least that is my approach), staying in one stack of software feels so much smoother.
    – fweth
    Oct 13, 2019 at 11:07
  • @fweth thats not how image manipulator software work generally you need to redo stuf over and over again. Maybe your looking for a comp applciation instead something like digital fusion?
    – joojaa
    Oct 13, 2019 at 11:09
  • Can you expand on this, maybe I used image manipulation software in the false sense? I meant the class of software like PhotoShop, created for design work in pixels (as opposed to in vectors).
    – fweth
    Oct 13, 2019 at 11:11
  • @fweth traditionally the image manipulators edit the image and are gone. They dont save how the results or how it was done so once done your done its done if you want to alter any small section this you end up doing it again. However comp apps do much the same but instead of doing a result and being done they are meant to do the same thing for massive amount of images, so they organize a computational pipeline in the gui to do this, so they are akin to visual programming environment. Now, lately photo manipulators are picking this up but they are way worse than a comp in this sense.
    – joojaa
    Oct 13, 2019 at 11:18
  • 1
    OK, I see, thank you! Will change the term in my question. Wikipedia says PS is a 'raster graphics editor', would that be more apt?
    – fweth
    Oct 13, 2019 at 11:26
2

Gimel Studio is a free & open-source, node based raster graphics editor software with an API to create custom effects and manipulation nodes with Python - which may fit your needs.

The example you described is definitely possible within the Gimel Studio API as it bundles scipy, numpy and Pillow and has the ability to have multiple input socket "layers", etc. with different effects applied, etc.

Here is a link to homepage. It's on GitHub too.

Notes: It doesn't come with opencv by default, but I would be willing to build it with opencv, if you needed that.

It doesn't run the operations on the GPU, but renders most image operations fairly quickly on the CPU, depending on your image size.

Disclaimer: I am the author of Gimel Studio

EDIT: Since v0.4.2 it now bundles opencv.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.