Hi guys,
let me tell you about my recent project, making G’MIC effects usable in Adobe After Effects and Adobe Premiere Pro (other possible hosts or a generic OpenFX interface probably coming later).
In the last days, I have coded “G’MIC bridge”, a shared library/DLL interface for G’MIC that makes accessing G’MIC from other applications and compilers much much easier. Think of it like a “CLI deluxe” C/C++ interface where in addition to the command line you can send pixel buffers for processing to it.
On Windows, this DLL can be compiled in both Visual Studio and MinGW, but since only MinGW supports OpenMP (which is essential for fast processing!), that is the preferred compilation platform. As the library uses a pure ANSI-C interface without any dependencies on G’MIC headers/libs, a MinGW compiled DLL/lib can however be used in Visual Studio and vice-versa.
To test this bridge, I created an effect plugin using the Adobe After Effects SDK that sends the pixel buffers it receives from the host to the bridge DLL for processing. It allows entering any G’MIC commands you want for sending to G’MIC.
The AE plugin can also parse the G’MIC #@gimp definitions and re-create the appropriate native AE UI elements like sliders, text boxes, color pickers, etc. It can also optionally use inplace processing (for effects that don’t require re-assigning the input pointer) and can deal with multiple input layers. Since an AE plugin can only host one single plugin with a fixed parameter set and name within one file, I wrote a little pre-processor that creates small AE plugin stubs from a G’MIC collection file (like the G’MIC standard library). As the processing code is handled in the bridge DLL anyway, these stubs only need some kilobyte of space. The advantage of using the G’MIC GIMP notation is that After Effects users could write plugins that would be immediately compatible with the G’MIC Gimp plugin.
The plugin is also usable in Premiere Pro, supports up to 32bpc float color depth, and all parameters are keyframeable/automatable using the host.
I exported 330+ Gimp effects from the G’MIC standard library for testing last night and most of them worked fine already in After Effects/Premiere Pro!
I was quite surprised though that even more complex effects like the skeleton effect (in the screenshot below) or inpainting using patches worked great as a native AE version (where one can interactively paint using the AE tools on areas to be removed).
Performance can be a bit sluggish sometimes of course and some effects are real memory hogs, but that was to be expected.
The bridge principle is the same when being applied to other frameworks like OpenFX or FinalCut or Photoshop SDKs, I just started with AE since that is where I do my commercial VFX development work as well and I know this plugin standard best. But I have also already written a generic interface for OpenFX in the past and that part of the sources should be easily adoptable to the G’MIC bridge. Actually I plan to tackle this once my AE plugin is stable enough to be released.
Oh yeah, and of course both the bridge DLL as well as the After Effects plugin will be released with full sources under an open-source license.
I need some more time needed to finalize the plugin and the bridge interface as well as to iron out bugs and errors, but if anyone wants to beta test the plugin(s), just let me know (currently Windows only, AE/PPro CS6 or above needed).
Cheers,
Toby