<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Gimp-Forum.net - Extending the GIMP]]></title>
		<link>https://www.gimp-forum.net/</link>
		<description><![CDATA[Gimp-Forum.net - https://www.gimp-forum.net]]></description>
		<pubDate>Mon, 20 Apr 2026 19:56:45 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[GIMP 3 - Social Media Resizer]]></title>
			<link>https://www.gimp-forum.net/Thread-GIMP-3-Social-Media-Resizer</link>
			<pubDate>Mon, 06 Apr 2026 04:32:40 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-GIMP-3-Social-Media-Resizer</guid>
			<description><![CDATA[I have created it for daily use, Hope it will be helpful: Free Download: <a href="https://tarulahsanbd.gumroad.com/l/nlqyh" target="_blank">https://tarulahsanbd.gumroad.com/l/nlqyh</a><br />
<br />
? Core Features<br />
<br />
⚡ One-Click Social Media Export<br />
<br />
Export your design instantly to multiple platform-ready sizes:<br />
<br />
* Instagram (Square, Portrait, Story, Reel)<br />
* YouTube (Thumbnail, Shorts)<br />
* TikTok<br />
* Facebook (Feed, Story)<br />
* LinkedIn<br />
* X (Twitter)<br />
<br />
Select multiple presets → export all at once.<br />
<br />
---<br />
<br />
? Smart Preset System<br />
<br />
? Built-in Presets<br />
<br />
Comes with industry-standard sizes for all major platforms.<br />
<br />
➕ Custom Presets<br />
<br />
* Create your own sizes<br />
* Edit existing presets<br />
* Delete unused presets<br />
* Auto-saved locally<br />
<br />
? Preset Browser<br />
<br />
* Filter by platform<br />
* Search by name, size, or keyword<br />
* Quickly select/deselect presets<br />
<br />
---<br />
<br />
?️ Advanced Resize Engine<br />
<br />
? Two Canvas Modes<br />
<br />
* **Crop to Fit** → fills frame, trims overflow<br />
* **Pad to Fit** → preserves full image with padding<br />
<br />
? High-Quality Scaling<br />
<br />
* Uses best available GIMP interpolation<br />
* Maintains sharpness across exports<br />
<br />
---<br />
<br />
? Batch Processing<br />
<br />
? Multi-Image Export<br />
<br />
* Select multiple input images<br />
* Export each image into all selected presets<br />
<br />
? Batch Output Logic<br />
<br />
If you select:<br />
<br />
* 5 images<br />
* 4 presets<br />
<br />
? You get **20 exported files automatically**<br />
<br />
---<br />
<br />
? Live Visual Preview (KEY FEATURE)<br />
<br />
⚡ Real-Time Preview<br />
<br />
* No “Preview” button needed<br />
* Updates instantly when:<br />
  * presets change<br />
  * canvas mode changes<br />
  * format changes<br />
  * naming template changes<br />
<br />
? Preview Cards<br />
<br />
Each preset shows:<br />
<br />
* Visual thumbnail (actual crop/pad simulation)<br />
* Resolution (e.g. 1080×1920)<br />
* Platform + preset name<br />
* Final export filename<br />
<br />
? Scrollable Preview Grid<br />
<br />
* Supports many presets<br />
* Smooth scrolling<br />
* Adjustable preview limit<br />
<br />
---<br />
<br />
? Batch Preview System<br />
<br />
 ? Preview for Batch Mode<br />
<br />
* Choose one file as preview reference<br />
* See exactly how all outputs will look<br />
* Applies to all selected presets<br />
<br />
---<br />
<br />
?️ Smart Naming System<br />
<br />
? Dynamic Templates<br />
<br />
Use tokens to auto-name exports:<br />
<br />
Available tokens:<br />
<br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{image_name}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{preset_name}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{platform}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{width}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{height}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{ext}</span><br />
<br />
? Example:<br />
<br />
<span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"><br />
{image_name}_{preset_name}<br />
</span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><br />
<br />
→ <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">banner_instagram-story.png</span><br />
<br />
---<br />
<br />
? Organized Export System<br />
<br />
? Output Folder Selection<br />
<br />
* Choose any directory<br />
* Remembers last used folder<br />
<br />
?️ Optional Platform Subfolders<br />
<br />
Automatically organizes exports:<br />
<br />
<span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"><br />
/Instagram/<br />
/YouTube/<br />
/Facebook/<br />
</span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><br />
<br />
---<br />
<br />
?️ User-Friendly Interface<br />
<br />
? Clean Layout<br />
<br />
* Left: Preset browser<br />
* Right: Options + preview<br />
* Bottom: Status + export<br />
<br />
? Smart Controls<br />
<br />
* Select all visible presets<br />
* Clear selections<br />
* Platform-based selection<br />
<br />
---<br />
<br />
? Persistent Settings<br />
<br />
Automatically remembers:<br />
<br />
* last output folder<br />
* canvas mode<br />
* export format<br />
* selected platform filter<br />
* naming template<br />
* preview limit<br />
<br />
---<br />
<br />
?️ Error Handling<br />
<br />
* Prevents export without:<br />
  * presets selected<br />
  * output folder selected<br />
  * batch files (if batch mode)<br />
* Clear error messages<br />
* Debug logging included<br />
<br />
---<br />
<br />
⚙️ Export Options<br />
<br />
? Formats Supported<br />
<br />
* PNG<br />
* JPEG<br />
* WEBP<br />
<br />
? Flexible Workflow<br />
<br />
* Current image mode<br />
* Batch mode (multiple files)<br />
<br />
---<br />
<br />
? Menu Integration<br />
<br />
Accessible from:<br />
<br />
* **File → Export**<br />
* **Image menu**<br />
<br />
---<br />
<br />
? Plugin Identity<br />
<br />
* Custom icon included<br />
* Professional UI design<br />
* Fully integrated into GIMP 3 environment<br />
<br />
---<br />
<br />
? What Makes This Plugin Powerful<br />
<br />
* Eliminates repetitive resizing work<br />
* Visual preview removes guesswork<br />
* Batch export saves hours<br />
* Built specifically for **modern social media workflows**<br />
* No equivalent exists in native GIMP 3<br />
<br />
---<br />
<br />
? Ideal For<br />
<br />
* Designers<br />
* Social media managers<br />
* Content creators<br />
* Freelancers<br />
* Marketing teams]]></description>
			<content:encoded><![CDATA[I have created it for daily use, Hope it will be helpful: Free Download: <a href="https://tarulahsanbd.gumroad.com/l/nlqyh" target="_blank">https://tarulahsanbd.gumroad.com/l/nlqyh</a><br />
<br />
? Core Features<br />
<br />
⚡ One-Click Social Media Export<br />
<br />
Export your design instantly to multiple platform-ready sizes:<br />
<br />
* Instagram (Square, Portrait, Story, Reel)<br />
* YouTube (Thumbnail, Shorts)<br />
* TikTok<br />
* Facebook (Feed, Story)<br />
* LinkedIn<br />
* X (Twitter)<br />
<br />
Select multiple presets → export all at once.<br />
<br />
---<br />
<br />
? Smart Preset System<br />
<br />
? Built-in Presets<br />
<br />
Comes with industry-standard sizes for all major platforms.<br />
<br />
➕ Custom Presets<br />
<br />
* Create your own sizes<br />
* Edit existing presets<br />
* Delete unused presets<br />
* Auto-saved locally<br />
<br />
? Preset Browser<br />
<br />
* Filter by platform<br />
* Search by name, size, or keyword<br />
* Quickly select/deselect presets<br />
<br />
---<br />
<br />
?️ Advanced Resize Engine<br />
<br />
? Two Canvas Modes<br />
<br />
* **Crop to Fit** → fills frame, trims overflow<br />
* **Pad to Fit** → preserves full image with padding<br />
<br />
? High-Quality Scaling<br />
<br />
* Uses best available GIMP interpolation<br />
* Maintains sharpness across exports<br />
<br />
---<br />
<br />
? Batch Processing<br />
<br />
? Multi-Image Export<br />
<br />
* Select multiple input images<br />
* Export each image into all selected presets<br />
<br />
? Batch Output Logic<br />
<br />
If you select:<br />
<br />
* 5 images<br />
* 4 presets<br />
<br />
? You get **20 exported files automatically**<br />
<br />
---<br />
<br />
? Live Visual Preview (KEY FEATURE)<br />
<br />
⚡ Real-Time Preview<br />
<br />
* No “Preview” button needed<br />
* Updates instantly when:<br />
  * presets change<br />
  * canvas mode changes<br />
  * format changes<br />
  * naming template changes<br />
<br />
? Preview Cards<br />
<br />
Each preset shows:<br />
<br />
* Visual thumbnail (actual crop/pad simulation)<br />
* Resolution (e.g. 1080×1920)<br />
* Platform + preset name<br />
* Final export filename<br />
<br />
? Scrollable Preview Grid<br />
<br />
* Supports many presets<br />
* Smooth scrolling<br />
* Adjustable preview limit<br />
<br />
---<br />
<br />
? Batch Preview System<br />
<br />
 ? Preview for Batch Mode<br />
<br />
* Choose one file as preview reference<br />
* See exactly how all outputs will look<br />
* Applies to all selected presets<br />
<br />
---<br />
<br />
?️ Smart Naming System<br />
<br />
? Dynamic Templates<br />
<br />
Use tokens to auto-name exports:<br />
<br />
Available tokens:<br />
<br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{image_name}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{preset_name}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{platform}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{width}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{height}</span><br />
* <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">{ext}</span><br />
<br />
? Example:<br />
<br />
<span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"><br />
{image_name}_{preset_name}<br />
</span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><br />
<br />
→ <span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);">banner_instagram-story.png</span><br />
<br />
---<br />
<br />
? Organized Export System<br />
<br />
? Output Folder Selection<br />
<br />
* Choose any directory<br />
* Remembers last used folder<br />
<br />
?️ Optional Platform Subfolders<br />
<br />
Automatically organizes exports:<br />
<br />
<span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"><br />
/Instagram/<br />
/YouTube/<br />
/Facebook/<br />
</span><span style="padding-left: 1px; padding-right: 1px; font-family:Monospace; font-weight: bold; font-stretch: condensed; filter: contrast(60%);"></span><br />
<br />
---<br />
<br />
?️ User-Friendly Interface<br />
<br />
? Clean Layout<br />
<br />
* Left: Preset browser<br />
* Right: Options + preview<br />
* Bottom: Status + export<br />
<br />
? Smart Controls<br />
<br />
* Select all visible presets<br />
* Clear selections<br />
* Platform-based selection<br />
<br />
---<br />
<br />
? Persistent Settings<br />
<br />
Automatically remembers:<br />
<br />
* last output folder<br />
* canvas mode<br />
* export format<br />
* selected platform filter<br />
* naming template<br />
* preview limit<br />
<br />
---<br />
<br />
?️ Error Handling<br />
<br />
* Prevents export without:<br />
  * presets selected<br />
  * output folder selected<br />
  * batch files (if batch mode)<br />
* Clear error messages<br />
* Debug logging included<br />
<br />
---<br />
<br />
⚙️ Export Options<br />
<br />
? Formats Supported<br />
<br />
* PNG<br />
* JPEG<br />
* WEBP<br />
<br />
? Flexible Workflow<br />
<br />
* Current image mode<br />
* Batch mode (multiple files)<br />
<br />
---<br />
<br />
? Menu Integration<br />
<br />
Accessible from:<br />
<br />
* **File → Export**<br />
* **Image menu**<br />
<br />
---<br />
<br />
? Plugin Identity<br />
<br />
* Custom icon included<br />
* Professional UI design<br />
* Fully integrated into GIMP 3 environment<br />
<br />
---<br />
<br />
? What Makes This Plugin Powerful<br />
<br />
* Eliminates repetitive resizing work<br />
* Visual preview removes guesswork<br />
* Batch export saves hours<br />
* Built specifically for **modern social media workflows**<br />
* No equivalent exists in native GIMP 3<br />
<br />
---<br />
<br />
? Ideal For<br />
<br />
* Designers<br />
* Social media managers<br />
* Content creators<br />
* Freelancers<br />
* Marketing teams]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[GIMP Rename Layer (Pro) - Bulk rename-prefix / suffix-number]]></title>
			<link>https://www.gimp-forum.net/Thread-GIMP-Rename-Layer-Pro-Bulk-rename-prefix-suffix-number</link>
			<pubDate>Fri, 27 Mar 2026 23:18:49 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-GIMP-Rename-Layer-Pro-Bulk-rename-prefix-suffix-number</guid>
			<description><![CDATA[<span style="color: #222222;"><span style="font-size: medium;">I built this gimp plugin that renames 200+ layers instantly — would this help you guys- let me know your thoughts. <span style="color: #0088cc;"><a href="https://tarulahsanbd.gumroad.com/l/fifaxf" target="_blank">You can try it here</a></span></span></span><br />
<br />
<br />
<span style="color: #222222;"><span style="font-size: medium;"><span style="font-weight: bold;">Key Features</span></span></span><ul>
<li> Bulk auto-numbering (with padding)<br />
<br />
</li>
<li> Find &amp; Replace (case-sensitive option)<br />
<br />
</li>
<li> Regex renaming support<br />
<br />
</li>
<li>Smart templates:<br />
<ul>
<li>{index}{layer_name}</li></ul>
</li>
<li><span style="color: #000000;"> Rename only selected layers</span><br />
</li>
<li><span style="color: #000000;"> Add prefix / suffix</span><br />
</li>
<li><span style="color: #000000;"> Top-to-bottom &amp; bottom-to-top order</span><br />
</li>
<li><span style="color: #000000;"> Live preview (instant updates)</span><br />
</li>
<li><span style="color: #000000;"> Export layer names to file</span><br />
</li></ul>
[*]<span style="color: #222222;"><span style="font-size: medium;"><span style="font-weight: bold;"><img src="https://discuss.pixls.us/images/emoji/apple/brain.png?v=12" width="20" height="20" border="0" alt="[Image: brain.png?v=12]" />Compatible- GIMP 3 and above</span></span></span><br />
<span style="color: #222222;"><span style="font-size: medium;"><span style="font-weight: bold;"><img src="https://discuss.pixls.us/images/emoji/apple/1234.png?v=12" width="20" height="20" border="0" alt="[Image: 1234.png?v=12]" />Full Installtion tutorial included (Windows and Linux)</span></span></span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14331" target="_blank" title="">plugin working image.png</a> (Size: 288.56 KB / Downloads: 29)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<span style="color: #222222;"><span style="font-size: medium;">I built this gimp plugin that renames 200+ layers instantly — would this help you guys- let me know your thoughts. <span style="color: #0088cc;"><a href="https://tarulahsanbd.gumroad.com/l/fifaxf" target="_blank">You can try it here</a></span></span></span><br />
<br />
<br />
<span style="color: #222222;"><span style="font-size: medium;"><span style="font-weight: bold;">Key Features</span></span></span><ul>
<li> Bulk auto-numbering (with padding)<br />
<br />
</li>
<li> Find &amp; Replace (case-sensitive option)<br />
<br />
</li>
<li> Regex renaming support<br />
<br />
</li>
<li>Smart templates:<br />
<ul>
<li>{index}{layer_name}</li></ul>
</li>
<li><span style="color: #000000;"> Rename only selected layers</span><br />
</li>
<li><span style="color: #000000;"> Add prefix / suffix</span><br />
</li>
<li><span style="color: #000000;"> Top-to-bottom &amp; bottom-to-top order</span><br />
</li>
<li><span style="color: #000000;"> Live preview (instant updates)</span><br />
</li>
<li><span style="color: #000000;"> Export layer names to file</span><br />
</li></ul>
[*]<span style="color: #222222;"><span style="font-size: medium;"><span style="font-weight: bold;"><img src="https://discuss.pixls.us/images/emoji/apple/brain.png?v=12" width="20" height="20" border="0" alt="[Image: brain.png?v=12]" />Compatible- GIMP 3 and above</span></span></span><br />
<span style="color: #222222;"><span style="font-size: medium;"><span style="font-weight: bold;"><img src="https://discuss.pixls.us/images/emoji/apple/1234.png?v=12" width="20" height="20" border="0" alt="[Image: 1234.png?v=12]" />Full Installtion tutorial included (Windows and Linux)</span></span></span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14331" target="_blank" title="">plugin working image.png</a> (Size: 288.56 KB / Downloads: 29)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Parametric Mask plug-in for GIMP 3 - a different approach]]></title>
			<link>https://www.gimp-forum.net/Thread-Parametric-Mask-plug-in-for-GIMP-3-a-different-approach</link>
			<pubDate>Thu, 19 Mar 2026 16:04:46 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Parametric-Mask-plug-in-for-GIMP-3-a-different-approach</guid>
			<description><![CDATA[Hi all,<br />
<br />
I've just released a parametric masking plug-in for GIMP 3 and wanted to share it here.<br />
<br />
The plug-in creates a layer mask from one of four source channels: Red, Green, Blue, or Luminance. You shape the mask using a tone curve with a live histogram. Drag points up to include tones, drag them down to exclude them. The canvas updates live as you work.<br />
<br />
The curve approach gives you precise, automatically feathered control over the mask. Target midtones, create double peaks, or invert regions entirely. Since photographers already think in curves, there's no new mental model to learn.<br />
<br />
The idea was inspired by Yasuo Ohnishi's parametric masking work for GIMP 3. My plug-in takes a different direction, using a curve editor instead of sliders.<br />
<br />
A few highlights:<br />
<br />
- Red, Green, Blue, and Luminance channel support<br />
- Live preview on the canvas<br />
- Whole-image mode and single-layer mode<br />
- Non-destructive: works on a new layer, never touches the original<br />
- Available in 14 languages<br />
- Runs on Linux, Windows, and macOS<br />
<br />
Full write-up with a short demo video: <a href="https://www.chuckhenrich.com/parametric-mask-in-gimp-plugin/" target="_blank">https://www.chuckhenrich.com/parametric-...mp-plugin/</a><br />
<br />
Direct download: <a href="https://chuckhenrich.com/downloads/parametric-mask-v3/parametric-mask-v3.zip" target="_blank">https://chuckhenrich.com/downloads/param...ask-v3.zip</a><br />
<br />
Happy to answer questions. Feedback and bug reports are very welcome.]]></description>
			<content:encoded><![CDATA[Hi all,<br />
<br />
I've just released a parametric masking plug-in for GIMP 3 and wanted to share it here.<br />
<br />
The plug-in creates a layer mask from one of four source channels: Red, Green, Blue, or Luminance. You shape the mask using a tone curve with a live histogram. Drag points up to include tones, drag them down to exclude them. The canvas updates live as you work.<br />
<br />
The curve approach gives you precise, automatically feathered control over the mask. Target midtones, create double peaks, or invert regions entirely. Since photographers already think in curves, there's no new mental model to learn.<br />
<br />
The idea was inspired by Yasuo Ohnishi's parametric masking work for GIMP 3. My plug-in takes a different direction, using a curve editor instead of sliders.<br />
<br />
A few highlights:<br />
<br />
- Red, Green, Blue, and Luminance channel support<br />
- Live preview on the canvas<br />
- Whole-image mode and single-layer mode<br />
- Non-destructive: works on a new layer, never touches the original<br />
- Available in 14 languages<br />
- Runs on Linux, Windows, and macOS<br />
<br />
Full write-up with a short demo video: <a href="https://www.chuckhenrich.com/parametric-mask-in-gimp-plugin/" target="_blank">https://www.chuckhenrich.com/parametric-...mp-plugin/</a><br />
<br />
Direct download: <a href="https://chuckhenrich.com/downloads/parametric-mask-v3/parametric-mask-v3.zip" target="_blank">https://chuckhenrich.com/downloads/param...ask-v3.zip</a><br />
<br />
Happy to answer questions. Feedback and bug reports are very welcome.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Plug-in not showing up]]></title>
			<link>https://www.gimp-forum.net/Thread-Plug-in-not-showing-up</link>
			<pubDate>Thu, 12 Mar 2026 14:42:40 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Plug-in-not-showing-up</guid>
			<description><![CDATA[UPDATE: So I have GIMP 3.0.0 and 2.10.38 installed on my system. After having the below issue with 3.0 I tried 2.1 and it worked fine. So this seems to be a 3.0 issue.<br />
-------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />
I installed gimp3_upscale but when I restarted Gimp the plug-in did not show where the Git instructions said it should. My preferences show C:\Users\jack6\AppData\Roaming\GIMP\3.0\plug-ins AND C:\Users\jack6\AppData\Roaming\GIMP\3.0\plug-ins as plug-in directories. (Why 2 locations I am not sure, so I put the script directory in both.)  See screenshot.<br />
 <br />
It is supposed to show up under Filters&gt;Enhance but it does not. This is the first plug-in I have loaded manually, so am I missing something ? <br />
<br />
GIT instructions simply say:<br />
[*]1 Download the <a href="https://github.com/Nenotriple/gimp_upscale/releases" target="_blank">latest release</a>:gimp3_upscale.zip<br />
<br />
[*]for GIMP 3.0<br />
2 Extract the plug-in folder into your GIMP plug-ins directory.<br />
[*]3 Restart GIMP.<br />
<br />
To use it <br />
[*]1 Open an image in GIMP.<br />
[*]2 Go to Filters &gt; Enhance &gt; AI Upscale..<br />
<br />
but that entry is not there.<br />
Suggestions ?<br />
<br />
NOTE: I just tried to use the Help &gt; Plugin Browser and it does not find anything. Not sure if that helps. <br />
Thanks<br />
<br />
<br />
GIMP 3.0.0<br />
Windows 10<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14306" target="_blank" title="">Screenshot.jpg</a> (Size: 299.95 KB / Downloads: 66)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[UPDATE: So I have GIMP 3.0.0 and 2.10.38 installed on my system. After having the below issue with 3.0 I tried 2.1 and it worked fine. So this seems to be a 3.0 issue.<br />
-------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />
I installed gimp3_upscale but when I restarted Gimp the plug-in did not show where the Git instructions said it should. My preferences show C:\Users\jack6\AppData\Roaming\GIMP\3.0\plug-ins AND C:\Users\jack6\AppData\Roaming\GIMP\3.0\plug-ins as plug-in directories. (Why 2 locations I am not sure, so I put the script directory in both.)  See screenshot.<br />
 <br />
It is supposed to show up under Filters&gt;Enhance but it does not. This is the first plug-in I have loaded manually, so am I missing something ? <br />
<br />
GIT instructions simply say:<br />
[*]1 Download the <a href="https://github.com/Nenotriple/gimp_upscale/releases" target="_blank">latest release</a>:gimp3_upscale.zip<br />
<br />
[*]for GIMP 3.0<br />
2 Extract the plug-in folder into your GIMP plug-ins directory.<br />
[*]3 Restart GIMP.<br />
<br />
To use it <br />
[*]1 Open an image in GIMP.<br />
[*]2 Go to Filters &gt; Enhance &gt; AI Upscale..<br />
<br />
but that entry is not there.<br />
Suggestions ?<br />
<br />
NOTE: I just tried to use the Help &gt; Plugin Browser and it does not find anything. Not sure if that helps. <br />
Thanks<br />
<br />
<br />
GIMP 3.0.0<br />
Windows 10<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14306" target="_blank" title="">Screenshot.jpg</a> (Size: 299.95 KB / Downloads: 66)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[script-fu help]]></title>
			<link>https://www.gimp-forum.net/Thread-script-fu-help</link>
			<pubDate>Sun, 08 Mar 2026 19:43:12 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-script-fu-help</guid>
			<description><![CDATA[Hi, I have a script-fu script I wrote back in 2003, which I use to save the current image in the ../edited folder, and mark the image as "saved". I have been using this script in every version of Gimp since 2003 without changes, but when I tried to use it in Gimp 3.0 I got the error:<br />
<br />
Execution error for 'DoIt':<br />
Error: eval: unbound variable: gimp-image-get-filename<br />
<br />
Does anybody know if the function gimp-image-get-filename has changed in Gimp 3.0, or if I'm missing something in my Gimp installation?<br />
<br />
Thanks,<br />
Eric]]></description>
			<content:encoded><![CDATA[Hi, I have a script-fu script I wrote back in 2003, which I use to save the current image in the ../edited folder, and mark the image as "saved". I have been using this script in every version of Gimp since 2003 without changes, but when I tried to use it in Gimp 3.0 I got the error:<br />
<br />
Execution error for 'DoIt':<br />
Error: eval: unbound variable: gimp-image-get-filename<br />
<br />
Does anybody know if the function gimp-image-get-filename has changed in Gimp 3.0, or if I'm missing something in my Gimp installation?<br />
<br />
Thanks,<br />
Eric]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[re-coloured pixels hide confusingly]]></title>
			<link>https://www.gimp-forum.net/Thread-re-coloured-pixels-hide-confusingly</link>
			<pubDate>Thu, 26 Feb 2026 08:58:15 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-re-coloured-pixels-hide-confusingly</guid>
			<description><![CDATA[Hello,<br />
I have been exploring Script-Fu recently, and found that the procedure "gimp-drawable-set-pixels" sets the colours of pixels but does not make the new colours visible! I've got to toggle layer visibility off then on for the display to refresh, or copy the modified pixels, paste back over themselves, and merge down.<br />
<br />
I'm aware of the function "gimp-displays-refresh", but calling it doesn't seem to do anything.<br />
<br />
I'm assuming I'm just very stupid and there's a simple way to make the results gimp-drawable-set-pixels visible from script-fu. I certainly feel stupid after spending so much time trying to figure out something so seemingly simple, so as a last resort I figured I'd ask here.  <img src="https://www.gimp-forum.net/images/smilies/wink.png" alt="Wink" title="Wink" class="smilie smilie_2" />]]></description>
			<content:encoded><![CDATA[Hello,<br />
I have been exploring Script-Fu recently, and found that the procedure "gimp-drawable-set-pixels" sets the colours of pixels but does not make the new colours visible! I've got to toggle layer visibility off then on for the display to refresh, or copy the modified pixels, paste back over themselves, and merge down.<br />
<br />
I'm aware of the function "gimp-displays-refresh", but calling it doesn't seem to do anything.<br />
<br />
I'm assuming I'm just very stupid and there's a simple way to make the results gimp-drawable-set-pixels visible from script-fu. I certainly feel stupid after spending so much time trying to figure out something so seemingly simple, so as a last resort I figured I'd ask here.  <img src="https://www.gimp-forum.net/images/smilies/wink.png" alt="Wink" title="Wink" class="smilie smilie_2" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hiding Unwanted System Fonts in Dock, etc]]></title>
			<link>https://www.gimp-forum.net/Thread-Hiding-Unwanted-System-Fonts-in-Dock-etc</link>
			<pubDate>Tue, 24 Feb 2026 02:33:43 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Hiding-Unwanted-System-Fonts-in-Dock-etc</guid>
			<description><![CDATA[Last year I switched from PC to Mac for a variety of reasons, but that's irrelevant. One of the most annoying things I've encountered with GIMP since switching OS is the Fonts dock.<br />
<br />
No longer can I search within the dock for a font, I either have to input into the tool options spelled exactly correctly or scroll endlessly through all the pre-installed system &amp; language fonts I'm never ever ever ever going to use.<br />
<br />
I want to... 1) get all these pre-installed system fonts out of this dock, period. They are useless me, there is so many they take up like at least 2/3 maybe 3/4 of the list, they just cause me to waste several minutes scrolling through them constantly if I'm browsing for the font that feels right, and clutter up the list in general. I also am wondering 2) why can't I search in this dock? Am I doing something wrong? The input fields above and below the list appear to not do anything at all, but that can't be the case or they wouldn't be there.<br />
<br />
Plz halp thx <img src="https://www.gimp-forum.net/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></description>
			<content:encoded><![CDATA[Last year I switched from PC to Mac for a variety of reasons, but that's irrelevant. One of the most annoying things I've encountered with GIMP since switching OS is the Fonts dock.<br />
<br />
No longer can I search within the dock for a font, I either have to input into the tool options spelled exactly correctly or scroll endlessly through all the pre-installed system &amp; language fonts I'm never ever ever ever going to use.<br />
<br />
I want to... 1) get all these pre-installed system fonts out of this dock, period. They are useless me, there is so many they take up like at least 2/3 maybe 3/4 of the list, they just cause me to waste several minutes scrolling through them constantly if I'm browsing for the font that feels right, and clutter up the list in general. I also am wondering 2) why can't I search in this dock? Am I doing something wrong? The input fields above and below the list appear to not do anything at all, but that can't be the case or they wouldn't be there.<br />
<br />
Plz halp thx <img src="https://www.gimp-forum.net/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[GIMP 3 Python Enums: Definitive Plug-in and Script-Fu Guide]]></title>
			<link>https://www.gimp-forum.net/Thread-GIMP-3-Python-Enums-Definitive-Plug-in-and-Script-Fu-Guide</link>
			<pubDate>Mon, 23 Feb 2026 12:06:47 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-GIMP-3-Python-Enums-Definitive-Plug-in-and-Script-Fu-Guide</guid>
			<description><![CDATA[If you’re developing Python plug-ins or Script-Fu scripts for GIMP 3, you’ll know the frustration of tracking down correct enum values. The official API docs are written for C developers, leaving Python authors to piece things together from source code, forum posts, and trial and error.<br />
<br />
I’ve put together what I hope is the definitive reference: every enum available in GIMP 3.0, compiled directly from a live GIMP 3.0.8 instance using a Python-Fu console script. That means the values are guaranteed accurate for that version. And the script is available as a free download so you can regenerate the complete listing for any future GIMP 3 release.<br />
<br />
Each enum includes:<br />
<ul>
<li>the Python form you actually use in your plug-ins (e.g. Gimp.LayerMode.NORMAL)<br />
</li>
<li>the uppercase PDB identifier, most useful when cross-referencing with the C API docs or porting code from GIMP 2.x Script-Fu scripts<br />
</li>
<li>the raw integer value for legacy Script-Fu work<br />
</li>
<li>the GEGL nickname for serialisation.<br />
</li></ul>
The Gimp.LayerMode table also includes the full GEGL operation string.<br />
<br />
Every enum has a plain-English description written specifically for Python and Script-Fu developers.<br />
<br />
<a href="https://www.chuckhenrich.com/gimp-3-python-enums-complete-reference/" target="_blank">https://www.chuckhenrich.com/gimp-3-pyth...reference/</a><br />
<br />
Comments/suggestions welcome.]]></description>
			<content:encoded><![CDATA[If you’re developing Python plug-ins or Script-Fu scripts for GIMP 3, you’ll know the frustration of tracking down correct enum values. The official API docs are written for C developers, leaving Python authors to piece things together from source code, forum posts, and trial and error.<br />
<br />
I’ve put together what I hope is the definitive reference: every enum available in GIMP 3.0, compiled directly from a live GIMP 3.0.8 instance using a Python-Fu console script. That means the values are guaranteed accurate for that version. And the script is available as a free download so you can regenerate the complete listing for any future GIMP 3 release.<br />
<br />
Each enum includes:<br />
<ul>
<li>the Python form you actually use in your plug-ins (e.g. Gimp.LayerMode.NORMAL)<br />
</li>
<li>the uppercase PDB identifier, most useful when cross-referencing with the C API docs or porting code from GIMP 2.x Script-Fu scripts<br />
</li>
<li>the raw integer value for legacy Script-Fu work<br />
</li>
<li>the GEGL nickname for serialisation.<br />
</li></ul>
The Gimp.LayerMode table also includes the full GEGL operation string.<br />
<br />
Every enum has a plain-English description written specifically for Python and Script-Fu developers.<br />
<br />
<a href="https://www.chuckhenrich.com/gimp-3-python-enums-complete-reference/" target="_blank">https://www.chuckhenrich.com/gimp-3-pyth...reference/</a><br />
<br />
Comments/suggestions welcome.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[New contact sheet plugin for GIMP 3]]></title>
			<link>https://www.gimp-forum.net/Thread-New-contact-sheet-plugin-for-GIMP-3</link>
			<pubDate>Wed, 18 Feb 2026 14:00:52 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-New-contact-sheet-plugin-for-GIMP-3</guid>
			<description><![CDATA[I've released version 1 of my Contact Sheet plug-in for GIMP 3:<br />
<br />
<a href="https://www.chuckhenrich.com/contact-sheets-in-gimp-3/" target="_blank">https://www.chuckhenrich.com/contact-sheets-in-gimp-3/</a><br />
<br />
Details are in the blog post. Here's a screenshot of the main dialog:<br />
<br />
<img src="https://www.chuckhenrich.com/wp-content/uploads/2026/02/contact-sheet-v3-main-dialog-update-1.webp" border="0" alt="[Image: contact-sheet-v3-main-dialog-update-1.webp]" /><br />
<br />
Supported languages are:<br />
<br />
Nederlands (Dutch)<br />
English<br />
Français (French (Français)<br />
Deutsch (German)<br />
Italiano (Italian)<br />
Magyar (Hungarian)<br />
日本語 (Japanese)<br />
Polski (Polish)<br />
Português (Portuguese)<br />
Português (Brazilian)<br />
Español (Spanish)<br />
Українська (Ukrainian)<br />
简体中文 (Chinese (Simplified))<br />
繁體中文 (Chinese (Traditional))<br />
<br />
Many many thanks to Joe over at pixls.us for the inspiration, ideas, and robust testing!<br />
<br />
Please let me know what you think. And if you have any suggestions, I'm all ears.]]></description>
			<content:encoded><![CDATA[I've released version 1 of my Contact Sheet plug-in for GIMP 3:<br />
<br />
<a href="https://www.chuckhenrich.com/contact-sheets-in-gimp-3/" target="_blank">https://www.chuckhenrich.com/contact-sheets-in-gimp-3/</a><br />
<br />
Details are in the blog post. Here's a screenshot of the main dialog:<br />
<br />
<img src="https://www.chuckhenrich.com/wp-content/uploads/2026/02/contact-sheet-v3-main-dialog-update-1.webp" border="0" alt="[Image: contact-sheet-v3-main-dialog-update-1.webp]" /><br />
<br />
Supported languages are:<br />
<br />
Nederlands (Dutch)<br />
English<br />
Français (French (Français)<br />
Deutsch (German)<br />
Italiano (Italian)<br />
Magyar (Hungarian)<br />
日本語 (Japanese)<br />
Polski (Polish)<br />
Português (Portuguese)<br />
Português (Brazilian)<br />
Español (Spanish)<br />
Українська (Ukrainian)<br />
简体中文 (Chinese (Simplified))<br />
繁體中文 (Chinese (Traditional))<br />
<br />
Many many thanks to Joe over at pixls.us for the inspiration, ideas, and robust testing!<br />
<br />
Please let me know what you think. And if you have any suggestions, I'm all ears.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to make a mask from a selection?]]></title>
			<link>https://www.gimp-forum.net/Thread-How-to-make-a-mask-from-a-selection</link>
			<pubDate>Sat, 07 Feb 2026 08:54:22 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-How-to-make-a-mask-from-a-selection</guid>
			<description><![CDATA[Hi there, I am working on extending GIMP with AI functions. I ditched Photoshop lately and my pals at the Photo Club keep telling me that I am a fool to have ditched PS with all it's nice AI functions. They shouldn't say that to me...<br />
<br />
At this moment I've got AI Remove Background working, using IOPaint that runs locally on my laptop. It still needs some fine tuning, but it works.<br />
<br />
Now I am working on 'inpaint' (filling a selection with a generated background). I am struggling now how to make a mask from a selection. The GIMP API has many procedures, but just copying a selection seems not to be easy. Is there anyone who has some experience with this?<br />
<br />
<br />
P.S. I am new to Gimp Forum, so maybe I missed earlier questions/discussions like this.]]></description>
			<content:encoded><![CDATA[Hi there, I am working on extending GIMP with AI functions. I ditched Photoshop lately and my pals at the Photo Club keep telling me that I am a fool to have ditched PS with all it's nice AI functions. They shouldn't say that to me...<br />
<br />
At this moment I've got AI Remove Background working, using IOPaint that runs locally on my laptop. It still needs some fine tuning, but it works.<br />
<br />
Now I am working on 'inpaint' (filling a selection with a generated background). I am struggling now how to make a mask from a selection. The GIMP API has many procedures, but just copying a selection seems not to be easy. Is there anyone who has some experience with this?<br />
<br />
<br />
P.S. I am new to Gimp Forum, so maybe I missed earlier questions/discussions like this.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[arakne path shapes]]></title>
			<link>https://www.gimp-forum.net/Thread-arakne-path-shapes</link>
			<pubDate>Wed, 04 Feb 2026 16:18:13 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-arakne-path-shapes</guid>
			<description><![CDATA[An update from the 2.10 plugin for Gimp 3<br />
<br />
<a href="https://www.arakne.es/en/gimp-plugin-shape-creator-2025/" target="_blank">https://www.arakne.es/en/gimp-plugin-sha...ator-2025/</a><br />
<br />
All sorts of shapes as paths, there is a demo video on the above]]></description>
			<content:encoded><![CDATA[An update from the 2.10 plugin for Gimp 3<br />
<br />
<a href="https://www.arakne.es/en/gimp-plugin-shape-creator-2025/" target="_blank">https://www.arakne.es/en/gimp-plugin-sha...ator-2025/</a><br />
<br />
All sorts of shapes as paths, there is a demo video on the above]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Display not keeping up with image changes in plug-in]]></title>
			<link>https://www.gimp-forum.net/Thread-Display-not-keeping-up-with-image-changes-in-plug-in</link>
			<pubDate>Sun, 25 Jan 2026 17:42:41 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Display-not-keeping-up-with-image-changes-in-plug-in</guid>
			<description><![CDATA[I am new to writing plug-ins - I've only done two. They are python on Gimp 3.0.6, running on Windows 11.<br />
<br />
This one opens an image from a file and then assigns a display as follows:<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;infile = Gio.File.new_for_path(os.path.join(img_folder, img_name))<br />
&nbsp;&nbsp;&nbsp;&nbsp;img = Gimp.file_load(Gimp.RunMode.INTERACTIVE, infile)<br />
&nbsp;&nbsp;&nbsp;&nbsp;disp = Gimp.Display.new(img)</code></div></div>
This all works, it shows up on the display.<br />
<br />
Then, the display is resized, new values are calculated:<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>img.scale(new_width, new_height)</code></div></div>
It is then written out to a JPEG, rescaled again down to thumbnail size, and written out again.<br />
<br />
Then the image is cleaned up and the display deleted, which removes the image as well.<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>img.clean_all()<br />
disp.delete()</code></div></div>
Then the whole process starts again with a new file.<br />
<br />
It all basically works fine, the JPEGs turn up OK. But, as the images are progressively shrunk, the display doesn't keep up. Basically, it's hard to describe or show, but just pieces of the shrunken images show up. I could if necessary try to video it.<br />
<br />
But, if I run the commands one by one in the python console, no problem at all, it all looks fine. I assume this is because it is done slowly. The display is probably on a diffierent thread and isn't getting a look in when running at speed.<br />
<br />
It isn't a show stopper, the files are fine, but it looks messy.<br />
<br />
Is there a way round this, flushing all the display commands, for example,? Cannot find anything in Gimp.Display.]]></description>
			<content:encoded><![CDATA[I am new to writing plug-ins - I've only done two. They are python on Gimp 3.0.6, running on Windows 11.<br />
<br />
This one opens an image from a file and then assigns a display as follows:<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;infile = Gio.File.new_for_path(os.path.join(img_folder, img_name))<br />
&nbsp;&nbsp;&nbsp;&nbsp;img = Gimp.file_load(Gimp.RunMode.INTERACTIVE, infile)<br />
&nbsp;&nbsp;&nbsp;&nbsp;disp = Gimp.Display.new(img)</code></div></div>
This all works, it shows up on the display.<br />
<br />
Then, the display is resized, new values are calculated:<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>img.scale(new_width, new_height)</code></div></div>
It is then written out to a JPEG, rescaled again down to thumbnail size, and written out again.<br />
<br />
Then the image is cleaned up and the display deleted, which removes the image as well.<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>img.clean_all()<br />
disp.delete()</code></div></div>
Then the whole process starts again with a new file.<br />
<br />
It all basically works fine, the JPEGs turn up OK. But, as the images are progressively shrunk, the display doesn't keep up. Basically, it's hard to describe or show, but just pieces of the shrunken images show up. I could if necessary try to video it.<br />
<br />
But, if I run the commands one by one in the python console, no problem at all, it all looks fine. I assume this is because it is done slowly. The display is probably on a diffierent thread and isn't getting a look in when running at speed.<br />
<br />
It isn't a show stopper, the files are fine, but it looks messy.<br />
<br />
Is there a way round this, flushing all the display commands, for example,? Cannot find anything in Gimp.Display.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[script-fu examples - batch export]]></title>
			<link>https://www.gimp-forum.net/Thread-script-fu-examples-batch-export</link>
			<pubDate>Sat, 24 Jan 2026 09:56:45 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-script-fu-examples-batch-export</guid>
			<description><![CDATA[This is a script-fu batch plugin. <a href="https://www.maxbronner.dev/blog/dev_2025-03-26" target="_blank">https://www.maxbronner.dev/blog/dev_2025-03-26</a><br />
and for a download <a href="https://github.com/max-bronner/gimp3-image-export-plugin" target="_blank">https://github.com/max-bronner/gimp3-ima...ort-plugin</a><br />
<br />
The only comment I have on that is for linux make sure that batch-export.scm is made executable.<br />
<br />
It scales then exports opened images in a variety of formats.  That might not be what you specifically want but it is relatively clear as to the export syntax which is useful.]]></description>
			<content:encoded><![CDATA[This is a script-fu batch plugin. <a href="https://www.maxbronner.dev/blog/dev_2025-03-26" target="_blank">https://www.maxbronner.dev/blog/dev_2025-03-26</a><br />
and for a download <a href="https://github.com/max-bronner/gimp3-image-export-plugin" target="_blank">https://github.com/max-bronner/gimp3-ima...ort-plugin</a><br />
<br />
The only comment I have on that is for linux make sure that batch-export.scm is made executable.<br />
<br />
It scales then exports opened images in a variety of formats.  That might not be what you specifically want but it is relatively clear as to the export syntax which is useful.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Perspective tool anchors.]]></title>
			<link>https://www.gimp-forum.net/Thread-Perspective-tool-anchors</link>
			<pubDate>Fri, 23 Jan 2026 21:53:51 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Perspective-tool-anchors</guid>
			<description><![CDATA[When using the perspective tool to modify an image that needs much adjustment the process could be made better. It appears that the perspective tool anchors the original corners of the picture except for the one you are changing even after they have moved. Doing it this way causes the alignment of the other corners to change requiring you to readjust them (sometimes more than once). Wouldn't it be better to anchor the other corners on the new corner of the picture so they don't require readjustment after set? (Hope that makes sense). Or have a button for that option. First picture is original, second is first pass, third is second pass, 4th is final.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14212" target="_blank" title="">original.jpg</a> (Size: 285.49 KB / Downloads: 108)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14213" target="_blank" title="">afteroneround.jpg</a> (Size: 266.94 KB / Downloads: 96)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14214" target="_blank" title="">aftersecondround.jpg</a> (Size: 259.13 KB / Downloads: 101)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14215" target="_blank" title="">result.jpg</a> (Size: 242.47 KB / Downloads: 98)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[When using the perspective tool to modify an image that needs much adjustment the process could be made better. It appears that the perspective tool anchors the original corners of the picture except for the one you are changing even after they have moved. Doing it this way causes the alignment of the other corners to change requiring you to readjust them (sometimes more than once). Wouldn't it be better to anchor the other corners on the new corner of the picture so they don't require readjustment after set? (Hope that makes sense). Or have a button for that option. First picture is original, second is first pass, third is second pass, 4th is final.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14212" target="_blank" title="">original.jpg</a> (Size: 285.49 KB / Downloads: 108)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14213" target="_blank" title="">afteroneround.jpg</a> (Size: 266.94 KB / Downloads: 96)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14214" target="_blank" title="">aftersecondround.jpg</a> (Size: 259.13 KB / Downloads: 101)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gimp-forum.net/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14215" target="_blank" title="">result.jpg</a> (Size: 242.47 KB / Downloads: 98)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to get the full path from a GFile]]></title>
			<link>https://www.gimp-forum.net/Thread-How-to-get-the-full-path-from-a-GFile</link>
			<pubDate>Wed, 21 Jan 2026 11:09:05 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-How-to-get-the-full-path-from-a-GFile</guid>
			<description><![CDATA[Development on Windows 11 using python 3 in Gimp 3.0.6.<br />
<br />
I can find no way of getting the path from a GFile returned from the parameter setting dialog in a plugin.<br />
<br />
A file parameter is created by<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>procedure.add_file_argument("src-folder",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Source folder",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Location of files to parse",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gimp.FileChooserAction.CREATE_FOLDER,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;False,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GObject.ParamFlags.READWRITE)</code></div></div>
The purpose of this is to allow browsing for a directory. It shows up in the plugin dialog as a directory browser, and a directory can be selected.<br />
<br />
The parameter is then obtained after the dialog has run as<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>src_gfile = config.get_property("src-folder")</code></div></div>
This has returned a GFile, not (unfortunately) a string path. The question is, how do I get the path out of the GFile? (I need it because I need to do some manipulations on it).<br />
<br />
I've tried various things - src_gfile.get_path() produced nothing (though in another plugin I looked at it clearly did looking at the code, but that may have been on Linux, not Windows). I did find that if in the python console I create a GFile and get the path as<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>file = Gio.File.new_for_path("C:&#92;&#92;a&#92;&#92;b&#92;&#92;c")<br />
file.get_path()</code></div></div>
I do get the path as 'C:\a\b\c' - but not when it comes from the config as above.<br />
<br />
src_gfile.get_uri() does produce the URI as a string, looking something line 'file:\\\C:\a\b\c'. Being a URI, it has the scheme on the from, and I can lose the 'file:\\\' by editing the string, but can't help feeling that is a bodge, certainly not cross platform.<br />
<br />
I then found query_info(). So I tried<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>file_info = src_gfile.query_info("standard::*", Gio.FileQueryInfoFlags.NONE, None)<br />
file_info.get_display_name()</code></div></div>
I do get something back - but it's only the final leaf, ie 'c', not the full path and I can't find any method that does that.<br />
<br />
So, basically, I can find no way of tidily get the full path as a string from a GFile. Can anyone help?]]></description>
			<content:encoded><![CDATA[Development on Windows 11 using python 3 in Gimp 3.0.6.<br />
<br />
I can find no way of getting the path from a GFile returned from the parameter setting dialog in a plugin.<br />
<br />
A file parameter is created by<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>procedure.add_file_argument("src-folder",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Source folder",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Location of files to parse",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gimp.FileChooserAction.CREATE_FOLDER,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;False,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GObject.ParamFlags.READWRITE)</code></div></div>
The purpose of this is to allow browsing for a directory. It shows up in the plugin dialog as a directory browser, and a directory can be selected.<br />
<br />
The parameter is then obtained after the dialog has run as<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>src_gfile = config.get_property("src-folder")</code></div></div>
This has returned a GFile, not (unfortunately) a string path. The question is, how do I get the path out of the GFile? (I need it because I need to do some manipulations on it).<br />
<br />
I've tried various things - src_gfile.get_path() produced nothing (though in another plugin I looked at it clearly did looking at the code, but that may have been on Linux, not Windows). I did find that if in the python console I create a GFile and get the path as<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>file = Gio.File.new_for_path("C:&#92;&#92;a&#92;&#92;b&#92;&#92;c")<br />
file.get_path()</code></div></div>
I do get the path as 'C:\a\b\c' - but not when it comes from the config as above.<br />
<br />
src_gfile.get_uri() does produce the URI as a string, looking something line 'file:\\\C:\a\b\c'. Being a URI, it has the scheme on the from, and I can lose the 'file:\\\' by editing the string, but can't help feeling that is a bodge, certainly not cross platform.<br />
<br />
I then found query_info(). So I tried<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>file_info = src_gfile.query_info("standard::*", Gio.FileQueryInfoFlags.NONE, None)<br />
file_info.get_display_name()</code></div></div>
I do get something back - but it's only the final leaf, ie 'c', not the full path and I can't find any method that does that.<br />
<br />
So, basically, I can find no way of tidily get the full path as a string from a GFile. Can anyone help?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Where does python debug output go?]]></title>
			<link>https://www.gimp-forum.net/Thread-Where-does-python-debug-output-go</link>
			<pubDate>Tue, 20 Jan 2026 17:36:32 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Where-does-python-debug-output-go</guid>
			<description><![CDATA[I'm trying to debug a python plugin on gimp 3.0.6 on Windows 11. I can get all the section of code to run in the python console, but nothing turns up in the plugin itself except the specified dialog.<br />
<br />
I cannot find out where any message output goes. Is there any way of putting the equivalent of print() statements in the code and having it turn up on a console somewhere? I'm running it from the command line as gimp-3.0.exe --verbose.]]></description>
			<content:encoded><![CDATA[I'm trying to debug a python plugin on gimp 3.0.6 on Windows 11. I can get all the section of code to run in the python console, but nothing turns up in the plugin itself except the specified dialog.<br />
<br />
I cannot find out where any message output goes. Is there any way of putting the equivalent of print() statements in the code and having it turn up on a console somewhere? I'm running it from the command line as gimp-3.0.exe --verbose.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[1st plugin attempt - save jpeg question]]></title>
			<link>https://www.gimp-forum.net/Thread-1st-plugin-attempt-save-jpeg-question</link>
			<pubDate>Sun, 18 Jan 2026 14:47:14 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-1st-plugin-attempt-save-jpeg-question</guid>
			<description><![CDATA[I am embarking on my 1st (python) plugin using GIMP 3. I'm a long term (basic) Photoshop user and have a lot of software design experience - but virtually no GIMP experience and zero python experience. So, it's a bit of a learning curve. <br />
<br />
What I'm doing is pretty simple, replicating something I used to do with Photoshop using VB (OLE) automation. Basically, a batch process - need to point to a source directory containing images of various types and resolutions (TIF, PSD, JPG etc), then to load them one by one, perform some basic (automatic) changes, and write them out one by one as JPEGs  to a different directory.<br />
<br />
I've got the basic plugin shell going, with a dialog to select directories etc, define the automatic changes and so on, and it seems to work fine.<br />
<br />
I think I can see how to get the source filenames using scandir() imported from os. Now looking at loading the files and writing the JPEGs. I assume I can use Gimp.file_load() to load an image.<br />
<br />
But, when one writes a JPEG, there are usually some parameters - the JPEG level for file compression to start with. I cannot see any function for doing that. I found Gimp.file_save(run_mode, image, file, options), but it says options isn't used. I really don't want it to pop up a dialog to set these things.<br />
<br />
So my basic questions are, is file_load() the right way to load an image, and how do I save a JPEG setting all necessary parameters programmatically?]]></description>
			<content:encoded><![CDATA[I am embarking on my 1st (python) plugin using GIMP 3. I'm a long term (basic) Photoshop user and have a lot of software design experience - but virtually no GIMP experience and zero python experience. So, it's a bit of a learning curve. <br />
<br />
What I'm doing is pretty simple, replicating something I used to do with Photoshop using VB (OLE) automation. Basically, a batch process - need to point to a source directory containing images of various types and resolutions (TIF, PSD, JPG etc), then to load them one by one, perform some basic (automatic) changes, and write them out one by one as JPEGs  to a different directory.<br />
<br />
I've got the basic plugin shell going, with a dialog to select directories etc, define the automatic changes and so on, and it seems to work fine.<br />
<br />
I think I can see how to get the source filenames using scandir() imported from os. Now looking at loading the files and writing the JPEGs. I assume I can use Gimp.file_load() to load an image.<br />
<br />
But, when one writes a JPEG, there are usually some parameters - the JPEG level for file compression to start with. I cannot see any function for doing that. I found Gimp.file_save(run_mode, image, file, options), but it says options isn't used. I really don't want it to pop up a dialog to set these things.<br />
<br />
So my basic questions are, is file_load() the right way to load an image, and how do I save a JPEG setting all necessary parameters programmatically?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Photobooth "look" - python script]]></title>
			<link>https://www.gimp-forum.net/Thread-Photobooth-look-python-script</link>
			<pubDate>Fri, 09 Jan 2026 07:42:52 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Photobooth-look-python-script</guid>
			<description><![CDATA[Hello<br />
I asked Gemini GPT about how to replicate a colour chemical photobooth look in GIMP. Gemini explained the photobooth history, different lenses and chemical approaches and eventually wrote me a python script that creates the look.<br />
Of course, the python script looks the part to an neophyte such as myself, but does not work either in python3 or Gimp python or as a filter. It does not show in GEGL either.<br />
(I have yet to get a GPT sourced python script that works off the bat, so dev still have a career in front of them).<br />
The funny thing is, the every time I ask the GPT to correct the script, it finds an "error" to correct, but none of these corrections ever make the code work.<br />
The primary issue is that when I run the script in fu-script, I get loads of indentation error! Python indentation drives me crazy.<br />
Therefore ... Does anyone know if there is a working "photobooth" GIMP script?<br />
Can anyone help me debug this script for GIMP 3 linux  please ?<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
<br />
import sys<br />
import gi<br />
import datetime<br />
<br />
try:<br />
    gi.require_version('Gimp', '3.0')<br />
    gi.require_version('Gegl', '0.4')<br />
    from gi.repository import Gimp, Gegl, GObject, GLib<br />
except ValueError, e:<br />
    sys.exit(1)<br />
<br />
<br />
def apply_schneider_look(image, drawable):<br />
    """Applies optical and chemical effects."""<br />
<br />
    pdb = Gimp.get_pdb()<br />
<br />
    # 1. Mirror<br />
<br />
    drawable.transform_flip_simple(Gimp.OrientationType.HORIZONTAL,<br />
                                   True, 0)<br />
<br />
    # 2. Schneider Optical Effects<br />
    # We use Gimp.ValueArray.new(count) for GIMP 3 compatibility<br />
<br />
    dist_args = Gimp.ValueArray.new(3)<br />
    dist_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    dist_args.insert(1, GObject.Value(GObject.TYPE_STRING,<br />
                     'gegl:lens-distortion'))<br />
    pdb.run_procedure('gimp-drawable-edit-gegl-config', dist_args)<br />
<br />
    bloom_args = Gimp.ValueArray.new(3)<br />
    bloom_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    bloom_args.insert(1, GObject.Value(GObject.TYPE_STRING, 'gegl:bloom'<br />
                      ))<br />
    pdb.run_procedure('gimp-drawable-edit-gegl-config', bloom_args)<br />
<br />
    # 3. Chemical Color Shift<br />
<br />
    cb_args = Gimp.ValueArray.new(11)<br />
    cb_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    cb_args.insert(1, GObject.Value(GObject.TYPE_DOUBLE, -0.15))<br />
    cb_args.insert(2, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(3, GObject.Value(GObject.TYPE_DOUBLE, 0.10))<br />
    cb_args.insert(4, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(5, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(6, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(7, GObject.Value(GObject.TYPE_DOUBLE, 0.10))<br />
    cb_args.insert(8, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(9, GObject.Value(GObject.TYPE_DOUBLE, -0.25))<br />
    cb_args.insert(10, GObject.Value(GObject.TYPE_BOOLEAN, True))<br />
    pdb.run_procedure('gimp-drawable-color-balance', cb_args)<br />
<br />
    # 4. Silver Halide Grain<br />
<br />
    grain_args = Gimp.ValueArray.new(3)<br />
    grain_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    grain_args.insert(1, GObject.Value(GObject.TYPE_STRING,<br />
                      'gegl:noise-rgb'))<br />
    pdb.run_procedure('gimp-drawable-edit-gegl-config', grain_args)<br />
<br />
<br />
def photobooth_main_proc(<br />
    procedure,<br />
    run_mode,<br />
    image,<br />
    drawables,<br />
    args,<br />
    data,<br />
    ):<br />
    Gimp.context_push()<br />
    image.undo_group_start()<br />
<br />
    # Constants<br />
<br />
    (STRIP_W, STRIP_H) = (600, 1800)<br />
    (MARGIN, FRAME_H) = (40, 400)<br />
<br />
    new_image = Gimp.Image.new(STRIP_W, STRIP_H, Gimp.ImageBaseType.RGB)<br />
<br />
    bg_color = Gimp.RGB()<br />
    bg_color.set_parse('#F9F7F2')<br />
    bg_layer = Gimp.Layer.new(<br />
        new_image,<br />
        'Paper Base',<br />
        STRIP_W,<br />
        STRIP_H,<br />
        Gimp.Precision.U8_GAMMA,<br />
        100,<br />
        Gimp.LayerMode.NORMAL,<br />
        )<br />
    new_image.insert_layer(bg_layer, None, 0)<br />
    Gimp.context_set_background(bg_color)<br />
    bg_layer.fill(Gimp.FillType.BACKGROUND)<br />
<br />
    y_offset = MARGIN<br />
    for i in range(min(len(drawables), 4)):<br />
        source_layer = drawables[i]<br />
        new_frame = Gimp.Layer.new_from_drawable(source_layer,<br />
                new_image)<br />
        new_image.insert_layer(new_frame, None, -1)<br />
<br />
        apply_schneider_look(new_image, new_frame)<br />
<br />
        target_w = STRIP_W - MARGIN * 2<br />
        scale_ratio = target_w / new_frame.get_width()<br />
        new_frame.scale(target_w, int(new_frame.get_height()<br />
                        * scale_ratio), True)<br />
        new_frame.set_offsets(MARGIN, y_offset)<br />
        y_offset += FRAME_H + 15<br />
<br />
    # Mechanical Date Stamp<br />
<br />
    stamp_color = Gimp.RGB()<br />
    stamp_color.set_parse('#B22222')<br />
    Gimp.context_set_foreground(stamp_color)<br />
    date_str = datetime.datetime.now().strftime('PHOTO-ME - %d %b %Y'<br />
            ).upper()<br />
<br />
    # Text Layer logic for GIMP 3<br />
<br />
    stamp_layer = Gimp.text_fontname(<br />
        new_image,<br />
        None,<br />
        0,<br />
        0,<br />
        date_str,<br />
        0,<br />
        True,<br />
        18,<br />
        'Sans-Serif',<br />
        )<br />
    if stamp_layer:<br />
        stamp_layer.transform_rotate_simple(Gimp.OrientationType.VERTICAL,<br />
                True, 0, 0)<br />
        stamp_layer.set_offsets(STRIP_W - 35, STRIP_H - 450)<br />
        stamp_layer.set_opacity(70)<br />
<br />
    Gimp.Display.new(new_image)<br />
    image.undo_group_end()<br />
    Gimp.context_pop()<br />
    Gimp.displays_flush()<br />
<br />
    return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS,<br />
            GLib.Error())<br />
<br />
<br />
class PhotoboothPro(Gimp.PlugIn):<br />
<br />
    def do_query_procedures(self):<br />
        return ['python-fu-photobooth-pro']<br />
<br />
    def do_create_procedure(self, name):<br />
        procedure = Gimp.ImageProcedure.new(self, name,<br />
                Gimp.PDBProcType.PLUGIN, photobooth_main_proc, None)<br />
        procedure.set_image_types('RGB*')<br />
        procedure.set_documentation('Schneider Photobooth Pro',<br />
                                    'Full analog strip recreation',<br />
                                    name)<br />
        procedure.set_menu_label('Schneider Photobooth Pro...')<br />
        procedure.add_menu_path('&lt;Image&gt;/Filters/Artistic')<br />
        procedure.set_attribution('Gemini', 'Gemini', '2026')<br />
        return procedure<br />
<br />
<br />
Gimp.main(PhotoboothPro.__gtype__, sys.argv)</code></div></div>
]]></description>
			<content:encoded><![CDATA[Hello<br />
I asked Gemini GPT about how to replicate a colour chemical photobooth look in GIMP. Gemini explained the photobooth history, different lenses and chemical approaches and eventually wrote me a python script that creates the look.<br />
Of course, the python script looks the part to an neophyte such as myself, but does not work either in python3 or Gimp python or as a filter. It does not show in GEGL either.<br />
(I have yet to get a GPT sourced python script that works off the bat, so dev still have a career in front of them).<br />
The funny thing is, the every time I ask the GPT to correct the script, it finds an "error" to correct, but none of these corrections ever make the code work.<br />
The primary issue is that when I run the script in fu-script, I get loads of indentation error! Python indentation drives me crazy.<br />
Therefore ... Does anyone know if there is a working "photobooth" GIMP script?<br />
Can anyone help me debug this script for GIMP 3 linux  please ?<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
<br />
import sys<br />
import gi<br />
import datetime<br />
<br />
try:<br />
    gi.require_version('Gimp', '3.0')<br />
    gi.require_version('Gegl', '0.4')<br />
    from gi.repository import Gimp, Gegl, GObject, GLib<br />
except ValueError, e:<br />
    sys.exit(1)<br />
<br />
<br />
def apply_schneider_look(image, drawable):<br />
    """Applies optical and chemical effects."""<br />
<br />
    pdb = Gimp.get_pdb()<br />
<br />
    # 1. Mirror<br />
<br />
    drawable.transform_flip_simple(Gimp.OrientationType.HORIZONTAL,<br />
                                   True, 0)<br />
<br />
    # 2. Schneider Optical Effects<br />
    # We use Gimp.ValueArray.new(count) for GIMP 3 compatibility<br />
<br />
    dist_args = Gimp.ValueArray.new(3)<br />
    dist_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    dist_args.insert(1, GObject.Value(GObject.TYPE_STRING,<br />
                     'gegl:lens-distortion'))<br />
    pdb.run_procedure('gimp-drawable-edit-gegl-config', dist_args)<br />
<br />
    bloom_args = Gimp.ValueArray.new(3)<br />
    bloom_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    bloom_args.insert(1, GObject.Value(GObject.TYPE_STRING, 'gegl:bloom'<br />
                      ))<br />
    pdb.run_procedure('gimp-drawable-edit-gegl-config', bloom_args)<br />
<br />
    # 3. Chemical Color Shift<br />
<br />
    cb_args = Gimp.ValueArray.new(11)<br />
    cb_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    cb_args.insert(1, GObject.Value(GObject.TYPE_DOUBLE, -0.15))<br />
    cb_args.insert(2, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(3, GObject.Value(GObject.TYPE_DOUBLE, 0.10))<br />
    cb_args.insert(4, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(5, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(6, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(7, GObject.Value(GObject.TYPE_DOUBLE, 0.10))<br />
    cb_args.insert(8, GObject.Value(GObject.TYPE_DOUBLE, 0.0))<br />
    cb_args.insert(9, GObject.Value(GObject.TYPE_DOUBLE, -0.25))<br />
    cb_args.insert(10, GObject.Value(GObject.TYPE_BOOLEAN, True))<br />
    pdb.run_procedure('gimp-drawable-color-balance', cb_args)<br />
<br />
    # 4. Silver Halide Grain<br />
<br />
    grain_args = Gimp.ValueArray.new(3)<br />
    grain_args.insert(0, GObject.Value(Gimp.Drawable, drawable))<br />
    grain_args.insert(1, GObject.Value(GObject.TYPE_STRING,<br />
                      'gegl:noise-rgb'))<br />
    pdb.run_procedure('gimp-drawable-edit-gegl-config', grain_args)<br />
<br />
<br />
def photobooth_main_proc(<br />
    procedure,<br />
    run_mode,<br />
    image,<br />
    drawables,<br />
    args,<br />
    data,<br />
    ):<br />
    Gimp.context_push()<br />
    image.undo_group_start()<br />
<br />
    # Constants<br />
<br />
    (STRIP_W, STRIP_H) = (600, 1800)<br />
    (MARGIN, FRAME_H) = (40, 400)<br />
<br />
    new_image = Gimp.Image.new(STRIP_W, STRIP_H, Gimp.ImageBaseType.RGB)<br />
<br />
    bg_color = Gimp.RGB()<br />
    bg_color.set_parse('#F9F7F2')<br />
    bg_layer = Gimp.Layer.new(<br />
        new_image,<br />
        'Paper Base',<br />
        STRIP_W,<br />
        STRIP_H,<br />
        Gimp.Precision.U8_GAMMA,<br />
        100,<br />
        Gimp.LayerMode.NORMAL,<br />
        )<br />
    new_image.insert_layer(bg_layer, None, 0)<br />
    Gimp.context_set_background(bg_color)<br />
    bg_layer.fill(Gimp.FillType.BACKGROUND)<br />
<br />
    y_offset = MARGIN<br />
    for i in range(min(len(drawables), 4)):<br />
        source_layer = drawables[i]<br />
        new_frame = Gimp.Layer.new_from_drawable(source_layer,<br />
                new_image)<br />
        new_image.insert_layer(new_frame, None, -1)<br />
<br />
        apply_schneider_look(new_image, new_frame)<br />
<br />
        target_w = STRIP_W - MARGIN * 2<br />
        scale_ratio = target_w / new_frame.get_width()<br />
        new_frame.scale(target_w, int(new_frame.get_height()<br />
                        * scale_ratio), True)<br />
        new_frame.set_offsets(MARGIN, y_offset)<br />
        y_offset += FRAME_H + 15<br />
<br />
    # Mechanical Date Stamp<br />
<br />
    stamp_color = Gimp.RGB()<br />
    stamp_color.set_parse('#B22222')<br />
    Gimp.context_set_foreground(stamp_color)<br />
    date_str = datetime.datetime.now().strftime('PHOTO-ME - %d %b %Y'<br />
            ).upper()<br />
<br />
    # Text Layer logic for GIMP 3<br />
<br />
    stamp_layer = Gimp.text_fontname(<br />
        new_image,<br />
        None,<br />
        0,<br />
        0,<br />
        date_str,<br />
        0,<br />
        True,<br />
        18,<br />
        'Sans-Serif',<br />
        )<br />
    if stamp_layer:<br />
        stamp_layer.transform_rotate_simple(Gimp.OrientationType.VERTICAL,<br />
                True, 0, 0)<br />
        stamp_layer.set_offsets(STRIP_W - 35, STRIP_H - 450)<br />
        stamp_layer.set_opacity(70)<br />
<br />
    Gimp.Display.new(new_image)<br />
    image.undo_group_end()<br />
    Gimp.context_pop()<br />
    Gimp.displays_flush()<br />
<br />
    return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS,<br />
            GLib.Error())<br />
<br />
<br />
class PhotoboothPro(Gimp.PlugIn):<br />
<br />
    def do_query_procedures(self):<br />
        return ['python-fu-photobooth-pro']<br />
<br />
    def do_create_procedure(self, name):<br />
        procedure = Gimp.ImageProcedure.new(self, name,<br />
                Gimp.PDBProcType.PLUGIN, photobooth_main_proc, None)<br />
        procedure.set_image_types('RGB*')<br />
        procedure.set_documentation('Schneider Photobooth Pro',<br />
                                    'Full analog strip recreation',<br />
                                    name)<br />
        procedure.set_menu_label('Schneider Photobooth Pro...')<br />
        procedure.add_menu_path('&lt;Image&gt;/Filters/Artistic')<br />
        procedure.set_attribution('Gemini', 'Gemini', '2026')<br />
        return procedure<br />
<br />
<br />
Gimp.main(PhotoboothPro.__gtype__, sys.argv)</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Chuck Henrich interactive luminosity masks]]></title>
			<link>https://www.gimp-forum.net/Thread-Chuck-Henrich-interactive-luminosity-masks</link>
			<pubDate>Sat, 03 Jan 2026 09:14:40 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Chuck-Henrich-interactive-luminosity-masks</guid>
			<description><![CDATA[The release of GIMP 3 opens up exciting opportunities to update and extend what plug-ins can do. So he<br />
completely rewrote my GIMP 2 luminosity mask plug-in to take advantage of those new tools.<br />
This new interactive luminosity masks GIMP plug-in lets you choose whether to focus on lights, midtones, or<br />
darks. Then it opens a live preview and a dialog with sliders that allow you to fine-tune your luminosity mask.<br />
That's a much more flexible approach than was available in GIMP 2.<br />
<a href="https://www.chuckhenrich.com/gimp-interactive-luminosity-masks/" target="_blank">https://www.chuckhenrich.com/gimp-intera...ity-masks/</a><br />
Work with gimp 3.2.0-RC1 don't work yet with gimp 3.2.0-RC2. I've reported it to the author.]]></description>
			<content:encoded><![CDATA[The release of GIMP 3 opens up exciting opportunities to update and extend what plug-ins can do. So he<br />
completely rewrote my GIMP 2 luminosity mask plug-in to take advantage of those new tools.<br />
This new interactive luminosity masks GIMP plug-in lets you choose whether to focus on lights, midtones, or<br />
darks. Then it opens a live preview and a dialog with sliders that allow you to fine-tune your luminosity mask.<br />
That's a much more flexible approach than was available in GIMP 2.<br />
<a href="https://www.chuckhenrich.com/gimp-interactive-luminosity-masks/" target="_blank">https://www.chuckhenrich.com/gimp-intera...ity-masks/</a><br />
Work with gimp 3.2.0-RC1 don't work yet with gimp 3.2.0-RC2. I've reported it to the author.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Old PanoTools plugin from Helmut Dersch]]></title>
			<link>https://www.gimp-forum.net/Thread-Old-PanoTools-plugin-from-Helmut-Dersch</link>
			<pubDate>Wed, 31 Dec 2025 14:37:53 +0000</pubDate>
			<guid isPermaLink="false">https://www.gimp-forum.net/Thread-Old-PanoTools-plugin-from-Helmut-Dersch</guid>
			<description><![CDATA[Did anyone used the old PanoTools gimp plugin from Helmut Dersch with gimp 2.10.38?  I tried it with gimp 2.10.38, get no errors when starting gimp but I could't find the plugin in the menu.   <br />
<br />
<a href="https://www.panotools.org/dersch/" target="_blank">https://www.panotools.org/dersch/</a>]]></description>
			<content:encoded><![CDATA[Did anyone used the old PanoTools gimp plugin from Helmut Dersch with gimp 2.10.38?  I tried it with gimp 2.10.38, get no errors when starting gimp but I could't find the plugin in the menu.   <br />
<br />
<a href="https://www.panotools.org/dersch/" target="_blank">https://www.panotools.org/dersch/</a>]]></content:encoded>
		</item>
	</channel>
</rss>