2025, Nov 24 03:00
How to Apply GEGL Gaussian Blur and High-Pass in GIMP 3.0 Python Plug-ins with DrawableFilter
Learn why gegl:high-pass and gaussian blur seem to do nothing in GIMP 3.0 and how to apply GEGL filters in Python using Gimp.DrawableFilter with append or merge
GIMP 3.0 caught many plugin authors off guard. Familiar filters vanished from the Procedure Browser, and calling gegl:high-pass seemed to do nothing. Gaussian blur raised similar questions. The reason is straightforward: these effects are now GEGL operations, and the way you apply them from a Python plug-in has changed.
Problem statement
In GIMP 3.0, the high-pass filter isn’t exposed the old way, and attempting to trigger gegl:high-pass without using the proper GEGL path yields no visible result. Gaussian blur falls into the same bucket after the migration.
Code example showing the pitfall
Creating a GEGL filter object but not actually applying it to the drawable won’t change pixels. If your code stops here, you’ll see “does nothing” in practice:
hp_filter = Gimp.DrawableFilter.new(src_item, "gegl:high-pass", "")
hp_opts = hp_filter.get_config()
The important detail is that the filter must be attached to, or merged into, the drawable for any effect to appear.
Why this happens
Gaussian blur and high-pass are GEGL filters in GIMP 3.0. The legacy Procedure Browser entries that many scripts used in 2.10 aren’t how you drive these effects now. In a Python plug-in you instantiate a GEGL operation via Gimp.DrawableFilter, configure its properties, and then explicitly apply it to the target drawable.
Solution: apply GEGL filters from Python
Gaussian blur works through Gimp.DrawableFilter, including parameter configuration. High-pass follows the same pattern.
Gaussian blur applied correctly from a Python plug-in:
blur_op = Gimp.DrawableFilter.new(src_item, "gegl:gaussian-blur", "")
blur_cfg = blur_op.get_config()
blur_cfg.set_property("std-dev-x", 5)
blur_cfg.set_property("std-dev-y", 5)
src_item.append_filter(blur_op)
# src_item.merge_filter(blur_op)
Parameters for gaussian blur are documented here: https://gegl.org/operations/gegl-gaussian-blur.html
High-pass uses the same mechanism. If you don’t need to tweak parameters, the minimal form looks like this:
hi_pass_op = Gimp.DrawableFilter.new(src_item, "gegl:high-pass", "")
hi_cfg = hi_pass_op.get_config()
src_item.append_filter(hi_pass_op)
# src_item.merge_filter(hi_pass_op)
Note on Script-Fu
You can also drive the gaussian blur GEGL op from Script-Fu using the filter merge call. For example:
(gimp-drawable-merge-new-filter layer-main "gegl:gaussian-blur" 0 LAYER-MODE-REPLACE 1.0 "std-dev-x" (* 0.32 bsize) "std-dev-y" 0.0 "filter" "auto")
Why this is important
Many plugins that worked in 2.10 rely on procedures that won’t behave the same way in 3.0. Migrating to GEGL in your Python plug-ins is essential for blur, high-pass and other filters. The pattern—instantiate, configure, then append or merge—is the key to making effects actually land on the drawable.
Takeaways
If gegl:high-pass or gaussian blur appear to do “nothing,” apply them as GEGL filters via Gimp.DrawableFilter and ensure the operation is appended or merged into the drawable. Consult the GEGL operation documentation for the parameter names and acceptable values. With that, your GIMP 3.0 Python plug-ins will regain parity with earlier versions while using the current, supported path for image processing.