[gimp-web/gimp-web-static] Added a whole bunch of stuff. Sorry for the bad commit msg...
- From: Pat David <patdavid src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp-web/gimp-web-static] Added a whole bunch of stuff. Sorry for the bad commit msg...
- Date: Mon, 17 Aug 2015 22:31:02 +0000 (UTC)
commit a24107332c6ab0a0aacb6dac8548937153b41006
Author: Pat David <patdavid gmail com>
Date: Mon Aug 17 17:30:46 2015 -0500
Added a whole bunch of stuff. Sorry for the bad commit msg...
content/about/meta/file-list.md | 76 +-
content/bugs/howtos/bugzilla.md | 65 ++
content/bugs/howtos/submit-patch.md | 95 ++
content/bugs/index.md | 77 ++
content/bugs/why_bugzilla.md | 31 +
content/features/index.md | 1 +
content/links/index.md | 176 ++++
content/links/org.md | 47 +
content/man/gimp-remote.md | 112 ++
content/man/gimp.md | 318 ++++++
content/man/gimprc.md | 1073 ++++++++++++++++++++
content/man/gimptool.md | 261 +++++
content/release-notes/gimp-2.2.md | 48 +
content/release-notes/gimp-2.3.3.md | 21 +
content/release-notes/gimp-2.3.md | 49 +
content/release-notes/gimp-2.4-cm.md | 35 +
content/release-notes/gimp-2.4-videos.md | 41 +
content/release-notes/gimp-2.4.md | 168 +++
content/release-notes/gimp-2.5.md | 81 ++
content/release-notes/gimp-2.6.md | 194 ++++
content/release-notes/gimp-2.7.md | 284 ++++++
content/release-notes/gimp-2.8.md | 281 +++++
content/release-notes/images/2.4-align-tool.png | Bin 0 -> 44113 bytes
.../release-notes/images/2.4-color-management.png | Bin 0 -> 17229 bytes
content/release-notes/images/2.4-crop-tool.png | Bin 0 -> 59822 bytes
.../release-notes/images/2.4-refreshed-look.png | Bin 0 -> 68975 bytes
content/release-notes/images/2.4-releasesplash.jpg | Bin 0 -> 17764 bytes
.../release-notes/images/2.4-scalable-brushes.png | Bin 0 -> 38042 bytes
.../release-notes/images/2.4-screenshot-plugin.png | Bin 0 -> 18171 bytes
.../release-notes/images/2.4-selection-tools.png | Bin 0 -> 16633 bytes
.../release-notes/images/2.4-statusbar-tips.png | Bin 0 -> 12806 bytes
.../release-notes/images/2.4-video-fgselect.jpg | Bin 0 -> 17957 bytes
content/release-notes/images/2.4-video-lens.jpg | Bin 0 -> 15854 bytes
.../release-notes/images/2.4-video-perspective.jpg | Bin 0 -> 22884 bytes
content/release-notes/images/2.4-zoom-display.png | Bin 0 -> 17750 bytes
.../release-notes/images/2.6-brush-dynamics.jpg | Bin 0 -> 17222 bytes
.../images/2.6-empty-image-window.png | Bin 0 -> 18847 bytes
.../images/2.6-experimental-gegl-tool.png | Bin 0 -> 50423 bytes
.../images/2.6-lgm-2008-groupshot.jpg | Bin 0 -> 34731 bytes
.../images/2.6-new-free-select-tool.png | Bin 0 -> 27000 bytes
.../images/2.6-scroll-beyond-border.png | Bin 0 -> 17293 bytes
.../images/2.6-text-tool-and-rectangle-handles.png | Bin 0 -> 52839 bytes
.../images/2.8-brush-system-improvements.png | Bin 0 -> 31925 bytes
.../images/2.8-cage-transform-tool.png | Bin 0 -> 38954 bytes
.../release-notes/images/2.8-for-stylus-users.png | Bin 0 -> 8529 bytes
content/release-notes/images/2.8-layer-groups.png | Bin 0 -> 20082 bytes
.../images/2.8-math-in-size-entries.png | Bin 0 -> 6970 bytes
.../images/2.8-multi-column-dock-windows.png | Bin 0 -> 45443 bytes
.../images/2.8-on-canvas-text-editing.png | Bin 0 -> 14139 bytes
.../images/2.8-removed-docking-bars.png | Bin 0 -> 32337 bytes
.../images/2.8-resource-tagging-brushes.png | Bin 0 -> 32049 bytes
.../release-notes/images/2.8-resource-tagging.png | Bin 0 -> 4783 bytes
.../release-notes/images/2.8-save-and-export.png | Bin 0 -> 14737 bytes
.../images/2.8-single-window-mode.png | Bin 0 -> 64273 bytes
.../images/2.8-tools-drawn-with-cairo.png | Bin 0 -> 56144 bytes
content/release-notes/images/color-management.png | Bin 0 -> 92414 bytes
.../release-notes/images/gimp-24-print-dark.png | Bin 0 -> 76499 bytes
.../images/gimp-curves-tool-2-4-vs-2-6.png | Bin 0 -> 89683 bytes
content/release-notes/images/video-thumb.png | Bin 0 -> 12458 bytes
content/release-notes/index.md | 21 +
content/screenshots/1280x800-fresh-start-thumb.jpg | Bin 0 -> 3276 bytes
content/screenshots/1280x800-fresh-start.jpg | Bin 0 -> 103381 bytes
.../2.6-brush-dynamics-example-thumb.jpg | Bin 0 -> 4358 bytes
content/screenshots/2.6-brush-dynamics-example.jpg | Bin 0 -> 195141 bytes
...alternative-2-6-ui-layout-example-one-thumb.jpg | Bin 0 -> 5270 bytes
.../alternative-2-6-ui-layout-example-one.jpg | Bin 0 -> 257175 bytes
...alternative-2-6-ui-layout-example-two-thumb.jpg | Bin 0 -> 4021 bytes
.../alternative-2-6-ui-layout-example-two.jpg | Bin 0 -> 226887 bytes
.../gnome-1280x800-fresh-start-thumb.jpg | Bin 0 -> 3975 bytes
content/screenshots/gnome-1280x800-fresh-start.jpg | Bin 0 -> 105515 bytes
content/screenshots/index.htrw | 48 +
content/screenshots/index.md | 49 +
.../screenshots/linux_dualscreen_griatch_art.jpg | Bin 0 -> 987769 bytes
.../linux_dualscreen_griatch_art_thumb.jpg | Bin 0 -> 18521 bytes
content/screenshots/linux_fullscreen.jpg | Bin 0 -> 164518 bytes
content/screenshots/linux_fullscreen_huge.jpg | Bin 0 -> 1462875 bytes
content/screenshots/linux_fullscreen_thumb.jpg | Bin 0 -> 4009 bytes
content/screenshots/linux_mixer.jpg | Bin 0 -> 725594 bytes
content/screenshots/linux_mixer_thumb.jpg | Bin 0 -> 5955 bytes
...anvas-preview-of-gaussian-blur-in-2-6-thumb.jpg | Bin 0 -> 4156 bytes
.../on-canvas-preview-of-gaussian-blur-in-2-6.jpg | Bin 0 -> 176310 bytes
content/screenshots/osx_aperture.jpg | Bin 0 -> 265303 bytes
content/screenshots/osx_aperture_thumb.jpg | Bin 0 -> 10158 bytes
content/screenshots/windows_crop.jpg | Bin 0 -> 279752 bytes
content/screenshots/windows_crop.png | Bin 0 -> 388923 bytes
content/screenshots/windows_crop_thumb.jpg | Bin 0 -> 16769 bytes
content/source/howtos/gimp-git-build.md | 46 +
content/source/index.md | 219 ++++
content/tutorials/3d_Logo/index.md | 255 +++++
content/tutorials/3d_Logo/logo-00.png | Bin 0 -> 16415 bytes
content/tutorials/3d_Logo/logo-01.png | Bin 0 -> 22970 bytes
content/tutorials/3d_Logo/logo-02.png | Bin 0 -> 20553 bytes
content/tutorials/3d_Logo/logo-03.png | Bin 0 -> 33352 bytes
content/tutorials/3d_Logo/logo-04.png | Bin 0 -> 20789 bytes
content/tutorials/3d_Logo/logo-05.png | Bin 0 -> 35634 bytes
content/tutorials/3d_Logo/logo-06.png | Bin 0 -> 58381 bytes
content/tutorials/3d_Logo/logo-07.png | Bin 0 -> 37163 bytes
content/tutorials/3d_Logo/logo-08.png | Bin 0 -> 22034 bytes
content/tutorials/3d_Logo/logo-09.png | Bin 0 -> 28008 bytes
content/tutorials/3d_Logo/logo-10.png | Bin 0 -> 20573 bytes
content/tutorials/3d_Logo/logo-11.png | Bin 0 -> 20699 bytes
content/tutorials/3d_Logo/logo-12.png | Bin 0 -> 28271 bytes
content/tutorials/3d_Logo/logo-13.png | Bin 0 -> 18929 bytes
content/tutorials/3d_Logo/logo-14.png | Bin 0 -> 21752 bytes
content/tutorials/3d_Logo/logo-15.png | Bin 0 -> 28630 bytes
content/tutorials/3d_Logo/logo-16.png | Bin 0 -> 40691 bytes
content/tutorials/3d_Logo/logo-17.png | Bin 0 -> 23023 bytes
content/tutorials/3d_Logo/logo-18.png | Bin 0 -> 25786 bytes
content/tutorials/3d_Logo/logo-19.png | Bin 0 -> 24304 bytes
content/tutorials/3d_Logo/logo-20.png | Bin 0 -> 43443 bytes
content/tutorials/3d_Logo/logo-21.png | Bin 0 -> 42301 bytes
content/tutorials/3d_Logo/logo-22.png | Bin 0 -> 44777 bytes
content/tutorials/3d_Logo/logo-23.png | Bin 0 -> 25824 bytes
content/tutorials/3d_Logo/logo-24.png | Bin 0 -> 46385 bytes
content/tutorials/3d_Logo/logo-25.png | Bin 0 -> 61609 bytes
content/tutorials/3d_Logo/logo-26.png | Bin 0 -> 25935 bytes
content/tutorials/3d_Logo/logo-27.png | Bin 0 -> 47066 bytes
content/tutorials/3d_Logo/logo-28.png | Bin 0 -> 48692 bytes
.../Advanced_Animations/gap-duplicate.png | Bin 0 -> 1781 bytes
.../tutorials/Advanced_Animations/gap-final.gif | Bin 0 -> 140316 bytes
content/tutorials/Advanced_Animations/gap-move.png | Bin 0 -> 6066 bytes
content/tutorials/Advanced_Animations/gap-navi.png | Bin 0 -> 6304 bytes
.../tutorials/Advanced_Animations/gap-source.png | Bin 0 -> 2330 bytes
.../tutorials/Advanced_Animations/gap-static.png | Bin 0 -> 2389 bytes
.../Advanced_Animations/gap-static.xcf.bz2 | Bin 0 -> 26119 bytes
content/tutorials/Advanced_Animations/index.md | 79 ++
.../tutorials/Anti-Aliased_Threshold/curves.jpg | Bin 0 -> 16566 bytes
.../tutorials/Anti-Aliased_Threshold/curves.png | Bin 0 -> 10445 bytes
.../tutorials/Anti-Aliased_Threshold/effect.jpg | Bin 0 -> 43501 bytes
.../tutorials/Anti-Aliased_Threshold/finished.jpg | Bin 0 -> 42443 bytes
content/tutorials/Anti-Aliased_Threshold/index.md | 46 +
.../tutorials/Anti-Aliased_Threshold/original.jpg | Bin 0 -> 33227 bytes
.../tutorials/Anti-Aliased_Threshold/threshold.jpg | Bin 0 -> 44008 bytes
.../Automate_Editing_in_GIMP/AlignmentStep.jpg | Bin 0 -> 440828 bytes
.../Appendix-testing-in-python-console.JPG | Bin 0 -> 101630 bytes
.../AutomateEditingInGimp.odt | Bin 0 -> 1183363 bytes
.../AutomateEditingInGimp.pdf | Bin 0 -> 700774 bytes
.../AutomationMenuDirectory.jpg | Bin 0 -> 94782 bytes
.../CommanderMacroSubMenu.jpg | Bin 0 -> 154195 bytes
.../CommandsPythonConsole.jpg | Bin 0 -> 486887 bytes
.../ImportFlowAssignment.jpg | Bin 0 -> 91029 bytes
.../Automate_Editing_in_GIMP/ParasitesImage.jpg | Bin 0 -> 177086 bytes
.../PseudoCodeImported.jpg | Bin 0 -> 47681 bytes
.../PseudoCodetoXmlFunction.jpg | Bin 0 -> 97605 bytes
.../Automate_Editing_in_GIMP/RunningAutoUpdate.jpg | Bin 0 -> 74119 bytes
.../XmlHierarchyContainers.jpg | Bin 0 -> 110481 bytes
.../tutorials/Automate_Editing_in_GIMP/index.md | 685 +++++++++++++
.../myXml/commander/centeredgrid.def | 10 +
.../myXml/commander/colorAdjust.def | 26 +
.../myXml/commander/combinedCommander.xml | 95 ++
.../myXml/commander/createColorLayer.def | 17 +
.../myXml/commander/createDynamicRangeLayer.def | 9 +
.../myXml/commander/expandCanvas.def | 5 +
.../myXml/commander/normalGridCanvas.def | 9 +
.../myXml/commander/renameBaseLayer.def | 5 +
.../myXml/commander/retinexLayer.def | 18 +
.../myXml/commander/sharpenLayer.def | 11 +
.../myXml/flow/combinedFlow.xml | 308 ++++++
.../myXml/flow/fullauto.def | 128 +++
.../myXml/flow/semiauto.def | 126 +++
.../myXml/flow/standard.def | 124 +++
.../myXml/property/flagProperties.def | 34 +
.../myXml/property/flagProperties.xml | 32 +
.../plug-ins/autoAutoUpdate.py | 110 ++
.../Automate_Editing_in_GIMP/plug-ins/autoBase.py | 468 +++++++++
.../plug-ins/autoCommander.py | 72 ++
.../plug-ins/autoJpegToXcf.py | 131 +++
.../plug-ins/autoRWparasites.py | 222 ++++
.../plug-ins/autoWriteXml.py | 73 ++
.../plug-ins/autoXcfToJpg.py | 84 ++
content/unix/fonts.md | 49 +
content/unix/gimprc | 583 +++++++++++
content/unix/gimprc.md | 596 +++++++++++
pelicanconf.py | 4 +-
themes/newgimp/static/css/gimp.css | 25 +
themes/newgimp/static/css/page.css | 1 +
176 files changed, 8318 insertions(+), 39 deletions(-)
---
diff --git a/content/about/meta/file-list.md b/content/about/meta/file-list.md
index d4d735d..ab01452 100644
--- a/content/about/meta/file-list.md
+++ b/content/about/meta/file-list.md
@@ -44,11 +44,11 @@ The main page links go to legacy WGO, the link icon (if there) will go to the po
<del><http://www.gimp.org/books/index.html> </del> [<i class="fa
fa-link"></i>]({filename}../../books/index.md)
-<http://www.gimp.org/bugs/index.html>
-<http://www.gimp.org/bugs/why_bugzilla.html>
-<http://www.gimp.org/bugs/howtos/bugzilla.html>
+<del><http://www.gimp.org/bugs/index.html></del> [<i class="fa fa-link"></i>]({filename}../../bugs/index.md)
+<del><http://www.gimp.org/bugs/why_bugzilla.html></del> [<i class="fa
fa-link"></i>]({filename}../../bugs/why_bugzilla.md)
+<del><http://www.gimp.org/bugs/howtos/bugzilla.html></del> [<i class="fa
fa-link"></i>]({filename}../../bugs/howtos/bugzilla.md)
<del><http://www.gimp.org/bugs/howtos/howto-template.html></del> (skipping - test/placeholder data)
-<http://www.gimp.org/bugs/howtos/submit-patch.html>
+<del><http://www.gimp.org/bugs/howtos/submit-patch.html></del> [<i class="fa
fa-link"></i>]({filename}../../bugs/howtos/submit-patch.md)
<http://www.gimp.org/contest/index.html> (deprecated - not keeping this URI?)
@@ -115,45 +115,47 @@ The main page links go to legacy WGO, the link icon (if there) will go to the po
-<http://www.gimp.org/features/index.html>
+<del><http://www.gimp.org/features/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../features/index.md)
-<http://www.gimp.org/links/index.html>
-<http://www.gimp.org/links/org.html>
+<del><http://www.gimp.org/links/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../links/index.md)
+<del><http://www.gimp.org/links/org.html></del> [<i class="fa fa-link"></i>]({filename}../../links/org.md)
-<http://www.gimp.org/macintosh/index.html>
+<del><http://www.gimp.org/macintosh/index.html></del> (Obsoleted already - directs folks to the downloads
page instead)
-<http://www.gimp.org/man/gimp.html>
-<http://www.gimp.org/man/gimprc.html>
-<http://www.gimp.org/man/gimp-remote.html>
-<http://www.gimp.org/man/gimptool.html>
+<del><http://www.gimp.org/man/gimp.html></del> [<i class="fa fa-link"></i>]({filename}../../man/gimp.md)
+<del><http://www.gimp.org/man/gimprc.html></del> [<i class="fa fa-link"></i>]({filename}../../man/gimprc.md)
+<del><http://www.gimp.org/man/gimp-remote.html></del> [<i class="fa
fa-link"></i>]({filename}../../man/gimprc.md)
+<del><http://www.gimp.org/man/gimptool.html></del> [<i class="fa
fa-link"></i>]({filename}../../man/gimptool.md)
-<http://www.gimp.org/programmatic/xhtml.py>
+<del><http://www.gimp.org/programmatic/xhtml.py>
<http://www.gimp.org/programmatic/admin/howto.html>
<http://www.gimp.org/programmatic/admin/news/howto-news.html>
<http://www.gimp.org/programmatic/contest/index.html>
+</del>
+(These links all appear non-functional. Deprecated?)
-<http://www.gimp.org/release-notes/gimp-2.2.html>
+<del><http://www.gimp.org/release-notes/gimp-2.2.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.2.md)
<http://www.gimp.org/release-notes/gimp-2.3.3.de.html>
-<http://www.gimp.org/release-notes/gimp-2.3.3.html>
-<http://www.gimp.org/release-notes/gimp-2.3.html>
-<http://www.gimp.org/release-notes/gimp-2.4.html>
-<http://www.gimp.org/release-notes/gimp-2.4-cm.html>
-<http://www.gimp.org/release-notes/gimp-2.4-videos.html>
-<http://www.gimp.org/release-notes/gimp-2.5.html>
-<http://www.gimp.org/release-notes/gimp-2.6.html>
-<http://www.gimp.org/release-notes/gimp-2.7.html>
-<http://www.gimp.org/release-notes/gimp-2.8.html>
-<http://www.gimp.org/release-notes/index.html>
-
-<http://www.gimp.org/screenshots/index.html>
-
-<http://www.gimp.org/source/index.html>
-<http://www.gimp.org/source/howtos/gimp-git-build.html>
+<del><http://www.gimp.org/release-notes/gimp-2.3.3.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.3.3.md)
+<del><http://www.gimp.org/release-notes/gimp-2.3.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.3.md)
+<del><http://www.gimp.org/release-notes/gimp-2.4.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.4.md)
+<del><http://www.gimp.org/release-notes/gimp-2.4-cm.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.4-cm.md)
+<del><http://www.gimp.org/release-notes/gimp-2.4-videos.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.4-videos.md)
+<del><http://www.gimp.org/release-notes/gimp-2.5.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.5.md)
+<del><http://www.gimp.org/release-notes/gimp-2.6.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.6.md)
+<del><http://www.gimp.org/release-notes/gimp-2.7.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.7.md)
+<del><http://www.gimp.org/release-notes/gimp-2.8.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/gimp-2.8.md)
+<del><http://www.gimp.org/release-notes/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../release-notes/index.md)
+
+<del><http://www.gimp.org/screenshots/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../screenshots/index.md)
+
+<del><http://www.gimp.org/source/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../source/index.md)
+<del><http://www.gimp.org/source/howtos/gimp-git-build.html></del> [<i class="fa
fa-link"></i>]({filename}../../source/howtos/gimp-git-build.md)
<http://www.gimp.org/tutorials/index.html>
-<http://www.gimp.org/tutorials/3d_Logo/index.html>
-<http://www.gimp.org/tutorials/Advanced_Animations/index.html>
-<http://www.gimp.org/tutorials/Anti-Aliased_Threshold/index.html>
+<del><http://www.gimp.org/tutorials/3d_Logo/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/3D_Logo/index.md)
+<del><http://www.gimp.org/tutorials/Advanced_Animations/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Advanced_Animations/index.md)
+<del><http://www.gimp.org/tutorials/Anti-Aliased_Threshold/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Anti-Aliased_Threshold/index.md)
<http://www.gimp.org/tutorials/Automate_Editing_in_GIMP/index.html>
<http://www.gimp.org/tutorials/AutomatedJpgToXcf/index.html>
<http://www.gimp.org/tutorials/Basic_Batch/index.html>
@@ -215,10 +217,10 @@ The main page links go to legacy WGO, the link icon (if there) will go to the po
<http://www.gimp.org/tutorials/Tileable_Textures/index.html>
<http://www.gimp.org/tutorials/Using_GAP/index.html>
-<http://www.gimp.org/unix/fonts.html>
-<http://www.gimp.org/unix/gimprc.html>
-<http://www.gimp.org/unix/gtkrc.html>
-<http://www.gimp.org/unix/index.html>
+<del><http://www.gimp.org/unix/fonts.html></del> [<i class="fa fa-link"></i>]({filename}../../unix/fonts.md)
+<del><http://www.gimp.org/unix/gimprc.html></del> [<i class="fa
fa-link"></i>]({filename}../../unix/fonts.md)
+<http://www.gimp.org/unix/gtkrc.html>
+<http://www.gimp.org/unix/index.html> (Obsoleted? Directs to downloads page...)
<http://www.gimp.org/unix/man-gimp-2.0.html>
<http://www.gimp.org/unix/man-gimprc-2.0.html>
<http://www.gimp.org/unix/man-gimp-remote-2.0.html>
@@ -229,4 +231,4 @@ The main page links go to legacy WGO, the link icon (if there) will go to the po
<http://www.gimp.org/unix/howtos/howto-template.html>
<http://www.gimp.org/unix/howtos/tile_cache.html>
-<http://www.gimp.org/windows/index.html>
+<http://www.gimp.org/windows/index.html> (Obsoleted? Directs to downloads page...)
diff --git a/content/bugs/howtos/bugzilla.md b/content/bugs/howtos/bugzilla.md
new file mode 100644
index 0000000..79f9c63
--- /dev/null
+++ b/content/bugs/howtos/bugzilla.md
@@ -0,0 +1,65 @@
+Title: Eek! A Bug!
+Date: 2015-08-17T11:09:31-05:00
+Modified: 2015-08-17T11:09:40-05:00
+Authors: Pat David
+Status: hidden
+
+
+## or How To Report GIMP Bugs
+
+If you find a bug or think you find a bug, it is very important to report it. If the developers don't know
it is broken (or might be broken), they can't fix it. So there you are at your computer trying to do
something with GIMP and it freaks out at you. It can be a frightening experience at times.
+
+### First, Next, Third
+
+First: Get out a piece of paper or open a text file and scribble down everything you can remember about what
you were doing when it happened. Also write down the exact wording of any error messages you received.
+
+Next: Go away and yell and scream and do whatever you need to do to relax again. Your next step will be to
brave Bugzilla, the GNOME bug tracker. It is used to track bug reports and requests for enhancements for GIMP
and <span class="help" title="the GIMP
+ ToolKit">GTK+</span> (see also [why we are using Bugzilla](/bugs/why_bugzilla.html)).
+
+Third: Check to see if your bug has been reported yet. Go to the [Current Bug
List](http://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=NEEDINFO&form_name=query)
to see if something that looks like your bug has been reported yet. Don't worry if it has, you can still
help. See the section: [Enhancing Bug Reports](#enhance). If you can't find something that sounds like your
bug there, you will need to report it.
+
+## Getting Ready to Report and Reporting a Bug
+
+The goal of the following is to give the developers as much information about what goes wrong as possible.
This helps them find out what needs to be fixed.
+
+### The Steps
+
+1. Use <kbd>gimp --version</kbd> or the about dialog to check your GIMP version. Next check with
[www.gimp.org](http://www.gimp.org/) to see what the most recent GIMP release is. If your GIMP is old, update
then try to to reproduce the bug. Your bug may have been fixed in the most recent release. If you are running
GIMP from GIT, update and and recompile.
+
+2. Attempt to reproduce the problem. Go do what you were doing when it happened and see if you can do it
again.
+
+ If using GIMP for GNU/Linux, start the program from a terminal with the command <kbd>gimp</kbd>.
Sometimes the program will output error messages that can help. This is especially important if GIMP crashes
completely without warning. After reproducing the bug, copy the error messages from your terminal into
somewhere where you can save them for the bug report. It is better to give too much information than not
enough.
+
+ To narrow down the exact cause of the problem, attempt to reproduce it in other ways. Prepare yourself
to explain how to reproduce it in your bug report. If you are running GIMP in another language, try
[switching your GIMP to English](http://docs.gimp.org/en/gimp-fire-up.html#gimp-concepts-running-language) so
you can report menu items exactly with the English menu item name. It helps - developers generally understand
English). If you cannot reproduce the bug, assume it was some weird freak event and don't report it. If it
recurs, consult with your appropriate [user mailing list](/mail_lists.html). Perhaps someone else can find
the key to reproducing it.
+
+3. Prepare to face the horror. Go to [bugzilla.gnome.org](http://bugzilla.gnome.org/). If you don't have a
login yet, follow the directions to create one. The reason to do this and report a bug with your e-mail
address is so the developers can contact you if they have any questions. That way if we miss some useful
tidbit of debugging information, they can tell you what to do to get it. Log in.
+
+4. Select "Enter a New Bug Report". From the list of products provided, select GIMP. This opens the actual
entry form.
+
+5. Here you have to tell the developers everything about your system, your version of GIMP, and your bug.
Just do your best to tell them about it. A crappy bug report is better than no report at all, but if you
write down everything you can clearly, you will create a decent bug report.
+
+ 1. Select the "version" that corresponds with the version of GIMP in which you found the bug. It is the
information you got with <kbd>gimp --version</kbd>.
+
+ 2. Select the appropriate "component". If you don't know what component it is, submit the bug under
General. Descriptions of the components are
[available](http://bugzilla.gnome.org/describecomponents.cgi?product=GIMP).
+
+ 3. Classify the "severity" of your bug. If the bug causes GIMP to crash totally or do other really ucky
things so you can't use the program at all, classify it as critical. If it completely disables some part of
GIMP, classify it as major (for example, keeps you from using a tool). Most bugs are "normal". If you don't
know what severity to use, call it "normal". Trivial bugs are annoying but don't really keep you from using
the program. Cosmetic bugs are things like spelling errors or UI (User Interface, "the look and feel")
issues. Don't worry if you choose the wrong severity. The people getting your bug report will adjust it.
Don't mark it higher than it really is just to get their attention.
+
+ 4. Select your "operating system". Bugs on [Microsoft Windows](/windows/), [GNU/Linux GIMP](/unix/) or
[OS X](/macintosh/) are not always identical. It would be annoying to get a GNU/Linux GIMP developer trying
to reproduce a OS X-specific bug. It is also useful to list the desktop or window manager you are using.
Sometimes a problem is caused by an interaction between the two. It won't always be relevant, but it is good
to get into the habit of listing it anyway.
+
+ 5. Leave "Assigned to:" blank. Bugzilla will do that automatically. Only worry about CC: if you want to
send a copy of your bug report to someone else.
+
+ 6. For "Summary", write a brief description of your bug. This summary will help other users see if
their bug might be like your bug. Write something that would help you if you were looking for a bug like
yours.
+
+ 7. "Description" is the hard part. It is the actual bug report. First provide the detailed description
of your bug: a brief overview of when it happened and exactly what went wrong (including error messages).
Next, describe step-by-step how to reproduce the bug. Use the exact name of menu items. Describe tools,
windows, and clicks as precisely as possible. If they can't reproduce the bug, it will be very hard for them
to fix it. Last, tell them anything else you can think of that might be relevant. This could include recently
installed programs or hardware that might interfere with GIMP.
+
+ Finally, please add the output you get from running <kbd>gimp --version --verbose</kbd> to your bug
report.
+
+## <a name="enhance"></a>Enhancing Bug Reports
+
+If someone has already reported a bug like yours, read the bug report carefully. Read through all the
additional comments. Make sure every bit of information you know about the bug is in there. If your version
is different or you had a slightly different experience with the bug, add a comment providing your
information. Check the status of the bug carefully. If it is marked "NEEDINFO", see if you can provide the
information needed. Do not add a "me too" comment unless your comment provides additional information that
might be helpful for the developer.
+
+If you have provided a bug report and later get more information (like a more specific error message or
fancy stuff like a trace), add a comment to your original bug with that information. It is especially
important to add a comment if you somehow resolve your bug. For example, you update something else on your
system and the bug no longer appears. In that case, add a comment describing what you updated from what
version to what version that resolved the bug.
+
+## The Wait Patiently Part
+
+*Whee!!* You survived! If you managed to get through all this and submit your bug report, be happy. Be
proud. You will later get e-mails about your bug. It might include a request for more information. If you get
something that says your bug is not a bug, do not be discouraged from reporting in the future. Next time it
might be. Submitting careful bug reports and providing additional information where possible helps make GIMP
better. The day will come where you submit a bug and later get an e-mail that says your bug is "FIXED" or
"RESOLVED". Then you will know that some developer out there found your bug, reproduced it, and fixed it.
diff --git a/content/bugs/howtos/submit-patch.md b/content/bugs/howtos/submit-patch.md
new file mode 100644
index 0000000..4e3bd75
--- /dev/null
+++ b/content/bugs/howtos/submit-patch.md
@@ -0,0 +1,95 @@
+Title: How to Create and Submit a Patch
+Date: 2015-08-17T11:09:31-05:00
+Modified: 2015-08-17T11:09:40-05:00
+Authors: Pat David
+Status: hidden
+
+
+## Introduction
+
+A patch is exactly what the word says: a small piece of code used to repair a breach. It is normally a plain
text file containing only the differences between the current version of the code and the fixed version.
+
+## Generating a Patch
+
+### With git
+
+The preferred way of creating a patch is to create it against current git. The ensures that the patches
works with the latest edition of the source code and makes it easier for the developers to apply the patch.
+
+Clone the git repository which is
+
+ git clone git://git.gnome.org/gimp
+
+ Create commits that fixes the problem. For small problems it will only be a single commit. Be sure to
provide your name and email in the commits - you can [set up your git
repository](http://live.gnome.org/Git/Developers#head-2ad4a3239be27d5312d1be06debb39d4550baaf8) to do this
for you. Please make sure to provide useful commit messages; you may refer to [GNOME's
guidelines](http://live.gnome.org/Git/CommitMessages).
+
+Now that you have commits that fixes the problem, create patches by doing
+
+ git format-patch origin/master
+
+ This will give you patch files in the form of git commits with names like
+
+ 0001-plug-ins-Use-string-literal-as-format-in-metadata-p.patch
+
+ We prefer to have the patches attached to bug reports in Bugzilla (see below) but it is also fine to send
them to the mailing list if they are reasonably small.
+
+### Against the Latest Release
+
+If you do not have access to git you can generate the patch against the latest release.
+
+To generate the patch you will need two copies of the source code: one that is unmodified and one containing
your changes to the source. Start by downloading the source code of the latest release, extract it and make a
copy of the entire source directory. After you have made your changes to one of the source directories and
made sure it compiles and works as expected, you can create the patch file using the command:
+
+`diff -rup /path/to/unmodified/source /path/to/modified/source > patchfile.patch`
+
+To summarize the steps:
+
+* Download the source code of the latest release
+* Extract the source code
+* Make a copy of the source code directory
+* Apply your changes to the copy of the source code
+* Re-compile and make sure it works as expected
+* Do a `make clean` to remove files generated during build
+* Generate the patch file using
+ `diff -rup /path/to/unmodified/source /path/to/modified/source > patchfile.patch`
+* Examine the resulting .patch file to make sure it contains only the intended changes
+* Submit the patch using Bugzilla, see below
+
+## Using Bugzilla
+
+### Closing a bug patch
+
+The best way to submit a patch to the GIMP development is to send it to Bugzilla and inform the rest of the
team what the patch is doing:
+
+* Is it closing bugs?
+* Is it a enhancement?
+* What are the changes in the code?
+* Are there any know problems with the patch?
+
+If you have a patch that is closing bugs then you can attach the patch to the bug/bugs explaining what the
patch is doing. You can also inform the gimp-developer mailing list about the closed bug but avoid to attach
the patch to the mail sent to the list, instead put the bug links in the mail where the attached patch is
located.
+
+1. Test the patch locally on your own machine and look if it closes the bug there.
+2. Find the bug it is closing in the [Open
bugs](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
list.
+3. Attach the patch to the bug report.
+4. Explain what the patch is doing and if there might be any problems with the patch.
+5. If you want to send a mail to the gimp-developer list and explain it there also. Remember to have the
bug number or even better the link to the bug in the mail. Avoid attaching the patch to the mail.
+
+Now you just have to wait for the developers and maintainers to look at the patch and see if this is really
closing the bug and if it might open new bugs. If everything is fine it will be implemented in a release done
soon either stable or development version.
+
+#### How about enhancements?
+
+Start a new bug report, mark it as enhancement and put the patch in that report on Bugzilla. This will give
developers a good explanation of why you did the patch and how the patch changes GIMP source or adds new
things to it. The only thing you need to add to the report is that it is an enhancement and explain the patch
a little bit. A simple way to this is to:
+
+1. Go to [Submit a new bug report](https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP).
+2. Fire up a new report and select enhancement instead of the others used by normal bug reporting.
+3. Attach the patch and explain what you wanted to get going with the help of this patch.
+4. Remember to explain the purpose of the patch and who might want to use this enhancement.
+
+Thats it! You have done a patch reporting enhancement all that is left is for the developers to look at the
report and the patch. They might get even better ideas of how to implement this with the help of the patch
you sent.
+
+### Remember to
+
+* use the same coding style, see file HACKING
+* avoid sending the patch as an attachment to the mailing lists.
+* explain what the patch is doing to GIMP.
+* report the bugs that the patch is closing.
+* always test the patch before submitting it.
+* write what version it is tested on. stable? development?
+
diff --git a/content/bugs/index.md b/content/bugs/index.md
new file mode 100644
index 0000000..59d83fd
--- /dev/null
+++ b/content/bugs/index.md
@@ -0,0 +1,77 @@
+Title: Bugs
+Date: 2015-08-17T11:09:31-05:00
+Modified: 2015-08-17T11:09:40-05:00
+Authors: Pat David
+Status: hidden
+
+
+Making good bug reports is a great way to help increase the software quality of GIMP. A good bug report is a
bug report that provides unambigous step-by-step instructions on how to reproduce the bug, what result that
is expected, and what the actual result it. Good bug reports makes it easy for the developers to reproduce
and fix the bug.
+
+Related to bug reports are enhancement requests. An enhancement request should never be filed without prior
discussion on the gimp-developer [mailing list](/mail_lists.html). This is to make sure that the enhancement
requests that are filed are well-specified and aligned with the overall goals the developers have for GIMP.
+
+More information about Bugzilla, and bug hunting in general, can be found at
[http://wiki.gimp.org/](http://wiki.gimp.org/). See also [why we are using Bugzilla](why_bugzilla.html) to
handle bug reports. The rest of this page contains more detailed information regarding bug reports.
+
+## Bug How Tos
+
+Since correctly submitting a bug report requires you to use tools you may have not used previously, we have
created two documents. The first helps you to learn Bugzilla, which is the bug system used by GIMP developers
to track bug reports. If you are fixing a problem yourself, the second document shows you how to properly
create and submit a patch.
+
+* [How To Bugzilla](/bugs/howtos/bugzilla.html)
+* [How To Create and Submit a Patch](/bugs/howtos/submit-patch.html)
+
+## Bug Lists
+
+Below are different links into Bugzilla which show you lists of open and closed bugs. You can also search
manually, but these links are often more convienient. With the help of the lists below you should be able to
see if the bug you have found has already been reported. If it has been reported, and you have additional
information, please add a comment with the additional information!
+
+### GIMP bugs
+
+* [List of open bugs
(all)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
+* [List of open bugs (all excluding enhancement
requests)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial)
+
+* [List of bugs that are easy to
fix](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=UNCONFIRMED&bug_status=NEEDINFO&keywords=gnome-love)
+
+* [List of closed bugs (The past
week)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=RESOLVED&bug_status=CLOSED&changedin=7)
+* [List of fixed bugs since last
release](https://bugzilla.gnome.org/buglist.cgi?chfieldto=Now;query_format=advanced;order=Importance;chfieldfrom=2013-11-28;bug_status=RESOLVED;resolution=FIXED;product=GIMP;classification=Other)
+
+#### By severity
+
+* [List of open bugs (blocker and
critical)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=blocker&bug_severity=critical)
+* [List of open bugs
(major)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=major)
+* [List of open bugs
(normal)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=normal)
+* [List of open bugs (minor and
trivial)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=minor&bug_severity=trivial)
+* [List of open enhancement
proposals](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=UNCONFIRMED&bug_status=NEEDINFO&bug_severity=enhancement)
+
+#### By operating system
+
+* [List of open GIMP on Linux
bugs](https://bugzilla.gnome.org/buglist.cgi?order=Importance;classification=Other;op_sys=Linux;query_format=advanced;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;bug_status=NEEDINFO;product=GIMP)
+* [List of open GIMP on OS X
bugs](https://bugzilla.gnome.org/buglist.cgi?order=Importance&classification=Other&op_sys=Mac%20OS&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=NEEDINFO&product=GIMP)
+* [List of open GIMP on Windows
bugs](https://bugzilla.gnome.org/buglist.cgi?order=Importance;classification=Other;op_sys=Windows;query_format=advanced;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;bug_status=NEEDINFO;product=GIMP)
+* [List of open GIMP bugs, failing on all
platforms](https://bugzilla.gnome.org/buglist.cgi?order=Importance;classification=Other;op_sys=All;query_format=advanced;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;bug_status=NEEDINFO;product=GIMP)
+
+* [Submit a new GIMP bug report](https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP)
+
+### GIMP Help bugs
+
+* [List of open bugs
(all)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP-manual&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
+* [List of open bugs (all excluding enhancement
requests)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP-manual&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial)
+
+* [List of bugs that are easy to
fix](https://bugzilla.gnome.org/buglist.cgi?product=GIMP-manual&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=UNCONFIRMED&bug_status=NEEDINFO&keywords=gnome-love)
+
+* [List of closed bugs (The past
week)](https://bugzilla.gnome.org/buglist.cgi?product=GIMP-manual&bug_status=RESOLVED&bug_status=CLOSED&changedin=7)
+* [List of fixed bugs since last
release](https://bugzilla.gnome.org/buglist.cgi?chfieldto=Now;query_format=advanced;order=Importance;chfieldfrom=2013-11-28;bug_status=RESOLVED;resolution=FIXED;product=GIMP-manual;classification=Other)
+
+* [Submit a new GIMP Help bug report](https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP-manual)
+
+### GIMP Website bugs
+
+* [List of open bugs
(all)](https://bugzilla.gnome.org/buglist.cgi?product=gimp-web&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
+* [List of open bugs (all excluding enhancement
requests)](https://bugzilla.gnome.org/buglist.cgi?product=gimp-web&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial)
+
+* [List of bugs that are easy to
fix](https://bugzilla.gnome.org/buglist.cgi?product=gimp-web&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=UNCONFIRMED&bug_status=NEEDINFO&keywords=gnome-love)
+
+* [List of closed bugs (The past
week)](https://bugzilla.gnome.org/buglist.cgi?product=gimp-web&bug_status=RESOLVED&bug_status=CLOSED&changedin=7)
+
+* [Submit a new GIMP Website bug report](https://bugzilla.gnome.org/enter_bug.cgi?product=gimp-web)
+
+## Security bugs
+
+Some bug reports may be related to security issues. For example, a file plug-in may be vulnerable to a
buffer overflow allowing arbitrary code execution when loading an image. We believe that the best way to
report these vulnerabilities is through Bugzilla, as described above. This will ensure that the bug is
reviewed and handled quickly (if necessary, a developer may decide to hide a sensitive bug report from other
users until it is fixed). But if you really do not want to use Bugzilla for security reports and you do not
mind some extra delay, you can also contact a limited set of GIMP developers by mail @gimp.org, using the
special alias "security". What will happen next is that a developer will review the issue and submit it in
Bugzilla, usually as a hidden bug report only visible to developers. This will take a bit longer than if you
directly submit the bug yourself, but we know that some people have a policy of not disclosing security
vulnerabilities publicly, so we pro
vide that address for their convenience.
diff --git a/content/bugs/why_bugzilla.md b/content/bugs/why_bugzilla.md
new file mode 100644
index 0000000..0dd2564
--- /dev/null
+++ b/content/bugs/why_bugzilla.md
@@ -0,0 +1,31 @@
+Title: Why Do We Use Bugzilla for Reports?
+Date: 2015-08-17T11:09:31-05:00
+Modified: 2015-08-17T11:09:40-05:00
+Authors: Pat David
+Status: hidden
+
+
+
+From time to time, we get questions about why we are [using Bugzilla](/bugs/) for tracking bug reports
related to GIMP or to this web site. Some users would prefer to send us a simple e-mail describing the
problem or to fill in a web form without having to register and create a Bugzilla account.
+
+Besides the fact that the [same instance of Bugzilla](http://bugzilla.gnome.org/) is already used for
tracking bugs related to GTK+ (GIMP ToolKit) and GNOME, here are some reasons why we ask bug reporters to
take the time to create a Bugzilla account:
+
+### Most bug reports need additional information from the reporter
+
+In most cases, it is necessary for the developers to ask for additional information. This can be because
some general information such as the GIMP version number or the operating system was not specified, or
because the problem is not easy to reproduce and the developers need a step-by-step description of the
process that leads to unexpected results. If the report is a request for enhancements, it is often necessary
to discuss some details and to clarify what the reporter wants and how it is best implemented.
+
+Requesting the creation of a Bugzilla account ensures that all comments added by developers or other
contributors will reach the original reporter. This is also useful for informing the reporter about any
changes in the status of the bug report, such as when a patch is supplied or when the bug is fixed.
+
+The owner of a Bugzilla account can switch to a different e-mail address easily and can also configure the
types of notifications that are sent via e-mail. Being able to change e-mail addresses is important if some
bug reports or proposals for enhancements remain open for a long time.
+
+### Several developers can provide feedback and work on the bug report
+
+Although the requests for additional information could also be handled via e-mail, Bugzilla provides some
important features that allow several people to cooperate and to handle bugs in a better way. Anybody can
view the status of the bugs or add comments at any time. It is also possible for interested parties to add
their own address to the CC list of a bug report in order to be notified whenever something changes. Allowing
more people to participate increases the chances that someone will be able to fix the bug or at least provide
a timely response. This applies to the GIMP application and its various components as well as to this web
site.
+
+In addition, Bugzilla allows us to keep track of the status of all bug reports and ensure that no bug is
forgotten. Although most bugs can be fixed rather quickly, a few remain open for a long time because they
depend on other bugs or because nobody has been able to work on them yet. Bugzilla never forgets them, while
it would be easy to forget about some e-mail discussion that took place several weeks earlier, especially if
the bug is eventually fixed by someone else than the original developer.
+
+### Other features of Bugzilla
+
+Bugzilla provides a convenient way to handle duplicate bug reports: when a bug is marked as being a
duplicate of another, the reporter can easily see the status of the original bug report and can read all
comments attached to it. The reporter is also added to the CC list of the original bug report in order to be
notified of any updates.
+
+Note that we have used other bug tracking systems in the past such as the Debian bug tracker, which is
mostly e-mail based. But the set of features currently provided by Bugzilla is what allows GIMP developers to
work in the best way.
diff --git a/content/features/index.md b/content/features/index.md
index 5d574bd..66c9e5b 100644
--- a/content/features/index.md
+++ b/content/features/index.md
@@ -2,6 +2,7 @@ Title: Feature Overview
Date: 2015-07-29T14:40:35-05:00
Modified: 2015-07-29T14:40:43-05:00
Authors: Pat David
+Status: hidden
diff --git a/content/links/index.md b/content/links/index.md
new file mode 100644
index 0000000..03f0ca7
--- /dev/null
+++ b/content/links/index.md
@@ -0,0 +1,176 @@
+Title: GIMP Links
+Date: 2015-08-17T11:31:37-05:00
+Modified: 2015-08-17T11:31:42-05:00
+Authors: Pat David
+Status: hidden
+
+
+This page contains the best links to interesting GIMP-related sites. If you want to link to us instead,
please have a look at [this other page](/about/linking.html).
+
+## Important GIMP Links
+
+* [The GNU Image Manipulation Program](http://www.gimp.org/) - www.gimp.org
+* [GIMP Wiki](http://wiki.gimp.org/) - wiki.gimp.org
+* [GIMP Bugzilla](https://bugzilla.gnome.org/) - bugzilla.gnome.org
+* [The GIMP Toolkit](http://www.gtk.org/) - www.gtk.org
+* [GNU Project](http://www.gnu.org/) - www.gnu.org
+* [GNU General Public License](/about/COPYING) - GPL
+
+## GIMP RSS feeds
+
+* [GIMP Active
Bugs](https://bugzilla.gnome.org/buglist.cgi?bug_file_loc_type=substring&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=NEEDINFO&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&changedin=7&chfieldto=Now&product=GIMP&query_format=advanced&title=Bug%20List:%20GIMP%20-%20Current%20Bug%20Week&ctype=atom)
+
+## Other Useful Links
+
+* [gimp.org](#org)
+* [Tutorials](#tuts)
+* [Communities](#clubs)
+* [Development](#development)
+* [Created with GIMP](#created)
+* [More GIMP-links](#more)
+* [Other Graphics Applications](#other)
+
+## <a name="org"></a>gimp.org
+
+[bugzilla.gnome.org](https://bugzilla.gnome.org)
+ Take your bugs here.
+
+[wiki.gimp.org](http://wiki.gimp.org)
+ GIMP Developer site
+
+[gui.gimp.org](http://gui.gimp.org "GIMP Usability")
+ GIMP UI Redesign Wiki
+
+[docs.gimp.org](http://docs.gimp.org)
+ GIMP Documentation
+
+[registry.gimp.org](http://registry.gimp.org)
+ Plug-ins & Scripts
+
+[More ...](org.html)
+
+## <a name="development"></a>GIMP Development Links
+
+[GIMP developers](http://wiki.gimp.org)
+ The main GIMP development website.
+
+[Martin Nordholts' GIMP Blog](http://www.chromecode.com/)
+ What happens in GIMP development.
+
+[GEGL](http://www.gegl.org/)
+ An image processing library based on GObjects.
+
+[GNOME GIT](https://git.gnome.org/)
+ GNOME GIT source code repository
+
+## <a name="tuts"></a>Tutorials
+
+[Getting Around in GIMP](http://blog.patdavid.net/p/getting-around-in-gimp.html)
+ A collection of tutorials aimed at photography and retouching.
+
+[Search GIMP tutorials](http://www.pixel2life.com/tutorials/gimp/)
+ This site lets you find and rate GIMP tutorials hosted on other sites (note: with advertisements).
+
+[Gimp.Tutorials](http://www.ghuj.com/)
+ This site lets you find and comment on GIMP tutorials hosted on other sites (note: with advertisements).
+
+[gimpusers.com Tutorials](http://www.gimpusers.com/tutorials.php)
+ Tutorials on gimpusers.com (English + German)
+
+[gimps.de](http://gimps.de/)
+ has lots of GIMP tutorials; most of the texts are in German and English.
+
+[Gimpology](http://gimpology.com/)
+ Tutorials for the gimp
+
+[gimp-tutorials.net](http://gimp-tutorials.net/)
+ More GIMP tutorials
+
+## <a name="more"></a>More GIMP-links
+
+[GIMP-startpagina](http://gimp.startpagina.nl) <small>(Dutch version)</small>
+ Just one page, but contains the most up-to-date collection of links to GIMP-sites.
+
+[GIMP-startpage](http://gimp.start4all.com) <small>(English version)</small>
+ Essentially the same as the one above, but this time in English.
+
+[GIMP-category from ODP](http://www.dmoz.org/Computers/Software/Graphics/Image_Editing/The_GIMP/)
+ This OpenDirectoryProject-category holds links to GIMP-sites (like this page).
+
+[Meet the GIMP!](http://meetthegimp.org)
+ A video podcast about the free graphics program GIMP
+
+[DeviantArt](http://www.deviantart.com/resources/applications/)
+ Resources (brushes, scripts, plug-ins) for GIMP and other applications
+
+## <a name="clubs"></a>Clubs & Communities
+
+[English GIMP-club](http://tech.groups.yahoo.com/group/thegimp2/)
+ English-spoken community to discuss usage of GIMP
+
+[GIMP in Russian](http://www.gimp.ru)
+ Russian site about GIMP. Articles, tutorials, FAQ, forum.
+
+[Linuxartist.org](http://www.linuxartist.org)
+ A resource for artist using GNU/Linux.
+
+[gimpforum.de](http://www.gimpforum.de/)
+ German-spoken forum focusing on GIMP. News, tutorials, user-to-user help and galleries.
+
+[gimpusers.de](http://www.gimpusers.de/)
+ German GIMP platform offering tips & information about GIMP and a growing tutorials database.
+
+[gimpusers.com](http://www.gimpusers.com/)
+ An international community site offering tips, news and a growing tutorials database.
+
+[GIMP in Lithuanian](http://gimp.akl.lt/)
+ Lithuanian site about GIMP, featuring news, tutorials, forum and galleries.
+
+[GIMP.org.es](http://www.gimp.org.es)
+ News, tutorials, forum, galleries for Spanish-speaking users.
+
+[GIMP.hu](http://www.gimp.hu)
+ News, blog and forum in Magyar (Hungarian).
+
+[gimpuj.info](http://www.gimpuj.info/)
+ GIMP for Polish-speaking users: news, forum, tutorials, gallery.
+
+[www.gimp.no](http://www.gimp.no)
+ Forum and galleries in Norwegian.
+
+[GUG - Gimp User Group](http://gug.criticalhit.dk/)
+ Forum, tutorials, galleries.
+
+[GimpChat.com](http://gimpchat.com/)
+ Forum, tutorials, galleries and resources.
+
+[Gimper](http://gimper.net/)
+ Forum, tutorials, galleries and resources.
+
+## <a name="created"></a>Created with GIMP
+
+[Computer-graphics with GIMP](http://www.dmoz.org/Arts/Visual_Arts/Computer_Graphics/The_GIMP/)
+ This OpenDirectoryProject-category holds links to galleries of images created with GIMP
+
+## <a name="other"></a>Other Graphics Applications
+
+[ImageMagick](http://www.imagemagick.org/)
+ A collection of tools and libraries that work at the command line as well.
+
+[Tux Paint](http://www.tuxpaint.org/)
+ A drawing program for young children.
+
+[Krita](http://www.krita.org/)
+ Krita is a KDE program for sketching and painting, offering an end–to–end solution for creating digital
painting files from scratch by masters.
+
+[XV](http://www.trilon.com/xv/)
+ One of the original Unix graphics applications.
+
+[Skencil](http://www.skencil.org/) (formerly known as Sketch)
+ A vector drawing program for Unix.
+
+[Inkscape](http://www.inkscape.org/)
+ Very powerful [SVG](http://www.w3.org/Graphics/SVG/)-based illustration package distributed under the GNU
GPL.
+
+[Blender](http://www.blender.org/)
+ Multi-platform full featured 3D content creation suite, also distributed under the GPL.
diff --git a/content/links/org.md b/content/links/org.md
new file mode 100644
index 0000000..8794eb1
--- /dev/null
+++ b/content/links/org.md
@@ -0,0 +1,47 @@
+Title: GIMP Organization Links
+Date: 2015-08-17T11:31:37-05:00
+Modified: 2015-08-17T11:31:42-05:00
+Authors: Pat David
+Status: hidden
+
+
+## The GIMP Organization
+
+[bugzilla.gnome.org](https://bugzilla.gnome.org)
+ Take your bugs here.
+
+[wiki.gimp.org](http://wiki.gimp.org)
+ GIMP Developer site
+
+[gui.gimp.org](http://gui.gimp.org "GIMP Usability")
+ GIMP UI Redesign Wiki
+
+[docs.gimp.org](http://docs.gimp.org)
+ GIMP Documentation
+
+[registry.gimp.org](http://registry.gimp.org)
+ Plug-ins & Scripts
+
+[ircd.gimp.org](http://ircd.gimp.org)
+ The Official site of GIMPNet (irc://irc.gimp.org/).
+
+[adrian.gimp.org](http://adrian.gimp.org)
+ Tutorials, and other useful and entertaining information.
+
+[carol.gimp.org](http://carol.gimp.org)
+ Resources and tutorials.
+
+[mitch.gimp.org](http://mitch.gimp.org)
+ Web space for a mad man, maybe.
+
+[tigert.gimp.org](http://www.tigert.com)
+ Famous linux artist. Enough said.
+
+[sven.gimp.org](http://sven.gimp.org)
+ Tutorials and some of the original GIMP script-fu.
+
+[vidar.gimp.org](http://vidar.gimp.org)
+ Author of GIMPressionist and Fire Annimation plug-ins.
+
+[yosh.gimp.org](http://yosh.gimp.org)
+ Someones GIMP art.
diff --git a/content/man/gimp-remote.md b/content/man/gimp-remote.md
new file mode 100644
index 0000000..f9d5fcd
--- /dev/null
+++ b/content/man/gimp-remote.md
@@ -0,0 +1,112 @@
+Title: GIMP-REMOTE Man Page
+Date: 2015-08-17T11:31:37-05:00
+Modified: 2015-08-17T11:31:42-05:00
+Authors: Pat David
+Status: hidden
+
+<style>
+dt {
+ font-family: monospace;
+}
+</style>
+
+[Table of Contents](#toc)
+
+## [Name](#toc0)
+
+gimp-remote - tells a running GIMP to open a (local or remote) image file.
+
+## [Synopsis](#toc1)
+
+<span style="font-family: monospace;" markdown="1">
+**gimp‑remote** [‑h] [‑‑help] [‑v] [‑‑version]
[‑‑display _display_] [‑e] [‑‑existing] [‑q] [‑‑query]
[‑s] [‑‑no‑splash] [‑p] [‑‑print‑xid] _filename_ ...
+</span>
+
+## [Description](#toc2)
+
+_gimp-remote_ is a small utility that tells a running GIMP to open one or more (local or remote) image
files. It does so by searching for a GIMP toolbox on the active display. If it can find a GIMP toolbox, a
synthetic drop event is created which makes GIMP think the files would have been dropped onto the toolbox.
More than one filename or URL can be specified on the commandline.
+
+If no GIMP window is found, _gimp-remote_ will start a new GIMP instance and ask it to load the specified
images. If no filename or URL is given, _gimp-remote_ will start a new GIMP. This behaviour can be altered
using the command-line options described below.
+
+If you are using GIMP on Linux or another platform with the D-Bus message bus system, chances are good that
this functionality is already built into the main GIMP executable and that you will not need to use
_gimp-remote_.
+
+## [Options](#toc3)
+
+_gimp-remote_ accepts the following options:
+
+<dl>
+
+<dt>-h, --help</dt>
+
+<dd>Display a list of all commandline options.</dd>
+
+<dt>-v, --version</dt>
+
+<dd>Output the version info.</dd>
+
+<dt>--display _display_</dt>
+
+<dd>Use the designated X display.</dd>
+
+<dt>-e, --existing</dt>
+
+<dd>If no running GIMP instance is found, don’t start a new one but exit.</dd>
+
+<dt>-q, --query</dt>
+
+<dd>Check if GIMP is running and exit. A status code of 0 indicates that a GIMP toolbox window has been
found on this display.</dd>
+
+<dt>-p, --print-xid</dt>
+
+<dd>Like -q, but print the X Window ID of the toolbox window if GIMP is already running. If no such window
exists nothing is printed.</dd>
+
+<dt>-s, --no-splash</dt>
+
+<dd>When starting GIMP, do not show the splash screen.</dd>
+
+</dl>
+
+## [Examples](#toc4)
+
+<dl>
+
+<dt>gimp-remote <a
href="http://www.gimp.org/images/wilber_the_gimp.png">http://www.gimp.org/images/wilber_the_gimp.png</a></dt>
+
+<dd>Loads the image from the GIMP website into a running GIMP or starts a new one.</dd>
+
+<dt>gimp-remote wilber.xcf wilma.xcf</dt>
+
+<dd>Loads the local files wilber.xcf and wilma.xcf into a running GIMP or starts a new one.</dd>
+
+</dl>
+
+## [Environment](#toc5)
+
+<dl>
+
+<dt>DISPLAY</dt>
+
+<dd>to get the default host and display number.</dd>
+
+</dl>
+
+## [Authors](#toc6)
+
+Sven Neumann and Simon Budig.
+
+## [See Also](#toc7)
+
+[**gimp**(1)](gimp.html) , [**gimprc**(5)](gimprc.html) , [**gimptool**(1)](gimptool.html)
+
+* * *
+
+<a name="toc">Table of Contents</a>
+
+* [Name](#sect0)
+* [Synopsis](#sect1)
+* [Description](#sect2)
+* [Options](#sect3)
+* [Examples](#sect4)
+* [Environment](#sect5)
+* [Authors](#sect6)
+* [See Also](#sect7)
diff --git a/content/man/gimp.md b/content/man/gimp.md
new file mode 100644
index 0000000..41cdf9a
--- /dev/null
+++ b/content/man/gimp.md
@@ -0,0 +1,318 @@
+Title: GIMP Man Page
+Date: 2015-08-17T11:31:37-05:00
+Modified: 2015-08-17T11:31:42-05:00
+Authors: Pat David
+Status: hidden
+
+<style>
+dt {
+ font-family: monospace;
+}
+</style>
+
+
+[Table of Contents](#toc)
+
+## [Name](#toc0)
+
+gimp - an image manipulation and paint program.
+
+## [Synopsis](#toc1)
+
+<span style="font-family: monospace;" markdown="1">
+**gimp** [‑h] [‑‑help] [‑‑help‑all] [‑‑help‑gtk]
[‑v] [‑‑version] [‑‑license] [‑‑verbose] [‑n]
[‑‑new‑instance] [‑a] [‑‑as‑new] [‑i]
[‑‑no‑interface] [‑d] [‑‑no‑data] [‑f]
[‑‑no‑fonts] [‑s] [‑‑no‑splash] [‑‑no‑shm]
[‑‑no‑cpu‑accel] [‑‑display _display_]
[‑‑session _<name>_] [‑g] [‑‑gimprc _<gimprc>_]
[‑‑system‑gimprc _<gimprc>_] [‑‑dump‑gimprc]
[‑‑console‑messages] [‑‑debug‑handlers]
[‑‑stack‑trace‑mode _<mode>_]
[‑‑pdb‑compat‑mode _<mode>_] [‑‑batch‑interpreter&
nbsp;_<procedure>_] [‑b] [‑‑batch _<command>_] [_filename_] ...
+</span>
+<!--
+If you're reading this, I'm sorry for what you see above. It's a man page formatting. HTML makes a mess of
it.
+And raw man pages suck, imo. Here's what I did:
+1. Wrap it in a span, set the font family to mono.
+2. escape all brackets (not sure I need this).
+3. replace all "<" and ">" with < and >
+4. replace all hyphens/dashes with the non-breaking version: ‑
+5. replace all spaces inside brackets with non-breaking version:
+-->
+
+## [Description](#toc2)
+
+GIMP is the _GNU Image Manipulation Program_. It is used to edit and manipulate images. It can load and save
a variety of image formats and can be used to convert between formats.
+
+GIMP can also be used as a paint program. It features a set of drawing and painting tools such as airbrush,
clone, pencil, and paint brush. Painting and drawing tools can be applied to an image with a variety of paint
modes. It also offers an extensive array of selection tools like rectangle, ellipse, fuzzy select, bezier
select, intelligent scissors, and select by color.
+
+GIMP offers a variety of plug-ins that perform a variety of image manipulations. Examples include bumpmap,
edge detect, gaussian blur, and many others. In addition, GIMP has several scripting extension which allow
for advanced non-interactive processing and creation of images.
+
+GIMP ships with a second binary called _gimp-console_. This binary is a console-only version and behaves as
if _gimp_ was called with the --no-interface command-line option.
+
+On platforms with the D-Bus message bus system, GIMP will by default check if an instance is already running
in this user session. If it detects that, it will pass all filenames given on the command-line to the already
running GIMP instance and quit.
+
+## [Options](#toc3)
+
+GIMP accepts the following options:
+
+<dl>
+
+<dt>-h, --help</dt>
+
+<dd>Show GIMP command-line options.</dd>
+
+<dt>--help-all</dt>
+
+<dd>Show all command-line options.</dd>
+
+<dt>--help-gtk</dt>
+
+<dd>Show GTK+ command-line options.</dd>
+
+<dt>--help-gegl</dt>
+
+<dd>Show GEGL command-line options.</dd>
+
+<dt>-v, --version</dt>
+
+<dd>Output version information and exit. When combined with the --verbose option, version information about
libraries used by GIMP is shown as well.</dd>
+
+<dt>--license</dt>
+
+<dd>Output license information and exit.</dd>
+
+<dt>--verbose</dt>
+
+<dd>Be verbose and create information on standard output.</dd>
+
+<dt>-n, --new-instance</dt>
+
+<dd>Do not attempt to reuse an already running GIMP instance. Always start a new one.</dd>
+
+<dt>-a, --as-new</dt>
+
+<dd>Open filenames passed on the command-line as new images, don’t set the filename on them.</dd>
+
+<dt>-i, --no-interface</dt>
+
+<dd>Run without a user interface.</dd>
+
+<dt>-d, --no-data</dt>
+
+<dd>Do not load patterns, gradients, palettes, or brushes. Often useful in non-interactive situations where
startup time is to be minimized.</dd>
+
+<dt>-f, --no-fonts</dt>
+
+<dd>Do not load any fonts. No text functionality will be available if this option is used.</dd>
+
+<dt>--display _display_</dt>
+
+<dd>Use the designated X display.</dd>
+
+<dt>-s, --no-splash</dt>
+
+<dd>Do not show the splash screen.</dd>
+
+<dt>--no-shm</dt>
+
+<dd>Do not use shared memory between GIMP and its plug-ins. Instead of using shared memory, GIMP will send
the data via pipe. This will result in slower performance than using shared memory.</dd>
+
+<dt>--no-cpu-accel</dt>
+
+<dd>Do not use CPU accelerations such as MMX or SSE even if GIMP detects that your CPU provides this
functionality.</dd>
+
+<dt>--session <em><name></em></dt>
+
+<dd>Use a different sessionrc for this GIMP session. The given session name is appended to the default
sessionrc filename.</dd>
+
+<dt>-g, --gimprc <em><gimprc></em></dt>
+
+<dd>Use an alternative gimprc instead of the default one. Useful in cases where plug-in paths or machine
specs may be different.</dd>
+
+<dt>--system-gimprc <em><gimprc></em></dt>
+
+<dd>Use an alternate system gimprc file.</dd>
+
+<dt>--dump-gimprc</dt>
+
+<dd>Output a gimprc file with default settings.</dd>
+
+<dt>--debug-handlers</dt>
+
+<dd>Enable debugging signal handlers.</dd>
+
+<dt>-c, --console-messages</dt>
+
+<dd>Do not popup dialog boxes on errors or warnings. Print the messages on the console instead.</dd>
+
+<dt>--stack-trace-mode <em>{never|query|always}</em></dt>
+
+<dd>If a stack-trace should be generated in case of fatal signals.</dd>
+
+<dt>--pdb-compat-mode <em>{off|on|warn}</em></dt>
+
+<dd>If the PDB should provide aliases for deprecated functions.</dd>
+
+<dt>--batch-interpreter <em><procedure></em></dt>
+
+<dd>Specifies the procedure to use to process batch events. The default is to let Script-Fu evaluate the
commands.</dd>
+
+<dt>-b, --batch <em><command></em></dt>
+
+<dd>Execute <em><command></em> non-interactively. This option may appear multiple times. The
<em><command></em> is passed to the batch interpreter. When <em><command></em> is
<strong>-</strong> the commands are read from standard input.</dd>
+
+</dl>
+
+## [Environment](#toc4)
+
+GIMP respects a number of environment variables.
+
+<dl>
+
+<dt>DISPLAY</dt>
+
+<dd>to get the default host and display number.</dd>
+
+<dt>GIMP2_DIRECTORY</dt>
+
+<dd>to get the name of the personal GIMP directory. If unset .gimp-2.6 is used. If this is an absolute path,
it is used as is. If it is a relative path, it is taken to be a subdirectory of the home directory.</dd>
+
+<dt>GIMP2_DATADIR</dt>
+
+<dd>to get the base location for data files such as brushes and patterns. If unset /usr/share/gimp/2.0 is
used.</dd>
+
+<dt>GIMP2_LOCALEDIR</dt>
+
+<dd>to get the base location for translations. If unset /usr/share/locale is used.</dd>
+
+<dt>GIMP2_PLUGINDIR</dt>
+
+<dd>to get the base location for plug-ins and modules. If unset /usr/lib64/gimp/2.0 is used.</dd>
+
+<dt>GIMP2_SYSCONFDIR</dt>
+
+<dd>to get the location of configuration files. If unset /etc/gimp/2.0 is used.
+
+On Linux GIMP can be compiled with support for binary relocatibility. This will cause data, plug-ins and
configuration files to be searched relative to the location of the gimp executable file unless overridden by
the environment variables mentioned above.
+
+</dd>
+
+</dl>
+
+## [Files](#toc5)
+
+GIMP’s data files are stored in /usr/share/gimp/2.0, where ${datarootdir} is set on install, but is
typically /usr/share. GIMP’s system-wide configuration files are stored in /etc/gimp/2.0, where ${prefix} is
typically /usr.
+
+Most GIMP configuration is read in from the user’s init file, **$HOME**/.gimp-2.6/gimprc. The system wide
equivalent is in /etc/gimprc. The system wide file is parsed first and the user gimprc can override the
system settings. /etc/gimprc_user is the default gimprc placed in users’ home directories the first time GIMP
is run.
+
+**$HOME**/.gimp-2.6/devicerc - holds settings for input devices together with the tool, colors, brush,
pattern and gradient associated to that device.
+
+**$HOME**/.gimp-2.6/gtkrc - users set of GIMP-specific GTK+ config settings. Options such as widget color
and fonts sizes can be set here.
+
+/etc/gimp/2.0/gtkrc - sytem wide default set of GIMP-specific GTK+ config settings.
+
+**$HOME**/.gimp-2.6/menurc - user’s set of keybindings.
+
+**$HOME**/.gimp-2.6/parasiterc - Stores all persistent GIMP parasites. This file will be rewritten every
time you quit GIMP.
+
+**$HOME**/.gimp-2.6/sessionrc - This file takes session-specific info (that is info, you want to keep
between two GIMP sessions). You are not supposed to edit it manually, but of course you can do. This file
will be entirely rewritten every time you quit GIMP. If this file isn’t found, defaults are used.
+
+**$HOME**/.gimp-2.6/templaterc - Image templates are kept in this file. New images can conveniently created
from these templates. If this file isn’t found, defaults are used.
+
+/etc/gimp/2.0/unitrc - default user unit database. It contains the unit definitions for centimeters, meters,
feet, yards, typographic points and typographic picas and is placed in users home directories the first time
GIMP is ran. If this file isn’t found, defaults are used.
+
+**$HOME**/.gimp-2.6/unitrc - This file contains your user unit database. You can modify this list with the
unit editor. You are not supposed to edit it manually, but of course you can do. This file will be entirely
rewritten every time you quit GIMP.
+
+**$HOME**/.gimp-2.6/plug-ins - location of user installed plug-ins.
+
+**$HOME**/.gimp-2.6/pluginrc - plug-in initialization values are stored here. This file is parsed on startup
and regenerated if need be.
+
+**$HOME**/.gimp-2.6/modules - location of user installed modules.
+
+**$HOME**/.gimp-2.6/tmp - default location that GIMP uses as temporary space.
+
+/usr/share/gimp/2.0/brushes - system wide brush files.
+
+**$HOME**/.gimp-2.6/brushes - user created and installed brush files. These files are in the .gbr, .gih or
.vbr file formats.
+
+**$HOME**/.gimp-2.6/curves - Curve profiles and presets as saved from the Curves tool.
+
+**$HOME**/.gimp-2.6/gimpressionist - Presets and user created brushes and papers are stored here.
+
+**$HOME**/.gimp-2.6/levels - Level profiles and presets as saved from the Levels tool.
+
+/usr/share/gimp/2.0/palettes - the system wide palette files.
+
+**$HOME**/.gimp-2.6/palettes - user created and modified palette files. This files are in the .gpl format.
+
+/usr/share/gimp/2.0/patterns - basic set of patterns for use in GIMP.
+
+**$HOME**/.gimp-2.6/patterns - user created and installed gimp pattern files. This files are in the .pat
format.
+
+/usr/share/gimp/2.0/gradients - standard system wide set of gradient files.
+
+**$HOME**/.gimp-2.6/gradients - user created and installed gradient files.
+
+/usr/share/gimp/2.0/scripts - system wide directory of scripts used in Script-Fu and other scripting
extensions.
+
+**$HOME**/.gimp-2.6/scripts - user created and installed scripts.
+
+/usr/share/gimp/2.0/gflares - system wide directory used by the gflare plug-in.
+
+**$HOME**/.gimp-2.6/gflares - user created and installed gflare files.
+
+/usr/share/gimp/2.0/gfig - system wide directory used by the gfig plug-in.
+
+**$HOME**/.gimp-2.6/gfig - user created and installed gfig files.
+
+/usr/share/gimp/2.0/images/gimp-splash.png - the default image used for the GIMP splash screen.
+
+/usr/share/gimp/2.0/images/gimp-logo.png - image used in the GIMP about dialog.
+
+/usr/share/gimp/2.0/tips/gimp-tips.xml - tips as displayed in the "Tip of the Day" dialog box.
+
+## [Splash Images](#toc6)
+
+GIMP comes with a default image for the splash screen but it allows system administrators and users to
customize the splash screen by providing other images. The image to be used with the splash screen is chosen
as follows:
+
+
+1. GIMP tries to load a random splash screen from the directory **$HOME**/.gimp-2.6/splashes.
+
+2. It then falls back to using **$HOME**/.gimp-2.6/gimp-splash.png.
+
+3. If the user didn’t install any custom splash images, a random image is picked from
/usr/share/gimp/2.0/splashes.
+
+4. As a last resort, GIMP uses the default splash image located at
/usr/share/gimp/2.0/images/gimp-splash.png.
+
+## [Suggestions and Bug Reports](#toc7)
+
+Any bugs found should be reported to the online bug-tracking system available on the web at
[http://bugzilla.gnome.org/.](http://bugzilla.gnome.org/.) Before reporting bugs, please check to see if the
bug has already been reported.
+
+When reporting GIMP bugs, it is important to include a reliable way to reproduce the bug, version number of
GIMP (and probably GTK+), OS name and version, and any relevant hardware specs. If a bug is causing a crash,
it is very useful if a stack trace can be provided. And of course, patches to rectify the bug are even better.
+
+## [Other Info](#toc8)
+
+The canonical place to find GIMP info is at [http://www.gimp.org/.](http://www.gimp.org/.) Here you can find
links to just about many other GIMP sites, tutorials, data sets, mailing list archives, and more.
+
+There is also a GIMP User Manual available at [http://docs.gimp.org/](http://docs.gimp.org/) that goes into
much more detail about the interactive use of GIMP.
+
+The latest version of GIMP and the GTK+ libs is always available at http://download.gimp.org/.
+
+## [Authors](#toc9)
+
+Spencer Kimball, Peter Mattis and the GIMP Development Team.
+
+With patches, fixes, plug-ins, extensions, scripts, translations, documentation and more from lots and lots
of people all over the world.
+
+## [See Also](#toc10)
+
+[**gimprc**(5)](gimprc.html) , [**gimptool**(1)](gimptool.html) ,
+
+* * *
+
+<a name="toc">**Table of Contents**</a>
+
+* [Name](#sect0)
+* [Synopsis](#sect1)
+* [Description](#sect2)
+* [Options](#sect3)
+* [Environment](#sect4)
+* [Files](#sect5)
+* [Splash Images](#sect6)
+* [Suggestions and Bug Reports](#sect7)
+* [Other Info](#sect8)
+* [Authors](#sect9)
+* [See Also](#sect10)
diff --git a/content/man/gimprc.md b/content/man/gimprc.md
new file mode 100644
index 0000000..2a1cfb8
--- /dev/null
+++ b/content/man/gimprc.md
@@ -0,0 +1,1073 @@
+Title: gimprc Man Page
+Date: 2015-08-17T11:31:37-05:00
+Modified: 2015-08-17T11:31:42-05:00
+Authors: Pat David
+Status: hidden
+
+<style>
+dt {
+ font-family: monospace;
+}
+</style>
+
+[Table of Contents](#toc)
+
+## [Name](#toc0)
+
+gimprc - gimp configuration file
+
+## [Description](#toc1)
+
+The **gimprc** file is a configuration file read by GIMP when it starts up. There are two of these: one
system-wide one stored in /etc/gimp/2.0/gimprc and a per-user **$HOME**/.gimp-2.6/gimprc which may override
system settings.
+
+Comments are introduced by a hash sign (#), and continue until the end of the line. Blank lines are ignored.
+
+The **gimprc** file associates values with properties. These properties may be set by lisp-like assignments
of the form:
+
+<dl>
+
+<dt><em><strong>(property-name value)</strong></em></dt>
+
+<dt>where:</dt>
+
+<dt><em>property-name</em></dt>
+
+<dd>is one of the property names described below.</dd>
+
+<dt><em>value</em></dt>
+
+<dd>is the value the property is to be set to.</dd>
+
+</dl>
+
+Either spaces or tabs may be used to separate the name from the value.
+
+## [Properties](#toc2)
+
+Valid properties and their default values are:
+
+<dl>
+
+<dt>(temp-path "${gimp_dir}/tmp")</dt>
+
+<dd>
+
+Sets the folder for temporary storage. Files will appear here during the course of running GIMP. Most files
will disappear when GIMP exits, but some files are likely to remain, so it is best if this folder not be one
that is shared by other users. This is a single folder.
+
+</dd>
+
+<dt>(swap-path "${gimp_dir}")</dt>
+
+<dd>
+
+Sets the swap file location. GIMP uses a tile based memory allocation scheme. The swap file is used to
quickly and easily swap tiles out to disk and back in. Be aware that the swap file can easily get very large
if GIMP is used with large images. Also, things can get horribly slow if the swap file is created on a folder
that is mounted over NFS. For these reasons, it may be desirable to put your swap file in "/tmp". This is a
single folder.
+
+</dd>
+
+<dt>(num-processors 1)</dt>
+
+<dd>
+
+Sets how many processors GIMP should try to use simultaneously. This is an integer value.
+
+</dd>
+
+<dt>(tile-cache-size 1024M)</dt>
+
+<dd>
+
+When the amount of pixel data exceeds this limit, GIMP will start to swap tiles to disk. This is a lot
slower but it makes it possible to work on images that wouldn’t fit into memory otherwise. If you have a lot
of RAM, you may want to set this to a higher value. The integer size can contain a suffix of ’B’, ’K’, ’M’ or
’G’ which makes GIMP interpret the size as being specified in bytes, kilobytes, megabytes or gigabytes. If no
suffix is specified the size defaults to being specified in kilobytes.
+
+</dd>
+
+<dt>(interpolation-type cubic)</dt>
+
+<dd>
+
+Sets the level of interpolation used for scaling and other transformations. Possible values are none,
linear, cubic and lanczos.
+
+</dd>
+
+<dt>(plug-in-path "${gimp_dir}/plug-ins:${gimp_plug_in_dir}/plug-ins")</dt>
+
+<dd>
+
+Sets the plug-in search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(module-path "${gimp_dir}/modules:${gimp_plug_in_dir}/modules")</dt>
+
+<dd>
+
+Sets the module search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(interpreter-path "${gimp_dir}/interpreters:${gimp_plug_in_dir}/interpreters")</dt>
+
+<dd>
+
+Sets the interpreter search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(environ-path "${gimp_dir}/environ:${gimp_plug_in_dir}/environ")</dt>
+
+<dd>
+
+Sets the environ search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(brush-path "${gimp_dir}/brushes:${gimp_data_dir}/brushes")</dt>
+
+<dd>
+
+Sets the brush search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(brush-path-writable "${gimp_dir}/brushes")</dt>
+
+<dd>
+
+This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(pattern-path "${gimp_dir}/patterns:${gimp_data_dir}/patterns")</dt>
+
+<dd>
+
+Sets the pattern search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(pattern-path-writable "${gimp_dir}/patterns")</dt>
+
+<dd>
+
+This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(palette-path "${gimp_dir}/palettes:${gimp_data_dir}/palettes")</dt>
+
+<dd>
+
+Sets the palette search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(palette-path-writable "${gimp_dir}/palettes")</dt>
+
+<dd>
+
+This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(gradient-path "${gimp_dir}/gradients:${gimp_data_dir}/gradients")</dt>
+
+<dd>
+
+Sets the gradient search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(gradient-path-writable "${gimp_dir}/gradients")</dt>
+
+<dd>
+
+This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(font-path "${gimp_dir}/fonts:${gimp_data_dir}/fonts")</dt>
+
+<dd>
+
+Where to look for fonts in addition to the system-wide installed fonts. This is a colon-separated list of
folders to search.
+
+</dd>
+
+<dt>(default-brush "Circle (11)")</dt>
+
+<dd>
+
+Specify a default brush. The brush is searched for in the specified brush path. This is a string value.
+
+</dd>
+
+<dt>(default-pattern "Pine")</dt>
+
+<dd>
+
+Specify a default pattern. This is a string value.
+
+</dd>
+
+<dt>(default-palette "Default")</dt>
+
+<dd>
+
+Specify a default palette. This is a string value.
+
+</dd>
+
+<dt>(default-gradient "FG to BG (RGB)")</dt>
+
+<dd>
+
+Specify a default gradient. This is a string value.
+
+</dd>
+
+<dt>(default-font "Sans")</dt>
+
+<dd>
+
+Specify a default font. This is a string value.
+
+</dd>
+
+<dt>(global-brush yes)</dt>
+
+<dd>
+
+When enabled, the selected brush will be used for all tools. Possible values are yes and no.
+
+</dd>
+
+<dt>(global-pattern yes)</dt>
+
+<dd>
+
+When enabled, the selected pattern will be used for all tools. Possible values are yes and no.
+
+</dd>
+
+<dt>(global-palette yes)</dt>
+
+<dd>
+
+When enabled, the selected palette will be used for all tools. Possible values are yes and no.
+
+</dd>
+
+<dt>(global-gradient yes)</dt>
+
+<dd>
+
+When enabled, the selected gradient will be used for all tools. Possible values are yes and no.
+
+</dd>
+
+<dt>(global-font yes)</dt>
+
+<dd>
+
+When enabled, the selected font will be used for all tools. Possible values are yes and no.
+
+</dd>
+
+<dt>(default-image</dt>
+
+<dd>
+<pre style="font-size: 0.85rem;">
+ (width 640)
+ (height 400)
+ (unit pixels)
+ (xresolution 72.000000)
+ (yresolution 72.000000)
+ (resolution-unit inches)
+ (image-type rgb)
+ (fill-type background-fill)
+ (comment "Created with GIMP"))
+</pre>
+
+Sets the default image in the "File/New" dialog. This is a parameter list.
+
+</dd>
+
+<dt>(default-grid</dt>
+
+<dd><pre style="font-size: 0.85rem;">
+(style solid)
+ (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000))
+ (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000))
+ (xspacing 10.000000)
+ (yspacing 10.000000)
+ (spacing-unit inches)
+ (xoffset 0.000000)
+ (yoffset 0.000000)
+ (offset-unit inches))
+</pre>
+
+Specify a default image grid. This is a parameter list.
+
+</dd>
+
+<dt>(undo-levels 5)</dt>
+
+<dd>
+
+Sets the minimal number of operations that can be undone. More undo levels are kept available until the
undo-size limit is reached. This is an integer value.
+
+</dd>
+
+<dt>(undo-size 64M)</dt>
+
+<dd>
+
+Sets an upper limit to the memory that is used per image to keep operations on the undo stack. Regardless of
this setting, at least as many undo-levels as configured can be undone. The integer size can contain a suffix
of ’B’, ’K’, ’M’ or ’G’ which makes GIMP interpret the size as being specified in bytes, kilobytes, megabytes
or gigabytes. If no suffix is specified the size defaults to being specified in kilobytes.
+
+</dd>
+
+<dt>(undo-preview-size large)</dt>
+
+<dd>
+
+Sets the size of the previews in the Undo History. Possible values are tiny, extra-small, small, medium,
large, extra-large, huge, enormous and gigantic.
+
+</dd>
+
+<dt>(plug-in-history-size 10)</dt>
+
+<dd>
+
+How many recently used plug-ins to keep on the Filters menu. This is an integer value.
+
+</dd>
+
+<dt>(pluginrc-path "${gimp_dir}/pluginrc")</dt>
+
+<dd>
+
+Sets the pluginrc search path. This is a single filename.
+
+</dd>
+
+<dt>(layer-previews yes)</dt>
+
+<dd>
+
+Sets whether GIMP should create previews of layers and channels. Previews in the layers and channels dialog
are nice to have but they can slow things down when working with large images. Possible values are yes and no.
+
+</dd>
+
+<dt>(layer-preview-size medium)</dt>
+
+<dd>
+
+Sets the preview size used for layers and channel previews in newly created dialogs. Possible values are
tiny, extra-small, small, medium, large, extra-large, huge, enormous and gigantic.
+
+</dd>
+
+<dt>(thumbnail-size normal)</dt>
+
+<dd>
+
+Sets the size of the thumbnail shown in the Open dialog. Possible values are none, normal and large.
+
+</dd>
+
+<dt>(thumbnail-filesize-limit 4M)</dt>
+
+<dd>
+
+The thumbnail in the Open dialog will be automatically updated if the file being previewed is smaller than
the size set here. The integer size can contain a suffix of ’B’, ’K’, ’M’ or ’G’ which makes GIMP interpret
the size as being specified in bytes, kilobytes, megabytes or gigabytes. If no suffix is specified the size
defaults to being specified in kilobytes.
+
+</dd>
+
+<dt>(install-colormap no)</dt>
+
+<dd>
+
+Install a private colormap; might be useful on 8-bit (256 colors) displays. Possible values are yes and no.
+
+</dd>
+
+<dt>(min-colors 144)</dt>
+
+<dd>
+
+Generally only a concern for 8-bit displays, this sets the minimum number of system colors allocated for
GIMP. This is an integer value.
+
+</dd>
+
+<dt>(color-management</dt>
+
+<dd><pre style="font-size:0.85rem;">
+(mode display)
+ (display-profile-from-gdk no)
+ (display-rendering-intent perceptual)
+ (simulation-rendering-intent perceptual)
+ (simulation-gamut-check no)
+ (out-of-gamut-color (color-rgb 0.501961 0.501961 0.501961))
+ (display-module "CdisplayLcms"))
+</pre>
+
+Defines the color management behavior. This is a parameter list.
+
+</dd>
+
+<dt>(color-profile-policy ask)</dt>
+
+<dd>
+
+How to handle embedded color profiles when opening a file. Possible values are ask, keep and convert.
+
+</dd>
+
+<dt>(save-document-history yes)</dt>
+
+<dd>
+
+Keep a permanent record of all opened and saved files in the Recent Documents list. Possible values are yes
and no.
+
+</dd>
+
+<dt>(transparency-size medium-checks)</dt>
+
+<dd>
+
+Sets the size of the checkerboard used to display transparency. Possible values are small-checks,
medium-checks and large-checks.
+
+</dd>
+
+<dt>(transparency-type gray-checks)</dt>
+
+<dd>
+
+Sets the manner in which transparency is displayed in images. Possible values are light-checks, gray-checks,
dark-checks, white-only, gray-only and black-only.
+
+</dd>
+
+<dt>(snap-distance 8)</dt>
+
+<dd>
+
+This is the distance in pixels where Guide and Grid snapping activates. This is an integer value.
+
+</dd>
+
+<dt>(marching-ants-speed 200)</dt>
+
+<dd>
+
+Speed of marching ants in the selection outline. This value is in milliseconds (less time indicates faster
marching). This is an integer value.
+
+</dd>
+
+<dt>(resize-windows-on-zoom no)</dt>
+
+<dd>
+
+When enabled, the image window will automatically resize itself when zooming into and out of images.
Possible values are yes and no.
+
+</dd>
+
+<dt>(resize-windows-on-resize no)</dt>
+
+<dd>
+
+When enabled, the image window will automatically resize itself whenever the physical image size changes.
Possible values are yes and no.
+
+</dd>
+
+<dt>(default-dot-for-dot yes)</dt>
+
+<dd>
+
+When enabled, this will ensure that each pixel of an image gets mapped to a pixel on the screen. Possible
values are yes and no.
+
+</dd>
+
+<dt>(initial-zoom-to-fit yes)</dt>
+
+<dd>
+
+When enabled, this will ensure that the full image is visible after a file is opened, otherwise it will be
displayed with a scale of 1:1\. Possible values are yes and no.
+
+</dd>
+
+<dt>(perfect-mouse yes)</dt>
+
+<dd>
+
+When enabled, the X server is queried for the mouse’s current position on each motion event, rather than
relying on the position hint. This means painting with large brushes should be more accurate, but it may be
slower. Perversely, on some X servers enabling this option results in faster painting. Possible values are
yes and no.
+
+</dd>
+
+<dt>(cursor-mode tool-icon)</dt>
+
+<dd>
+
+Sets the type of mouse pointers to use. Possible values are tool-icon, tool-crosshair and crosshair.
+
+</dd>
+
+<dt>(cursor-updating yes)</dt>
+
+<dd>
+
+Context-dependent mouse pointers are helpful. They are enabled by default. However, they require overhead
that you may want to do without. Possible values are yes and no.
+
+</dd>
+
+<dt>(show-brush-outline yes)</dt>
+
+<dd>
+
+When enabled, all paint tools will show a preview of the current brush’s outline. Possible values are yes
and no.
+
+</dd>
+
+<dt>(show-paint-tool-cursor yes)</dt>
+
+<dd>
+
+When enabled, the mouse pointer will be shown over the image while using a paint tool. Possible values are
yes and no.
+
+</dd>
+
+<dt>(image-title-format "%D*%f-%p.%i (%t, %L) %wx%h")</dt>
+
+<dd>
+
+Sets the text to appear in image window titles. This is a format string; certain % character sequences are
recognised and expanded as follows:
+
+<pre style="font-size: 0.85rem;">
+ %% literal percent sign
+ %f bare filename, or "Untitled"
+ %F full path to file, or "Untitled"
+ %p PDB image id
+ %i view instance number
+ %t image type (RGB, grayscale, indexed)
+ %z zoom factor as a percentage
+ %s source scale factor
+ %d destination scale factor
+ %Dx expands to x if the image is dirty, the empty string otherwise
+ %Cx expands to x if the image is clean, the empty string otherwise
+ %B expands to (modified) if the image is dirty, the empty string otherwise
+ %A expands to (clean) if the image is clean, the empty string otherwise
+ %l the number of layers
+ %L the number of layers (long form)
+ %m memory used by the image
+ %n the name of the active layer/channel
+ %P the PDB id of the active layer/channel
+ %w image width in pixels
+ %W image width in real-world units
+ %h image height in pixels
+ %H image height in real-world units
+ %u unit symbol
+ %U unit abbreviation
+
+</pre>
+</dd>
+
+<dt>(image-status-format "%n (%m)")</dt>
+
+<dd>
+
+Sets the text to appear in image window status bars. This is a format string; certain % character sequences
are recognised and expanded as follows:
+
+<pre style="font-size:0.85rem;">
+%% literal percent sign
+%f bare filename, or "Untitled"
+%F full path to file, or "Untitled"
+%p PDB image id
+%i view instance number
+%t image type (RGB, grayscale, indexed)
+%z zoom factor as a percentage
+%s source scale factor
+%d destination scale factor
+%Dx expands to x if the image is dirty, the empty string otherwise
+%Cx expands to x if the image is clean, the empty string otherwise
+%B expands to (modified) if the image is dirty, the empty string otherwise
+%A expands to (clean) if the image is clean, the empty string otherwise
+%l the number of layers
+%L the number of layers (long form)
+%m memory used by the image
+%n the name of the active layer/channel
+%P the PDB id of the active layer/channel
+%w image width in pixels
+%W image width in real-world units
+%h image height in pixels
+%H image height in real-world units
+%u unit symbol
+%U unit abbreviation
+</pre>
+
+</dd>
+
+<dt>(confirm-on-close yes)</dt>
+
+<dd>
+
+Ask for confirmation before closing an image without saving. Possible values are yes and no.
+
+</dd>
+
+<dt>(monitor-xresolution 96.000000)</dt>
+
+<dd>
+
+Sets the monitor’s horizontal resolution, in dots per inch. If set to 0, forces the X server to be queried
for both horizontal and vertical resolution information. This is a float value.
+
+</dd>
+
+<dt>(monitor-yresolution 96.000000)</dt>
+
+<dd>
+
+Sets the monitor’s vertical resolution, in dots per inch. If set to 0, forces the X server to be queried for
both horizontal and vertical resolution information. This is a float value.
+
+</dd>
+
+<dt>(monitor-resolution-from-windowing-system yes)</dt>
+
+<dd>
+
+When enabled, GIMP will use the monitor resolution from the windowing system. Possible values are yes and no.
+
+</dd>
+
+<dt>(navigation-preview-size medium)</dt>
+
+<dd>
+
+Sets the size of the navigation preview available in the lower right corner of the image window. Possible
values are tiny, extra-small, small, medium, large, extra-large, huge, enormous and gigantic.
+
+</dd>
+
+<dt>(default-view</dt>
+
+<dd>
+<pre style="font-size: 0.85rem;">
+(show-menubar yes)
+ (show-rulers yes)
+ (show-scrollbars yes)
+ (show-statusbar yes)
+ (show-selection yes)
+ (show-layer-boundary yes)
+ (show-guides yes)
+ (show-grid no)
+ (show-sample-points yes)
+ (padding-mode default)
+ (padding-color (color-rgb 1.000000 1.000000 1.000000)))
+</pre>
+
+Sets the default settings for the image view. This is a parameter list.
+
+</dd>
+
+<dt>(default-fullscreen-view</dt>
+
+<dd>
+<pre style="font-size: 0.85rem;">>
+(show-menubar yes)
+ (show-rulers yes)
+ (show-scrollbars yes)
+ (show-statusbar yes)
+ (show-selection yes)
+ (show-layer-boundary yes)
+ (show-guides yes)
+ (show-grid no)
+ (show-sample-points yes)
+ (padding-mode default)
+ (padding-color (color-rgb 1.000000 1.000000 1.000000)))
+</pre>
+
+Sets the default settings used when an image is viewed in fullscreen mode. This is a parameter list.
+
+</dd>
+
+<dt>(activate-on-focus yes)</dt>
+
+<dd>
+
+When enabled, an image will become the active image when its image window receives the focus. This is useful
for window managers using "click to focus". Possible values are yes and no.
+
+</dd>
+
+<dt>(space-bar-action pan)</dt>
+
+<dd>
+
+What to do when the space bar is pressed in the image window. Possible values are none, pan and move.
+
+</dd>
+
+<dt>(xor-color (color-rgb 0.501961 1.000000 0.501961))</dt>
+
+<dd>
+
+Sets the color that is used for XOR drawing. This setting only exists as a workaround for buggy display
drivers. If lines on the canvas are not correctly undrawn, try to set this to white. The color is specified
in the form (color-rgb red green blue) with channel values as floats in the range of 0.0 to 1.0\.
+
+</dd>
+
+<dt>(zoom-quality high)</dt>
+
+<dd>
+
+There’s a tradeoff between speed and quality of the zoomed-out display. Possible values are low and high.
+
+</dd>
+
+<dt>(default-threshold 15)</dt>
+
+<dd>
+
+Tools such as fuzzy-select and bucket fill find regions based on a seed-fill algorithm. The seed fill starts
at the initially selected pixel and progresses in all directions until the difference of pixel intensity from
the original is greater than a specified threshold. This value represents the default threshold. This is an
integer value.
+
+</dd>
+
+<dt>(move-tool-changes-active no)</dt>
+
+<dd>
+
+If enabled, the move tool sets the edited layer or path as active. This used to be the default behaviour in
older versions. Possible values are yes and no.
+
+</dd>
+
+<dt>(trust-dirty-flag yes)</dt>
+
+<dd>
+
+When enabled, GIMP will not save an image if it has not been changed since it was opened. Possible values
are yes and no.
+
+</dd>
+
+<dt>(save-device-status no)</dt>
+
+<dd>
+
+Remember the current tool, pattern, color, and brush across GIMP sessions. Possible values are yes and no.
+
+</dd>
+
+<dt>(save-session-info yes)</dt>
+
+<dd>
+
+Save the positions and sizes of the main dialogs when GIMP exits. Possible values are yes and no.
+
+</dd>
+
+<dt>(restore-session yes)</dt>
+
+<dd>
+
+Let GIMP try to restore your last saved session on each startup. Possible values are yes and no.
+
+</dd>
+
+<dt>(save-tool-options no)</dt>
+
+<dd>
+
+Save the tool options when GIMP exits. Possible values are yes and no.
+
+</dd>
+
+<dt>(show-tooltips yes)</dt>
+
+<dd>
+
+Show a tooltip when the pointer hovers over an item. Possible values are yes and no.
+
+</dd>
+
+<dt>(tearoff-menus yes)</dt>
+
+<dd>
+
+When enabled, menus can be torn off. Possible values are yes and no.
+
+</dd>
+
+<dt>(can-change-accels no)</dt>
+
+<dd>
+
+When enabled, you can change keyboard shortcuts for menu items by hitting a key combination while the menu
item is highlighted. Possible values are yes and no.
+
+</dd>
+
+<dt>(save-accels yes)</dt>
+
+<dd>
+
+Save changed keyboard shortcuts when GIMP exits. Possible values are yes and no.
+
+</dd>
+
+<dt>(restore-accels yes)</dt>
+
+<dd>
+
+Restore saved keyboard shortcuts on each GIMP startup. Possible values are yes and no.
+
+</dd>
+
+<dt>(menu-mnemonics yes)</dt>
+
+<dd>
+
+When enabled, GIMP will show mnemonics in menus. Possible values are yes and no.
+
+</dd>
+
+<dt>(last-opened-size 10)</dt>
+
+<dd>
+
+How many recently opened image filenames to keep on the File menu. This is an integer value.
+
+</dd>
+
+<dt>(max-new-image-size 128M)</dt>
+
+<dd>
+
+GIMP will warn the user if an attempt is made to create an image that would take more memory than the size
specified here. The integer size can contain a suffix of ’B’, ’K’, ’M’ or ’G’ which makes GIMP interpret the
size as being specified in bytes, kilobytes, megabytes or gigabytes. If no suffix is specified the size
defaults to being specified in kilobytes.
+
+</dd>
+
+<dt>(toolbox-color-area yes)</dt>
+
+<dd>
+
+Show the current foreground and background colors in the toolbox. Possible values are yes and no.
+
+</dd>
+
+<dt>(toolbox-foo-area no)</dt>
+
+<dd>
+
+Show the currently selected brush, pattern and gradient in the toolbox. Possible values are yes and no.
+
+</dd>
+
+<dt>(toolbox-image-area no)</dt>
+
+<dd>
+
+Show the currently active image in the toolbox. Possible values are yes and no.
+
+</dd>
+
+<dt>(toolbox-wilber yes)</dt>
+
+<dd>
+
+Show the GIMP mascot at the top of the toolbox. Possible values are yes and no.
+
+</dd>
+
+<dt>(theme-path "${gimp_dir}/themes:${gimp_data_dir}/themes")</dt>
+
+<dd>
+
+Sets the theme search path. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(theme "Default")</dt>
+
+<dd>
+
+The name of the theme to use. This is a string value.
+
+</dd>
+
+<dt>(use-help yes)</dt>
+
+<dd>
+
+When enabled, pressing F1 will open the help browser. Possible values are yes and no.
+
+</dd>
+
+<dt>(show-help-button yes)</dt>
+
+<dd>
+
+When enabled, dialogs will show a help button that gives access to the related help page. Without this
button, the help page can still be reached by pressing F1\. Possible values are yes and no.
+
+</dd>
+
+<dt>(help-locales "")</dt>
+
+<dd>
+
+Specifies the language preferences used by the help system. This is a colon-separated list of language
identifiers with decreasing priority. If empty, the language is taken from the user’s locale setting. This is
a string value.
+
+</dd>
+
+<dt>(help-browser gimp)</dt>
+
+<dd>
+
+Sets the browser used by the help system. Possible values are gimp and web-browser.
+
+</dd>
+
+<dt>(web-browser "firefox %s")</dt>
+
+<dd>
+
+Sets the external web browser to be used. This can be an absolute path or the name of an executable to
search for in the user’s PATH. If the command contains ’%s’ it will be replaced with the URL, else the URL
will be appended to the command with a space separating the two. This is a single filename.
+
+</dd>
+
+<dt>(user-manual-online no)</dt>
+
+<dd>
+
+When enabled, the online user manual will be used by the help system. Otherwise the locally installed copy
is used. Possible values are yes and no.
+
+</dd>
+
+<dt>(user-manual-online-uri "http://docs.gimp.org/2.6")</dt>
+
+<dd>
+
+The location of the online user manual. This is used if ’user-manual-online’ is enabled. This is a string
value.
+
+</dd>
+
+<dt>(toolbox-window-hint utility)</dt>
+
+<dd>
+
+The window type hint that is set on the toolbox. This may affect how your window manager decorates and
handles the toolbox window. Possible values are normal, utility and keep-above.
+
+</dd>
+
+<dt>(dock-window-hint utility)</dt>
+
+<dd>
+
+The window type hint that is set on dock windows. This may affect the way your window manager decorates and
handles dock windows. Possible values are normal, utility and keep-above.
+
+</dd>
+
+<dt>(transient-docks no)</dt>
+
+<dd>
+
+When enabled, dock windows (the toolbox and palettes) are set to be transient to the active image window.
Most window managers will keep the dock windows above the image window then, but it may also have other
effects. Possible values are yes and no.
+
+</dd>
+
+<dt>(cursor-format pixbuf)</dt>
+
+<dd>
+
+Sets the pixel format to use for mouse pointers. Possible values are bitmap and pixbuf.
+
+</dd>
+
+<dt>(fractalexplorer-path "${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer")</dt>
+
+<dd>
+
+Where to search for fractals used by the Fractal Explorer plug-in. This is a colon-separated list of folders
to search.
+
+</dd>
+
+<dt>(gfig-path "${gimp_dir}/gfig:${gimp_data_dir}/gfig")</dt>
+
+<dd>
+
+Where to search for Gfig figures used by the Gfig plug-in. This is a colon-separated list of folders to
search.
+
+</dd>
+
+<dt>(gflare-path "${gimp_dir}/gflare:${gimp_data_dir}/gflare")</dt>
+
+<dd>
+
+Where to search for gflares used by the GFlare plug-in. This is a colon-separated list of folders to search.
+
+</dd>
+
+<dt>(gimpressionist-path "${gimp_dir}/gimpressionist:${gimp_data_dir}/gimpressionist")</dt>
+
+<dd>
+
+Where to search for data used by the Gimpressionist plug-in. This is a colon-separated list of folders to
search.
+
+</dd>
+
+<dt>(script-fu-path "${gimp_dir}/scripts:${gimp_data_dir}/scripts")</dt>
+
+<dd>
+
+This path will be searched for scripts when the Script-Fu plug-in is run. This is a colon-separated list of
folders to search.
+
+</dd>
+
+</dl>
+
+## [Path Expansion](#toc3)
+
+Strings of type PATH are expanded in a manner similar to [**bash**(1)](bash.html) . Specifically: tilde (~)
is expanded to the user’s home directory. Note that the bash feature of being able to refer to other user’s
home directories by writing ~userid/ is not valid in this file.
+
+${variable} is expanded to the current value of an environment variable. There are a few variables that are
pre-defined:
+
+<dl>
+
+<dt><em>gimp_dir</em></dt>
+
+<dd>The personal gimp directory which is set to the value of the environment variable GIMP2_DIRECTORY or to
~/.gimp-2.6\.</dd>
+
+<dt><em>gimp_data_dir</em></dt>
+
+<dd>Base for paths to shareable data, which is set to the value of the environment variable GIMP2_DATADIR or
to the compiled-in default value /usr/share/gimp/2.0\.</dd>
+
+<dt><em>gimp_plug_in_dir</em></dt>
+
+<dd>Base to paths for architecture-specific plugins and modules, which is set to the value of the
environment variable GIMP2_PLUGINDIR or to the compiled-in default value /usr/lib64/gimp/2.0\.</dd>
+
+<dt><em>gimp_sysconf_dir</em></dt>
+
+<dd>Path to configuration files, which is set to the value of the environment variable GIMP2_SYSCONFDIR or
to the compiled-in default value /etc/gimp/2.0\.</dd>
+
+</dl>
+
+## [Files](#toc4)
+
+<dl>
+
+<dt><em>/etc/gimp/2.0/gimprc</em></dt>
+
+<dd>System-wide configuration file</dd>
+
+<dt><em><strong>$HOME</strong>/.gimp-2.6/gimprc</em></dt>
+
+<dd>Per-user configuration file
+
+</dd>
+
+</dl>
+
+## [See Also](#toc5)
+
+[**gimp**(1)](gimp.html) , [**gimptool**(1)](gimptool.html) , [**gimp-remote**(1)](gimp-remote.html)
+
+* * *
+
+<a name="toc">**Table of Contents**</a>
+
+* [Name](#sect0)
+* [Description](#sect1)
+* [Properties](#sect2)
+* [Path Expansion](#sect3)
+* [Files](#sect4)
+* [See Also](#sect5)
diff --git a/content/man/gimptool.md b/content/man/gimptool.md
new file mode 100644
index 0000000..13c335f
--- /dev/null
+++ b/content/man/gimptool.md
@@ -0,0 +1,261 @@
+Title: gimptool Man Page
+Date: 2015-08-17T11:31:37-05:00
+Modified: 2015-08-17T11:31:42-05:00
+Authors: Pat David
+Status: hidden
+
+<style>
+dt {
+ font-family: monospace;
+}
+</style>
+
+[Table of Contents](#toc)
+
+## [Name](#toc0)
+
+gimptool-2.0 - script to perform various GIMPy functions
+
+## [Synopsis](#toc1)
+
+<span style="font-family: monospace;" markdown="1">
+**gimptool‑2.0** [‑‑prefix_[=DIR]_] [‑‑exec‑prefix_[=DIR]_]
[‑‑version] [‑‑help] [‑‑quiet] [‑‑silent] [‑n]
[‑‑just‑print] [‑‑dry‑run] [‑‑recon]
[‑‑msvc‑syntax] [‑‑bindir] [‑‑sbindir] [‑‑libexecdir]
[‑‑datadir] [‑‑sysconfdir] [‑‑sharedstatedir]
[‑‑localstatedir] [‑‑libdir] [‑‑infodir] [‑‑mandir]
[‑‑includedir] [‑‑gimpplugindir] [‑‑gimpdatadir] [‑‑libs]
[‑‑libs‑noui] [‑‑cflags] [‑‑cflags‑noi]
[‑‑build _plug‑in.c_] [‑‑build‑strip _plug‑in.c_]
[‑‑install _plug‑in.c_] [‑‑install‑strip _plug‑in.c_]
[‑‑
install‑admin _plug‑in.c_] [‑‑install‑bin _plug‑in_]
[‑‑install‑admin‑strip _plug‑in.c_]
[‑‑install‑bin‑strip _plug‑in_]
[‑‑install‑admin‑bin _plug‑in_]
[‑‑install‑script _script.scm_]
[‑‑install‑admin‑script _script.scm_]
[‑‑uninstall‑bin _plug‑in_]
[‑‑uninstall‑admin‑bin _plug‑in_]
[‑‑uninstall‑script _script.scm_]
[‑‑uninstall‑admin‑script _script.scm_]
+</span>
+
+## [Description](#toc2)
+
+<em>gimptool-2.0</em> is a tool that can, among other things, build plug-ins or scripts and install them if
they are distributed in one source file.
+
+<em>gimptool-2.0</em> can also be used by programs that need to know what libraries and include-paths
<em>GIMP</em> was compiled with. <em>gimptool-2.0</em> uses _pkg-config_ for this task. For use in Makefiles,
it is recommended that you use _pkg-config_ directly instead of calling <em>gimptool-2.0</em>.
+
+## [Options](#toc3)
+
+<em>gimptool-2.0</em> accepts the following options:
+
+<dl>
+
+<dt>--version</dt>
+
+<dd>Print the currently installed version of <em>GIMP</em> on the standard output.</dd>
+
+<dt>--help</dt>
+
+<dd>Print out the help blurb, showing commonly used commandline options.</dd>
+
+<dt>--quiet</dt>
+
+<dd>Run quietly without echoing any of the build commands.</dd>
+
+<dt>--silent</dt>
+
+<dd>Run silently without echoing any of the build commands. Same as --quiet.</dd>
+
+<dt>-n</dt>
+
+<dd>Test mode. Print the commands but don’t actually execute them. Useful for making dry runs for
testing.</dd>
+
+<dt>--just-print</dt>
+
+<dd>Test mode. Print the commands but don’t actually execute them. Same as -n.</dd>
+
+<dt>--dry-run</dt>
+
+<dd>Test mode. Print the commands but don’t actually execute them. Same as -n.</dd>
+
+<dt>--recon</dt>
+
+<dd>Test mode. Print the commands but don’t actually execute them. Same as -n.</dd>
+
+<dt>--msvc-syntax</dt>
+
+<dd>Useful on Windows. Outputs the compiler and linker flags in the syntax used by Microsoft’s toolchain.
Passed to the pkg-config command that does most of <em>gimptool-2.0</em>’s work.</dd>
+
+<dt>--bindir</dt>
+
+<dd>Outputs the bindir used to install the <em>GIMP</em>.</dd>
+
+<dt>--sbindir</dt>
+
+<dd>Outputs the sbindir used to install the <em>GIMP</em>.</dd>
+
+<dt>--libexecdir</dt>
+
+<dd>Outputs the libexecdir used to install the <em>GIMP</em>.</dd>
+
+<dt>--datadir</dt>
+
+<dd>Outputs the datadir used to install the <em>GIMP</em>.</dd>
+
+<dt>--sysconfdir</dt>
+
+<dd>Outputs the sysconfdir used to install the <em>GIMP</em>.</dd>
+
+<dt>--sharedstatedir</dt>
+
+<dd>Outputs the sharedstatedir used to install the <em>GIMP</em>.</dd>
+
+<dt>--localstatedir</dt>
+
+<dd>Outputs the localstatedir used to install the <em>GIMP</em>.</dd>
+
+<dt>--libdir</dt>
+
+<dd>Outputs the libdir used to install the <em>GIMP</em>.</dd>
+
+<dt>--infodir</dt>
+
+<dd>Outputs the infodir used to install the <em>GIMP</em>.</dd>
+
+<dt>--mandir</dt>
+
+<dd>Outputs the mandir used to install the <em>GIMP</em>.</dd>
+
+<dt>--includedir</dt>
+
+<dd>Outputs the includedir used to install the <em>GIMP</em>.</dd>
+
+<dt>--gimpdatadir</dt>
+
+<dd>Outputs the actual directory where the <em>GIMP</em> data files were installed.</dd>
+
+<dt>--gimpplugindir</dt>
+
+<dd>Outputs the actual directory where the <em>GIMP</em> plug-ins were installed.</dd>
+
+<dt>--build <em>plug-in.c</em></dt>
+
+<dd>Compile and link <em>plug-in.c</em> into a <em>GIMP</em> plug-in.</dd>
+
+<dt>--build-strip <em>plug-in.c</em></dt>
+
+<dd>Compile,link, and strip <em>plug-in.c</em> into a <em>GIMP</em> plug-in.</dd>
+
+<dt>--install <em>plug-in.c</em></dt>
+
+<dd>Compile, link, and install <em>plug-in.c</em> into the user’s personal <em>GIMP</em> plug-in directory
(<strong>$HOME</strong>/.gimp-2.6/plug-ins)</dd>
+
+<dt>--install-strip <em>plug-in.c</em></dt>
+
+<dd>Compile, link,strip, and install <em>plug-in.c</em> into the user’s personal <em>GIMP</em> plug-in
directory (<strong>$HOME</strong>/.gimp-2.6/plug-ins)</dd>
+
+<dt>--install-admin <em>plug-in.c</em></dt>
+
+<dd>Compile, link, and install <em>plug-in.c</em> into the system-wide <em>GIMP</em> plug-in directory
(/usr/lib64/gimp/2.0/plug-ins)</dd>
+
+<dt>--install-bin <em>plug-in</em></dt>
+
+<dd>Install <em>plug-in</em> into the user’s personal <em>GIMP</em> plug-in directory
(<strong>$HOME</strong>/.gimp-2.6/plug-ins)</dd>
+
+<dt>--install-admin-bin <em>plug-in</em></dt>
+
+<dd>Install <em>plug-in</em> into the system-wide <em>GIMP</em> plug-in directory
(/usr/lib64/gimp/2.0/plug-ins)</dd>
+
+<dt>--install-bin-strip <em>plug-in</em></dt>
+
+<dd>Install stripped <em>plug-in</em> into the user’s personal <em>GIMP</em> plug-in directory
(<strong>$HOME</strong>/.gimp-2.6/plug-ins)</dd>
+
+<dt>--install-admin-bin-strip <em>plug-in</em></dt>
+
+<dd>Install stripped <em>plug-in</em> into the system-wide <em>GIMP</em> plug-in directory
(/usr/lib64/gimp/2.0/plug-ins)</dd>
+
+<dt>--install-script <em>script.scm</em></dt>
+
+<dd>Install <em>script.scm</em> into the user’s personal <em>GIMP</em> script directory
(<strong>$HOME</strong>/.gimp-2.6/scripts)</dd>
+
+<dt>--install-admin-script <em>script.scm</em></dt>
+
+<dd>Install <em>script.scm</em> into the system-wide <em>GIMP</em> script directory
(/usr/share/gimp/2.0/scripts)</dd>
+
+<dt>--uninstall-bin <em>plug-in</em></dt>
+
+<dd>Uninstall <em>plug-in</em> from the user’s personal <em>GIMP</em> plug-in directory
(<strong>$HOME</strong>/.gimp-2.6/plug-ins)</dd>
+
+<dt>--uninstall-admin-bin <em>plug-in</em></dt>
+
+<dd>Uninstall <em>plug-in</em> from the system-wide <em>GIMP</em> plug-in directory
(/usr/lib64/gimp/2.0/plug-ins)</dd>
+
+<dt>--uninstall-script <em>script.scm</em></dt>
+
+<dd>Uninstall <em>script.scm</em> from the user’s personal <em>GIMP</em> script directory
(<strong>$HOME</strong>/.gimp-2.6/scripts)</dd>
+
+<dt>--uninstall-admin-script <em>script.scm</em></dt>
+
+<dd>Uninstall <em>script.scm</em> from the system-wide <em>GIMP</em> script directory
(/usr/share/gimp/2.0/scripts)</dd>
+
+<dt>--libs</dt>
+
+<dd>Print the linker flags that are necessary to link a <em>GIMP</em> plug-in.</dd>
+
+<dt>--libs-noui</dt>
+
+<dd>Print the linker flags that are necessary to link a <em>GIMP</em> plug-in, for plug-ins that do not
require the GTK+ libraries.</dd>
+
+<dt>--cflags</dt>
+
+<dd>Print the compiler flags that are necessary to compile a <em>GIMP</em> plug-in.</dd>
+
+<dt>--clags-noui</dt>
+
+<dd>Print the compiler flags that are necessary to compile a <em>GIMP</em> plug-in for plug-ins that do not
require the GTK+ libraries.</dd>
+
+<dt>--prefix=PREFIX</dt>
+
+<dd>If specified, use PREFIX instead of the installation prefix that <em>GIMP</em> was built with when
computing the output for the --cflags and --libs options. This option is also used for the exec prefix if
--exec-prefix was not specified. This option must be specified before any --libs or --cflags options.</dd>
+
+<dt>--exec-prefix=PREFIX</dt>
+
+<dd>If specified, use PREFIX instead of the installation exec prefix that <em>GIMP</em> was built with when
computing the output for the --cflags and --libs options. This option must be specified before any --libs or
--cflags options.</dd>
+
+</dl>
+
+## [Environment](#toc4)
+
+<dl>
+
+<dt>CC</dt>
+
+<dd>to get the name of the desired C compiler.</dd>
+
+<dt>CFLAGS</dt>
+
+<dd>to get the preferred flags to pass to the C compiler for plug-in building.</dd>
+
+<dt>DESTDIR</dt>
+
+<dd>to add a prefix to the install/uninstall path.</dd>
+
+<dt>LDFLAGS</dt>
+
+<dd>to get the preferred flags for passing to the linker.</dd>
+
+<dt>LIBS</dt>
+
+<dd>for passing extra libs that may be needed in the build process. For example, LIBS=-lintl .</dd>
+
+<dt>PKG_CONFIG</dt>
+
+<dd>to get the location of the <em>pkg-config</em> program that is used to determine details about your
glib, pango, gtk+ and gimp installation.</dd>
+
+</dl>
+
+## [See Also](#toc5)
+
+[**gimp**(1)](gimp.html) , [**gimprc**(5)](gimprc.html) , [**pkg-config**(1)](pkg-config.html)
+
+## [Authors](#toc6)
+
+gimptool was written by Manish Singh (yosh gimp org) and is based on gtk-config by Owen Taylor (owen gtk
org).
+
+This man page was written by Ben Gertzfield (che debian org), and tweaked by Manish Singh (yosh gimp org),
Adrian Likins (adrian gimp org) and Marc Lehmann (pcg goof com>).
+
+* * *
+
+<a name="toc">Table of Contents</a>
+
+* [Name](#sect0)
+* [Synopsis](#sect1)
+* [Description](#sect2)
+* [Options](#sect3)
+* [Environment](#sect4)
+* [See Also](#sect5)
+* [Authors](#sect6)
diff --git a/content/release-notes/gimp-2.2.md b/content/release-notes/gimp-2.2.md
new file mode 100644
index 0000000..ee6ba12
--- /dev/null
+++ b/content/release-notes/gimp-2.2.md
@@ -0,0 +1,48 @@
+Title: GIMP 2.2 Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+The GIMP developers are proud to release version 2.2 of the **GNU Image Manipulation Program**. About nine
months after version 2.0 hit the road, we have completed another development cycle and can bring a new stable
GIMP to our users' desktops.
+
+## About GIMP
+
+The GNU Image Manipulation Program is ideal for amateur photographers, web designers, and many other people
who want to create and edit digital images. It is a very powerful application, with features including:
channels, layers and masks; colour operations such as levels, curves and threshhold; advanced selection
operations using intelligent scissors and selection channels; and much more.
+
+GIMP is free software, which means it can be freely distributed and modified. This makes it well suited to
be included on cover disks of magazines dedicated to digital photography or image editing, or to be included
with digital cameras, scanners, printers etc. As free software, its capabilities are ultimately limited only
by the collective imagination of the community of free software contributors. More information about GIMP is
available at [www.gimp.org](http://www.gimp.org/).
+
+## Download
+
+GIMP can be downloaded as source code from ftp.gimp.org or from one of the mirrors listed in the
[Downloads](/downloads/) section. We expect that binary packages for the different supported platforms and
distributions will show up soon. Unless you are experienced with building software from source, you should
wait until binary packages become available.
+
+## Upgrading from GIMP 2.0
+
+Version 2.2 is an update on GIMP 2.0\. GIMP 2.2 is fully backward compatible to GIMP 2.0\. Plug-ins and
scripts written for GIMP 2.0 will continue to work and don't need to be changed nor recompiled to be used
with GIMP 2.2\. We do however hope that plug-in authors will update their plug-ins for GIMP 2.2 and adapt the
GUI changes we did with this version.
+
+GIMP 2.2 replaces GIMP 2.0\. It is advised that you uninstall GIMP 2.0 before installing GIMP 2.2\. If you
want to keep GIMP 2.0 installed in parallel to GIMP 2.2, you have to choose a separate prefix which is not in
your default library search path.
+
+## Help
+
+The GIMP user manual has been improved a lot over the last couple of months. We stronly suggest that you
install the latest version of the gimp-help-2 package together with GIMP 2.2\. You will then have
context-sensitive help in almost all dialogs by hitting the F1 key or by pressing the Help button which has
been added to most dialogs.
+
+gimp-help-2 is available from [ftp.gimp.org](ftp://ftp.gimp.org/pub/gimp/help/). The manual can also be
accessed online at [docs.gimp.org](http://docs.gimp.org/).
+
+## Bugs
+
+Thanks to the pre-releases we did over the last month, this code has already seen quite some testing but a
lot has changed since version GIMP 2.0 and we could very well have introduced new bugs. If you find any ,
make sure you report them at [bugzilla.gnome.org](http://bugzilla.gnome.org/) (after checking that it isn't
reported already).
+
+## What's New in GIMP 2.2
+
+We have collected a list of changes and new features in the [GIMP
Wiki](http://wiki.gimp.org/gimp/WhatsNew2). For a detailed list of changes, please have a look at the NEWS
file, which is contained in the tarball and available
[online](https://git.gnome.org/browse/gimp/plain/NEWS?h=gimp-2-2).
+
+## What's Next
+
+You can expect updated versions of gimp-gap, gimp-freetype, gimp-plugin-template and hopefully also
gimp-perl to appear over the next weeks. The GIMP source tree will soon be branched so that development can
continue towards GIMP 2.4\. We haven't yet made up a detailed roadmap, but we will try to publish one soon.
+
+Lots of people have helped to make this release happen. Thanks to all the contributors who wrote code, sent
patches, worked on the docs, translated the user interface, reported bugs or just made helpful suggestions.
GIMP 2.2 wouldn't exist without your help. Keep it coming!
+
+_Happy GIMPing,
+ The GIMP developers_
+
diff --git a/content/release-notes/gimp-2.3.3.md b/content/release-notes/gimp-2.3.3.md
new file mode 100644
index 0000000..b437b45
--- /dev/null
+++ b/content/release-notes/gimp-2.3.3.md
@@ -0,0 +1,21 @@
+Title: GIMP 2.3.3 Simplifies the Extraction of Foreground Objects
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+The new development release 2.3.3 of the free image manipulation software GIMP now contains a preliminary
version of a new selection tool called SIOX. Until now, creating a selection mask for an object was mostly
equivalent to either a slow step-by-step approximation to a certain shape or a tedious manual drawing of the
selection. SIOX ("Simple Interactive Object eXtraction") allows a semi-automatic pixel-accurate selection of
typical foreground objects like portraits of humans, animals, or plants with only a few mouse clicks. The
user only encloses the object with a rough outline and uses a foreground brush to mark representative
foreground regions. GIMP then answers with the extraction of the object. The selection can be refined by
incrementally adding further foreground brush strokes or by subtracting regions with background brush
strokes. SIOX is being developed at the Center for Digital Media at the computer science department at Freie
Universitaet Berlin and roots from
video processing applications.
+
+GIMP Version 2.3.3 represents the current state of development. There are still features missing that are
planned for the stable 2.4 release. Some work has already been done on the color management that had been
announced for the 2.4 release. Using the preferences dialog a color profile for the screen can already be
specified that GIMP 2.3 uses to correct the display. In the final release of GIMP 2.4, pictures containing
embedded color profiles will also be handled.
+
+Work is also being done on the user interface: The script-fu menu does not exist any more because most of
the scripts have been integrated into the filter menu. There will be further changes - some of them have
already been discussed in the Bugtracker. In addition to the SIOX tool there are several other new tools: A
new rectangle selection tool allows to change the rectangle even after selecting. The alignment of layers is
simplified by another tool.
+
+There were also some changes behind the scenes: Users of G4 processors will enjoy the speed improvement that
results from supporting the Altivec instruction set. GIMP also reacted to the trend of using Hyperthreading
and Dualcore CPUs. In order to utilize multiple processors at a time several internal functions were
parallelized.
+
+A detailed list of all changes since GIMP 2.2 is available
[here](https://git.gnome.org/browse/gimp/plain/NEWS?id=GIMP_2_3_3). It will take a little more time until the
GIMP developers will present the next stable release. Those who do not want to wait are free to try GIMP
2.3.3\. For those who yearn for a faster release: Help is always welcome! Not only programmers are needed but
also web designers, documentation authors and translators are desperately needed.
+
+[GIMP Homepage](http://www.gimp.org)
+[GIMP User Manual](http://docs.gimp.org)
+[SIOX Algorithm](http://www.siox.org)
+
diff --git a/content/release-notes/gimp-2.3.md b/content/release-notes/gimp-2.3.md
new file mode 100644
index 0000000..3a03547
--- /dev/null
+++ b/content/release-notes/gimp-2.3.md
@@ -0,0 +1,49 @@
+Title: GIMP 2.3 Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+# GIMP 2.3 Release Notes
+
+This is an unstable development version of the **GNU Image Manipulation Program**. Please realize that this
is just a snapshot of the development tree. We are about halfway up the hill to GIMP 2.4, the next stable
release. GIMP 2.3 is in no way a final product. A lot of new features are incomplete and some things may even
be completely broken. If you need to get work done, please use the stable version, GIMP 2.2.
+
+## What's New in GIMP 2.3
+
+Please see the [NEWS](https://git.gnome.org/browse/gimp/plain/NEWS?h=gimp-2-4&id=GIMP_2_3_0) file for a list
of changes. [Screenshots](http://developer.gimp.org/screenshots.html) of the development version can also be
found there.
+
+## Download
+
+The development snapshots of GIMP can be downloaded as source code from ftp.gimp.org or from one of the
mirrors listed in the [Downloads](/downloads/#mirrors) section.
+
+Distribution of binary packages of the development version is discouraged unless it is made clear that this
is an early development snapshot. Users should be referred to these release notes or similar information.
+
+## Installation
+
+GIMP 2.3 must **not** be installed in the same prefix as other GIMP 2.x versions. If you want to keep your
GIMP 2.2 or GIMP 2.0 installation in parallel to GIMP 2.3, you have to choose a separate installation prefix
at compile-time and ensure that you use different library search paths for each version. If you do not set up
your environment differently for each version, you will experience conflicts with the libraries and at least
one version is likely to fail.
+
+You install the new version into a separate prefix, say /opt/gimp-2.3 by passing `--prefix=/opt/gimp-2.3` to
the configure script. Then, in order to run the binary installed there, you change your environment to look
for executables in /opt/gimp-2.3/bin by setting `PATH=/opt/gimp-2.3/bin` and you tell your linker to pick up
libraries from /opt/gimp-2.3/lib by setting `LD_LIBRARY_PATH=/opt/gimp-2.3/lib`. Do not forget to `export`
both variables.
+
+You can use a tiny wrapper script called gimp-2.3 and place it into /usr/local/bin or elsewhere in your
PATH. The script would look something like this:
+
+ #!/bin/sh
+
+ PATH=/opt/gimp-2.3/bin:$PATH
+ export PATH
+ LD_LIBRARY_PATH=/opt/gimp-2.3/lib
+ export LD_LIBRARY_PATH
+
+ /opt/gimp-2.3/bin/gimp-2.3 "$@"
+
+## Bugs
+
+If you think you found a bug in a development version, please make sure that it hasn't been reported
earlier. Search [Bugzilla](http://bugzilla.gnome.org/) before filing a new bug-report. Here are some
interesting Bugzilla queries:
+
+* [Open bugs with milestone
2.4](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.4&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
+* [Resolved bugs with milestone
2.4](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.4&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED)
+
+## Contributing
+
+We need your help to make GIMP 2.4 a success. There's still a lot to do in all areas. If you want to join us
hacking, show up in #gimp or introduce yourself on the gimp-developer mailing-list. We are also looking for
people to look after the web-site and update the tutorials. Or you might want to join the [documentation
team](http://docs.gimp.org/).
+
diff --git a/content/release-notes/gimp-2.4-cm.md b/content/release-notes/gimp-2.4-cm.md
new file mode 100644
index 0000000..0ad6077
--- /dev/null
+++ b/content/release-notes/gimp-2.4-cm.md
@@ -0,0 +1,35 @@
+Title: GIMP 2.4 Color Management
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+Many devices you use in your design or photography workflow, like digital photo cameras, scanners, displays,
printers etc., have their own color reproduction characteristics. If those are not taken into account during
opening, editing and saving, harmful adjustments can be done to images. With GIMP 2.4 this has changed: now
you can have reliable output for both Web and print.
+
+<figure>
+<img src="images/color-management.png" alt="color management" style="background-color: #2e3436;"/>
+</figure>
+
+## Color Managed Workflow
+
+### Input
+
+Most digital cameras embed a color profile to individual photo files without user interaction. Digital
scanners usually come with a color profile, which they also attach to the scanned images.
+
+When opening an image with an embedded color profile, GIMP 2.4 offers to convert the file to the RGB working
color space. This is **sRGB** by default and it is recommended that all work is done in that color space.
Should the user decide to keep the embedded color profile, the image will however still be displayed
correctly.
+
+In case for some reason a color profile is not embedded in the image and you know (or have a good guess)
which one it should be, you can manually assign it to that image.
+
+### Display
+
+To get best results, you need a color profile for your monitor. If a monitor profile is configured, either
system-wide or in the Color Management section of the GIMP Preferences dialog, the image colors will be
displayed most accurately.
+
+If you do not have a color profile for your monitor, you can create it using hardware calibration and
measurement tools. On UNIX systems you will need [Argyll Color Management System](http://www.argyllcms.com/)
and/or [LProf](http://lprof.sourceforge.net/) to create color profiles.
+
+### Print Simulation
+
+Using GIMP 2.4, you can easily get a preview of what your image will look like on paper. Given a color
profile for your printer, the display can be switched into _Soft Proof_ mode. In such a simulated printout,
colors that cannot be reproduced will optionally be marked with neutral gray color, allowing you to correct
such mistakes before sending your images to the printer.
+
+[Return to the release notes](gimp-2.4.html)
+
diff --git a/content/release-notes/gimp-2.4-videos.md b/content/release-notes/gimp-2.4-videos.md
new file mode 100644
index 0000000..84bb2bb
--- /dev/null
+++ b/content/release-notes/gimp-2.4-videos.md
@@ -0,0 +1,41 @@
+Title: GIMP 2.4 Release Notes - Videos
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+This page includes the video demonstrations that have been kindly offered to us by GIMP users. If you would
like to convert some of these videos to a different format so that we can offer them to a wider audience,
please [contact us](/webmasters.html) and we will add the links to this page.
+
+## Foreground Select Tool
+
+<div class='fluid-video'>
+<iframe width="480" height="360" src="https://www.youtube-nocookie.com/embed/I8fW6Z2yxUY?rel=0"
frameborder="0" allowfullscreen></iframe>
+</div>
+
+Versions available:
+
+* [Ogg/Theora file](http://assets.gimp.org/video/Foreground_tool.ogg) (512x384, 2613 KB)
+* [Google Video](http://video.google.com/videoplay?docid=2540655610648907719) (Flash version or small
downloadable MPEG-4 version)
+* [High-resolution MPEG file](http://www.mediafire.com/?0w1yilbxtmh) (800x600 MPEG-4, 38 MB zipped)
+
+## Perspective Clone
+
+<div class="fluid-video">
+<iframe width="480" height="360" src="https://www.youtube-nocookie.com/embed/s0v7TlVMTDg?rel=0"
frameborder="0" allowfullscreen></iframe>
+</div>
+
+Versions available:
+
+* [Ogg/Theora file](http://assets.gimp.org/video/Perspective_Clone.ogg) (512x384, 3503 KB)
+* [Google Video](http://video.google.com/videoplay?docid=-3077868802879051003) (Flash version or small
downloadable MPEG-4 version)
+* [High-resolution MPEG file](http://www.mediafire.com/?fim1wkdx1nj) (800x600 MPEG-4, 41 MB zipped)
+
+## Lens Distortion
+
+Versions available:
+
+* [Google Video](http://video.google.com/videoplay?docid=1146746790574496439) (Flash version or small
downloadable MPEG-4 version)
+
+[Return to the release notes](gimp-2.4.html)
+
diff --git a/content/release-notes/gimp-2.4.md b/content/release-notes/gimp-2.4.md
new file mode 100644
index 0000000..ddebb74
--- /dev/null
+++ b/content/release-notes/gimp-2.4.md
@@ -0,0 +1,168 @@
+Title: GIMP 2.4 Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+## General Improvements
+
+### Refreshed Look
+
+A whole new default icon theme has been created for 2.4\. The icons comply with the [Tango style
guidelines](http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines) so GIMP doesn't feel out of place on
any of the supported platforms. Regardless of whether you run GIMP under Microsoft Windows, Mac OS X or
GNU/Linux ([GNOME](http://www.gnome.org/), [KDE](http://www.kde.org/) or [Xfce](http://www.xfce.org/)), GIMP
provides a polished, consistent look.
+
+<figure>
+<img src="images/2.4-refreshed-look.png" alt="Refreshed Look"/>
+</figure>
+
+Additionally the icons also have enhanced usability on dark widget themes, which is a common setting among
digital artists.
+
+For artists preferring more desaturated color theme for their icons, an [alternative icon
theme](http://jimmac.musichall.cz/zip/GIMP-Greyscale-tools-0.1.tar.bz2) is available for download.
+
+### Scalable Brushes
+
+<figure>
+<img src="images/2.4-scalable-brushes.png" alt="Scalable Brushes"/>
+</figure>
+
+The tool options now include a brush size slider that affects both the parametric and bitmap brushes. This
has been an oft-requested feature from both digital painters and photo editors.
+
+Unlike previous versions of GIMP, regardless of whether you're using a bitmap brush, parametric brush or
even a picture tube (multiple bitmaps), you can easily set the brush size with either the tool options dock
slider or an external device such as a MIDI slider or knob or a USB device like the Griffin Powermate.
+
+### Selection Tools
+
+<figure>
+<img src="images/2.4-selection-tools.png" alt="Selection Tools"/>
+</figure>
+
+The selection tools have been rewritten from scratch to allow resizing of existing selections. Additionally
the rectangular selection tool includes a setting for creating rounded corners as this has been identified as
a very common task among web designers.
+
+The learning curve for the tools has been flattened as the key functionality is available without obscure
shortcuts that confused GIMP beginners. Most of the existing shortcuts still work, but the functionality is
either available through the tool options or made obsolete due to the interactive move and resize on canvas.
+
+While the tools have been redesigned to make them easier to understand for the newbies, all the former
functionality is there. You can still constrain aspect ratios or specific sizes.
+
+### Foreground Select Tool
+
+[<figure>
+<img src="images/2.4-video-fgselect.jpg" alt="Foreground Select Demo"/>
+</figure>](http://video.google.com/videoplay?docid=2540655610648907719)
+
+Selecting individual objects on images is easier now with a new foreground select tool. It is done in two
steps. First, you make select region of interest which contains the entire object. Then you paint over
selected area with a brush, not crossing object’s border. Release mouse button when you’re done and look, if
there are dark blue spots on your objects. If there are some, paint with a brush over them again and release
to refine selection. When there are no more blue areas inside the object, press Enter and there you have a
perfectly selected object.
+
+<small>All video demonstrations can also be viewed or downloaded from a [separate
page](gimp-2.4-videos.html).</small>
+
+### Align Tool
+
+<figure>
+<img src="images/2.4-align-tool.png" alt="Align Tool"/>
+</figure>
+
+While GIMP has provided a grid and guideline functionality, the actual alignment of objects had to be done
manually. In a few clicks, the new Align Tool allows you to align or distribute a list of layers, paths or
guides. You can align these objects with another object, with the selection or with the image.
+
+### Changes in menus
+
+Most notable is the new top-level Color menu that accumulates most tools, plug-ins and scripts that adjust
colors in RGB/Grayscale mode and color palettes in Indexed mode. So now you can reach functions like Levels
or Curves much faster than before. You can also define your own keyboard shortcuts for them using the
improved keyboard shortcuts manager.
+
+In the new version of GIMP, some menu entries have changed their names and position. It was done mostly to
simplify learning curve and improve user experience. After all, "HSV Noise" and "RGB Noise" sound more
meaningful than "Scatter HSV" and "Scatter RGB", don't they? And status bar hints for all plug-ins and
scripts are quite helpful too.
+
+### Improved display when zooming in or out
+
+<figure>
+<img src="images/2.4-zoom-display.png" alt="Zoomed out display"/>
+</figure>
+
+Previous versions of GIMP used a fast but inaccurate way of displaying images at various zoom levels. When
zooming out, some rows and columns of pixels where simply omitted from the display. The result was sometimes
confusing, especially if the image contained many thin lines or small features. GIMP 2.4 avoids these
problems and provides a better view of the zoomed-out images.
+
+### Support for file formats
+
+* Support for Photoshop ABR brush format;
+* Improved reading/writing EXIF in JPEG;
+* Importing clipping paths in TIFF;
+* Layer masks can be saved to PSD;
+* 16/32 bit bitmaps and alpha-channel support in BMP;
+* 24 bit and Vista icons can be opened and saved.
+
+## Digital Photography
+
+### Fullscreen Editing
+
+The fullscreen mode has been improved to not only allow getting a full scale preview of the artwork, but
also allow comfortable editing. The artist has maximum screen estate available while all functionality is
quickly accessible by pressing the Tab key (toggles visibility of all docks) when working fullscreen.
+
+Whether painting or touching up photos, fullscreen editing keeps all the distracting elements out of sight
on a key press. It's like observing stars in a field as opposed to a light-polluted city.
+
+### Color Management and Soft-proofing
+
+[<figure>
+<img src="images/2.4-color-management.png" alt="Color Management"/>
+</figure>](gimp-2.4-cm.html)
+
+GIMP now provides full support for color profiles allowing precise color modification throughout the whole
'digital darkroom' process.
+
+For more information, see [color management](gimp-2.4-cm.html).
+
+### New Crop Tool
+
+<figure>
+<img src="images/2.4-crop-tool.png" alt="Crop Tool"/>
+</figure>
+
+Just like the selection tools, the new crop tool has been enhanced since the last release. The resize
handles actually resize the crop rectangle instead of providing both resize and move functionality. The tool
behaves more naturally and consistently with other GIMP tools.
+
+To move, simply drag the rectangle clicking within the area. Resizing is possible in one or two axes at the
same time dragging the handle-bars on the sides and corners. The outside area is darkened with a nice
passepartout effect to better get the idea of how the final crop will look like.
+
+### Improved Printing
+
+<figure>
+<img src="images/gimp-24-print-dark.png" alt="Improved Printing"/>
+</figure>
+
+Printing has been largely improved. GIMP makes use of the advancements in the gtk+ printing API so that you
can control all aspects of the printout with an easy to understand interface and immediate preview.
+
+### Red Eye Removal
+
+While numerous red-eye workflows exist already, GIMP now features a very convenient auto-magic filter to
remove red eye from your shots.
+
+### Perspective Clone
+
+[<figure>
+<img src="images/2.4-video-perspective.jpg" alt="Perspective Clone Demo"/>
+</figure>](http://video.google.com/videoplay?docid=-3077868802879051003)
+
+A common task in image editing is to copy pixels from somewhere in an image to somewhere else. Traditionally
this has been done using the Clone Tool. To make it easy to perform cloning while taking the perspective of
an image into account, a new Perspective Clone Tool has been added to GIMP.
+
+<small>All video demonstrations can also be viewed or downloaded from a [separate
page](gimp-2.4-videos.html).</small>
+
+### Lens Distortion
+
+[<figure>
+<img src="images/2.4-video-lens.jpg" alt="Lens Distortion Demo"/>
+</figure>](http://video.google.com/videoplay?docid=1146746790574496439)
+
+A very common problem exposing itself especially when using cheaper lenses or expensive lenses pushed to
their limits, is barrel distortion and vignetting. Luckily GIMP provides a brand new filter to compensate for
both problems. Saving photographer's pocket is our mission!
+
+<small>All video demonstrations can also be viewed or downloaded from a [separate
page](gimp-2.4-videos.html).</small>
+
+### JPEG quality
+
+When editing photographs, it is usually better to work with a lossless image format and only save the final
result as JPEG. But if you have to work with JPEG images as input, then a new option allows you to use the
same compression parameters as the original image when you re-save it.
+
+## Various Other Improvements
+
+In addition to all the above, GIMP has been improved in other areas. For instance, better status information
and some hints have been added in the status bar of the image windows. You can easily discover new features
and new shortcuts by trying the various keys and modifiers that are suggested while you are using the tools.
+
+<figure>
+<img src="images/2.4-statusbar-tips.png" alt="Hints in the status bar"/>
+</figure>
+
+A number of changes has gone into plug-ins and scripts. First of all, a new preview widget for plug-ins was
introduced. Now you can zoom in and out using the mouse wheel or +/- buttons in plug-in dialogs and pan
around.
+
+Several plug-ins like Gaussian Blur, Selective Gaussian Blur and Value Invert have received special
attention with regards to speed of processing and work significantly faster now. Additionally, the Motion
Blur filter can blur outwards now, and its quality has also improved.
+
+You will also note that the new Screenshot plug-in offers more sophisticated options and is far easier to
use.
+
+<figure>
+<img src="images/2.4-screenshot-plugin.png" alt="Screenshot plug-in"/>
+</figure>
+
+GIMP 2.4 features a brand new Scheme interpreter that provides better debugging, handles UTF-8 coded
characters and strings, has regex based pattern matching and many more useful features that power users were
requesting. The latter will be pleased to find out that plug-ins and scripts can register menu entries in the
<Brushes>, <Gradients>, <Palettes>, <Patterns> and <Fonts> menus now. Also, a
fair amount of new scripts were added: reversing the order of layers, sorting color palettes etc. A few
scripts that were using incorrect or deprecated constructs may have to be updated. A [Script-Fu migration
guide](/docs/script-fu-update.html) lists the most common errors and how to fix them.
+
diff --git a/content/release-notes/gimp-2.5.md b/content/release-notes/gimp-2.5.md
new file mode 100644
index 0000000..29b19a5
--- /dev/null
+++ b/content/release-notes/gimp-2.5.md
@@ -0,0 +1,81 @@
+Title: GIMP 2.5 Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+
+This is an unstable development version of the **GNU Image Manipulation Program**. Please realize that this
is just a snapshot of the development tree. We are working hard towards GIMP 2.6, the next stable release.
GIMP 2.5 is in no way a final product. A lot of new features are incomplete and some things may even be
completely broken. If you need to get work done, please use the stable version, GIMP 2.4.
+
+## What's New in GIMP 2.5
+
+### UI changes
+
+GIMP has several UI changes in this version, many of them offering relief to long standing issues.
+
+A major change is the appearance of an "empty image window". This window is a placeholder where your image
will eventually open, also a drop zone into which you can drag-and-drop your file and start working. You will
also notice that the Toolbox menu is gone: it has been merged into the image window menu. Toolbox and docks
are treated as utility windows, so if your window manager supports it, then your problems with docks and
toolbox getting lost under other windows are over. Unfortunately, at this moment utility window hints only
work correctly in metacity, the Gnome default window manager.
+
+There are also a couple of nice usability changes concerning docks. Have you ever been aggravated to no end
because you accidentally closed your neatly set up dock and had to build it from scratch again? That is no
longer a source of stress, because the Window menu now holds a list of recently closed docks, and just one
click can bring your carefully constructed setup back to you. Another common annoyance is incidentally
dragging tabs out of docks. Now GIMP lets you lock your tabs to make sure that does not happen.
+
+One of the most desired changes over the years has been "overpanning": the ability to pull those pesky
corners, that are so hard to reach with just the right point of the brush, to the front and center. This is
now finally available. Panning does not have to stop when the image edge reaches the window edge. You can go
on panning, and position the area you work on where it is comfortable for you.
+
+### Improved Freehand select tool
+
+The freehand select tool has been enhanced to support polygon segments in selections. Selection segments are
all independently adjustable. This significant improvement fills the need for making polygonal selections
without creating yet another tool.
+
+### Improved help system
+
+Ever been bothered by the fact that you need a single page of help but can't get it because you don't have
the whole large help docs package installed? Despair no more. GIMP now supports online help. All you need is
a network connection and that particular page opens in your browser when you ask for help anywhere in GIMP.
+
+### Brush dynamics
+
+Brush dynamics let you map different brush parameters, commonly at least size and opacity, to one or more of
three input dynamics: pressure, velocity and random. Velocity and random are usable with a mouse. The Ink
tool, that supported velocity before, has been overhauled and now handles velocity-dependent painting much
better.
+
+Brush dynamics have enabled a new feature in stroking paths. There is now a check box under the "paint tool"
option, for emulating brush dynamics if you stroke using a paint tool. What this means is that when your
stroke is being painted by GIMP, it tells the brush that its pressure and velocity are varying along the
length of the stroke. Pressure starts with zero, ramps up to full pressure and then ramps down again to no
pressure. Velocity starts from zero and ramps up to full speed by the end of the stroke.
+
+### Preset saving for color tools
+
+Now you can save presets in all color tools for color adjustments you use frequently.
+
+### Under the hood
+
+Most notable of under-the-hood changes are the first steps of [GEGL](http://gegl.org) integration. Right now
the effect on user experience is minimal, but it is an important development for the future. Once GEGL
integration is complete, GIMP will finally get support for higher color depths, more color spaces and
eventually non-destructive editing.
+
+Peeking out from under the hood are subtle differences in the way the UI draws its elements. These changes
are due to internally making use of the Cairo library to draw UI elements. This is visible for example in the
drawing of Layers and Paths docks and Curves dialog.
+
+Please see the [NEWS](https://git.gnome.org/browse/gimp/plain/NEWS?id=GIMP_2_5_0) file for a more detailed
list of changes. [Screenshots](http://developer.gimp.org/screenshots.html) of the development version can
also be found there.
+
+## Download
+
+The development snapshots of GIMP can be downloaded as source code from ftp.gimp.org or from one of the
mirrors listed in the [Downloads](/downloads/#mirrors) section.
+
+Distribution of binary packages of the development version is discouraged unless it is made clear that this
is an early development snapshot. Users should be referred to these release notes or similar information.
+
+## Installation
+
+GIMP 2.5 must **not** be installed in the same prefix as other GIMP 2.x versions. If you want to keep your
GIMP 2.4 installation in parallel to GIMP 2.5, you have to choose a separate installation prefix at
compile-time and ensure that you use different library search paths for each version. If you do not set up
your environment differently for each version, you will experience conflicts with the libraries and at least
one version is likely to fail.
+
+You install the new version into a separate prefix, say /opt/gimp-2.5 by passing `--prefix=/opt/gimp-2.5` to
the configure script. Then, in order to run the binary installed there, you change your environment to look
for executables in /opt/gimp-2.5/bin by setting `PATH=/opt/gimp-2.5/bin` and you tell your linker to pick up
libraries from /opt/gimp-2.5/lib by setting `LD_LIBRARY_PATH=/opt/gimp-2.5/lib`. Do not forget to `export`
both variables.
+
+You can use a tiny wrapper script called gimp-2.5 and place it into /usr/local/bin or elsewhere in your
PATH. The script would look something like this:
+
+ #!/bin/sh
+
+ PATH=/opt/gimp-2.5/bin:$PATH
+ export PATH
+ LD_LIBRARY_PATH=/opt/gimp-2.5/lib
+ export LD_LIBRARY_PATH
+
+ /opt/gimp-2.5/bin/gimp-2.5 "$@"
+
+## Bugs
+
+If you think you found a bug in a development version, please make sure that it hasn't been already
reported. Search [Bugzilla](http://bugzilla.gnome.org/) before filing a new bug-report. Here are some
interesting Bugzilla queries:
+
+* [Open bugs with milestone
2.6](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.6&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
+* [Resolved bugs with milestone
2.6](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.6&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED)
+
+## Contributing
+
+We need your help to make GIMP 2.6 a success. There's still a lot to do. If you want to join us hacking,
show up in #gimp or introduce yourself on the gimp-developer mailing-list. We are also looking for people to
look after the web-site and update the tutorials. Or you might want to join the [documentation
team](http://docs.gimp.org/).
diff --git a/content/release-notes/gimp-2.6.md b/content/release-notes/gimp-2.6.md
new file mode 100644
index 0000000..fb7df70
--- /dev/null
+++ b/content/release-notes/gimp-2.6.md
@@ -0,0 +1,194 @@
+Title: GIMP 2.6 Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+
+## Introduction
+
+GIMP 2.6 is an important release from a development point of view. It features changes to the user interface
addressing some often received complaints, and a tentative integration of GEGL, the graph based image
processing library that will eventually bring high bit-depth and non-destructive editing to GIMP.
+
+## User Interface
+
+### Toolbox Menubar Removed
+
+<figure>
+<img src="images/2.6-empty-image-window.png" alt="Empty Image Window screenshot"/>
+</figure>
+
+The toolbox menubar has been removed and merged with the image window menubar. To be able to do this a
window called the _empty image window_ has been introduced. It hosts the menubar and keeps the application
instance alive when no images are opened. It also acts as a drag and drop target. When opening the first
image the empty image window is transformed into a normal image window, and when closing the last image, that
window becomes the empty image window.
+
+### Toolbox and Docks are Utility windows
+
+With the empty image window acting as a natural main window, the default window hints for the Toolbox and
Docks have been changed to _Utility window_. This enables window managers to do a much better job of managing
the GIMP windows, including omitting the Toolbox and Docks from the taskbar and ensuring that the Toolbox and
Docks always are above image windows.
+
+### Ability to Pan Beyond Image Border
+
+<figure>
+<img src="images/2.6-scroll-beyond-border.png" alt="Scroll Beyond Border illustration"/>
+</figure>
+
+It is now possible to pan beyond the image border, making image window navigation much less constrained. It
is no longer a problem to use the edge of a brush on the edge of an image while being zoomed in, and one can
adapt the canvas to any utility windows covering parts of the image window.
+
+### Minor Changes
+
+* Renamed Dialogs menu to Windows.
+* Keep a list of recently closed Docks and allow reopening them.
+* Make opening images in already running GIMP instances work better on Windows.
+* You can now enter the image zoom ratio directly in the status bar.
+* Added support for using online help instead of a locally installed GIMP Help package.
+* Make it possible to lock tabs in docks to prevent accidental moving.
+
+## Tools, Filters & Plug-ins
+
+### Improved Free Select Tool
+
+<figure>
+<img src="images/2.6-new-free-select-tool.png" alt="New Free Select Tool in action"/>
+</figure>
+
+The freehand select tool has been enhanced to support polygonal selections. It also allows mixing free hand
segments with polygonal segments, editing of existing segments, applying angle-constraints to segments, and
of course the normal selection tool operations like add and subtract. Altoghether this ends up making the
Free Select Tool a very versatile, powerful and easy-to-use selection tool.
+
+### Brush Dynamics
+
+<figure>
+<img src="images/2.6-brush-dynamics.jpg" alt="Brush Dynamics illustration"/>
+</figure>
+
+Brush dynamics let you map different brush parameters, commonly at least size and opacity, to one or more of
three input dynamics: pressure, velocity and random. Velocity and random are usable with a mouse. The Ink
tool, that supported velocity before, has been overhauled and now handles velocity-dependent painting much
better.
+
+Brush dynamics have enabled a new feature in stroking paths. There is now a check box under the "paint tool"
option, for emulating brush dynamics if you stroke using a paint tool. What this means is that when your
stroke is being painted by GIMP, it tells the brush that its pressure and velocity are varying along the
length of the stroke. Pressure starts with zero, ramps up to full pressure and then ramps down again to no
pressure. Velocity starts from zero and ramps up to full speed by the end of the stroke.
+
+### Minor Changes
+
+<figure>
+<img src="images/2.6-text-tool-and-rectangle-handles.png" alt="Text Tool bounding box and outside rectangle
handles screenshot"/>
+</figure>
+
+* Added a bounding box for the Text Tool that supports automatic wrapping of text within that bounding box.
+* Move handles for rectangle based tools like Crop and Rectangle Select to the outside of the rectangle
when the rectangle is narrow.
+* Added motion constraints to the Move Tool.
+* Improved event smoothing for paint tools.
+* Mark the center of rectangles while they are moved, and snap the center to grid and rulers.
+* Enable brush scaling for the Smudge tool.
+* Added ability to save presets in all color tools for color adjustments you use frequently.
+* Allow to transfer settings from _Brightness-Contrast_ to _Levels_, and from _Levels_ to _Curves_.
+* Allow changing opacity on transform tool previews.
+* The Screenshot plug-in has been given the ability to capture the mouse cursor (using Xfixes).
+* Display aspect ratio of the Crop and Rectangle Select Tool rectangles in the status bar.
+* Desaturate has been given an on-canvas preview.
+* The Flame plug-in has been extended with 22 new variations.
+* Data file folders like brush folders are searched recursively for files.
+* Replaced the PSD import plug-in with a rewritten version that does what the old version did plus some
other things, for example reading of ICC color profiles.
+
+## Under the Hood
+
+### GEGL
+
+Important progress towards high bit-depth and non-destructive editing in GIMP has been made. Most color
operations in GIMP are now ported to the powerful graph based image processing framework
[GEGL](http://www.gegl.org/), meaning that the internal processing is being done in 32bit floating point
linear light RGBA. By default the legacy 8bit code paths are still used, but a curious user can turn on the
use of GEGL for the color operations with _Colors / Use GEGL_.
+
+<figure>
+<img src="images/2.6-experimental-gegl-tool.png" alt="Experimental GEGL tool screenshot"/>
+</figure>
+
+In addition to porting color operations to GEGL, an experimental _GEGL Operation_ tool has been added, found
in the _Tools_ menu. It enables applying GEGL operations to an image and it gives on-canvas previews of the
results. The screenshot to the right shows this for a Gaussian Blur.
+
+### Minor Changes
+
+* Ported many widgets to use the 2D graphics library [cairo](http://www.cairographics.org/) for drawing.
See this [comparison](images/gimp-curves-tool-2-4-vs-2-6.png) for an example of how much better this looks.
+
+## Miscellaneous
+
+### Plug-in Development
+
+There are new things for a plug-in developer to enjoy as well. For example, procedures can now give a
detailed error description in case of an error, and the error can be propagated to the user.
+
+GIMP 2.6 also further enhances its scripting abilities. In particular there is now a much richer API for the
creation and manipulation of text layers. Here is a [list of new symbols in GIMP
2.6](http://developer.gimp.org/api/2.0/libgimp/libgimp-index-new-in-2-6.html).
+
+### Backwards Compatibility
+
+Script-Fu has undergone some clean up and includes several bug fixes. One important bug fix, for [bug
#508020](https://bugzilla.gnome.org/show_bug.cgi?id=512105), prevents a possible crash of Script-Fu. A side
effect of the fix will break any script which does not provide an initial value for a variable in the binding
portion of a _let_, _let*_, or _letrec_ block.
+
+An initial value for a variable is required as stated in the [R5RS Scheme standard
document](http://www.schemers.org/Documents/Standards/R5RS/r5rs.pdf). The initial value can be provided as a
simple constant, or as the result of a function call. The following examples will illustrate the problem and
show a simple change that will fix a broken script.
+
+This example shows a _let*_ block with incorrect syntax that will no longer work in Script-Fu.
+
+ (let* (
+ (four (+ 2 2))
+ (this-is-wrong)
+ )
+
+This example shows a _let*_ block with the correct syntax.
+
+ (let* (
+ (four (+ 2 2))
+ (this-is-correct 0)
+ )
+
+### Known Problems
+
+* The _Utility window_ hint is currently only known to work well in the Linux GNOME desktop environment
and on Windows starting with GIMP 2.6.1.
+* Using the Text Tool is currently not an optimal experience. Making it work better is a goal for GIMP 2.8.
+* If you build GIMP yourself and don't have [GVfs](http://en.wikipedia.org/wiki/GVFS) support on your
platform you need to explicitly pass <kbd>--without-gvfs</kbd> to configure, otherwise opening remote files
will not work properly.
+
+### What's Planned
+
+For the interested, here is roughly what is planned for GIMP 2.8, the next stable release:
+
+* Merging Google Summer of Code 2008 projects to trunk, namely on-canvas text editing, tagging of GIMP
resources and Python scripting enhancements.
+* Continue integration of GEGL.
+* And of course many other improvements...
+
+## GIMP 2.6 Screenshots
+
+<figure>
+<a href="../screenshots/gnome-1280x800-fresh-start.jpg"><img
src="../screenshots/gnome-1280x800-fresh-start.jpg" alt="First GIMP 2.6 startup"/></a>
+<figcaption>
+First startup of GIMP 2.6 on a 1280x800 GNOME desktop.
+</figcaption>
+</figure>
+
+
+<figure>
+<a href="../screenshots/alternative-2-6-ui-layout-example-one.jpg"><img
src="../screenshots/alternative-2-6-ui-layout-example-one.jpg" alt="Alternative UI example"/></a>
+<figcaption>
+UI layout example: Tool Options moved out of the toolbox.
+</figcaption>
+</figure>
+
+
+<figure>
+<a href="../screenshots/alternative-2-6-ui-layout-example-two.jpg"><img
src="../screenshots/alternative-2-6-ui-layout-example-two.jpg" alt="Another alternative UI example"/></a>
+<figcaption>
+UI layout example: Using the image window as a background window.
+</figcaption>
+</figure>
+
+
+<figure>
+<a href="../screenshots/2.6-brush-dynamics-example.jpg"><img
src="../screenshots/2.6-brush-dynamics-example.jpg" alt="Brush Dynamics at use"/></a>
+<figcaption>
+Demonstrating the kind of effects the new Brush Dynamics can create.
+</figcaption>
+</figure>
+
+
+<figure>
+<a href="../screenshots/on-canvas-preview-of-gaussian-blur-in-2-6.jpg"><img
src="../screenshots/on-canvas-preview-of-gaussian-blur-in-2-6.jpg" alt="On-canvas Gaussian Blur"/></a>
+<figcaption>
+Full screenshot of on-canvas preview of Gaussian Blur using the experimental GEGL Operation tool.
+</figcaption>
+</figure>
+
+
+
+## We Hope You Enjoy GIMP 2.6!
+
+<figure markdown="span">
+<img src="images/2.6-lgm-2008-groupshot.jpg" alt="LGM 2008 shot of the GIMP team"/>
+<figcaption>
+A picture of (mostly) GIMP developers, taken by [Garrett
LeSage](http://www.flickr.com/photos/garrett/2733807768/) at [Libre Graphics Meeting
2008](http://www.libregraphicsmeeting.org/2008/), licenced under
[CC-By](http://creativecommons.org/licenses/by/2.0/deed.en)
+</figcaption>
+</figure>
diff --git a/content/release-notes/gimp-2.7.md b/content/release-notes/gimp-2.7.md
new file mode 100644
index 0000000..cfe6179
--- /dev/null
+++ b/content/release-notes/gimp-2.7.md
@@ -0,0 +1,284 @@
+Title: GIMP 2.7 Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+This is an unstable development version of the **GNU Image Manipulation Program**. Please realize that this
is just a snapshot of the development tree. We are working hard towards GIMP 2.8, the next stable release.
GIMP 2.7 is in no way a final product. A lot of new features are incomplete and some things may even be
completely broken. If you need to get work done, please use the stable version, GIMP 2.6.
+
+## Introduction
+
+GIMP 2.7 is the result of three years of hard work and collaborative development. This version of GIMP is
equipped with a wealth of new features, including some highly requested ones. Keep reading to find out
exactly what GIMP 2.7 has to offer you in areas such as the user interface, tools, and plug-ins.
+
+## User Interface
+
+### Single-Window Mode
+
+<figure>
+<img src="images/2.8-single-window-mode.png" alt="Single-window mode screenshot" width="300" height="200" />
+</figure>
+
+GIMP 2.7 introduces an optional single-window mode. You can toggle between the default multi-window mode and
the new single-window mode through the _Single-window mode_ checkbox in the _Windows_ menu. In single-window
mode, GIMP will put dockable dialogs and images in a single, tabbed image window. The single-window mode
setting is of course preserved if you quit and start GIMP again. Single-window mode removes the necessity for
users of having to deal with multiple windows.
+**Developers:** Martin Nordholts, Michael Natterer
+**Interaction Architect:** Peter Sikking
+
+### Multi-Column Dock Windows
+
+<figure>
+<img src="images/2.8-multi-column-dock-windows.png" alt="Multi-column dock windows screenshot" />
+</figure>
+
+GIMP 2.7 allows dockable dialogs in a dock window to be placed in multiple columns. To create a new column
in a dock window, drag and drop a dockable dialog on the vertical edges of the dock window. This is an
appealing feature for multi-monitor users where one screen can have a big dock window with all the dialogs
and the tools, while all images are on other displays.
+**Developer:** Martin Nordholts
+**Interaction Architect:** Peter Sikking
+
+### More Screen Real Estate For Dockable Dialogs
+
+<figure>
+<img src="images/2.8-removed-docking-bars.png" alt="Removed docking bars screenshot" />
+</figure>
+
+The docking bars have been removed and replaced with overlaid highlights. The dockable drag handle has been
removed and the dockable menu button has been moved up to the tabs. A new Automatic tab style has been added
which makes dockable tabs use the available space.
+**Developer:** Martin Nordholts
+
+### Save And Export
+
+<figure>
+<img src="images/2.8-save-and-export.png" alt="Save and export screenshot" />
+</figure>
+
+A rather big conceptual change is that saving and exporting images now are clearly separated activities.
Saving an image can only be done in the XCF format which is GIMP's native file format, able to save all kinds
of information necessary for works in progress.
+
+To export into other formats _File->Export..._ needs to be used. This distinction makes it clearer if all
available information is stored in a file, or not. There are some optimizations for alternative workflows
such as opening a jpg, polishing it, and quickly exporting back to the original file. This conceptual change
has also allowed us to get rid of the annoying dialogs that warned about the flatting of images when saving
to non-layered formats.
+**Developer:** Martin Nordholts
+**Interaction Architect:** Peter Sikking
+
+### Layer Groups
+
+<figure>
+<img src="images/2.8-layer-groups.png" alt="Layer groups screenshot" />
+</figure>
+
+For complex compositions, a flat layer structure is very limiting. GIMP 2.7 lets users organize their
compositions better through the introduction of layer groups which allow layers to be organized in tree-like
structures. Layer groups are fully scriptable through the GIMP plug-in API.
+**Developer:** Michael Natterer
+
+### Tools Drawn With Cairo
+
+<figure>
+<img src="images/2.8-tools-drawn-with-cairo.png" alt="Tools drawn with cairo screenshot" />
+</figure>
+
+All tools rendering on canvas have been ported to Cairo to provide smooth antialiased graphics and make
GIMP's look and feel match modern users expectations. All but a few plug-ins have been ported over to Cairo
as well. Additionally all tools now use an on-canvas progress indicator instead of the one in the statusbar.
+**Developer:** Michael Natterer
+
+### On-Canvas Text Editing
+
+<figure>
+<img src="images/2.8-on-canvas-text-editing.png" alt="On-canvas text editing screenshot" />
+</figure>
+
+Text editing with the Text Tool is now performed on-canvas instead of in a separate window. The editing
on-canvas is rather sophisticated: apart from the usual text formatting features like font family, style and
size selectors you get numeric control over baseline offset and kerning, as well as the ability to change
text color for a selection. You can also use a combination of Alt and arrow keys to change baseline offset
and kerning. This feature was originally developed during Google Summer of Code 2008 and heavily improved
since.
+**Developers:** Daniel Eddeland, Michael Natterer
+
+### Keyboard Shortcut Changes
+
+Since the keyboard shortcuts Ctrl+E and Ctrl+Shift+E have been repurposed for the image export mechanisms,
new keyboard shortcuts have been setup for 'Shrink Wrap' and 'Fit in Window', namely Ctrl+J and Ctrl+Shift+J
respectively.
+**Developer:** Martin Nordholts
+
+### Simple Math In Size Entries
+
+<figure>
+<img src="images/2.8-math-in-size-entries.png" alt="Math in size entries screenshot" />
+</figure>
+
+Enhancements have also been made to the size entry widget, which is used for inputting most of the x, y,
width, height parameters. For example, in the scale dialog it is now possible to write '50%' in the Width
field to scale the image to 50% of the width. Expressions such as '30in + 40px' and '4 \* 5.4in' work, too.
+**Developer:** Fredrik Alströmer
+
+### Minor Changes
+
+* Added 'Windows→Hide docks' menu item that does what 'Tab' does and also displays its state, which is now
persistent across sessions, too.
+* Added infrastructure allowing to embed user interface elements on the canvas. This is currently used for
text styles in the text tool, and (experimentally) when a color correction tool is invoked while the canvas
is in full-screen mode.
+* To make dock window titles manageable, only show the active dockable in the dock window title.
+* The layer modes have been rearranged into more logical and useful groups based on the effect they have
on compositing of a layer. Layer modes that make the composite lighter are in one group, layer modes that
make the composite darker in another group, and so forth.
+* You can now Alt+Click on layers in the Layers dialog to create a selection from it. Add, subtract and
intersect modifiers Ctrl, Shift and Ctrl+Shift keys work too. This makes it easy to compose contents of a
layer based on the contents of other layers, without detours.
+* New docks are created at the pointer position.
+* Removed Toolbox from list of Recently Closed Docks, handle that directly in the Windows menu.
+* Allow closing the toolbox without closing the whole application.
+* Default to non-fixed-aspect in Canvas Size dialog.
+* In the Preferences dialog, only have one setting for the window hint for both the toolbox and the docks.
+* Support arbitrary affine transforms of brushes.
+* Got rid of the Tools dockable and move toolbox configuration to Preferences.
+* A question that often arises is how to change the UI language in GIMP, which has traditionally been a
bit cumbersome. Not any longer, it is now possible to change the language in Preferences.
+* Added 'Lock content' button to the layers, channels and paths dialogs, made the lock buttons more
compact.
+* Allow renaming list items with F2.
+* Allow binding arbitrary actions to extra mouse buttons.
+
+**Developers:** Michael Natterer, Martin Nordholts, Alexander Jones, Alexia Death, Sven Neumann
+
+## Tools & Plug-ins
+
+### Brush System Improvements
+
+<figure>
+<img src="images/2.8-brush-system-improvements.png" alt="Brush system improvements screenshot" />
+</figure>
+
+The brush dynamics engine has been expanded considerably, making almost all aspects of the brush engine
drivable by a multitude of inputs, all of them configurable with their own response curve.
+
+Because of the expansion, dynamics were separated from tool options and converted into a resource in their
own right. The Google Summer of Code 2009 Advanced GUI for Brush Dynamics project was the start of its
development.
+**Developers:** Alexia Death, Michael Natterer, Zhenfeng Zhao
+
+### Tool Preset Improvements
+
+You can now save existing state of any tool as a preset and give it a meaningful name. The presets are
accessible from a new Tool Presets dockable dialog and additionally can be tagged so that you can easily
manage a lot of presets.
+
+This new feature completely replaces the previously existing tool presets system to a new level of
accessibility. It also makes it possible to distribute tool presets just like any other resource because each
preset is saved as an individual file.
+**Developers:** Michael Natterer, Alexia Death
+
+### Cage Transform Tool
+
+<figure>
+<img src="images/2.8-cage-transform-tool.png" alt="Cage transform tool screenshot" />
+</figure>
+
+A completely new _Cage transform_ tool has been added thanks to the excellent work of one of our Google
Summer of Code 2010 students. The tool implements an innovative approach to free transformation and makes it
possible to easily warp parts of objects using an adjustable user-defined polygonal frame.
+**Developer:** Michael Muré
+
+### File Plug-Ins
+
+A plug-in for loading JPEG2000 images has been added, as well as plug-ins for X11 Mouse Cursor files and
fundamental OpenRaster (.ora) import and export support. Added RGB565 support to the csource plug-in.
+**Developers:** Aurimas Juška, Takeshi Matsuyama
+
+A Cairo based PDF exporter was implemented. While being somewhat simplistic the exporter saves text,
embedding fonts into the final PDF file, and attempts to convert all flat filled areas to vector objects.
+**Developer:** Barak Itkin
+
+Last, but not least, a Web-page plug-in was added to render any web page into an image using Webkit.
+**Developer:** Mukund Sivaraman
+
+### For Tablet Users
+
+<figure>
+<img src="images/2.8-for-stylus-users.png" alt="For stylus users screenshot" />
+</figure>
+
+A new experimental widget was added to meet the requirements of graphic tablets users. The widget combines a
slider, a label and a numeric value control which simplifies adjusting a value using a stylus, better
visualizes the current value and provides a more compact UI. It is now used in the Tools Options dockable
dialog for opacity control and most options of brush based tools.
+
+Another useful feature for users of advanced input devices such as graphic tablets is a completely new
dialog for input device configuration which allows configuring per-device pressure curves to compensate for
hardware differences and personal per-pen preferences.
+
+People with Intuos tablets and either Artpen or Airbrush styluses will be glad to find that Airbrush wheel
and Artpen rotation are available for driving dynamics via the 'Wheel' input.
+**Developers:** Michael Natterer, Alexia Death
+
+### Resource Tagging
+
+<figure>
+<img src="images/2.8-resource-tagging-brushes.png" alt="Resource tagging screenshot with brushes" />
+</figure>
+
+It is now possible to tag GIMP resources such as brushes and patterns to group them. The tagging is
performed from the respective dockables e.g. the _Brushes_ dockable, and it is possible to filter resources
based on these tags.
+
+The tags are saved to an XML file, external to the data files themselves. It is possible to tag multiple
resources simultaneously in the UI, but currently only while being viewed as a list. This feature was
developed during Google Summer of Code 2008\.
+**Developer:** Aurimas Juška
+**Interaction Architect:** Peter Sikking
+
+### Resources
+
+We have started overhauling the default set of resources and in this version there have been some changes to
the default set of brushes. The silly 'Untitled' title has been removed from unnamed palette entries. A
wholly new set of brushes for painting has been added and makes use of the new tagging system.
+**Developer:** Martin Nordholts
+**Artists:** Johannes Engelhardt, Ramón Miranda, Guillermo Espertino
+
+### Minor Changes
+
+* Allow specifying the written language in the Text Tool. This helps with choosing an appropriate font, or
appropriate glyphs for the selected language.
+* Moved 'Text along path' from tool options to the text context menu.
+* Add diagonal guides to the Crop Tool.
+* Support rotating brushes.
+* The Smooth Stroke feature from GIMP Painter was ported to GIMP.
+* Added 'Rule of fifths' crop guide overlay.
+* Added an icon for the Desaturate tool.
+* Support loading 16bit (RGB565) raw data.
+* Added palette exporter for CSS, PHP, Python, txt and Java, accessed through the palette context menu.
+* Support printing crop marks for images.
+* Made the Pointer dockable show information about selection position and size.
+* Replaced the brush scale control in tool options by a brush size one that works in pixels, and does the
right thing when the brush changes.
+* Improved the Free Select Tool on-canvas feedback.
+* Made it possible to use GEGL for scaling images.
+
+**Developers:** Sven Neumann, Michael Natterer, Tim Jedlicka, Alexia Death, Nelson A. de Oliveira, Jakub
Steiner, Nicholas Doyle, Barak Itkin, Martin Nordholts
+
+## Miscellaneous
+
+### Plug-in Development
+
+GIMP 2.8 also further enhances its scripting abilities. For example, API changes to support layer groups
have been made. Here is a [list of new symbols in GIMP
2.8](http://developer.gimp.org/api/2.0/libgimp/libgimp-index-new-in-2-8.html).
+
+### API Changes
+
+A lot of GIMP APIs have been refactored to simplify developing new scripts.
+
+### License
+
+The GIMP license has been changed to (L)GPLv3+.
+
+### GEGL
+
+The projection code which composes a single image from layers has been ported to GEGL. This includes the
layer modes, as well as support for layer groups. Also, preparations have been made for better and more
intuitive handling of the floating selection. **Developers:** Michael Natterer, Martin Nordholts
+
+### Roadmap
+
+The GIMP developers now maintain a roadmap for GIMP development found here:
[http://wiki.gimp.org/index.php/Roadmap](http://wiki.gimp.org/index.php/Roadmap)
+
+## GIMP 2.7 Screenshots
+
+<figure>
+<img src="../screenshots/1280x800-fresh-start.jpg" alt="First GIMP 2.8 startup" />
+<figcaption>
+First startup of GIMP 2.8 on a 1280x800 desktop.
+</figcaption>
+</figure>
+
+
+</div>
+
+## Known Regressions
+
+GIMP 2.8 relies on a newer version of GTK+2 that unfortunately has partially broken support for graphics
tablets such as Wacom. If your graphic tablet doesn't work in GIMP 2.8 as it should, we recommend downgrading
to 2.6 until we release GIMP 3.0 that relies on GTK+3 which has fully functional support for advanced input
devices.
+
+To address the needs to migrate from the old tools presets system to the new one we provide a
[script](http://wiki.gimp.org/index.php/Mindstorm:Preset_converter) in Python. However, the old tools presets
are not 100% convertible to the new tool presets. For instance, brush scale from 2.6 can't be converted to
brush size in 2.8.
+
+## Download
+
+The development snapshots of GIMP can be downloaded as source code from ftp.gimp.org or from one of the
mirrors listed in the [Downloads](/downloads/#mirrors) section.
+
+Distribution of binary packages of the development version is discouraged unless it is made clear that this
is an early development snapshot. Users should be referred to these release notes or similar information.
+
+## Installation
+
+GIMP 2.7 must **not** be installed in the same prefix as other GIMP 2.x versions. If you want to keep your
GIMP 2.6 installation in parallel to GIMP 2.7, you have to choose a separate installation prefix at
compile-time and ensure that you use different library search paths for each version. If you do not set up
your environment differently for each version, you will experience conflicts with the libraries and at least
one version is likely to fail.
+
+Also, do **not** install GIMP 2.7 to /usr/local because on most systems, its libraries would override the
libraries of a stable GIMP 2.6 installed into /usr, breaking your distribution-installed GIMP from slightly
to completely. The same applies to any prefix your system uses for the purpose or overriding things in
/usr/lib.
+
+You install the new version into a separate prefix, say /opt/gimp-2.7 by passing `--prefix=/opt/gimp-2.7` to
the configure script. Then, in order to run the binary installed there, you change your environment to look
for executables in /opt/gimp-2.7/bin by setting `PATH=/opt/gimp-2.7/bin` and you tell your linker to pick up
libraries from /opt/gimp-2.7/lib by setting `LD_LIBRARY_PATH=/opt/gimp-2.7/lib`. Do not forget to `export`
both variables.
+
+You can use a tiny wrapper script called gimp-2.7 and place it into /usr/local/bin or elsewhere in your
PATH. The script would look something like this:
+
+ #!/bin/sh
+
+ PATH=/opt/gimp-2.7/bin:$PATH
+ export PATH
+ LD_LIBRARY_PATH=/opt/gimp-2.7/lib
+ export LD_LIBRARY_PATH
+
+ /opt/gimp-2.7/bin/gimp-2.7 "$@"
+
+## Bugs
+
+If you think you found a bug in a development version, please make sure that it hasn't been already
reported. Search [Bugzilla](http://bugzilla.gnome.org/) before filing a new bug-report. Here are some
interesting Bugzilla queries:
+
+* [Open bugs with milestone
2.8](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.8&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
+* [Resolved bugs with milestone
2.8](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.8&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED)
+
+## Contributing
+
+We need your help to make GIMP 2.8 a success. If you want to join us hacking, show up in #gimp or introduce
yourself on the gimp-developer mailing-list. We are also looking for people to look after the web-site and
update the tutorials. Or you might want to join the [documentation team](http://docs.gimp.org/).
+
diff --git a/content/release-notes/gimp-2.8.md b/content/release-notes/gimp-2.8.md
new file mode 100644
index 0000000..3444abf
--- /dev/null
+++ b/content/release-notes/gimp-2.8.md
@@ -0,0 +1,281 @@
+Title: GIMP 2.8 Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+## Introduction
+
+GIMP 2.8 is the result of three years of hard work and collaborative development. This version of GIMP is
equipped with a wealth of new features, including some highly requested ones. Keep reading to find out
exactly what GIMP 2.8 has to offer you in areas such as the user interface, tools, and plug-ins.
+
+## User Interface
+
+### Single-Window Mode
+
+<figure>
+<img src="images/2.8-single-window-mode.png" alt="Single-window mode screenshot" />
+</figure>
+
+GIMP 2.8 introduces an optional single-window mode. You can toggle between the default multi-window mode and
the new single-window mode through the _Single-window mode_ checkbox in the _Windows_ menu. In single-window
mode, GIMP will put dockable dialogs and images in a single, tabbed image window. The single-window mode
setting is of course preserved if you quit and start GIMP again. Single-window mode removes the necessity for
users of having to deal with multiple windows.
+**Developers:** Martin Nordholts, Michael Natterer
+**Interaction Architect:** Peter Sikking
+
+### Multi-Column Dock Windows
+
+<figure>
+<img src="images/2.8-multi-column-dock-windows.png" alt="Multi-column dock windows screenshot" />
+</figure>
+
+GIMP 2.8 allows dockable dialogs in a dock window to be placed in multiple columns. To create a new column
in a dock window, drag and drop a dockable dialog on the vertical edges of the dock window. This is an
appealing feature for multi-monitor users where one screen can have a big dock window with all the dialogs
and the tools, while all images are on other displays.
+**Developer:** Martin Nordholts
+**Interaction Architect:** Peter Sikking
+
+### More Screen Real Estate For Dockable Dialogs
+
+<figure>
+<img src="images/2.8-removed-docking-bars.png" alt="Removed docking bars screenshot" />
+</figure>
+
+The docking bars have been removed and replaced with overlaid highlights. The dockable drag handle has been
removed and the dockable menu button has been moved up to the tabs. A new Automatic tab style has been added
which makes dockable tabs use the available space.
+**Developer:** Martin Nordholts
+
+### Save And Export
+
+<figure>
+<img src="images/2.8-save-and-export.png" alt="Save and export screenshot" />
+</figure>
+
+A rather big conceptual change is that saving and exporting images now are clearly separated activities.
Saving an image can only be done in the XCF format which is GIMP's native file format, able to save all kinds
of information necessary for works in progress.
+
+To export into other formats _File->Export..._ needs to be used. This distinction makes it clearer if all
available information is stored in a file, or not. There are some optimizations for alternative workflows
such as opening a jpg, polishing it, and quickly exporting back to the original file. This conceptual change
has also allowed us to get rid of the annoying dialogs that warned about the flatting of images when saving
to non-layered formats.
+**Developer:** Martin Nordholts
+**Interaction Architect:** Peter Sikking
+
+### Layer Groups
+
+<figure>
+<img src="images/2.8-layer-groups.png" alt="Layer groups screenshot" />
+</figure>
+
+For complex compositions, a flat layer structure is very limiting. GIMP 2.8 lets users organize their
compositions better through the introduction of layer groups which allow layers to be organized in tree-like
structures. Layer groups are fully scriptable through the GIMP plug-in API.
+**Developer:** Michael Natterer
+
+### Tools Drawn With Cairo
+
+<figure>
+<img src="images/2.8-tools-drawn-with-cairo.png" alt="Tools drawn with cairo screenshot" />
+</figure>
+
+All tools rendering on canvas have been ported to Cairo to provide smooth antialiased graphics and make
GIMP's look and feel match modern users expectations. All but a few plug-ins have been ported over to Cairo
as well. Additionally all tools now use an on-canvas progress indicator instead of the one in the statusbar.
+**Developer:** Michael Natterer
+
+### On-Canvas Text Editing
+
+<figure>
+<img src="images/2.8-on-canvas-text-editing.png" alt="On-canvas text editing screenshot" />
+</figure>
+
+Text editing with the Text Tool is now performed on-canvas instead of in a separate window. The editing
on-canvas is rather sophisticated: apart from the usual text formatting features like font family, style and
size selectors you get numeric control over baseline offset and kerning, as well as the ability to change
text color for a selection. You can also use a combination of Alt and arrow keys to change baseline offset
and kerning. This feature was originally developed during Google Summer of Code 2008 and heavily improved
since.
+**Developers:** Daniel Eddeland, Michael Natterer
+
+### Keyboard Shortcut Changes
+
+Since the keyboard shortcuts Ctrl+E and Ctrl+Shift+E have been repurposed for the image export mechanisms,
new keyboard shortcuts have been setup for 'Shrink Wrap' and 'Fit in Window', namely Ctrl+J and Ctrl+Shift+J
respectively.
+**Developer:** Martin Nordholts
+
+### Simple Math In Size Entries
+
+<figure>
+<img src="images/2.8-math-in-size-entries.png" alt="Math in size entries screenshot" />
+</figure>
+
+Enhancements have also been made to the size entry widget, which is used for inputting most of the x, y,
width, height parameters. For example, in the scale dialog it is now possible to write '50%' in the Width
field to scale the image to 50% of the width. Expressions such as '30in + 40px' and '4 * 5.4in' work, too.
+**Developer:** Fredrik Alströmer
+
+### Minor Changes
+
+* Added 'Windows→Hide docks' menu item that does what 'Tab' does and also displays its state, which is now
persistent across sessions, too.
+* Added infrastructure allowing to embed user interface elements on the canvas. This is currently used for
text styles in the text tool, and (experimentally) when a color correction tool is invoked while the canvas
is in full-screen mode.
+* To make dock window titles manageable, only show the active dockable in the dock window title.
+* The layer modes have been rearranged into more logical and useful groups based on the effect they have
on compositing of a layer. Layer modes that make the composite lighter are in one group, layer modes that
make the composite darker in another group, and so forth.
+* You can now Alt+Click on layers in the Layers dialog to create a selection from it. Add, subtract and
intersect modifiers Ctrl, Shift and Ctrl+Shift keys work too. This makes it easy to compose contents of a
layer based on the contents of other layers, without detours.
+* New docks are created at the pointer position.
+* Removed Toolbox from list of Recently Closed Docks, handle that directly in the Windows menu.
+* Allow closing the toolbox without closing the whole application.
+* Default to non-fixed-aspect in Canvas Size dialog.
+* In the Preferences dialog, only have one setting for the window hint for both the toolbox and the docks.
+* Support arbitrary affine transforms of brushes.
+* Got rid of the Tools dockable and move toolbox configuration to Preferences.
+* A question that often arises is how to change the UI language in GIMP, which has traditionally been a
bit cumbersome. Not any longer, it is now possible to change the language in Preferences.
+* Added 'Lock content' button to the layers, channels and paths dialogs, made the lock buttons more
compact.
+* Allow renaming list items with F2.
+* Allow binding arbitrary actions to extra mouse buttons.
+
+**Developers:** Michael Natterer, Martin Nordholts, Alexander Jones, Alexia Death, Sven Neumann
+
+## Tools & Plug-ins
+
+### Brush System Improvements
+
+<figure>
+<img src="images/2.8-brush-system-improvements.png" alt="Brush system improvements screenshot" />
+</figure>
+
+The brush dynamics engine has been expanded considerably, making almost all aspects of the brush engine
drivable by a multitude of inputs, all of them configurable with their own response curve.
+
+Because of the expansion, dynamics were separated from tool options and converted into a resource in their
own right. The Google Summer of Code 2009 Advanced GUI for Brush Dynamics project was the start of its
development.
+**Developers:** Alexia Death, Michael Natterer, Zhenfeng Zhao
+
+### Tool Preset Improvements
+
+You can now save existing state of any tool as a preset and give it a meaningful name. The presets are
accessible from a new Tool Presets dockable dialog and additionally can be tagged so that you can easily
manage a lot of presets.
+
+This new feature completely replaces the previously existing tool presets system to a new level of
accessibility. It also makes it possible to distribute tool presets just like any other resource because each
preset is saved as an individual file.
+**Developers:** Michael Natterer, Alexia Death
+
+### Cage Transform Tool
+
+<figure>
+<img src="images/2.8-cage-transform-tool.png" alt="Cage transform tool screenshot" />
+</figure>
+
+A completely new _Cage transform_ tool has been added thanks to the excellent work of one of our Google
Summer of Code 2010 students. The tool implements an innovative approach to free transformation and makes it
possible to easily warp parts of objects using an adjustable user-defined polygonal frame.
+**Developer:** Michael Muré
+
+### File Plug-Ins
+
+A plug-in for loading JPEG2000 images has been added, as well as plug-ins for X11 Mouse Cursor files and
fundamental OpenRaster (.ora) import and export support. Added RGB565 support to the csource plug-in.
+**Developers:** Aurimas Juška, Takeshi Matsuyama
+
+A Cairo based PDF exporter was implemented. While being somewhat simplistic the exporter saves text,
embedding fonts into the final PDF file, and attempts to convert all flat filled areas to vector objects.
+**Developer:** Barak Itkin
+
+Last, but not least, a Web-page plug-in was added to render any web page into an image using Webkit.
+**Developer:** Mukund Sivaraman
+
+### For Tablet Users
+
+<figure>
+<img src="images/2.8-for-stylus-users.png" alt="For stylus users screenshot" />
+</figure>
+
+A new experimental widget was added to meet the requirements of graphic tablets users. The widget combines a
slider, a label and a numeric value control which simplifies adjusting a value using a stylus, better
visualizes the current value and provides a more compact UI. It is now used in the Tools Options dockable
dialog for opacity control and most options of brush based tools.
+
+Another useful feature for users of advanced input devices such as graphic tablets is a completely new
dialog for input device configuration which allows configuring per-device pressure curves to compensate for
hardware differences and personal per-pen preferences.
+
+People with Intuos tablets and either Artpen or Airbrush styluses will be glad to find that Airbrush wheel
and Artpen rotation are available for driving dynamics via the 'Wheel' input.
+**Developers:** Michael Natterer, Alexia Death
+
+### Resource Tagging
+
+<figure>
+<img src="images/2.8-resource-tagging-brushes.png" alt="Resource tagging screenshot with brushes" />
+</figure>
+
+It is now possible to tag GIMP resources such as brushes and patterns to group them. The tagging is
performed from the respective dockables e.g. the _Brushes_ dockable, and it is possible to filter resources
based on these tags.
+
+The tags are saved to an XML file, external to the data files themselves. It is possible to tag multiple
resources simultaneously in the UI, but currently only while being viewed as a list. This feature was
developed during Google Summer of Code 2008\.
+**Developer:** Aurimas Juška
+**Interaction Architect:** Peter Sikking
+
+### Resources
+
+We have started overhauling the default set of resources and in this version there have been some changes to
the default set of brushes. The silly 'Untitled' title has been removed from unnamed palette entries. A
wholly new set of brushes for painting has been added and makes use of the new tagging system.
+**Developer:** Martin Nordholts
+**Artists:** Johannes Engelhardt, Ramón Miranda, Guillermo Espertino
+
+### Minor Changes
+
+* Allow specifying the written language in the Text Tool. This helps with choosing an appropriate font, or
appropriate glyphs for the selected language.
+* Moved 'Text along path' from tool options to the text context menu.
+* Add diagonal guides to the Crop Tool.
+* Support rotating brushes.
+* The Smooth Stroke feature from GIMP Painter was ported to GIMP.
+* Added 'Rule of fifths' crop guide overlay.
+* Added an icon for the Desaturate tool.
+* Support loading 16bit (RGB565) raw data.
+* Added palette exporter for CSS, PHP, Python, txt and Java, accessed through the palette context menu.
+* Support printing crop marks for images.
+* Made the Pointer dockable show information about selection position and size.
+* Replaced the brush scale control in tool options by a brush size one that works in pixels, and does the
right thing when the brush changes.
+* Improved the Free Select Tool on-canvas feedback.
+* Made it possible to use GEGL for scaling images.
+
+**Developers:** Sven Neumann, Michael Natterer, Tim Jedlicka, Alexia Death, Nelson A. de Oliveira, Jakub
Steiner, Nicholas Doyle, Barak Itkin, Martin Nordholts
+
+## Miscellaneous
+
+### Plug-in Development
+
+GIMP 2.8 also further enhances its scripting abilities. For example, API changes to support layer groups
have been made. Here is a [list of new symbols in GIMP
2.8](http://developer.gimp.org/api/2.0/libgimp/libgimp-index-new-in-2-8.html).
+
+### API Changes
+
+A lot of GIMP APIs have been refactored to simplify developing new scripts.
+
+### License
+
+The GIMP license has been changed to (L)GPLv3+.
+
+### GEGL
+
+The projection code which composes a single image from layers has been ported to GEGL. This includes the
layer modes, as well as support for layer groups. Also, preparations have been made for better and more
intuitive handling of the floating selection.
+**Developers:** Michael Natterer, Martin Nordholts
+
+### Roadmap
+
+The GIMP developers now maintain a roadmap for GIMP development found here:
[http://wiki.gimp.org/index.php/Roadmap](http://wiki.gimp.org/index.php/Roadmap)
+
+## GIMP 2.8 Screenshots
+
+<figure>
+<img src="../screenshots/1280x800-fresh-start.jpg" alt="First GIMP 2.8 startup" />
+<figcaption>
+First startup of GIMP 2.8 on a 1280x800 desktop.
+</figcaption>
+</figure>
+
+
+</div>
+
+## Known Regressions
+
+GIMP 2.8 relies on a newer version of GTK+2 that unfortunately has partially broken support for graphics
tablets such as Wacom. If your graphic tablet doesn't work in GIMP 2.8 as it should, we recommend downgrading
to 2.6 until we release GIMP 3.0 that relies on GTK+3 which has fully functional support for advanced input
devices.
+
+To address the needs to migrate from the old tools presets system to the new one we provide a
[script](http://wiki.gimp.org/index.php/Mindstorm:Preset_converter) in Python. However, the old tools presets
are not 100% convertible to the new tool presets. For instance, brush scale from 2.6 can't be converted to
brush size in 2.8.
+
+## Download and install pre-made packages
+
+GIMP can be downloaded directly from our [Downloads](/downloads/) section.
+
+Please be very cautious when downloading from anywhere else - some sites use GIMP's popularity to lure
unwary users into their traps by shipping modified installer packages.
+
+## Building GIMP yourself from source
+
+GIMP 2.8 must **not** be installed in the same prefix as other GIMP 2.x versions. If you want to keep your
GIMP 2.6 installation in parallel to GIMP 2.8, you have to choose a separate installation prefix at
compile-time and ensure that you use different library search paths for each version. If you do not set up
your environment differently for each version, you will experience conflicts with the libraries and at least
one version is likely to fail.
+
+Also, do **not** install GIMP 2.8 to /usr/local because on most systems, its libraries would override the
libraries of a stable GIMP 2.6 installed into /usr, breaking your distribution-installed GIMP from slightly
to completely. The same applies to any prefix your system uses for the purpose or overriding things in
/usr/lib.
+
+You install the new version into a separate prefix, say /opt/gimp-2.8 by passing `--prefix=/opt/gimp-2.8` to
the configure script. Then, in order to run the binary installed there, you change your environment to look
for executables in /opt/gimp-2.8/bin by setting `PATH=/opt/gimp-2.8/bin` and you tell your linker to pick up
libraries from /opt/gimp-2.8/lib by setting `LD_LIBRARY_PATH=/opt/gimp-2.8/lib`. Do not forget to `export`
both variables.
+
+You can use a tiny wrapper script called gimp-2.8 and place it into /usr/local/bin or elsewhere in your
PATH. The script would look something like this:
+
+ #!/bin/sh
+
+ PATH=/opt/gimp-2.8/bin:$PATH
+ export PATH
+ LD_LIBRARY_PATH=/opt/gimp-2.8/lib
+ export LD_LIBRARY_PATH
+
+ /opt/gimp-2.8/bin/gimp-2.8 "$@"
+
+## Bugs
+
+If you think you found a bug in a development version, please make sure that it hasn't been already
reported. Search [Bugzilla](http://bugzilla.gnome.org/) before filing a new bug-report. Here are some
interesting Bugzilla queries:
+
+* [Open bugs with milestone
2.8](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.8&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED)
+* [Resolved bugs with milestone
2.8](https://bugzilla.gnome.org/buglist.cgi?product=GIMP&target_milestone=2.8&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED)
+
+## Contributing
+
+We need your help to make GIMP 2.8 a success. If you want to join us hacking, show up in #gimp or introduce
yourself on the gimp-developer mailing-list. We are also looking for people to look after the web-site and
update the tutorials. Or you might want to join the [documentation team](http://docs.gimp.org/).
diff --git a/content/release-notes/images/2.4-align-tool.png b/content/release-notes/images/2.4-align-tool.png
new file mode 100644
index 0000000..ba132f7
Binary files /dev/null and b/content/release-notes/images/2.4-align-tool.png differ
diff --git a/content/release-notes/images/2.4-color-management.png
b/content/release-notes/images/2.4-color-management.png
new file mode 100644
index 0000000..8ee7145
Binary files /dev/null and b/content/release-notes/images/2.4-color-management.png differ
diff --git a/content/release-notes/images/2.4-crop-tool.png b/content/release-notes/images/2.4-crop-tool.png
new file mode 100644
index 0000000..979b194
Binary files /dev/null and b/content/release-notes/images/2.4-crop-tool.png differ
diff --git a/content/release-notes/images/2.4-refreshed-look.png
b/content/release-notes/images/2.4-refreshed-look.png
new file mode 100644
index 0000000..fbab30f
Binary files /dev/null and b/content/release-notes/images/2.4-refreshed-look.png differ
diff --git a/content/release-notes/images/2.4-releasesplash.jpg
b/content/release-notes/images/2.4-releasesplash.jpg
new file mode 100644
index 0000000..db13cc5
Binary files /dev/null and b/content/release-notes/images/2.4-releasesplash.jpg differ
diff --git a/content/release-notes/images/2.4-scalable-brushes.png
b/content/release-notes/images/2.4-scalable-brushes.png
new file mode 100644
index 0000000..39e3d5e
Binary files /dev/null and b/content/release-notes/images/2.4-scalable-brushes.png differ
diff --git a/content/release-notes/images/2.4-screenshot-plugin.png
b/content/release-notes/images/2.4-screenshot-plugin.png
new file mode 100644
index 0000000..1086a04
Binary files /dev/null and b/content/release-notes/images/2.4-screenshot-plugin.png differ
diff --git a/content/release-notes/images/2.4-selection-tools.png
b/content/release-notes/images/2.4-selection-tools.png
new file mode 100644
index 0000000..3160d14
Binary files /dev/null and b/content/release-notes/images/2.4-selection-tools.png differ
diff --git a/content/release-notes/images/2.4-statusbar-tips.png
b/content/release-notes/images/2.4-statusbar-tips.png
new file mode 100644
index 0000000..e887c4b
Binary files /dev/null and b/content/release-notes/images/2.4-statusbar-tips.png differ
diff --git a/content/release-notes/images/2.4-video-fgselect.jpg
b/content/release-notes/images/2.4-video-fgselect.jpg
new file mode 100644
index 0000000..1d10632
Binary files /dev/null and b/content/release-notes/images/2.4-video-fgselect.jpg differ
diff --git a/content/release-notes/images/2.4-video-lens.jpg b/content/release-notes/images/2.4-video-lens.jpg
new file mode 100644
index 0000000..c0f5cf6
Binary files /dev/null and b/content/release-notes/images/2.4-video-lens.jpg differ
diff --git a/content/release-notes/images/2.4-video-perspective.jpg
b/content/release-notes/images/2.4-video-perspective.jpg
new file mode 100644
index 0000000..2496ec6
Binary files /dev/null and b/content/release-notes/images/2.4-video-perspective.jpg differ
diff --git a/content/release-notes/images/2.4-zoom-display.png
b/content/release-notes/images/2.4-zoom-display.png
new file mode 100644
index 0000000..bbf5e32
Binary files /dev/null and b/content/release-notes/images/2.4-zoom-display.png differ
diff --git a/content/release-notes/images/2.6-brush-dynamics.jpg
b/content/release-notes/images/2.6-brush-dynamics.jpg
new file mode 100644
index 0000000..2af2614
Binary files /dev/null and b/content/release-notes/images/2.6-brush-dynamics.jpg differ
diff --git a/content/release-notes/images/2.6-empty-image-window.png
b/content/release-notes/images/2.6-empty-image-window.png
new file mode 100644
index 0000000..2a51588
Binary files /dev/null and b/content/release-notes/images/2.6-empty-image-window.png differ
diff --git a/content/release-notes/images/2.6-experimental-gegl-tool.png
b/content/release-notes/images/2.6-experimental-gegl-tool.png
new file mode 100644
index 0000000..479d57d
Binary files /dev/null and b/content/release-notes/images/2.6-experimental-gegl-tool.png differ
diff --git a/content/release-notes/images/2.6-lgm-2008-groupshot.jpg
b/content/release-notes/images/2.6-lgm-2008-groupshot.jpg
new file mode 100644
index 0000000..4deec19
Binary files /dev/null and b/content/release-notes/images/2.6-lgm-2008-groupshot.jpg differ
diff --git a/content/release-notes/images/2.6-new-free-select-tool.png
b/content/release-notes/images/2.6-new-free-select-tool.png
new file mode 100644
index 0000000..41f0c75
Binary files /dev/null and b/content/release-notes/images/2.6-new-free-select-tool.png differ
diff --git a/content/release-notes/images/2.6-scroll-beyond-border.png
b/content/release-notes/images/2.6-scroll-beyond-border.png
new file mode 100644
index 0000000..8441f92
Binary files /dev/null and b/content/release-notes/images/2.6-scroll-beyond-border.png differ
diff --git a/content/release-notes/images/2.6-text-tool-and-rectangle-handles.png
b/content/release-notes/images/2.6-text-tool-and-rectangle-handles.png
new file mode 100644
index 0000000..63d4b95
Binary files /dev/null and b/content/release-notes/images/2.6-text-tool-and-rectangle-handles.png differ
diff --git a/content/release-notes/images/2.8-brush-system-improvements.png
b/content/release-notes/images/2.8-brush-system-improvements.png
new file mode 100644
index 0000000..73542ce
Binary files /dev/null and b/content/release-notes/images/2.8-brush-system-improvements.png differ
diff --git a/content/release-notes/images/2.8-cage-transform-tool.png
b/content/release-notes/images/2.8-cage-transform-tool.png
new file mode 100644
index 0000000..246c024
Binary files /dev/null and b/content/release-notes/images/2.8-cage-transform-tool.png differ
diff --git a/content/release-notes/images/2.8-for-stylus-users.png
b/content/release-notes/images/2.8-for-stylus-users.png
new file mode 100644
index 0000000..4e3b489
Binary files /dev/null and b/content/release-notes/images/2.8-for-stylus-users.png differ
diff --git a/content/release-notes/images/2.8-layer-groups.png
b/content/release-notes/images/2.8-layer-groups.png
new file mode 100644
index 0000000..3d9ff69
Binary files /dev/null and b/content/release-notes/images/2.8-layer-groups.png differ
diff --git a/content/release-notes/images/2.8-math-in-size-entries.png
b/content/release-notes/images/2.8-math-in-size-entries.png
new file mode 100644
index 0000000..8c3f556
Binary files /dev/null and b/content/release-notes/images/2.8-math-in-size-entries.png differ
diff --git a/content/release-notes/images/2.8-multi-column-dock-windows.png
b/content/release-notes/images/2.8-multi-column-dock-windows.png
new file mode 100644
index 0000000..87ab689
Binary files /dev/null and b/content/release-notes/images/2.8-multi-column-dock-windows.png differ
diff --git a/content/release-notes/images/2.8-on-canvas-text-editing.png
b/content/release-notes/images/2.8-on-canvas-text-editing.png
new file mode 100644
index 0000000..ff9ca80
Binary files /dev/null and b/content/release-notes/images/2.8-on-canvas-text-editing.png differ
diff --git a/content/release-notes/images/2.8-removed-docking-bars.png
b/content/release-notes/images/2.8-removed-docking-bars.png
new file mode 100644
index 0000000..db8e61e
Binary files /dev/null and b/content/release-notes/images/2.8-removed-docking-bars.png differ
diff --git a/content/release-notes/images/2.8-resource-tagging-brushes.png
b/content/release-notes/images/2.8-resource-tagging-brushes.png
new file mode 100644
index 0000000..464068e
Binary files /dev/null and b/content/release-notes/images/2.8-resource-tagging-brushes.png differ
diff --git a/content/release-notes/images/2.8-resource-tagging.png
b/content/release-notes/images/2.8-resource-tagging.png
new file mode 100644
index 0000000..61266e4
Binary files /dev/null and b/content/release-notes/images/2.8-resource-tagging.png differ
diff --git a/content/release-notes/images/2.8-save-and-export.png
b/content/release-notes/images/2.8-save-and-export.png
new file mode 100644
index 0000000..95dd0f7
Binary files /dev/null and b/content/release-notes/images/2.8-save-and-export.png differ
diff --git a/content/release-notes/images/2.8-single-window-mode.png
b/content/release-notes/images/2.8-single-window-mode.png
new file mode 100644
index 0000000..153d92f
Binary files /dev/null and b/content/release-notes/images/2.8-single-window-mode.png differ
diff --git a/content/release-notes/images/2.8-tools-drawn-with-cairo.png
b/content/release-notes/images/2.8-tools-drawn-with-cairo.png
new file mode 100644
index 0000000..73a3fad
Binary files /dev/null and b/content/release-notes/images/2.8-tools-drawn-with-cairo.png differ
diff --git a/content/release-notes/images/color-management.png
b/content/release-notes/images/color-management.png
new file mode 100644
index 0000000..23c5947
Binary files /dev/null and b/content/release-notes/images/color-management.png differ
diff --git a/content/release-notes/images/gimp-24-print-dark.png
b/content/release-notes/images/gimp-24-print-dark.png
new file mode 100644
index 0000000..e0cf0a4
Binary files /dev/null and b/content/release-notes/images/gimp-24-print-dark.png differ
diff --git a/content/release-notes/images/gimp-curves-tool-2-4-vs-2-6.png
b/content/release-notes/images/gimp-curves-tool-2-4-vs-2-6.png
new file mode 100644
index 0000000..410ad9c
Binary files /dev/null and b/content/release-notes/images/gimp-curves-tool-2-4-vs-2-6.png differ
diff --git a/content/release-notes/images/video-thumb.png b/content/release-notes/images/video-thumb.png
new file mode 100644
index 0000000..67b49ec
Binary files /dev/null and b/content/release-notes/images/video-thumb.png differ
diff --git a/content/release-notes/index.md b/content/release-notes/index.md
new file mode 100644
index 0000000..222d82c
--- /dev/null
+++ b/content/release-notes/index.md
@@ -0,0 +1,21 @@
+Title: GIMP Release Notes
+Date: 2015-08-17T14:15:58-05:00
+Modified: 2015-08-17T14:16:03-05:00
+Authors: Pat David
+Status: hidden
+
+
+Here are the release notes for the versions of GIMP that can be found on our [downloads page](/downloads/).
+
+* [Release notes for the stable version, GIMP 2.8](gimp-2.8.html). This is the version that most users
should be running.
+
+Older release notes may still have some historical value:
+
+* [2.7](gimp-2.7.html) (development)
+* [2.6](gimp-2.6.html) (stable)
+* [2.5](gimp-2.5.html) (development)
+* [2.4](gimp-2.4.html) (stable)
+* [2.3](gimp-2.3.html) (development)
+* [2.3.3](gimp-2.3.3.html) (SIOX release)
+* [2.2](gimp-2.2.html) (stable)
+
diff --git a/content/screenshots/1280x800-fresh-start-thumb.jpg
b/content/screenshots/1280x800-fresh-start-thumb.jpg
new file mode 100644
index 0000000..16d2975
Binary files /dev/null and b/content/screenshots/1280x800-fresh-start-thumb.jpg differ
diff --git a/content/screenshots/1280x800-fresh-start.jpg b/content/screenshots/1280x800-fresh-start.jpg
new file mode 100644
index 0000000..945f388
Binary files /dev/null and b/content/screenshots/1280x800-fresh-start.jpg differ
diff --git a/content/screenshots/2.6-brush-dynamics-example-thumb.jpg
b/content/screenshots/2.6-brush-dynamics-example-thumb.jpg
new file mode 100644
index 0000000..5a456d5
Binary files /dev/null and b/content/screenshots/2.6-brush-dynamics-example-thumb.jpg differ
diff --git a/content/screenshots/2.6-brush-dynamics-example.jpg
b/content/screenshots/2.6-brush-dynamics-example.jpg
new file mode 100644
index 0000000..42719e2
Binary files /dev/null and b/content/screenshots/2.6-brush-dynamics-example.jpg differ
diff --git a/content/screenshots/alternative-2-6-ui-layout-example-one-thumb.jpg
b/content/screenshots/alternative-2-6-ui-layout-example-one-thumb.jpg
new file mode 100644
index 0000000..11383a9
Binary files /dev/null and b/content/screenshots/alternative-2-6-ui-layout-example-one-thumb.jpg differ
diff --git a/content/screenshots/alternative-2-6-ui-layout-example-one.jpg
b/content/screenshots/alternative-2-6-ui-layout-example-one.jpg
new file mode 100644
index 0000000..edfbf1d
Binary files /dev/null and b/content/screenshots/alternative-2-6-ui-layout-example-one.jpg differ
diff --git a/content/screenshots/alternative-2-6-ui-layout-example-two-thumb.jpg
b/content/screenshots/alternative-2-6-ui-layout-example-two-thumb.jpg
new file mode 100644
index 0000000..12f6b90
Binary files /dev/null and b/content/screenshots/alternative-2-6-ui-layout-example-two-thumb.jpg differ
diff --git a/content/screenshots/alternative-2-6-ui-layout-example-two.jpg
b/content/screenshots/alternative-2-6-ui-layout-example-two.jpg
new file mode 100644
index 0000000..f8a460d
Binary files /dev/null and b/content/screenshots/alternative-2-6-ui-layout-example-two.jpg differ
diff --git a/content/screenshots/gnome-1280x800-fresh-start-thumb.jpg
b/content/screenshots/gnome-1280x800-fresh-start-thumb.jpg
new file mode 100644
index 0000000..89f242f
Binary files /dev/null and b/content/screenshots/gnome-1280x800-fresh-start-thumb.jpg differ
diff --git a/content/screenshots/gnome-1280x800-fresh-start.jpg
b/content/screenshots/gnome-1280x800-fresh-start.jpg
new file mode 100644
index 0000000..19fa608
Binary files /dev/null and b/content/screenshots/gnome-1280x800-fresh-start.jpg differ
diff --git a/content/screenshots/index.htrw b/content/screenshots/index.htrw
new file mode 100644
index 0000000..93f38a9
--- /dev/null
+++ b/content/screenshots/index.htrw
@@ -0,0 +1,48 @@
+<!--#include virtual="/includes/wgo-xhtml-init.xhtml" -->
+<title>GIMP - Screenshots</title>
+<!--#include virtual="/includes/wgo-look-feel.xhtml" -->
+<!--#include virtual="/includes/imagebox.xhtml" -->
+<!--#include virtual="/includes/wgo-page-init.xhtml" -->
+
+<h1>Everyone Loves Screenshots!</h1>
+
+
+<h2>GNU/Linux Screenshots</h2>
+
+<div class="screenshots">
+
+ <!-- TODO: Make it easy to add new screenshots and add the rest of
+ the screenshots that are in this directory. -->
+
+ <a href="linux_fullscreen.jpg" title="GIMP running fullscreen, side by side with F-Spot.">
+ <img src="linux_fullscreen_thumb.jpg" alt="Grid, Fullscreen Screenshot" />
+ </a>
+
+ <a href="linux_mixer.jpg" title="Full control over B/W process using the channel mixer.">
+ <img src="linux_mixer_thumb.jpg" alt="Channel Mixer" />
+ </a>
+
+ <a href="linux_dualscreen_griatch_art.jpg" title="Digital artwork from scratch in GIMP.">
+ <img src="linux_dualscreen_griatch_art_thumb.jpg" alt="Digital artwork" />
+ </a>
+</div>
+
+<h2>Microsoft Windows Screenshots</h2>
+
+<div class="screenshots">
+ <a href="windows_crop.jpg" title="GIMP running on Microsoft Windows features a widget theme mimicking the
native environment.">
+ <img src="windows_crop_thumb.jpg" alt="GIMP on Microsoft Windows" />
+ </a>
+</div>
+
+<h2>Mac OS X Screenshots</h2>
+
+<div class="screenshots">
+ <a href="osx_aperture.jpg" title="GIMP side by side with Apple Aperture on Mac OS X.">
+ <img src="osx_aperture_thumb.jpg" alt="GIMP on the Mac" />
+ </a>
+</div>
+
+
+<!--#include virtual="/includes/wgo-page-fini.xhtml" -->
+<!--#include virtual="/includes/wgo-xhtml-fini.xhtml" -->
diff --git a/content/screenshots/index.md b/content/screenshots/index.md
new file mode 100644
index 0000000..d79d8f5
--- /dev/null
+++ b/content/screenshots/index.md
@@ -0,0 +1,49 @@
+Title: Everyone Loves Screenshots!
+Date: 2015-08-17T15:38:06-05:00
+Modified: 2015-08-17T15:38:12-05:00
+Authors: Pat David
+Status: hidden
+
+
+
+## GNU/Linux Screenshots
+
+<figure>
+<img src="linux_fullscreen.jpg" alt="" />
+<figcaption>
+GIMP running fullscreen, side by side with F-Spot.
+</figcaption>
+</figure>
+
+<figure>
+<img src="linux_mixer.jpg" alt="" />
+<figcaption>
+Full control over B/W process using the channel mixer.
+</figcaption>
+</figure>
+
+<figure>
+<img src="linux_dualscreen_griatch_art.jpg" alt="Digital artwork" />
+<figcaption>
+Digital artwork from scratch in GIMP.
+</figcaption>
+</figure>
+
+
+## Microsoft Windows Screenshots
+
+<figure>
+<img src="windows_crop.jpg" alt="GIMP on Microsoft Windows" />
+<figcaption>
+GIMP running on Microsoft Windows features a widget theme mimicking the native environment.
+</figcaption>
+</figure>
+
+## Mac OS X Screenshots
+
+<figure>
+<img src="osx_aperture.jpg" alt="GIMP on the Mac" />
+<figcaption>
+GIMP side by side with Apple Aperture on Mac OS X.
+</figcaption>
+</figure>
diff --git a/content/screenshots/linux_dualscreen_griatch_art.jpg
b/content/screenshots/linux_dualscreen_griatch_art.jpg
new file mode 100644
index 0000000..e3e29b3
Binary files /dev/null and b/content/screenshots/linux_dualscreen_griatch_art.jpg differ
diff --git a/content/screenshots/linux_dualscreen_griatch_art_thumb.jpg
b/content/screenshots/linux_dualscreen_griatch_art_thumb.jpg
new file mode 100644
index 0000000..0696763
Binary files /dev/null and b/content/screenshots/linux_dualscreen_griatch_art_thumb.jpg differ
diff --git a/content/screenshots/linux_fullscreen.jpg b/content/screenshots/linux_fullscreen.jpg
new file mode 100644
index 0000000..8ebddf6
Binary files /dev/null and b/content/screenshots/linux_fullscreen.jpg differ
diff --git a/content/screenshots/linux_fullscreen_huge.jpg b/content/screenshots/linux_fullscreen_huge.jpg
new file mode 100644
index 0000000..0cd481d
Binary files /dev/null and b/content/screenshots/linux_fullscreen_huge.jpg differ
diff --git a/content/screenshots/linux_fullscreen_thumb.jpg b/content/screenshots/linux_fullscreen_thumb.jpg
new file mode 100644
index 0000000..b49956c
Binary files /dev/null and b/content/screenshots/linux_fullscreen_thumb.jpg differ
diff --git a/content/screenshots/linux_mixer.jpg b/content/screenshots/linux_mixer.jpg
new file mode 100644
index 0000000..7eaaafc
Binary files /dev/null and b/content/screenshots/linux_mixer.jpg differ
diff --git a/content/screenshots/linux_mixer_thumb.jpg b/content/screenshots/linux_mixer_thumb.jpg
new file mode 100644
index 0000000..196fc16
Binary files /dev/null and b/content/screenshots/linux_mixer_thumb.jpg differ
diff --git a/content/screenshots/on-canvas-preview-of-gaussian-blur-in-2-6-thumb.jpg
b/content/screenshots/on-canvas-preview-of-gaussian-blur-in-2-6-thumb.jpg
new file mode 100644
index 0000000..99bfd5a
Binary files /dev/null and b/content/screenshots/on-canvas-preview-of-gaussian-blur-in-2-6-thumb.jpg differ
diff --git a/content/screenshots/on-canvas-preview-of-gaussian-blur-in-2-6.jpg
b/content/screenshots/on-canvas-preview-of-gaussian-blur-in-2-6.jpg
new file mode 100644
index 0000000..a56320c
Binary files /dev/null and b/content/screenshots/on-canvas-preview-of-gaussian-blur-in-2-6.jpg differ
diff --git a/content/screenshots/osx_aperture.jpg b/content/screenshots/osx_aperture.jpg
new file mode 100644
index 0000000..1a16b7c
Binary files /dev/null and b/content/screenshots/osx_aperture.jpg differ
diff --git a/content/screenshots/osx_aperture_thumb.jpg b/content/screenshots/osx_aperture_thumb.jpg
new file mode 100644
index 0000000..607e1ed
Binary files /dev/null and b/content/screenshots/osx_aperture_thumb.jpg differ
diff --git a/content/screenshots/windows_crop.jpg b/content/screenshots/windows_crop.jpg
new file mode 100644
index 0000000..f22d8bb
Binary files /dev/null and b/content/screenshots/windows_crop.jpg differ
diff --git a/content/screenshots/windows_crop.png b/content/screenshots/windows_crop.png
new file mode 100644
index 0000000..49e5ea4
Binary files /dev/null and b/content/screenshots/windows_crop.png differ
diff --git a/content/screenshots/windows_crop_thumb.jpg b/content/screenshots/windows_crop_thumb.jpg
new file mode 100644
index 0000000..ddab6e6
Binary files /dev/null and b/content/screenshots/windows_crop_thumb.jpg differ
diff --git a/content/source/howtos/gimp-git-build.md b/content/source/howtos/gimp-git-build.md
new file mode 100644
index 0000000..e67bd30
--- /dev/null
+++ b/content/source/howtos/gimp-git-build.md
@@ -0,0 +1,46 @@
+Title: Best Way to Keep Up with GIMP from git
+Date: 2015-08-17T15:38:06-05:00
+Modified: 2015-08-17T15:38:12-05:00
+Author: Martin Nordholts
+Status: hidden
+
+Author: Martin Nordholts
+
+The more people that use the latest GIMP code from git the better. It keeps the required effort to
contribute code upstreams small, which in turn increases the likelihood of upstream contributions, and it
makes bugs more vulnerable to early discovery which minimizes their impact.
+
+However, keeping up with GIMP from git means extra work compared to using prebuilt packages. Unless you know
of an easy way you might not withstand it. What follows is a description of how I do it, which is almost
effortless once setup. I assume you know how to install necessary dependencies (note you can use the method I
describe for the key dependencies, including babl, GLib, GEGL and GTK+), what "the install prefix" means, and
that you run Linux. The approach I use differs in two principal way compared to the many guides found on the
net:
+
+1. I use autoconf's config.site feature instead of setting up environment variables manually
+2. I install in my home directory
+
+Making use of config.site nullifies the need to manually manage environment variables, and installing in the
home directory makes it easy to tinker with an installation since you don't need to be root. So, put this in
$PREFIX/share/config.site where $PREFIX is in your home directory such as PREFIX=/home/martin/gimp-git,
either manually or using this script:
+
+ export PATH="$PREFIX/bin:$PATH"
+ export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH"
+ export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH"
+ export ACLOCAL_FLAGS="-I $PREFIX/share/aclocal $ACLOCAL_FLAGS"
+
+
+Then, assuming you have all the dependencies, you build GIMP the first time with:
+
+ git clone git://git.gnome.org/gimp
+ cd gimp
+ ./autogen.sh --prefix=$PREFIX
+ make
+ make install
+
+
+and then to get updated with the latest changes from the constantly moving code base you regularly do
+
+ git pull --rebase
+ make
+ make install
+
+Note that the latter works without requiring any environment variables to be set since configure will source
config.site. And because autogen.sh passes --enable-maintainer-mode to configure, it will also work when
Makefile.am's or configure.ac are changed. In those rare occasions where things break, just run git clean
-xdf which removes all non-version-controlled files so that you can start over from autogen.sh.
+
+The above approach works for as good as all GNOME projects, including GLib, babl, GEGL and GTK+. This makes
it easy to adapt to GIMP's build requirements of these and other libraries even if your distro doesn't meet
them. Let me know if you have problems!
+
+<small>
+Originally published at:
+[http://www.chromecode.com/2009/12/best-way-to-keep-up-with-gimp-from-git_26.html](http://www.chromecode.com/2009/12/best-way-to-keep-up-with-gimp-from-git_26.html)
+</small>
diff --git a/content/source/index.md b/content/source/index.md
new file mode 100644
index 0000000..dc59d49
--- /dev/null
+++ b/content/source/index.md
@@ -0,0 +1,219 @@
+Title: GIMP From Source
+Date: 2015-08-17T15:38:06-05:00
+Modified: 2015-08-17T15:38:12-05:00
+Authors: Pat David
+Status: hidden
+
+<style>
+table {
+max-width: 40rem;
+font-size: 0.85rem;
+margin: 1rem auto;
+}
+table td {
+ padding: 0.25rem;
+ border: solid 1px #eee;
+}
+</style>
+
+
+The official distribution of GIMP is the source code, distributed in tar files from the GIMP FTP site and
its [mirrors](/downloads/#mirrors). The same source code can be compiled to create binaries for different
platforms such as [GNU/Linux](/unix/), [Microsoft Windows](/windows/), [Mac OS X](/macintosh/),
[Solaris](/unix/) and many others.
+
+* [GIMP Source Code](#source)
+* [GIMP Requirements](#requirements)
+* [GIMP from Git](#gimp_from_git)
+* [Optional packages](#optional_packages)
+
+### Stable releases
+
+Is recommended for most users. Pre-compiled binaries of the stable GIMP are usually available for many
platforms (see the platform-specific pages for more details), so you do not even have to compile the code
yourself.
+
+### Development releases
+
+For those who want to check the progress towards the next stable release, and who want to help the
developers by testing the code and reporting bugs. The development version contains more features than the
stable version but it may crash from time to time so be sure to save your work often. If you are using this
version, it is a good idea to subscribe to some of the GIMP [mailing lists](/mail_lists.html) (gimp-user or
gimp-developer) so that you can follow the discussions about new features and known bugs.
+
+### Git repository
+
+This is for those who want to live on the bleeding edge. This will give you the latest version of the source
code with the latest features, but also with the latest bugs (eeek!). The repository contains several
versions of the code called "branches" so you can fetch the latest version ("trunk") or a stable version from
a maintenance branch. If you intend to [contribute](/develop/) to the development of GIMP, then you should
try using Git. As the code is constantly evolving and features are added (or removed) every day, you should
have a look at the [developers' site](http://wiki.gimp.org/) and subscribe to the gimp-developer mailing list
if you compile the code from Git.
+
+## GIMP Source Code
+
+The GIMP source code is distributed as tarballs. It is available from the GIMP FTP site and its
[mirrors](/downloads/#mirrors).
+
+## GIMP Requirements
+
+All requirements below must be met to be able compiling GIMP from source. This list might change depending
on the releases being worked on during development of GIMP. Look at the files INSTALL and README in the
tarballs for details.
+
+### Stable version 2.8.x
+
+<table markdown='span' >
+<tbody>
+<tr>
+<th>Package</th>
+<th>Version</th>
+<th>FTP</th>
+<th>HTTP</th>
+<th>Description</th>
+</tr>
+<tr>
+<td>pkg-config</td>
+<td>0.16.0 or newer</td>
+<td>-</td>
+<td>[Download](http://www.freedesktop.org/software/pkgconfig/)</td>
+<td>A system for managing library compile/link flags</td>
+</tr>
+<tr>
+<td>GTK+</td>
+<td>2.24.10 or newer</td>
+<td>[Download](ftp://ftp.gtk.org/pub/gtk/)</td>
+<td>-</td>
+<td>The GIMP toolkit</td>
+</tr>
+<tr>
+<td>GLib</td>
+<td>2.30.2 or newer</td>
+<td>[Download](ftp://ftp.gtk.org/pub/glib)</td>
+<td>-</td>
+<td>Glib Convenience Library</td>
+</tr>
+<tr>
+<td>Pango</td>
+<td>1.29.4 or newer</td>
+<td>[Download](ftp://ftp.gtk.org/pub/pango)</td>
+<td>-</td>
+<td>Text layout engine, GIMP also requires PangoCairo — a Pango backend using Cairo</td>
+</tr>
+<tr>
+<td>Fontconfig</td>
+<td>2.2.0 or newer</td>
+<td>-</td>
+<td>[Download](http://freedesktop.org/fontconfig/release/)</td>
+<td>Font Configuration</td>
+</tr>
+<tr>
+<td>babl</td>
+<td>0.1.10 or newer</td>
+<td>[Download](http://download.gimp.org/pub/babl/)</td>
+<td>-</td>
+<td>Pixel format translation library</td>
+</tr>
+<tr>
+<td>GEGL</td>
+<td>0.2.0 or newer</td>
+<td>[Download](http://download.gimp.org/pub/gegl/)</td>
+<td>-</td>
+<td>Generic Graphics Library</td>
+</tr>
+</tbody>
+</table>
+
+
+## GIMP from Git
+
+The source code of GIMP is maintained in the GNOME Git repository. Besides offering version tracking,
branching, avanced diff support and else, this repository grants everyone access to the latest revision of
the GIMP source code.
+ Follow this guide and you will have the most recent GIMP in no time:
+
+* [Best way to keep up with GIMP from git](/source/howtos/gimp-git-build.html)
+
+To find out more about GIMP development, [http://wiki.gimp.org/](http://wiki.gimp.org/) should answer the
questions you have.
+
+## <a name="optional_packages">Optional packages</a>
+
+To make it easy for you to understand how to get GIMP and what is required to run GIMP, the list of packages
has been done below. Not only is the list for the required packages but also for the packages that can be
added to support other things like fileformats etc.
+
+<table markdown="span">
+<tbody>
+<tr>
+<th>Package</th>
+<th>FTP</th>
+<th>HTTP</th>
+<th>Description</th>
+<th>Dependency</th>
+</tr>
+<tr>
+<td>aalib</td>
+<td>-</td>
+<td>[Download](http://aa-project.sourceforge.net/aalib/)</td>
+<td>ASCII art library</td>
+<td>Optional</td>
+</tr>
+<tr>
+<td>libexif</td>
+<td>-</td>
+<td>[Download](http://sourceforge.net/projects/libexif)</td>
+<td>EXIF tag support for JPEGs</td>
+<td>Optional</td>
+</tr>
+<tr>
+<td>libjpeg</td>
+<td>[Download](ftp://ftp.uu.net/graphics/jpeg/)</td>
+<td>-</td>
+<td>JPEG support</td>
+<td>Optional (explicit disable)</td>
+</tr>
+<tr>
+<td>libpng</td>
+<td>-</td>
+<td>[Download](http://www.libpng.org/)</td>
+<td>PNG support</td>
+<td>Optional (explicit disable)</td>
+</tr>
+<tr>
+<td>libtiff</td>
+<td>-</td>
+<td>[Download](http://www.remotesensing.org/libtiff/)</td>
+<td>TIFF support</td>
+<td>Optional (explicit disable)</td>
+</tr>
+<tr>
+<td>libmng</td>
+<td>-</td>
+<td>[Download](http://www.libmng.com/)</td>
+<td>MNG support</td>
+<td>Optional (plugin won't be built)</td>
+</tr>
+<tr>
+<td>libxpm</td>
+<td>[Download](ftp://ftp.x.org/contrib/libraries/)</td>
+<td>[Download](http://koala.ilog.fr/ftp/pub/xpm/)</td>
+<td>XPM support</td>
+<td>Optional</td>
+</tr>
+<tr>
+<td>librsvg</td>
+<td>[Download](ftp://ftp.gnome.org/mirror/gnome.org/sources/librsvg/)</td>
+<td>[Download](http://librsvg.sourceforge.net/)</td>
+<td>Scalable Vector Graphics</td>
+<td>Optional (plugin won't be built)</td>
+</tr>
+<tr>
+<td>libwmf</td>
+<td>-</td>
+<td>[Download](http://wvware.sourceforge.net/libwmf.html)</td>
+<td>Library to convert wmf files</td>
+<td>Optional (plugin won't be built)</td>
+</tr>
+<tr>
+<td>webkit</td>
+<td>-</td>
+<td>[Download](http://live.gnome.org/WebKitGtk)</td>
+<td>HTML renderer and web content engine</td>
+<td>Optional (Help Browser won't be built)</td>
+</tr>
+<tr>
+<td>zlib</td>
+<td>-</td>
+<td>[Download](http://www.gzip.org/zlib/)</td>
+<td>Compression routines</td>
+<td>Optional</td>
+</tr>
+<tr>
+<td>Python</td>
+<td>[Download](ftp://ftp.python.org/pub/python/)</td>
+<td>[Download](http://www.python.org/)</td>
+<td>Python support</td>
+<td>Optional</td>
+</tr>
+</tbody>
+</table>
+
diff --git a/content/tutorials/3d_Logo/index.md b/content/tutorials/3d_Logo/index.md
new file mode 100644
index 0000000..6c464a9
--- /dev/null
+++ b/content/tutorials/3d_Logo/index.md
@@ -0,0 +1,255 @@
+Title: 3-D Floating Logo
+Date: 2015-08-17T16:40:00-05:00
+Modified: 2015-08-17T16:40:05-05:00
+Author: Mel Boyce
+Summary: A quick look at some easy features.
+
+<small>
+Text and images Copyright (C) 2002 [Mel Boyce](mailto:syngin-at-gimp-dot-org) and may not be used without
permission of the author.
+</small>
+
+## Intention
+
+This tutorial is aimed squarely at the novice GIMP user. The more experienced user may find some techniques
here useful. This is the same procedure I used to create the logo on my homepage, albeit with slightly
different settings. I'll point out the differences as I go along. I've taken a lot of screen shots to support
this tutorial, so enjoy :)
+
+## Step 1
+
+<figure>
+<img src="logo-00.png" alt="Floating Logo" />
+</figure>
+
+Fire up GIMP and create a new image. I used a white background at 500px by 200px. I feel this size it
adequate as my website at the time of writing uses 500px tables.
+
+## Step 2
+
+<figure>
+<img src="logo-01.png" alt="Floating Logo" />
+</figure>
+
+Start by laying down some text that is wider than 400px and not too thin. I've used a font called Pricedown.
The text should be created as a new layer. If you use GIMP FreeType then it is done for you, otherwise click
the New Layer button in the Layers, Channels, & Paths dialog (looks like a blank piece of paper). It will
help to change the layer size to that of the image. Do so by accessing the Layers menu (right click or
Control+Click on the layer you wish to operate on) and select Layer to Imagesize.
+
+## Step 3
+
+<figure>
+<img src="logo-02.png" alt="Floating Logo" />
+</figure>
+
+Duplicate the text layer (text) twice. One for the highlight effect (highlight) and one for the shaded part
of the effect (lowlight). The highlight layer needs to be white, so select that layer, check the Keep Trans.
box on the Layers, Channels, & Paths dialog, and fill it with white. You can do this easily by dragging the
white color swatch from the toolbox over to the image (assuming that the highlight layer is currently
selected). Keep Trans. means "Keep Transparency"; this will ensure that any transformations or fills made to
that layer will only affect the non-transparent part of the image.
+
+## Step 4
+
+<figure>
+<img src="logo-03.png" alt="Floating Logo" />
+</figure>
+
+Duplicate the text layer again and move it to the top of the Layers stack (use the little up facing arrow
head on the Layers, Channels, & Paths dialog). Make sure that Keep Trans. is un-checked and then blur it. I
used Gaussian Blur (RLE) at 10 pixels. When I did the original logo, it was set lower than this to make the
effect less rounded.
+
+You will need to make sure that the layer boundary is larger than the layer so that the blur can spread
nicely. Step 2 mentions this.
+
+## Step 5
+
+<figure>
+<img src="logo-04.png" alt="Floating Logo" />
+</figure>
+
+Duplicate the blurred layer once (tmp1 and tmp2). These layers are used to create the edge lighting for the
text.
+
+## Step 6
+
+<figure>
+<img src="logo-05.png" alt="Floating Logo" />
+</figure>
+
+Nudge one of the blurred layers (tmp1) down and to the right about 5 pixels. The precise number of pixels
depends on how blurred and thus how round the text will appear to be, so use your best judgement. You can
nudge layers my using the Move tool and the cursor keys on your keyboard. It doesn't matter which of the
blurred layers you use in this step, as long as you know which one you didn't move \x{2013} you'll be needing
to do a very similar thing to that one soon.
+
+## Step 7
+
+<figure>
+<img src="logo-06.png" alt="Floating Logo" />
+</figure>
+
+Now create a selection using the blurred layer (the one you moved in step 6) using Alpha to Selection. This
selection is a precise selection based on the layer and includes alpha (transparency) information. Handy
stuff. You'll notice that I've turned off the layer below (the other blurred layer). This was done to make
sure I could see how far I moved this layer during step 6.
+
+## Step 8
+
+<figure>
+<img src="logo-07.png" alt="Floating Logo" />
+</figure>
+
+Now that the layer is selected...
+
+## Step 9
+
+<figure>
+<img src="logo-08.png" alt="Floating Logo" />
+</figure>
+
+Select the highlight layer and...
+
+## Step 10
+
+<figure>
+<img src="logo-09.png" alt="Floating Logo" />
+</figure>
+
+Cut (edit/cut or <kbd>CTRL+X</kbd> on PC or <kbd>Command+X</kbd> on Mac). This will remove the blurred
layers selection from the highlight layer. You could do this with channel masks, but I'm a man of simple
needs and wants. There's another step after this that I haven't documented, but that's because it's the same
thing again (steps 6-10) but with the other layer (tmp2: see steps 5 and 6). Move (nudge) that layer in the
opposite direction (up and to the left about 5 pixels), then make the cut from the lowlight layer. Once
you're done, delete the two blurred layers (tmp1 and tmp2).
+
+## Step 11
+
+<figure>
+<img src="logo-10.png" alt="Floating Logo" />
+</figure>
+
+I like to take quasi-breaks while doing some images, and this is one of those times. A good time to roll a
cigarette or grab a cup coffee. I also tend to clean up temporary layers occasionally.
+
+## Step 12
+
+<figure>
+<img src="logo-11.png" alt="Floating Logo" />
+</figure>
+
+Now we'll add the first elements of 3D-ness to the logo. The original text layer is the base layer for any
color you want to add. I'll use grey70, but you could just as easily use any old color you like. It's a good
idea to play with this as you can get some funky plastic logos too. Make sure Keep Trans. is checked when you
fill the layer.
+
+## Step 13
+
+<figure>
+<img src="logo-12.png" alt="Floating Logo" />
+</figure>
+
+As you can see, it's starting to look like something now.
+
+## Step 14
+
+<figure>
+<img src="logo-13.png" alt="Floating Logo" />
+</figure>
+
+Click the blank piece of paper on the Layers, Channels, & Paths dialog and make a new transparent layer
called outline. Move this new layer down the layers stack until it's underneath the original text layer.
+
+## Step 15
+
+<figure>
+<img src="logo-14.png" alt="Floating Logo" />
+</figure>
+
+Select the original text layer (the one you added some color to) and do the Alpha to Selection trick again.
Right click on the image and use <span class="filter"><Image> Select -> Grow</span>. This will make the new
selection larger by a number of pixels - I used a value of 2 pixels. Once you have a selection, be sure to
reselect the new layer (outline) so that you can fill it (step 17). And below is what it looks like.
+
+## Step 16
+
+<figure>
+<img src="logo-15.png" alt="Floating Logo" />
+</figure>
+
+And this is what it looks like.
+
+## Step 17
+
+<figure>
+<img src="logo-16.png" alt="Floating Logo" />
+</figure>
+
+Fill the layer with black and deselect (<kbd>CTRL+SHIFT+A</kbd> on PC or <kbd>Command+SHIFT+A</kbd> on Mac).
As you can see, the image now has more background contrast. Now, duplicate that layer and lower the copy
below the original outline layer. Make sure that Keep Trans. is not checked, and blur it. I like soft
shadows, so I used a Gaussian Blur (RLE) of about 30 pixels. Drop the Opacity of the layer down to about 50
and nudge it to the right and down until it looks okay.
+
+A nice way to fill selection areas or layers that have Keep Trans. selected, is to simply drag the color
from the toolbox color swatch to the layer.
+
+## Step 18
+
+<figure>
+<img src="logo-17.png" alt="Floating Logo" />
+</figure>
+
+This is what the Layers, Channels, & Paths dialog should look like.
+
+## Step 19
+
+<figure>
+<img src="logo-18.png" alt="Floating Logo" />
+</figure>
+
+I've duplicated the highlight and lowlight layers and made them all blend with the lower layers using the
Overlay mode. This helps to make the edges more 3D.
+
+## Step 20
+
+<figure>
+<img src="logo-19.png" alt="Floating Logo" />
+</figure>
+
+Create a new transparent layer called rust and select the bezier tool (shown here as the depressed button).
+
+## Step 21
+
+<figure>
+<img src="logo-20.png" alt="Floating Logo" />
+</figure>
+
+Rust isn't uniform and I've decided to only worry about the lower half of the letters. Use the bezier tool
on the new rust layer to start a selection that looks like...
+
+## Step 22
+
+<figure>
+<img src="logo-21.png" alt="Floating Logo" />
+</figure>
+
+This. Click inside the bezier path once you close it (close it by clicking one the first node). This will
create a selection. Use <span class="filter"><Image> Select -> Feather</span> to feather (blur) the
selection. I used a value of about 10 pixels.
+
+## Step 23
+
+<figure>
+<img src="logo-22.png" alt="Floating Logo" />
+</figure>
+
+Pick a nice bright orange or brown color for the rust. My site logo used a reddy-borwn color, but here I've
chosen a bright orange. Fill the selection with it. Using the famed Alpha to Selection move, get the
selection for the original text layer. Once you have that selection area, click the rust layer to make it
active. Invert the selection (<kbd>CTRL+I</kbd> or <kbd>Command+I</kbd>) and Cut. This will leave only the
part of the rust layer that actually covers the letters and not the extra.
+
+## Step 24
+
+<figure>
+<img src="logo-23.png" alt="Floating Logo" />
+</figure>
+
+Change the Layer Mode of the rust layer to Muliply (Burn).
+
+## Step 25
+
+<figure>
+<img src="logo-24.png" alt="Floating Logo" />
+</figure>
+
+The image should now look a little like this. Don't worry, it'll look better soon.
+
+## Step 26
+
+<figure>
+<img src="logo-25.png" alt="Floating Logo" />
+</figure>
+
+With the rust layer selected, add a Layer Mask.
+
+## Step 27
+
+<figure>
+<img src="logo-26.png" alt="Floating Logo" />
+</figure>
+
+Making sure that you reset the color swatches on the toolbox, use the gradient tool to make a gradient in
the Layer Mask so it looks like this.
+
+## Step 28
+
+<figure>
+<img src="logo-27.png" alt="Floating Logo" />
+</figure>
+
+The image should now look like this.
+
+## Final
+
+<figure>
+<img src="logo-28.png" alt="Floating Logo" />
+</figure>
+
+With a little playing around you can get to this. I duplicated the rust layer and moved them (the original
rust and the copy) down the stack until the highlight and lowlight layers were above them. I also duplicated
the original text layer, switched on Keep Trans., and used <span class="filter"><Image> Render -> Clouds ->
Solid Noise</span> to add a bit of interest to the layer. Try using the Curves tool to help with this. You
may also notice that the outline layer is blurred. Sometimes this can help. The idea is, try stuff and find
out.
+
+Well, thats it. Hope that taught you the power of selections and layer modes to some degree. There are many
people who tout the use of channel masks, but don't under estimate the power of selections to do your dirty
work.
+
+<small>
+Text and images Copyright (C) 2002 [Mel Boyce](mailto:syngin-at-gimp-dot-org) and may not be used without
permission of the author.
+</small>
diff --git a/content/tutorials/3d_Logo/logo-00.png b/content/tutorials/3d_Logo/logo-00.png
new file mode 100644
index 0000000..ac90b55
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-00.png differ
diff --git a/content/tutorials/3d_Logo/logo-01.png b/content/tutorials/3d_Logo/logo-01.png
new file mode 100644
index 0000000..f4c67a8
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-01.png differ
diff --git a/content/tutorials/3d_Logo/logo-02.png b/content/tutorials/3d_Logo/logo-02.png
new file mode 100644
index 0000000..fb03471
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-02.png differ
diff --git a/content/tutorials/3d_Logo/logo-03.png b/content/tutorials/3d_Logo/logo-03.png
new file mode 100644
index 0000000..0fa45cb
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-03.png differ
diff --git a/content/tutorials/3d_Logo/logo-04.png b/content/tutorials/3d_Logo/logo-04.png
new file mode 100644
index 0000000..cd20559
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-04.png differ
diff --git a/content/tutorials/3d_Logo/logo-05.png b/content/tutorials/3d_Logo/logo-05.png
new file mode 100644
index 0000000..e55a5a0
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-05.png differ
diff --git a/content/tutorials/3d_Logo/logo-06.png b/content/tutorials/3d_Logo/logo-06.png
new file mode 100644
index 0000000..e44e4c2
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-06.png differ
diff --git a/content/tutorials/3d_Logo/logo-07.png b/content/tutorials/3d_Logo/logo-07.png
new file mode 100644
index 0000000..ae9e4fc
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-07.png differ
diff --git a/content/tutorials/3d_Logo/logo-08.png b/content/tutorials/3d_Logo/logo-08.png
new file mode 100644
index 0000000..472f895
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-08.png differ
diff --git a/content/tutorials/3d_Logo/logo-09.png b/content/tutorials/3d_Logo/logo-09.png
new file mode 100644
index 0000000..0477f2c
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-09.png differ
diff --git a/content/tutorials/3d_Logo/logo-10.png b/content/tutorials/3d_Logo/logo-10.png
new file mode 100644
index 0000000..0119810
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-10.png differ
diff --git a/content/tutorials/3d_Logo/logo-11.png b/content/tutorials/3d_Logo/logo-11.png
new file mode 100644
index 0000000..4f7bbaf
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-11.png differ
diff --git a/content/tutorials/3d_Logo/logo-12.png b/content/tutorials/3d_Logo/logo-12.png
new file mode 100644
index 0000000..d85aa2c
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-12.png differ
diff --git a/content/tutorials/3d_Logo/logo-13.png b/content/tutorials/3d_Logo/logo-13.png
new file mode 100644
index 0000000..0cbcf0f
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-13.png differ
diff --git a/content/tutorials/3d_Logo/logo-14.png b/content/tutorials/3d_Logo/logo-14.png
new file mode 100644
index 0000000..c5bcc06
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-14.png differ
diff --git a/content/tutorials/3d_Logo/logo-15.png b/content/tutorials/3d_Logo/logo-15.png
new file mode 100644
index 0000000..2fd20cc
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-15.png differ
diff --git a/content/tutorials/3d_Logo/logo-16.png b/content/tutorials/3d_Logo/logo-16.png
new file mode 100644
index 0000000..63da06c
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-16.png differ
diff --git a/content/tutorials/3d_Logo/logo-17.png b/content/tutorials/3d_Logo/logo-17.png
new file mode 100644
index 0000000..cd5d1e9
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-17.png differ
diff --git a/content/tutorials/3d_Logo/logo-18.png b/content/tutorials/3d_Logo/logo-18.png
new file mode 100644
index 0000000..9bd4fcb
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-18.png differ
diff --git a/content/tutorials/3d_Logo/logo-19.png b/content/tutorials/3d_Logo/logo-19.png
new file mode 100644
index 0000000..f71cc21
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-19.png differ
diff --git a/content/tutorials/3d_Logo/logo-20.png b/content/tutorials/3d_Logo/logo-20.png
new file mode 100644
index 0000000..ced897e
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-20.png differ
diff --git a/content/tutorials/3d_Logo/logo-21.png b/content/tutorials/3d_Logo/logo-21.png
new file mode 100644
index 0000000..f65dcba
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-21.png differ
diff --git a/content/tutorials/3d_Logo/logo-22.png b/content/tutorials/3d_Logo/logo-22.png
new file mode 100644
index 0000000..268828d
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-22.png differ
diff --git a/content/tutorials/3d_Logo/logo-23.png b/content/tutorials/3d_Logo/logo-23.png
new file mode 100644
index 0000000..4393abc
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-23.png differ
diff --git a/content/tutorials/3d_Logo/logo-24.png b/content/tutorials/3d_Logo/logo-24.png
new file mode 100644
index 0000000..f380965
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-24.png differ
diff --git a/content/tutorials/3d_Logo/logo-25.png b/content/tutorials/3d_Logo/logo-25.png
new file mode 100644
index 0000000..9ec9a71
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-25.png differ
diff --git a/content/tutorials/3d_Logo/logo-26.png b/content/tutorials/3d_Logo/logo-26.png
new file mode 100644
index 0000000..e3a66ae
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-26.png differ
diff --git a/content/tutorials/3d_Logo/logo-27.png b/content/tutorials/3d_Logo/logo-27.png
new file mode 100644
index 0000000..9f42205
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-27.png differ
diff --git a/content/tutorials/3d_Logo/logo-28.png b/content/tutorials/3d_Logo/logo-28.png
new file mode 100644
index 0000000..66864b6
Binary files /dev/null and b/content/tutorials/3d_Logo/logo-28.png differ
diff --git a/content/tutorials/Advanced_Animations/gap-duplicate.png
b/content/tutorials/Advanced_Animations/gap-duplicate.png
new file mode 100644
index 0000000..a9ee96d
Binary files /dev/null and b/content/tutorials/Advanced_Animations/gap-duplicate.png differ
diff --git a/content/tutorials/Advanced_Animations/gap-final.gif
b/content/tutorials/Advanced_Animations/gap-final.gif
new file mode 100644
index 0000000..847dfd9
Binary files /dev/null and b/content/tutorials/Advanced_Animations/gap-final.gif differ
diff --git a/content/tutorials/Advanced_Animations/gap-move.png
b/content/tutorials/Advanced_Animations/gap-move.png
new file mode 100644
index 0000000..1869507
Binary files /dev/null and b/content/tutorials/Advanced_Animations/gap-move.png differ
diff --git a/content/tutorials/Advanced_Animations/gap-navi.png
b/content/tutorials/Advanced_Animations/gap-navi.png
new file mode 100644
index 0000000..e4f6fbe
Binary files /dev/null and b/content/tutorials/Advanced_Animations/gap-navi.png differ
diff --git a/content/tutorials/Advanced_Animations/gap-source.png
b/content/tutorials/Advanced_Animations/gap-source.png
new file mode 100644
index 0000000..e72ef5b
Binary files /dev/null and b/content/tutorials/Advanced_Animations/gap-source.png differ
diff --git a/content/tutorials/Advanced_Animations/gap-static.png
b/content/tutorials/Advanced_Animations/gap-static.png
new file mode 100644
index 0000000..ee72fe2
Binary files /dev/null and b/content/tutorials/Advanced_Animations/gap-static.png differ
diff --git a/content/tutorials/Advanced_Animations/gap-static.xcf.bz2
b/content/tutorials/Advanced_Animations/gap-static.xcf.bz2
new file mode 100644
index 0000000..c4d6583
Binary files /dev/null and b/content/tutorials/Advanced_Animations/gap-static.xcf.bz2 differ
diff --git a/content/tutorials/Advanced_Animations/index.md b/content/tutorials/Advanced_Animations/index.md
new file mode 100644
index 0000000..b7082c1
--- /dev/null
+++ b/content/tutorials/Advanced_Animations/index.md
@@ -0,0 +1,79 @@
+Title: Advanced Animations Tutorial
+Date: 2015-08-17T16:49:18-05:00
+Modified: 2015-08-17T16:49:23-05:00
+Author: Jakub Steiner
+
+<small>
+Text and images Copyright (C) 2002 [Jakub Steiner](mailto:jimmacNOSPAM ximian com) and may not be used
without permission of the author.
+</small>
+
+## Intention
+
+Welcome to the advanced GIMP animation tutorial. Here you'll learn how to use the GAP, GIMP animation
package. It is very advanced, but the user interface might be confusing for some at first. That's why we'll
start with a little theory before we move over to the practical part.
+
+The key function of the GAP is the **move path** dialog. Please go to the "[Using
GAP](/tutorials/Using_GAP/)" tutorial to learn more about the tool.
+
+## Step 1
+
+<figure>
+<a href="gap-static.xcf.bz2"><img src="gap-static.png" alt="Floating Logo" /></a>
+</figure>
+
+To make things easier, we'll start with a ready-to-go static image. To load it into GIMP, just drag the
image above to the GIMP toolbox. In case this doesn't work for you, copy the link by selecting **Copy
Target** or **Copy Link Location** from the image context menu accessible by right-clicking on the image. In
GIMP, choose **Open Location** from the toolbox **File** menu and paste the URL there. Gimp will download the
compressed image and open it for you.
+
+## Step 2
+
+<figure>
+<img src="gap-duplicate.png" alt="GAP Animation Tutorial" />
+</figure>
+
+Now drag the background layer from the static image to the GIMP toolbar. This will create a new white image
we'll use as a base for our animation. To be able to work with GAP you need to save it in GIMP's native
format, **.xcf**. Create a separate directory for the file, it will fill with many frame files soon. The file
needs to be named like this:
+
+**name-0001.xcf**
+
+You can only change the **name** part. The rest needs to be exactly the way shown. GAP works on series of
.xcf images, so that you can work with layers the same way as you do in static images. You don't have to copy
the file yourself to add a frame. GAP has series of functions to help you manage frames. We'll create a 20
frame animation, so the first thing will be to copy the first frame 19 times using the **video/duplicate
frames** function.
+
+## Step 3
+
+<figure>
+<img src="gap-source.png" alt="GAP Animation Tutorial" />
+</figure>
+
+<figure>
+<img src="gap-move.png" alt="GAP Animation Tutorial" />
+</figure>
+
+Now it's time to use the **move path** function. Make sure you have the static image open but use the
function on the white background image. In the dialog, select the logo image as source and make sure you set
the stepmode to **none**! Keep the mode as **normal** and choose some handle mode. I have used **center**, so
use that if you're going to stick with the parameters provided here.
+
+For the logo we'll animate two parameters. First, we'll zoom out the logo so it appears to fly away from the
observer and combine that with opacity increase. For the first animation point use the following parameters:
**x:157, y:74, width:800, height:800, opacity:20**. Keep the rest default. Now add a new animation point by
clicking on the **add point** button. Notice how the status above the button changed to **current key: [ 2 of
2 ]**. Now change the **width, height** and **opacity** back to 100%. You can check the result on any
animation point by navigating to it (using next and previous or other buttons) and clicking on the **update
preview** button. You can also preview the whole animation using the **Anim preview** button. This will
create a new layered image, so don't be impatient, it takes a while.
+
+Adding points to your animation creates linear time segments between those. If you want to create non-linear
animation, just set a specific frame to the active point using the **keyframe** slider. We won't need it for
the logo animation, so let's just press ok for now.
+
+## Step 4
+
+<figure>
+<img src="gap-navi.png" alt="GAP Animation Tutorial" />
+</figure>
+
+<figure>
+<img src="gap-final.gif" alt="GAP Animation Tutorial" />
+</figure>
+
+Now we have a rendered sequence of images. You can navigate them easily using the **video/VCR navigator**.
Pressing play on the navigator will call two functions, **frames to image** and **animation playback**, so
it's fast and convenient to use it to check the looks of your animation.
+
+You can also specify the default delay between frames by setting the **framerate** in FPS (frames per
second). The higher the value, the smoother the animation will be, but more frames will be needed. You can
also render only segments of the whole animation by selecting particular frame thumbnails in the navigator
before pressing the play button. Use <kbd>shift</kbd>, <kbd>ctrl</kbd> or drag your mouse to select multiple
frames. If you press <kbd>Shift</kbd> while pressing the play button, the resulting animation-image will be
optimised (as discussed in the simple animation tutorial).
+
+As you can see on the image above, I have added some more movement effects for every source layer of the
static image using only the **move path** dialog. You can now try to recreate the animation yourself, you
know tool to be able to.
+
+## Step 5
+
+All we need to do now is to save the animation. You can choose to go for the GIF format as I did with the
image above, but the filesize is too huge to be widely accepted on the web anyway, so you can consider using
a regular animation format like **avi** (needs special version of the xanim player from
[Loki](http://www.lokigames.com)) or **mpeg1 / 2**.
+
+To save the animation as gif, first apply the **video/frames to image** function. This will create a single
multi-layered image with the specified delay. Now apply the **animation optimize** filter (not that useful in
this case) and finaly index the image to 16 color without using any color dithering. The file will still be
about 170kB, so it's huge. You can consider trying some specialised optimisation software like GIFsicle.
Maybe [MNG](http://www.libmng.com/) with its sprite based animation will make it more suitable for the web.
Rendering will happen on the browser side and I'm very excited about the idea.
+
+Last thing I can't help myslef not to mention is to thank Wolfgang Hofer for making such a great plugin that
takes GIMP functionality to a new level. With GIMP 2 rendering engine we'll probably see more "applications"
like that using GIMP's features to provide us with another area of application. I'd also like to thank the
GIMP developer community to work hard every day to give us the best web gfx tool there is. If you just
started to experience GIMP, don't hesitate and drop by up at **#gimp** on **irc.gimp.org:6669**.
+
+
+<small>
+Text and images Copyright (C) 2002 [Jakub Steiner](mailto:jimmacNOSPAM ximian com) and may not be used
without permission of the author.
+</small>
diff --git a/content/tutorials/Anti-Aliased_Threshold/curves.jpg
b/content/tutorials/Anti-Aliased_Threshold/curves.jpg
new file mode 100644
index 0000000..0e513ce
Binary files /dev/null and b/content/tutorials/Anti-Aliased_Threshold/curves.jpg differ
diff --git a/content/tutorials/Anti-Aliased_Threshold/curves.png
b/content/tutorials/Anti-Aliased_Threshold/curves.png
new file mode 100644
index 0000000..5190b9b
Binary files /dev/null and b/content/tutorials/Anti-Aliased_Threshold/curves.png differ
diff --git a/content/tutorials/Anti-Aliased_Threshold/effect.jpg
b/content/tutorials/Anti-Aliased_Threshold/effect.jpg
new file mode 100644
index 0000000..2fb7d76
Binary files /dev/null and b/content/tutorials/Anti-Aliased_Threshold/effect.jpg differ
diff --git a/content/tutorials/Anti-Aliased_Threshold/finished.jpg
b/content/tutorials/Anti-Aliased_Threshold/finished.jpg
new file mode 100644
index 0000000..bfe60a9
Binary files /dev/null and b/content/tutorials/Anti-Aliased_Threshold/finished.jpg differ
diff --git a/content/tutorials/Anti-Aliased_Threshold/index.md
b/content/tutorials/Anti-Aliased_Threshold/index.md
new file mode 100644
index 0000000..f68dc3c
--- /dev/null
+++ b/content/tutorials/Anti-Aliased_Threshold/index.md
@@ -0,0 +1,46 @@
+Title: Anti-Aliased Threshold Tutorial
+Date: 2015-08-17T16:49:18-05:00
+Modified: 2015-08-17T16:49:23-05:00
+Author: Ville Pätsi
+
+
+<small>
+Text and images Copyright (C) 2002 [Ville Pätsi](mailto:drcNOSPAM gimp org) and may not be used without
permission of the author.
+</small>
+
+## Intention
+
+The threshold plug-in works by dividing the image into two parts, dark and light, producing a 2 color image.
This is often not the desired result, for some images anti-aliasing is needed, but the threshold plug-in
cannot provide that. With a little utilization of the curves plug-in, we get nice results.
+
+## Problems with the threshold
+
+<figure>
+<img src="original.jpg" alt="Antialiased Threshold Tutorial" />
+<img src="threshold.jpg" alt="Antialiased Threshold Tutorial" />
+</figure>
+
+
+On the left you we see the original image that is about to be thresholded, and on the right side we see the
result. The default settings for the Threshold plug-in were used (<span class="filter"><Image> Layers ->
Colors -> Threshold</span>). The resulting image is very blocky and aliased.
+
+## The Curves Trick
+
+<figure>
+<img src="curves.png" alt="Antialiased Threshold Tutorial" />
+<img src="finished.jpg" alt="Antialiased Threshold Tutorial" />
+</figure>
+
+First duplicate the image layer by going to the layers dialog, making sure the image layer is selected, and
clicking the duplicate button (fourth from the left). We can use the original layer for some color tricks
later. Now the next thing is to desaturate the image (<span class="filter"><Image> Layers -> Colors ->
Desaturate</span>). This way the colors will not interfere with the fake thresholding. When the layer is
grayscale, select the curves editor (<span class="filter"><Image> Layers -> Colors -> Curves</span>). Now we
can play with the Value "channel". The image on the left displays the settings used for the example image.
The space between the two dots determines how much aa the resulting image will have. The wider the gap, the
more grayscale values it will have, and vice versa. The resulting image can be seen on the right.
+
+## A neat addition
+
+<figure>
+<img src="effect.jpg" alt="Antialiased Threshold Tutorial" />
+</figure>
+
+If you now take the original image layer, move it over the new one (make sure it has an alpha channel), and
change its mode to "Color" in the layers dialog, you get nice results displayed above.
+
+The original tutorial can be found [here](http://drc.gimp.org/).
+
+<small>
+Text and images Copyright (C) 2002 [Ville Pätsi](mailto:drcNOSPAM gimp org) and may not be used without
permission of the author.
+</small>
diff --git a/content/tutorials/Anti-Aliased_Threshold/original.jpg
b/content/tutorials/Anti-Aliased_Threshold/original.jpg
new file mode 100644
index 0000000..95239c0
Binary files /dev/null and b/content/tutorials/Anti-Aliased_Threshold/original.jpg differ
diff --git a/content/tutorials/Anti-Aliased_Threshold/threshold.jpg
b/content/tutorials/Anti-Aliased_Threshold/threshold.jpg
new file mode 100644
index 0000000..2e7d322
Binary files /dev/null and b/content/tutorials/Anti-Aliased_Threshold/threshold.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/AlignmentStep.jpg
b/content/tutorials/Automate_Editing_in_GIMP/AlignmentStep.jpg
new file mode 100644
index 0000000..c641411
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/AlignmentStep.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/Appendix-testing-in-python-console.JPG
b/content/tutorials/Automate_Editing_in_GIMP/Appendix-testing-in-python-console.JPG
new file mode 100644
index 0000000..f45055b
Binary files /dev/null and
b/content/tutorials/Automate_Editing_in_GIMP/Appendix-testing-in-python-console.JPG differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/AutomateEditingInGimp.odt
b/content/tutorials/Automate_Editing_in_GIMP/AutomateEditingInGimp.odt
new file mode 100644
index 0000000..f721887
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/AutomateEditingInGimp.odt differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/AutomateEditingInGimp.pdf
b/content/tutorials/Automate_Editing_in_GIMP/AutomateEditingInGimp.pdf
new file mode 100644
index 0000000..543e725
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/AutomateEditingInGimp.pdf differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/AutomationMenuDirectory.jpg
b/content/tutorials/Automate_Editing_in_GIMP/AutomationMenuDirectory.jpg
new file mode 100644
index 0000000..6af7dd8
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/AutomationMenuDirectory.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/CommanderMacroSubMenu.jpg
b/content/tutorials/Automate_Editing_in_GIMP/CommanderMacroSubMenu.jpg
new file mode 100644
index 0000000..ccc2a0c
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/CommanderMacroSubMenu.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/CommandsPythonConsole.jpg
b/content/tutorials/Automate_Editing_in_GIMP/CommandsPythonConsole.jpg
new file mode 100644
index 0000000..6116416
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/CommandsPythonConsole.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/ImportFlowAssignment.jpg
b/content/tutorials/Automate_Editing_in_GIMP/ImportFlowAssignment.jpg
new file mode 100644
index 0000000..5657f70
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/ImportFlowAssignment.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/ParasitesImage.jpg
b/content/tutorials/Automate_Editing_in_GIMP/ParasitesImage.jpg
new file mode 100644
index 0000000..715aa90
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/ParasitesImage.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/PseudoCodeImported.jpg
b/content/tutorials/Automate_Editing_in_GIMP/PseudoCodeImported.jpg
new file mode 100644
index 0000000..a4e2b3d
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/PseudoCodeImported.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/PseudoCodetoXmlFunction.jpg
b/content/tutorials/Automate_Editing_in_GIMP/PseudoCodetoXmlFunction.jpg
new file mode 100644
index 0000000..cf24461
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/PseudoCodetoXmlFunction.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/RunningAutoUpdate.jpg
b/content/tutorials/Automate_Editing_in_GIMP/RunningAutoUpdate.jpg
new file mode 100644
index 0000000..038f43e
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/RunningAutoUpdate.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/XmlHierarchyContainers.jpg
b/content/tutorials/Automate_Editing_in_GIMP/XmlHierarchyContainers.jpg
new file mode 100644
index 0000000..c208bc5
Binary files /dev/null and b/content/tutorials/Automate_Editing_in_GIMP/XmlHierarchyContainers.jpg differ
diff --git a/content/tutorials/Automate_Editing_in_GIMP/index.md
b/content/tutorials/Automate_Editing_in_GIMP/index.md
new file mode 100644
index 0000000..d9daacd
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/index.md
@@ -0,0 +1,685 @@
+Title: Automate Editing
+Date: 2015-08-17T17:09:25-05:00
+Modified: 2015-08-17T17:09:31-05:00
+Author: Stephen Kiel
+
+
+[![Creative Commons
License](http://i.creativecommons.org/l/by-sa/3.0/80x15.png)](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US)
+<span xmlns:dct="http://purl.org/dc/terms/">GIMP Tutorial - Luminosity Masks (text)</span> by <a
rel="cc:attributionURL" xmlns:cc="http://creativecommons.org/ns#">Stephen Kiel</a> is licensed under a
[Creative Commons Attribution-ShareAlike 3.0 Unported
License](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US). The code sources in this tutorial are
licensed by Stephen Kiel under the conditions of the [GNU Public License GPL
V3](https://www.gnu.org/copyleft/gpl.html).
+
+## Table of Contents
+
+<style>
+.toc > ul {
+ list-style-type: decimal;
+}
+.toc > ul > li {
+ margin-top: 0;
+}
+.toc li ul {
+ margin-bottom: 1rem;
+}
+.toc > ul > li > ul {
+list-style-type: upper-alpha;
+}
+.toc > ul > li > ul > li > ul {
+list-style-type: lower-roman;
+}
+</style>
+<!-- Yes, it's a hot mess. -->
+
+[TOC]
+
+## Motivation
+
+This tutorial will describe and provide examples for two types of automation functions. The first function
is a tool to capture and execute “Macro” commands. The second function is a set of Automation Tools to
capture and run a “Flow” or “Process”. The code for this tutorial is written using Gimp-Python and should be
platform portable – able to run on either Linux or Windows operating systems. <sup>\*</sup>
+
+The goal of these functions is to provide tools that speed up the editing process, make the editing process
more repeatable, and reduce the amount of button pushing the user has to do. Taking over the button pushing
and book-keeping chores allows the user to focus on the more creative part of the editing process.
+
+These automation tools are examples so please modify them to suit your needs. The goal of the tutorial is to
provide and explain a working example. If the coding style seems a bit rough, I apologize, I am not a
programmer.
+
+The main body of this tutorial will be discussing the ideas behind automating the editing process. Hopefully
we can keep the focus on the concept without getting lost in the details of the included example. The details
of how to setup and run the example code and what the automation example is supposed to accomplish will be
covered in appendices to the tutorial. We are not going to cover python programing as it is already well
documented.
+
+This tutorial will use some of the concepts covered in an earlier tutorial “[Automated Jpg to
Xcf](../AutomatedJpgToXcf/)”. It would probably be helpful to read through the earlier tutorial for
introductory example.
+
+<sup>\*</sup> Hopefully it is easy to adapt it to Apple OS as well.
+
+## An introduction to Macros
+
+Before we dive into a description of the code, let's take a brief walk through the process of capturing and
running a “Macro”.
+
+Suppose we wanted to set up the grid spacing so that it is centered on the image, is a square grid, is
scaled so there are 24 grid blocks in the 'long' dimension, and is an on-off dash pattern. We could enter the
following code fragment in the Gimp “Python Console” (under the “Filters” pull down menu) to set the grid up.
+
+*Example - GIMP-Python Code Fragment*
+
+ :::python
+ >>> theImage = gimp.image_list()[0]
+ >>> centerX = theImage.width/2
+ >>> centerY = theImage.height/2
+ >>> gridSpacing = max(theImage.width, theImage.height)/24
+ >>> pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)
+ >>> pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)
+ >>> pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)
+
+
+<div class="caption">![CommandsPythonConsole.jpg](CommandsPythonConsole.jpg)
+<span>Commands in the Python Console</span></div>
+
+If you watch the image as you enter the commands and have the Grid turned “ON” you will see the grid spacing
on the active image change as we execute these commands.
+
+The tool we are writing in this tutorial will allow us to copy this code fragment into a text file, add a
name and optional comments, and access it through a menu widget so we can rerun this code fragment on other
images. The tool will access the “macro” code fragment using the name we assigned through a pull down menu.
+
+The ability to save the macro code fragments allows us to build up a library of editing shortcuts that will
not only save time, but do the job better than you could be simply pushing the buttons. In this case we made
the grid spacing based on a percentage of the image size rather than a fixed size in either inches, pixels,
or cm.
+
+## Macro Implementation – in Broad Strokes
+
+Let's touch upon the main ideas that we are going to use to implement the macro recording and execution
scheme that we can use to capture and run a set of commands.
+
+1. The command set will be read and parsed into a data structure. Each command set block will have a name
and consist of commands and comments.
+2. The data structure will be read for a list of macro names. This list will be used to populate a GUI
widget so we can select a macro by name.
+3. From the named Macro, the data structure will return a list of commands.
+4. The list of commands will be run in an 'exec' loop:
+
+<div class="caption"><span style="font-style: italic">Example - “Exec” Loop</span>
+
+<pre class="code" style="text-align: left;"> for Cmd in commandList:
+ exec(Cmd)</pre>
+
+</div>
+
+<div class="caption">![CommanderMacroSubMenu.jpg](CommanderMacroSubMenu.jpg)
+<span>Commander Macro Sub-Menu</span></div>
+
+### Architecture
+
+When you want to write a script to provide a single function, the common and obvious approach is to write a
single in-line program, register the program, and provide a user interface if it is called for. Our
Automation Example is multi-functional – more like a system, and we want to leave some of the functionality
somewhat fluid. If we consider the system (data and code) and make good architectural choices we can
accomplish our goal without making the code overly complex.
+
+### Execution Model
+
+We will be breaking the execution of our automation functions into three different categories:
+
+1. User Interface Functions
+2. Base Class and Functions
+3. Pseudo Code
+
+Let's examine these categories briefly:
+
+The <u>**User Interface Functions**</u> are the top level function that are activated from the menus. They
are the 'main' function, the Registration Block, and the function that is registered in the Registration
Block. We will be deliberately keeping the User Interface Function code sparse. While the UI Functions afford
lot of functionality, they are rather fragile and difficult to debug. The approach we will use is to get the
UI running and call a function that can be written and debugged independently minimizing the edits to the
User Interface.
+
+The <u>**Base Class and Functions**</u> are just normal python classes and functions that can be run from a
shell. These functions do not depend upon the gimpfu library could be run in any python shell (including the
Gimp-Python Shell).
+
+* If you make a syntax error in the course of an edit, you want to be able to quickly isolate it to a
particular line in a particular function. This is easier to do from the shell than when running the program
from a GUI.
+* Keeping the generic python code separate from the code that depends upon the gimpfu library minimizes
the impact that future releases of gimp will have on the scripts. Because the gimp procedure calls are
handled by Pseudo Code rather than the Base Class and Functions we have less risk of compatibility from
future releases of Gimp within the Base Class and Function.
+
+The **<u>Pseudo Code</u>** is the portion of the overall system functionality that we want to deliberately
leave fluid. The functionality of the Pseudo Code is intended to be simple editing steps (which should cover
a pretty wide range of edits).
+
+* The types of things that you might do in Pseudo Code could include: copy layers, name layers, run
filters, set layer modes, set layer opacity, merge layers, and run PDB functions. The pseudo code can access
basic image characteristics and perform operations with them.
+* Pseudo Code is simple Gimp-Python code fragments. Because there is no support for indenting, a simple
test for how complex your Pseudo Code can become is whether you need to indent or not (note that you can
write a simple 'if' statement on one line). In spite of this restriction we will show with some examples that
you can accomplish quite a bit of editing with macros.
+
+A final thing that we need to talk about that is not a 'category' of execution but is something that is an
important part of our Execution Model is **<u>Scope</u>**. We are only going to touch on a couple of points
that affect when lists are defined for dynamic User Interface selection.
+
+* The Gimp User interface widgets allow you to select items from a list.
+* You can specify the list within the widget, or pass the widget a list by name **<u>IF</u>** you define
the list outside of the function being called. The list must be defined at the level of the function main().
+* By keeping the scope of the User Interface lists at the top level, we are able to use the list name in
**<u>both the user interface and in the function being called</u>**. In this way we can use the actual
argument being selected rather than its index position in a list.
+* An architectural advantage is we create this list with a function that reads a configuration file. We
only have to define and maintain this configuration list in one place within our system and use the resulting
list in as many places as we want by calling a reading function. This is how we will get new macros to show
up in the menus when we add them.
+* The following skeletal code fragments illustrate defining a list 'cmdList' at the top level – 'main',
and using it within the registration block and function. Because it is defined at the ‘main’ level, we can
reference it within the function and registration block. We can recover the argument from the index (passed
by the widget) because we are using the same list in both places:
+
+<div class="caption"><span style="font-style: italic">Example - Lists and Scope in Functions</span>
+
+<pre class="code" style="text-align: left;">cmdList = cmdrReadObj.CommanderMacros()
+#
+def autoCommander(theImage, cmdListIndex):
+ ...
+ commanderName = cmdList[cmdListIndex]
+ ...
+#
+register (
+ "autoCommander", # Name registered in Procedure Browser
+ ...
+ [
+ ...
+ ( PF_OPTION, "cmdSet", "Select a command", 0, cmdList ),
+ ],
+main()</pre>
+
+</div>
+
+### Data Model
+
+We now need to talk about the form and organization of the data that we intend to use. The way that we
choose to organize our data can have a dramatic impact on the complexity of the functions that we need to
write. In our case we can take advantage of a couple of somewhat more sophisticated data models to make the
actual functions fairly straightforward. We will be using “trees” (Python ElementTree) and XML data.
+
+### Trees and XML Data
+
+Python has several built in data structures such as dictionaries, lists to name a couple. A very powerful
library structure that is well suited to our particular needs is a “tree”. A couple of the key features that
make them well suited for our application are:
+
+1. Trees have a natural 'hierarchical' feel to them, kind of like a directory structure or the 'folders' of
an operating system. The levels of hierarchy can be thought of as ‘containing’ the contents in the lower
level.
+2. A branch can hold an indefinite number of elements, and those elements can be either a leaf with
attributes or a sub-branch to another level. This lends a lot of flexibility with the way we structure of the
data.
+3. The input / output format is XML, which is not only hierarchical, but it is text so it is human readable
and portable to any platform (computer / OS).
+
+<div class="caption">![XmlHierarchyContainers.jpg](XmlHierarchyContainers.jpg)
+<span>XML Hierarchy - Containers</span></div>
+
+The examples use ElementTree to read and write the data between trees and XML. ElementTree is included with
Python and described in the Python documentation, so we will not go into detail about the mechanics of tree
structures here.
+
+You might be wondering at this point where these XML file will be located. The functions that read and write
the XML files are expecting to find the XML under a directory named ‘myXml’ which you will have to create
under you user gimp directory. If you are using Linux and your home directory is ‘stephen’ the path would
look something like:
+
+<pre class="code">/home/stephen/.gimp-2.8/myXml</pre>
+
+If you are using Windows the path would look something like:
+
+<pre class="code">C:\Users\stephen\.gimp-2.8\myXml</pre>
+
+We will be dealing with a couple of types of pseudo code and xml files, and those will be keep in separate
directories under myXml, but we will get to that in a bit.
+
+## Macro Implementation – Revisited
+
+Now that we have talked about the execution model and data model, we can revisit the “Implementation – In
Broad Strokes” and tie the steps to the code that is handling them.
+
+### Pseudo Code to XML
+
+Our first item was to **<u>read the pseudo code and parse it into a data structure</u>**. That data
structure is going to be a Tree.
+
+We can begin writing a pseudo code file by copying and pasting a set of commands from the gimp python
console into a text file whose name ends in “.def”. The “>>>” preceding each command will be the “keyword” to
indicate a command.
+
+The pseudo code will be in a file, in this example it is named NormalGridCanvas.def. Each line begins with a
keyword. Keyword choices are: “commander>”, “macro>”, “comment>”, or “>>>”.
+
+The class XmlGenerator() in autoBase.py contains a function GenCommanderXml() which reads all of the *.def
files in ~/.gimp-2.8/myXml/commander, inserts the lines into a tree (after removing the keyword), and then
writes the tree out to a file named combinedCommander.xml.
+
+The keyword will determine both the “tag” associated with the line of pseudo code, and whether it is a
“branch” element (macro name) or a “leaf” element (command or comment). We are assigning both a definition
and a level in the hierarchy for each line of pseudo code text as we read it into the tree.
+
+<div class="caption"><span style="font-style: italic">Example - Pseudo Code Example -
NormalGridCanvas.def</span>
+
+<pre class="code" style="text-align: left; margin-right: 1em;">commander>Normal Grid and Canvas
+ macro>
+ comment>Shrink the Canvas back to fit the layer
+ >>>theImage.resize_to_layers()
+ comment>Set grid to origin and size = image
+ >>>pdb.gimp_image_grid_set_offset(theImage, 0, 0)
+ >>>pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)</pre>
+
+</div>
+
+After all of the *.def files are read into the tree and written back out in the form of an XML file, the
formatting is done. Writing out a tree automatically generates all of the containing enclosures, essentially
making properly formatting the XML a trivial task. The fragment from combinedCommander.xml illustrates the
XML from the pseudo code in NormalGridCanvas.def.
+
+<div class="caption"><span style="font-style: italic">Example - combinedCommander.xml (fragment)</span>
+
+<pre class="code" style="text-align: left; margin-right: 1em;"><combined>
+ Definition
+ ...
+ <commander>
+ Normal Grid and Canvas
+ <comment>
+ Shrink the Canvas back to fit the layer
+ </comment>
+ <command>
+ theImage.resize_to_layers()
+ </command>
+ <comment>
+ Set grid to origin and size = image
+ </comment>
+ <command>
+ pdb.gimp_image_grid_set_offset(theImage, 0, 0)
+ </command>
+ <command>
+ pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)
+ </command>
+ </commander>
+ ...
+</combined>
+ </pre>
+
+<span style="font-style: italic;">* The XML above was run through an online XML pretty printer for
readability. The XML from ElementTree is functional, but hard to read.</span></div>
+
+<div class="caption">![PseudoCodetoXmlFunction.jpg](PseudoCodetoXmlFunction.jpg)
+<span>Creating XML from *.def files</span></div>
+
+The Xml generator can be called from a GUI menu.
+
+<div class="caption">![PseudoCodeImported.jpg](PseudoCodeImported.jpg)
+<span>Xml files built</span></div>
+
+### Displaying the Macro Names in a Menu
+
+In our discussion of Scope in the Section “Execution Model”, we showed an example code fragment where we
created a list “cmdList”. The code was from the example autoCommander.py and uses a class BaseXmlReader and
the function CommanderMacros() which resides in autoBase.py.
+
+* The list of Macro Command Names is created by loading the XML file combinedCommander.xml into an
ElementTree.
+* The tree is traversed at the branch level (the tag <commander>), and the branches text which are the
names of the macros are built into a list. The list is essentially built with a “for loop”.
+* The list is passed to the widget and used to select the macro you want to use.
+
+### Running a Specific Macro
+
+The final point to expand upon is how we fetch and run the specific set of commands for a selected Macro.
+
+* We can derive the name of the Macro by way of the menu selection (registration block of
autoCommander.py).
+* We will again use the BaseXmlReader class, but this time we will utilize the CommanderExtract function
passing the Macro name as an argument. The CommanderExtract function traverses the tree branch by branch as
before when we were gathering the names of the Macros, except it is comparing the names against the passed
argument as we go. When the CommanderExtract function finds a branch matching the argument, it drops down a
level to read the leaf elements under that branch.
+* The leaf arguments whose tags are set to “command” are appended to the list that will be returned for
processing. The leafs whose tags are “comment” will be ignored.
+* The newly created returned list will be run through in a “for loop” which will process each line as a
separate command using the python “exec” function.
+
+The variable 'theImage' is defined with the autoCommander function and can be used as a handle to access
information about the active image by the Macro commands.
+
+### Commander Macros – Summary
+
+The discussion above has described how we can generate a macro by running a set of commands in the Python
Console, paste those commands into a text file adding a name and comments, and then making it available for
use.
+
+The code for transforming the pseudo code into a macro is in autoWriteXml.py. The code to display the menu
of Macros you have written and execute them is in autoCommander.py. The Classes referenced by these two
scripts are in autoBase.py.
+
+The text files that you write for your macro definition need to be put in a directory
~/.gimp-2.x/myXml/commander and have an extension of '.def'. Create a separate *.def file for each macro.
+
+## An Introduction to Automated Editing
+
+Macros are a terrific way to make the editing process faster and more repeatable, they do though have some
limitations.
+
+1. There are times when the order of the editing steps are important.
+2. They have to be applied one at a time.
+3. You have to keep track of what has already been done and what yet still remains.
+
+A Workflow, or a Process, or a Recipe, what ever you may be used to calling it (I prefer Workflow) can be
viewed as a set of ordered steps. These steps would usually correspond to the actions that you would
typically code up in a set of Macros. We will automate a Workflow that runs the right steps at the right time
and records the editing progress on each of the images.
+
+Let's quickly go over how how capturing and running a “Workflow” is going to work before we dive in. We
capture the code fragments that describe the editing process in the same way that we did for the macros. We
can either copy and paste from the python console to generate a series of commands, or we could copy them
from a working macro.
+
+The steps in a workflow aren't in fact very different than the Commander Macros that we described in the
earlier part of this tutorial, the only real difference is they are an ordered set to be followed.
+
+The way that we are going to use the automation tools is a bit different than using macros. When we want to
use a macro we are running it on the image that is open in editor window. The automation tools on the other
hand run on a directory of images, so we run it without an image being open in the editor window.
+
+We mark the images that are ready to move to the next step of the workflow and then run the automation
tools. The automated update looks at each image in the work directory, if it is marked for update, it gets
updated to the next step, if it is not marked for update it is left alone.
+
+The automated update will move the marked images to the next step of their assigned workflow essentially
keeping track of the 'book-keeping' for us. A time management benefit is if there are several images
requiring a filter that takes a bit of time to run, you can go do something else while they are running.
+
+## Automation Tool Implementation – In Broad Strokes
+
+Let’s touch upon the main ideas that we are going to use to implement the automated workflow recording and
execution tasks that we are talking about above.
+
+1. The pseudo code will be read and parsed into a data structure. Each pseudo code block (or step) will
have a name and consist of commands and comments. Each workflow will have a name and will contain an ordered
set of steps or pseudo code blocks.
+2. The automation flow will generate a list of images in a given directory. It will then step through that
list checking whether an image is marked for update or not.
+3. If an image is marked for update, the automation flow will determine the name of the workflow and the
name next step to perform on the image. The name of the 'workflow' and the 'next step' will be used to select
a list of commands.
+4. The list of commands will be run in an 'exec' loop:
+5. The 'current step' and 'next step' for the image will be incremented and then saved with the image.
+
+### Architecture
+
+We commented in the section on macros that good architectural choices can accomplish our goal without making
the code overly complex. This argument is as compelling for automated updating of our images. The
Architecture and Code for our automated updating tools will be very similar to the ones used for capturing
and running the “Commander” macros.
+
+### Execution Model
+
+As in our discussion of the Macros, we will be breaking the execution of our Automation Functions into three
different categories:
+
+1. User Interface Functions
+2. Base Class and Functions
+3. Pseudo Code
+
+We won't rehash these topics but instead comment on the difference, which is the structure of the pseudo
code. The organization of workflows as a set of steps where each step is a set of commands prompts us to
organize the pseudo code in a similar manner, where we think of steps containing a sequence of commands, and
workflows containing a sequence of steps. In order to reflect this additional level of hierarchy or
containment, we will use an additional keyword in the workflow pseudo code.
+
+### Data Model
+
+There are two special types of data for the automated flow:
+
+1. Trees and XML data are similar to the “Commander Macros”.
+2. Parasite (or Property) data to keep track of the particular workflow that is being used to edit an
image, the next step that is to be used, and whether an image is ready to be incremented to the next step.
+
+### The Image and Parasites (or Property) Data
+
+The Image type that we will be using for all of our work is the native Gimp *.xcf format. This image format
saves all of the layers and modes that we might set while editing and also saves a type of data called
Parasites, which are similar to Properties on many other systems.
+
+Parasites are like variable can be referenced by name in order to access their value. Like variables they
can be assigned and read. Unlike variables, parasites are persistent, very persistent. A parasite, when
assigned to an image, becomes part of the image and is saved with the image file. A parasite that is assigned
and saved with an image can be read after gimp is closed and reopened, it is just like any other file data in
that respect.
+
+Parasites are also very portable, you can read and write parasites using either the scheme based or python
based scripts. They are also independent of the operating system, so you can write a parasite to an image on
your Linux Desktop machine, and read it a week later on your windows based laptop assuming that you saved the
images in the native gimp *.xcf file format. Parasites can also be written to specific layers, but for our
present needs, the image parasites are all we are using.
+
+Because the parasite is associated with the image, and it is persistent until it is overwritten or removed,
it is an ideal tool for keeping track of the state of the image's progress in the editing process. Beyond
being able to just take notes, the values of the parasites can be used like a property to make decisions and
influence the execution of the script that has read the parasite data.
+
+If for example we opened an image that had two parasites (properties), named 'UpdateFlag' and 'Flow', we
could use the values from those parasites to make decisions:
+
+<div class="caption"><span style="font-style: italic">Example – Decisions based on Parasite / Property
Values</span>
+
+<pre class="code" style="text-align: left;">UpdateFlag = str(theImage.parasite_find('UpdateFlag'))
+Flow = str(theImage.parasite_find('Flow'))
+if (UpdateFlag == 'YES'):
+ if (Flow == 'Standard'):
+ { run commands for Standard flow }
+ elif (Flow == 'SemiAuto'):
+ { run commands for SemiAuto Flow }
+elif (UpdateFlag == 'NO'):
+ { do nothing }</pre>
+
+</div>
+
+Reading and writing parasites to an image does have one idiosyncrasy worth comment on which is the format of
the data being written. You must express the parasite as an ordered set of 'Name', 'Index', and 'Value'. Name
and Value are both strings, and the Index is a small integer, (stay between 1 and 254). If you have not used
parasites before you might be wondering how you determine a 'correct' value for the index. You may:
+
+1. Throw a dart at a dartboard and use the result (assuming you hit the board).
+2. Or, feel free to use my personal favorite '5'.
+
+As long as you pick a number and preferably stick with it, everything will be fine. When you read the
parasite value, the functions in the Scheme scripting interface will give you the 'Name', 'Index', and
'Value'; the functions in the Python scripting interface will only return the 'Name' and 'Value'.
+
+Writing the parasite is called 'attaching' and reading the value back is called either 'get' or 'find'
depending on the method you choose to use. You can read and write parasites from within scripts or from
either of the python or scheme consoles.
+
+### Running the Automation Tools on a Workflow
+
+Our final topic about an Automated Workflow in our “Broad Strokes” is how to setup and run the Workflow on a
set of images. We are running on a set of images rather than just one so we open up gimp without an image in
the editor window. The tools will open up, work on, save, and close the images one by one.
+
+In an earlier tutorial “[Automated Jpg to Xcf](../AutomatedJpgToXcf/)” we outlined how to import a directory
containing jpeg images into a directory with gimp xcf images. The automation tool implementation modifies the
import function to add the assignments of parasites to the images. The images are assigned to a particular
flow as they are imported, and the initial set of flow control properties are written and saved as part of
the import process. The jpeg-to-xcf function also runs the Automation Process (Auto Update Image) one time to
put all of the images on the first step of the assigned flow, so they are ready for their first manual
adjustment right after they are imported.
+
+After opening and (optionally) adjusting an image you mark the image as ready for the next step by setting
the “UpdateFlag” parasite to a value of “YES”. This is accomplished with a function that is available from
the menu: “Automation → A2 Mark for AutoUpdate (File)”. (Note: Since you will be doing this a lot, it is very
convenient to use a keyboard shortcut to run this function).
+
+Images are moved to the next step in their flow by running the “Auto Update Images (Directory)” function
from the menu. This will increment all of the images whose UpdateFlags are set to YES to the next step in
their flow. Note that since each image has a record of its own next step and flow, there is no requirement
for the images in a directory to be on the same step or even using the same workflow.
+
+The mechanics for creating XML from pseudo code for the workflows, properties, and commander macros is to
run the function Pseudocode to XML from the menu (Automation → Utilities → Pseudocode to XML).
+
+The export XCF to JPG function in the “Automation” menu opens each xcf file in the source / work directory
and looks at the properties of the image. If the image is “Finished”, at the end of the flow, it is exported.
The images that are still being work on are left alone.
+
+<div class="caption">![RunningAutoUpdate.jpg](RunningAutoUpdate.jpg)
+<span>Running AutoUpdate</span></div>
+
+## Automation Tool Implementation – Details
+
+### Pseudo Code
+
+#### Workflow Pseudo Code
+
+You can generate the list of commands that we wish to perform on an image in the python console and when you
have it working just right for the step you would like to perform you can copy and paste them into a pseudo
code text file. The “Pseudocode to XML” function will be looking for files that have the file extension
“.def” so it will convert all of the *.def files in the flow directory into XML.
+
+As in the case of the macros, you can put in comment lines beginning with “comment>” and blank lines to make
the code fragments more readable and easier to understand when you come back to make enhancements in a couple
of months.
+
+Each set of commands is contained by a “Step” which uses the key “step>”. The top level container is the
Workflow which uses the key “flow>”. Each workflow can be specified in its own “.def” file. The “Pseudocode
to XML” function will read all of the *.def files and create a single XML file named combinedFlow.xml in the
myXml/flow directory.
+
+#### Property / Parasite Pseudo Code
+
+The other type of pseudo code that we need to talk about is the code for properties. The pseudo code for
properties is contained in the “myXml/property” directory. The file flagProperties.xml is created by the
“Pseudocode to XML” function from the flagProperties.def file. In the case of properties it only really makes
sense to have one set of properties for all flows. The properties defined in the flagProperties.xml file will
be the “flag” properties. You can set the property name, comments, the option values, and the default value
(initial setting). The “property>” key sets the property name and contains the other property values within
the XML. The other keys are “comment>”, “default>”, and “options>”. The key “flags>” with the name Control
Properties is used at the beginning of the file to define the top level container.
+
+There are three properties that are assigned by the automation scripts and are not normally edited by the
user or defined in the “.def” file. They are created, read and modified by the scripts. These are the flow
control properties, “Flow”, “CurrentStep”, “NextStep”.
+
+You can see all of the properties and current assigned values for a particular image using the menu function
“Automation” -> “A1) Display Assigned Parasites (File)”.
+
+<div class="caption">![ParasitesImage.jpg](ParasitesImage.jpg)
+<span>Assigned Parasites</span></div>
+
+### Properties and Image State – Flow Control Parasites
+
+One way to think of a workflow is as a series of states. These states are what we have been referring to as
steps. As the image evolves it transitions from one state to another it moves through the workflow from
beginning to end, state by state (or step by step).
+
+The Flow Control Parasites provide a method to make each image “self aware” of its own state, which is its
assigned “Flow” and “CurrentStep”. It is also aware of the next step to which it will proceed, which is
determined by its assigned “Flow” and “NextStep”. The order for the steps is determined by the order they are
listed in the pseudo code. When an image is updated the “NextStep becomes the new “CurrentStep” and a new
“NextStep” is looked up and written to the image as a parasite.
+
+Let's examine the steps of the “Standard” flow example that is included with this tutorial. The steps the
image will go through are:
+
+<div class="caption"><span style="font-style: italic">Example – States or Steps in the Standard Flow
Example</span>
+
+<table>
+
+<tbody>
+
+<tr>
+
+<td class="emphesize">CurrentStep</td>
+
+<td class="emphesize">NextStep</td>
+
+</tr>
+
+<tr>
+
+<th>1.</th>
+
+<td>First</td>
+
+<td>Alignment</td>
+
+</tr>
+
+<tr>
+
+<th>2.</th>
+
+<td>Alignment</td>
+
+<td>DynamicRange</td>
+
+</tr>
+
+<tr>
+
+<th>3.</th>
+
+<td>DynamicRange</td>
+
+<td>Retinex-Filter</td>
+
+</tr>
+
+<tr>
+
+<th>4.</th>
+
+<td>Retinex-Filter</td>
+
+<td>Sharpen</td>
+
+</tr>
+
+<tr>
+
+<th>5.</th>
+
+<td>Sharpen</td>
+
+<td>ColorAdjust</td>
+
+</tr>
+
+<tr>
+
+<th>6.</th>
+
+<td>ColorAdjust</td>
+
+<td>FINISHED</td>
+
+</tr>
+
+<tr>
+
+<th>7.</th>
+
+<td>FINISHED</td>
+
+<td>FINISHED</td>
+
+</tr>
+
+</tbody>
+
+</table>
+
+</div>
+
+The state “First” is assigned by the Jpeg to Xcf function. This step is assigned automatically regardless of
the flow. The steps following the “First” step, “Alignment”, “DynamicRange”, “Retinex-Filter”, “Sharpen”, and
“ColorAdjust” are assigned through the Xml representation of the flow. The Step “FINISHED” is assigned
automatically when the end of the list of steps is reached.
+
+When the images are first imported, the autoUpdate function is run to move the images from the automatically
assigned “First” step to executing the first real step of the flow. When the CurrentStep becomes “FINISHED”,
the image is ready to be exported by the Xcf to Jpeg function.
+
+### Status Flag Parasites
+
+The Flag Parasites are for decision making. They will be assigned with a default value when the image is
imported into a flow. The parasite whose function is flow control is the “UpdateFlag”. The value of the
UpdateFlag is read to determine if an image is ready to be moved to the next state.
+
+Flag Parasites other than the UpdateFlag can be modified or eliminated to suit the needs of your pseudo code
functions. You could for example add Flags with values that determine certain layer Opacity, or determine
whether certain filters will be run. There are a lot of possibilities for this powerful capability.
+
+### Automation Workflow - Summary
+
+Running an Automated Workflow is almost trivially easy, once you have it set up to your liking. There is
some work to be sure in setting up a workflow, but the reward is a consistent and apparent (obvious which
steps have been run) workflow or process.
+
+There are several things you may need to set up Gimp Preferences in order to optimize the operation.
+
+## Conclusion
+
+The combination of an available programming language, well suited data structures, the ability to affix
properties to images, and a rich set of editing features offer powerful possibilities for automating the
editing process.
+
+Using an automated workflow has changed the way that I use Gimp for editing my photos. I hope that you can
leverage these examples to make working with Gimp more productive for yourself. Links to the example scripts
and pseudo code are in the following appendices.
+
+## Appendix – Notes
+
+The following Appendices contain notes which are more specific to setting up the example scripts, the
example *.def files, and comments on debugging.
+
+### Setting up the Example Scripts
+
+All of the example scripts begin with “auto”, e.g. autoAutoUpdate.py, autoBase.py, ... If you try them but
then decide you don't like them they should be pretty easy to find and remove. The following example scripts
should be loaded into your gimp/plug-ins directory. Something like /home/stephen/.gimp-2.8/plug-ins if your
user name is stephen and you were using gimp 2.8\. Click on the filename to download.
+
+1. [autoAutoUpdate.py](plug-ins/autoAutoUpdate.py) - Runs the auto update function on a directory of images.
+2. [autoBase.py](plug-ins/autoBase.py) - Contains the classes that read and write the XML files that affect
how the update works.
+3. [autoCommander.py](plug-ins/autoCommander.py) - Runs the 'Commander' macros.
+4. [autoJpegToXcf.py](plug-ins/autoJpegToXcf.py) - Imports the images into xcf format and assigns
properties to image.
+5. [autoRWparasites.py](plug-ins/autoRWparasites.py) - User Interface functions to read and write image
parasites from the menu.
+6. [autoWriteXml.py](plug-ins/autoWriteXml.py) - Reads *.def files and generates XML for commander macros,
workflows, and properties.
+7. [autoXcfToJpg.py](plug-ins/autoXcfToJpg.py) – Exports the finished images back to jpeg format.
+
+### Setting up the Example Pseudo Code
+
+Underneath your gimp directory (something like /home/stephen/.gimp-2.8) you need to create a directory named
'myXml'. Don't get creative here, the scripts are looking for this specific directory. It will be in the same
directory that contains your plug-ins directory. Underneath the myXml directory create three more
directories, 'commander', 'flow', 'property'. These will be where your pseudo code and three kinds of XML
will be located.
+
+#### Pseudo Code for Commander Macros
+
+Copy the following example *.def files into the “commander” directory
(/home/stephen/.gimp-2.8/myXml/commander – assuming a home directory of /user/stephen and a gimp version
2.8). They are example Commander Macros pseudo code files. Click on the filename to download.
+
+1. [centeredgrid.def](myXml/commander/centeredgrid.def)
+2. [colorAdjust.def](myXml/commander/colorAdjust.def)
+3. [createColorLayer.def](myXml/commander/createColorLayer.def)
+4. [createDynamicRangeLayer.def](myXml/commander/createDynamicRangeLayer.def)
+5. [expandCanvas.def](myXml/commander/expandCanvas.def)
+6. [normalGridCanvas.def](myXml/commander/normalGridCanvas.def)
+7. [renameBaseLayer.def](myXml/commander/renameBaseLayer.def)
+8. [retinexLayer.def](myXml/commander/retinexLayer.def)
+9. [sharpenLayer.def](myXml/commander/sharpenLayer.def)
+
+Hopefully with the comments and by running them, their function will be apparent. They should be enough to
get you started writing some macros of your own.
+
+When you run the “Pseudocode to XML” Utility function, it will read all of the *.def files in this directory
and write an XML file in this directory called “combinedCommander.xml”. “combinedCommander.xml” is the file
that is accessed to list and run all of your macros.
+
+#### Pseudo Code for Automation Workflows
+
+Copy the following *.def files into the “flow” directory (/home/stephen/.gimp-2.8/myXml/flow). They are
example Workflow pseudo code files.
+
+1. [fullauto.def](myXml/flow/fullauto.def)
+2. [semiauto.def](myXml/flow/semiauto.def)
+3. [standard.def](myXml/flow/standard.def)
+
+These three workflows all follow the same basicsteps of the standard workflow. The semiauto and fullauto
workflows combine some of the steps. The idea is to give you a couple of different workflows to play with.
The fullauto illustrates that you really can pack a lot of editing into a “step” but is probably too
automatic to be of practical use.
+
+When you run the “Pseudocode to XML” Utility function, it will read all of the *.def files in this directory
and write an XML file in this directory called “combinedFlow.xml”.
+
+#### Pseudo Code for Properties
+
+Copy the following *.def file into the “property” directory (/home/stephen/.gimp-2.8/myXml/property). It is
an example Property pseudo code file (for Flag Properties / Parasites).
+
+1. [flagProperties.def](myXml/property/flagProperties.def)
+
+When you run the “Pseudocode to XML” Utility function, it will read *.def file in this directory and write
an XML file in this directory called “flagProperties.xml”.
+
+### Pseudo Code Syntax
+
+#### Commander Pseudo Code
+
+There are three keywords used for writing commander pseudo code:
+
+1. **commander>** - The text following this keyword is the Macro Name. This keyword must be the first
keyword in the file. This is the “container” or the root of the tree for the following comments and commands.
+2. **comment>** - The text following this keyword is for descriptive comments. The comments will be
represented in the pseudo code *.def file and in the resulting XML. When the XML is read for processing,
comments will be ignored.
+3. **>>>** - The text following this keyword is taken as a python statement. Then the resulting XML is
read, the command statements will be passed to the commander script to be processed in order.
+
+Note that lines beginning with “#” are ignored. You may indent if you like for readability. Leading white
space is stripped off.
+
+<div class="caption"><span style="font-style: italic">Example - Commander Pseudo Code Example</span>
+
+<pre class="code" style="text-align: left; margin-right: 1em;">commander>Centered Grid
+ comment>** Set up the grid for Rotate and or Perspective Transform
+ comment>* Set values from python-fu image object
+ >>>centerX = theImage.width/2
+ >>>centerY = theImage.height/2
+ >>>gridSpacing = max(theImage.width, theImage.height)/24
+ comment>* configure grid with PDB functions
+ >>>pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)
+ >>>pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)
+ >>>pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)</pre>
+
+</div>
+
+#### Property Pseudo Code
+
+There are five keywords used for writing property pseudo code:
+
+1. **flags** - The text following this keyword is the top level container, or in other words, the root of
the tree.
+2. **property** - The text following the keyword is the name of the property / parasite. This is a second
level container or a branch of the tree. It will contain all of the following leaf keywords (comment,
default, and option) until the next property statement.
+3. **comment** - The text following this keyword is for descriptive comments. The comments will be
represented in the pseudo code *.def file and in the resulting XML. When the XML is read for processing,
comments will be ignored. The comments are leafs of the tree.
+4. **default** - The text following this keyword is the default property value. The default value is a leaf
of the tree.
+5. **option** - The text following this keyword is one of the possible property values. There can be
several option values for any given property. The option values are leafs of the tree.
+
+<div class="caption"><span style="font-style: italic">Example - Property Pseudo Code Example</span>
+
+<pre class="code" style="text-align: left; margin-right: 1em;">flags>Control Properties
+property>UpdateFlag
+ comment>Initial value set on import to Xcf
+ comment>Set by user on Image from Automation Menu
+ comment>Read by autoAutoUpdate (updateImage function)
+ comment>Updates Image (executes Next Step in Flow) if YES
+ comment>Reset to NO by updateImage
+ default>YES
+ option>NO
+ option>YES
+
+property>EnhanceColorLevel
+ default>NORMAL
+ option>EXTRA
+ option>NORMAL
+ option>MID
+ option>NONE</pre>
+
+</div>
+
+#### Flow Pseudo Code
+
+There are four keywords used for writing flow pseudo code:
+
+1. **flow** The text following this keyword is the top level container, or in other words, the root of the
tree. This is the name of the flow.
+2. **step** The text following this keyword is the first level branch from the root. The step contains
comments and commands. The steps select groups of commands for execution.
+3. **comment** Comments are leafs of the tree.
+4. **>>>** Commands are leafs of the tree. When the Xml is read the commands will be processed in the order
in which they appear in the step.
+
+Lines beginning with a “#” are ignored. Leading white space before the keywords is stripped out. White space
after the keyword is stripped out.
+
+### Running code in the Gimp Python Console
+
+The Python-Fu console is a python shell in which you can run not only the gimp pdb functions, but your own
python functions as well.
+
+First, set up and verify Python Path to include your user plug-ins directory:
+
+<div class="caption"><span style="font-style: italic;">Example – Setting the Python path in the Python-Fu
Console</span>
+
+<pre class="code" style="text-align: left; margin-right: 1em;">>>> import sys
+>>> sys.path.append('/home/stephen/.gimp-2.8/plug-ins/')
+>>> sys.path</pre>
+
+<span style="font-style: italic;">echos back a list of paths that include path added above</span></div>
+
+Next, run your python functions in the Gimp Python-Console . This example uses the 'TestBench' class to run
functions in the other classes in the autoBase.py module. Object instances of the TestBench class echo back
results to the screen.
+
+1. Set the working directory to the user plug-ins directory
+2. Import the autoBase module functions
+3. Create and instance of the TestBench class
+4. Run the TestXmlGen and TestXmlRead functions
+
+<div class="caption"><span style="font-style: italic;">Example – Running your own Functions in the Python-Fu
Console</span>
+
+<pre class="code" style="text-align: left; margin-right: 1em;">>>> import os
+>>> os.chdir('/home/stephen/.gimp-2.8/plug-ins')
+>>> from autoBase import *
+>>> testola = TestBench()
+>>> testola.TestXmlGen()
+>>> testola.TestXmlRead()</pre>
+
+</div>
+
+The screen shot below illustrates the process on the Windows version of Gimp / Python Console (TestXmlGen is
pictured, TestXmlRead produces several pages of output):
+
+<div class="caption">![Appendix-testing-in-python-console.JPG](Appendix-testing-in-python-console.JPG)
+<span>Image - Running your code in the Gimp Python Console</span></div>
+
+## Further Reading
+
+* [Automated JPG to XCF](../AutomatedJpgToXcf)
+
+<div style="text-align: left;">[![Creative Commons
License](http://i.creativecommons.org/l/by-sa/3.0/80x15.png)](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US)
+<span xmlns:dct="http://purl.org/dc/terms/">GIMP Tutorial - Luminosity Masks (text)</span> by <a
rel="cc:attributionURL" xmlns:cc="http://creativecommons.org/ns#">Stephen Kiel</a> is licensed under a
[Creative Commons Attribution-ShareAlike 3.0 Unported
License](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US). The code sources in this tutorial are
licensed by Stephen Kiel under the conditions of the [GNU Public License GPL
V3](https://www.gnu.org/copyleft/gpl.html).</div>
+
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/centeredgrid.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/centeredgrid.def
new file mode 100644
index 0000000..731f589
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/centeredgrid.def
@@ -0,0 +1,10 @@
+commander>Centered Grid
+ comment>** Set up the grid for Rotate and or Perspective Transform
+ comment>* Set values from python-fu image object
+ >>>centerX = theImage.width/2
+ >>>centerY = theImage.height/2
+ >>>gridSpacing = max(theImage.width, theImage.height)/24
+ comment>* configure grid with PDB functions
+ >>>pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)
+ >>>pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)
+ >>>pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/colorAdjust.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/colorAdjust.def
new file mode 100644
index 0000000..09cf704
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/colorAdjust.def
@@ -0,0 +1,26 @@
+commander>Color Adjust
+ macro>
+ comment>Merge the work layers together and raise the color layer to the top
+ comment>First the Retinex layer
+ >>> RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')
+ >>> tempLayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)
+
+ comment>Then the Sharpen Layer
+ >>> SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')
+ >>> newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)
+ >>> newLayer.name = 'Contrast'
+ comment>Desaturate the resultant layer
+ >>> pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)
+
+ comment>Move the Color Layer to the top of the stack, name it ColorBase, set opacity to 80%
+ >>> ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')
+ >>> ColorLayer.name = 'ColorBase'
+ >>> pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)
+ >>> ColorLayer.opacity = 80.0
+
+ comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as needed.
+ >>> ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)
+ >>> theImage.add_layer(ColorAdd, 0)
+ >>> ColorAdd.name = 'ColorAdd'
+ >>> ColorAdd.opacity = 20.0
+
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/combinedCommander.xml
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/combinedCommander.xml
new file mode 100644
index 0000000..8ada848
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/combinedCommander.xml
@@ -0,0 +1,95 @@
+<combined>Definition
+ <commander>Centered Grid<comment>** Set up the grid for Rotate and or Perspective Transform</comment>
+ <comment>* Set values from python-fu image object</comment>
+ <command>centerX = theImage.width/2</command>
+ <command>centerY = theImage.height/2</command>
+ <command>gridSpacing = max(theImage.width, theImage.height)/24</command>
+ <comment>* configure grid with PDB functions</comment>
+ <command>pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)</command>
+ <command>pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)</command>
+ </commander>
+ <commander>Color Adjust<comment>Merge the work layers together and raise the color layer to the
top</comment>
+ <comment>First the Retinex layer</comment>
+ <command>RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')</command>
+ <command>tempLayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)</command>
+ <comment>Then the Sharpen Layer</comment>
+ <command>SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')</command>
+ <command>newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)</command>
+ <command>newLayer.name = 'Contrast'</command>
+ <comment>Desaturate the resultant layer</comment>
+ <command>pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)</command>
+ <comment>Move the Color Layer to the top of the stack, name it ColorBase, set opacity to 80%</comment>
+ <command>ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')</command>
+ <command>ColorLayer.name = 'ColorBase'</command>
+ <command>pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)</command>
+ <command>ColorLayer.opacity = 80.0</command>
+ <comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as needed.</comment>
+ <command>ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)</command>
+ <command>theImage.add_layer(ColorAdd, 0)</command>
+ <command>ColorAdd.name = 'ColorAdd'</command>
+ <command>ColorAdd.opacity = 20.0</command>
+ </commander>
+ <commander>Add Color Layer<comment>Make the top layer active & assign to currentLayer</comment>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ <command>currentLayer = theImage.active_layer</command>
+ <comment>Copy to tempLayer, desaturate it, & set mode to GRAIN_EXTRACT</comment>
+ <command>tempLayer = currentLayer.copy()</command>
+ <command>theImage.add_layer(tempLayer, 0)</command>
+ <command>pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)</command>
+ <command>tempLayer.mode = GRAIN_EXTRACT_MODE</command>
+ <comment>Copy visible to the layer we will keep - same image now in NORMAL mode</comment>
+ <command>colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')</command>
+ <command>theImage.add_layer(colorLayer, len(theImage.layers))</command>
+ <comment>Set Color Layer mode to GRAIN_MERGE & get ride of temp layer</comment>
+ <command>colorLayer.mode = GRAIN_MERGE_MODE</command>
+ <command>theImage.remove_layer(tempLayer)</command>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ </commander>
+ <commander>Create Dynamic Range Layer<comment>Create a Dynamic Range Layer and add it at the top of the
stack</comment>
+ <comment>Run autostretch_hsv leave mode Normal and at 100% opacity</comment>
+ <command>original = theImage.layers[0]</command>
+ <command>DynRange = original.copy()</command>
+ <command>DynRange.name = "DynRange"</command>
+ <command>theImage.add_layer(DynRange, 0)</command>
+ <command>pdb.plug_in_autostretch_hsv(theImage, DynRange)</command>
+ </commander>
+ <commander>Expand Canvas<comment>Expand the canvas by 25 percent -easier to rotate / perspective</comment>
+ <command>adjust = max(theImage.height, theImage.width)/4</command>
+ <command>theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2, adjust/2)</command>
+ </commander>
+ <commander>Normal Grid and Canvas<comment>Shrink the Canvas back to fit the layer</comment>
+ <command>theImage.resize_to_layers()</command>
+ <comment>Set grid to origin and size = image</comment>
+ <command>pdb.gimp_image_grid_set_offset(theImage, 0, 0)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)</command>
+ </commander>
+ <commander>Rename Base Layer<comment>Rename the base layer to 'Original'</comment>
+ <command>theLayer = theImage.layers[0]</command>
+ <command>theLayer.name = 'Original'</command>
+ </commander>
+ <commander>Retinex-Filter<comment>Add a new Retinex layer and apply the retinex filter with default
settings</comment>
+ <command>RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")</command>
+ <command>theImage.add_layer(RetinexLayer,0)</command>
+ <comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2</comment>
+ <command>pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)</command>
+ <comment>Make the retinex layer B&W - retinex distorts color</comment>
+ <command>pdb.gimp_desaturate_full(RetinexLayer, 1)</command>
+ <command>RetinexLayer.mode = OVERLAY_MODE</command>
+ <command>RetinexLayer.opacity = 75.0</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))</command>
+ <command>if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0</command>
+ <command>if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0</command>
+ <command>if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0</command>
+ <command>if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0</command>
+ </commander>
+ <commander>Sharpen<comment>Add a new Sharpend layer and apply the sharpening filter with default
settings</comment>
+ <command>SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")</command>
+ <command>theImage.add_layer(SharpenLayer,0)</command>
+ <comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0</comment>
+ <command>pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>SharpenLayer.opacity = 75.0</command>
+ </commander>
+ </combined>
\ No newline at end of file
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/createColorLayer.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/createColorLayer.def
new file mode 100644
index 0000000..e6e95ed
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/createColorLayer.def
@@ -0,0 +1,17 @@
+commander>Add Color Layer
+macro>
+ comment>Make the top layer active & assign to currentLayer
+ >>>theImage.active_layer = theImage.layers[0]
+ >>>currentLayer = theImage.active_layer
+ comment>Copy to tempLayer, desaturate it, & set mode to GRAIN_EXTRACT
+ >>>tempLayer = currentLayer.copy()
+ >>>theImage.add_layer(tempLayer, 0)
+ >>>pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)
+ >>>tempLayer.mode = GRAIN_EXTRACT_MODE
+ comment>Copy visible to the layer we will keep - same image now in NORMAL mode
+ >>>colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')
+ >>>theImage.add_layer(colorLayer, len(theImage.layers))
+ comment>Set Color Layer mode to GRAIN_MERGE & get ride of temp layer
+ >>>colorLayer.mode = GRAIN_MERGE_MODE
+ >>>theImage.remove_layer(tempLayer)
+ >>>theImage.active_layer = theImage.layers[0]
\ No newline at end of file
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/createDynamicRangeLayer.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/createDynamicRangeLayer.def
new file mode 100644
index 0000000..1b981ad
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/createDynamicRangeLayer.def
@@ -0,0 +1,9 @@
+commander>Create Dynamic Range Layer
+ macro>
+ comment>Create a Dynamic Range Layer and add it at the top of the stack
+ comment>Run autostretch_hsv leave mode Normal and at 100% opacity
+ >>>original = theImage.layers[0]
+ >>>DynRange = original.copy()
+ >>>DynRange.name = "DynRange"
+ >>>theImage.add_layer(DynRange, 0)
+ >>>pdb.plug_in_autostretch_hsv(theImage, DynRange)
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/expandCanvas.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/expandCanvas.def
new file mode 100644
index 0000000..17e868f
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/expandCanvas.def
@@ -0,0 +1,5 @@
+commander>Expand Canvas
+ macro>
+ comment>Expand the canvas by 25 percent -easier to rotate / perspective
+ >>>adjust = max(theImage.height, theImage.width)/4
+ >>>theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2, adjust/2)
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/normalGridCanvas.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/normalGridCanvas.def
new file mode 100644
index 0000000..f6e27e9
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/normalGridCanvas.def
@@ -0,0 +1,9 @@
+commander>Normal Grid and Canvas
+ macro>
+
+ comment>Shrink the Canvas back to fit the layer
+ >>>theImage.resize_to_layers()
+
+ comment>Set grid to origin and size = image
+ >>>pdb.gimp_image_grid_set_offset(theImage, 0, 0)
+ >>>pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/renameBaseLayer.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/renameBaseLayer.def
new file mode 100644
index 0000000..d1fa8fc
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/renameBaseLayer.def
@@ -0,0 +1,5 @@
+commander>Rename Base Layer
+ macro>
+ comment>Rename the base layer to 'Original'
+ >>>theLayer = theImage.layers[0]
+ >>>theLayer.name = 'Original'
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/retinexLayer.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/retinexLayer.def
new file mode 100644
index 0000000..93cb4f6
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/retinexLayer.def
@@ -0,0 +1,18 @@
+commander>Retinex-Filter
+ macro>
+ comment>Add a new Retinex layer and apply the retinex filter with default settings
+ >>>RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")
+ >>>theImage.add_layer(RetinexLayer,0)
+ comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2
+ >>>pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)
+
+ comment>Make the retinex layer B&W - retinex distorts color
+ >>>pdb.gimp_desaturate_full(RetinexLayer, 1)
+ >>>RetinexLayer.mode = OVERLAY_MODE
+ >>>RetinexLayer.opacity = 75.0
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))
+ >>>if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0
+ >>>if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0
+ >>>if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0
+ >>>if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/sharpenLayer.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/sharpenLayer.def
new file mode 100644
index 0000000..08d9020
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/commander/sharpenLayer.def
@@ -0,0 +1,11 @@
+commander>Sharpen
+ macro>
+ comment>Add a new Sharpend layer and apply the sharpening filter with default settings
+ >>>SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")
+ >>>theImage.add_layer(SharpenLayer,0)
+ comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0
+ >>>pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)
+
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>>SharpenLayer.opacity = 75.0
+
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/combinedFlow.xml
b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/combinedFlow.xml
new file mode 100644
index 0000000..5f4ab1c
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/combinedFlow.xml
@@ -0,0 +1,308 @@
+<combined>Definition
+ <flow>FullAuto<step>FinalAdjust<comment>Set up the grid for Rotate and or Perspective Transform</comment>
+ <comment>Easier to do geometric operations with single layer</comment>
+ <comment>This first step is run as part of the import jpeg</comment>
+ <comment>In the console get ID with: theImage = gimp.image_list()[0]</comment>
+ <comment>First set some variables and establish grid spacing and style</comment>
+ <command>centerX = theImage.width/2</command>
+ <command>centerY = theImage.height/2</command>
+ <command>gridSpacing = max(theImage.width, theImage.height)/24</command>
+ <command>pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)</command>
+ <command>pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)</command>
+ <comment>Expand the canvas by 25 percent -easier use to rotate / perspective</comment>
+ <command>adjust = max(theImage.height, theImage.width)/4</command>
+ <command>theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2,
adjust/2)</command>
+ <comment>Rename the base layer to 'Original'</comment>
+ <command>theLayer = theImage.layers[0]</command>
+ <command>theLayer.name = 'Original'</command>
+ <comment>Shrink the Canvas back to fit the layer</comment>
+ <command>theImage.resize_to_layers()</command>
+ <comment>Set grid to origin and size = image</comment>
+ <command>pdb.gimp_image_grid_set_offset(theImage, 0, 0)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)</command>
+ <comment>Capture a new 'Color Layer'. Move it to the bottom of the stack</comment>
+ <comment>Save 'Color' so we can recover it at the end of the flow</comment>
+ <comment>We don't have to worry if some of the filters skew the color.</comment>
+ <comment>We can also use this to amp up the color</comment>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ <command>currentLayer = theImage.active_layer</command>
+ <command>tempLayer = currentLayer.copy()</command>
+ <command>theImage.add_layer(tempLayer, 0)</command>
+ <command>pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)</command>
+ <command>tempLayer.mode = GRAIN_EXTRACT_MODE</command>
+ <command>colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')</command>
+ <command>theImage.add_layer(colorLayer, len(theImage.layers))</command>
+ <command>colorLayer.mode = GRAIN_MERGE_MODE</command>
+ <command>theImage.remove_layer(tempLayer)</command>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ <comment>Create a Dynamic Range Layer and add it at the top of the stack</comment>
+ <comment>Run autostretch_hsv leave mode Normal and at 100% opacity</comment>
+ <comment>May have to use 'Curves' to tune up histogram</comment>
+ <command>original = theImage.active_layer</command>
+ <command>DynRange = original.copy()</command>
+ <command>DynRange.name = "DynRange"</command>
+ <command>theImage.add_layer(DynRange, 0)</command>
+ <command>pdb.plug_in_autostretch_hsv(theImage, DynRange)</command>
+ <comment>Add a new Retinex layer and apply the retinex filter with default settings</comment>
+ <command>RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")</command>
+ <command>theImage.add_layer(RetinexLayer,0)</command>
+ <comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2</comment>
+ <command>pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)</command>
+ <comment>Make the retinex layer B&W - retinex distorts color</comment>
+ <command>pdb.gimp_desaturate_full(RetinexLayer, 1)</command>
+ <command>RetinexLayer.mode = OVERLAY_MODE</command>
+ <command>RetinexLayer.opacity = 75.0</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))</command>
+ <command>if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0</command>
+ <command>if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0</command>
+ <command>if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0</command>
+ <command>if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0</command>
+ <comment>Add a new Sharpend layer and apply the sharpening filter with default settings</comment>
+ <command>SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")</command>
+ <command>theImage.add_layer(SharpenLayer,0)</command>
+ <comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0</comment>
+ <command>pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>SharpenLayer.opacity = 75.0</command>
+ <command>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))</command>
+ <command>if (ContrastLevel == 'EXTRA'): SharpenLayer.opacity = 100.0</command>
+ <command>if (ContrastLevel == 'NORMAL'): SharpenLayer.opacity = 75.0</command>
+ <command>if (ContrastLevel == 'MID'): SharpenLayer.opacity = 50.0</command>
+ <command>if (ContrastLevel == 'NONE'): SharpenLayer.opacity = 0.0</command>
+ <comment>Merge the work layers together and raise the color layer to the top</comment>
+ <comment>First the Retinex layer</comment>
+ <command>RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')</command>
+ <command>templayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)</command>
+ <comment>Then the Sharpen Layer</comment>
+ <command>SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')</command>
+ <command>newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)</command>
+ <command>newLayer.name = 'Contrast'</command>
+ <comment>Desaturate the resultant layer</comment>
+ <command>pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)</command>
+ <comment>Now grab the color layer and move it to the top</comment>
+ <command>ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')</command>
+ <command>pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)</command>
+ <command>ColorLayer.opacity = 80.0</command>
+ <comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as
needed.</comment>
+ <command>ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)</command>
+ <command>theImage.add_layer(ColorAdd, 0)</command>
+ <command>ColorAdd.name = 'ColorAdd'</command>
+ <comment>Take a shot at adjusting the Color Layer based on Property EnhanceColorLevel</comment>
+ <command>ColorLevel = str(theImage.parasite_find('EnhanceColorLevel'))</command>
+ <comment>Set Color level opacity, first setting is default - if clauses fail.</comment>
+ <command>ColorAdd.opacity = 20.0</command>
+ <command>if (ColorLevel == 'EXTRA'): ColorAdd.opacity = 60.0</command>
+ <command>if (ColorLevel == 'NORMAL'): ColorAdd.opacity = 40.0</command>
+ <command>if (ColorLevel == 'MID'): ColorAdd.opacity = 20.0</command>
+ <command>if (ColorLevel == 'NONE'): ColorAdd.opacity = 0.0</command>
+ <command>theImage.attach_new_parasite('UpdateFlag', 5, 'YES')</command>
+ </step>
+ </flow>
+ <flow>SemiAuto<step>Alignment<comment>Set up the grid for Rotate and or Perspective Transform</comment>
+ <comment>Easier to do geometric operations with single layer</comment>
+ <comment>This first step is run as part of the import jpeg</comment>
+ <comment>In the console get ID with: theImage = gimp.image_list()[0]</comment>
+ <comment>First set some variables and establish grid spacing and style</comment>
+ <command>centerX = theImage.width/2</command>
+ <command>centerY = theImage.height/2</command>
+ <command>gridSpacing = max(theImage.width, theImage.height)/24</command>
+ <command>pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)</command>
+ <command>pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)</command>
+ <comment>Expand the canvas by 25 percent -easier use to rotate / perspective</comment>
+ <command>adjust = max(theImage.height, theImage.width)/4</command>
+ <command>theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2,
adjust/2)</command>
+ <comment>Rename the base layer to 'Original'</comment>
+ <command>theLayer = theImage.layers[0]</command>
+ <command>theLayer.name = 'Original'</command>
+ </step>
+ <step>FinalAdjust<comment>Shrink the Canvas back to fit the layer</comment>
+ <command>theImage.resize_to_layers()</command>
+ <comment>Set grid to origin and size = image</comment>
+ <command>pdb.gimp_image_grid_set_offset(theImage, 0, 0)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)</command>
+ <comment>Capture a new 'Color Layer'. Move it to the bottom of the stack</comment>
+ <comment>Save 'Color' so we can recover it at the end of the flow</comment>
+ <comment>We don't have to worry if some of the filters skew the color.</comment>
+ <comment>We can also use this to amp up the color</comment>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ <command>currentLayer = theImage.active_layer</command>
+ <command>tempLayer = currentLayer.copy()</command>
+ <command>theImage.add_layer(tempLayer, 0)</command>
+ <command>pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)</command>
+ <command>tempLayer.mode = GRAIN_EXTRACT_MODE</command>
+ <command>colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')</command>
+ <command>theImage.add_layer(colorLayer, len(theImage.layers))</command>
+ <command>colorLayer.mode = GRAIN_MERGE_MODE</command>
+ <command>theImage.remove_layer(tempLayer)</command>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ <comment>Create a Dynamic Range Layer and add it at the top of the stack</comment>
+ <comment>Run autostretch_hsv leave mode Normal and at 100% opacity</comment>
+ <comment>May have to use 'Curves' to tune up histogram</comment>
+ <command>original = theImage.active_layer</command>
+ <command>DynRange = original.copy()</command>
+ <command>DynRange.name = "DynRange"</command>
+ <command>theImage.add_layer(DynRange, 0)</command>
+ <command>pdb.plug_in_autostretch_hsv(theImage, DynRange)</command>
+ <comment>Add a new Retinex layer and apply the retinex filter with default settings</comment>
+ <command>RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")</command>
+ <command>theImage.add_layer(RetinexLayer,0)</command>
+ <comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2</comment>
+ <command>pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)</command>
+ <comment>Make the retinex layer B&W - retinex distorts color</comment>
+ <command>pdb.gimp_desaturate_full(RetinexLayer, 1)</command>
+ <command>RetinexLayer.mode = OVERLAY_MODE</command>
+ <command>RetinexLayer.opacity = 75.0</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))</command>
+ <command>if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0</command>
+ <command>if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0</command>
+ <command>if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0</command>
+ <command>if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0</command>
+ <comment>Add a new Sharpend layer and apply the sharpening filter with default settings</comment>
+ <command>SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")</command>
+ <command>theImage.add_layer(SharpenLayer,0)</command>
+ <comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0</comment>
+ <command>pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>SharpenLayer.opacity = 75.0</command>
+ <command>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))</command>
+ <command>if (ContrastLevel == 'EXTRA'): SharpenLayer.opacity = 100.0</command>
+ <command>if (ContrastLevel == 'NORMAL'): SharpenLayer.opacity = 75.0</command>
+ <command>if (ContrastLevel == 'MID'): SharpenLayer.opacity = 50.0</command>
+ <command>if (ContrastLevel == 'NONE'): SharpenLayer.opacity = 0.0</command>
+ <comment>Merge the work layers together and raise the color layer to the top</comment>
+ <comment>First the Retinex layer</comment>
+ <command>RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')</command>
+ <command>templayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)</command>
+ <comment>Then the Sharpen Layer</comment>
+ <command>SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')</command>
+ <command>newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)</command>
+ <command>newLayer.name = 'Contrast'</command>
+ <comment>Desaturate the resultant layer</comment>
+ <command>pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)</command>
+ <comment>Now grab the color layer and move it to the top</comment>
+ <command>ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')</command>
+ <command>pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)</command>
+ <command>ColorLayer.opacity = 80.0</command>
+ <comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as
needed.</comment>
+ <command>ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)</command>
+ <command>theImage.add_layer(ColorAdd, 0)</command>
+ <command>ColorAdd.name = 'ColorAdd'</command>
+ <comment>Take a shot at adjusting the Color Layer based on Property EnhanceColorLevel</comment>
+ <command>ColorLevel = str(theImage.parasite_find('EnhanceColorLevel'))</command>
+ <comment>Set Color level opacity, first setting is default - if clauses fail.</comment>
+ <command>ColorAdd.opacity = 20.0</command>
+ <command>if (ColorLevel == 'EXTRA'): ColorAdd.opacity = 60.0</command>
+ <command>if (ColorLevel == 'NORMAL'): ColorAdd.opacity = 40.0</command>
+ <command>if (ColorLevel == 'MID'): ColorAdd.opacity = 20.0</command>
+ <command>if (ColorLevel == 'NONE'): ColorAdd.opacity = 0.0</command>
+ </step>
+ </flow>
+ <flow>Standard<step>Alignment<comment>Set up the grid for Rotate and or Perspective Transform</comment>
+ <comment>Easier to do geometric operations with single layer</comment>
+ <comment>This first step is run as part of the import jpeg</comment>
+ <comment>In the console get ID with: theImage = gimp.image_list()[0]</comment>
+ <comment>First set some variables and establish grid spacing and style</comment>
+ <command>centerX = theImage.width/2</command>
+ <command>centerY = theImage.height/2</command>
+ <command>gridSpacing = max(theImage.width, theImage.height)/24</command>
+ <command>pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)</command>
+ <command>pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)</command>
+ <comment>Expand the canvas by 25 percent -easier use to rotate / perspective</comment>
+ <command>adjust = max(theImage.height, theImage.width)/4</command>
+ <command>theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2,
adjust/2)</command>
+ <comment>Rename the base layer to 'Original'</comment>
+ <command>theLayer = theImage.layers[0]</command>
+ <command>theLayer.name = 'Original'</command>
+ </step>
+ <step>DynamicRange<comment>Shrink the Canvas back to fit the layer</comment>
+ <command>theImage.resize_to_layers()</command>
+ <comment>Set grid to origin and size = image</comment>
+ <command>pdb.gimp_image_grid_set_offset(theImage, 0, 0)</command>
+ <command>pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)</command>
+ <comment>Capture a new 'Color Layer'. Move it to the bottom of the stack</comment>
+ <comment>Save 'Color' so we can recover it at the end of the flow</comment>
+ <comment>We don't have to worry if some of the filters skew the color.</comment>
+ <comment>We can also use this to amp up the color</comment>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ <command>currentLayer = theImage.active_layer</command>
+ <command>tempLayer = currentLayer.copy()</command>
+ <command>theImage.add_layer(tempLayer, 0)</command>
+ <command>pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)</command>
+ <command>tempLayer.mode = GRAIN_EXTRACT_MODE</command>
+ <command>colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')</command>
+ <command>theImage.add_layer(colorLayer, len(theImage.layers))</command>
+ <command>colorLayer.mode = GRAIN_MERGE_MODE</command>
+ <command>theImage.remove_layer(tempLayer)</command>
+ <command>theImage.active_layer = theImage.layers[0]</command>
+ <comment>Create a Dynamic Range Layer and add it at the top of the stack</comment>
+ <comment>Run autostretch_hsv leave mode Normal and at 100% opacity</comment>
+ <comment>May have to use 'Curves' to tune up histogram</comment>
+ <command>original = theImage.active_layer</command>
+ <command>DynRange = original.copy()</command>
+ <command>DynRange.name = "DynRange"</command>
+ <command>theImage.add_layer(DynRange, 0)</command>
+ <command>pdb.plug_in_autostretch_hsv(theImage, DynRange)</command>
+ </step>
+ <step>Retinex-Filter<comment>Add a new Retinex layer and apply the retinex filter with default
settings</comment>
+ <command>RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")</command>
+ <command>theImage.add_layer(RetinexLayer,0)</command>
+ <comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2</comment>
+ <command>pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)</command>
+ <comment>Make the retinex layer B&W - retinex distorts color</comment>
+ <command>pdb.gimp_desaturate_full(RetinexLayer, 1)</command>
+ <command>RetinexLayer.mode = OVERLAY_MODE</command>
+ <command>RetinexLayer.opacity = 75.0</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))</command>
+ <command>if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0</command>
+ <command>if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0</command>
+ <command>if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0</command>
+ <command>if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0</command>
+ </step>
+ <step>Sharpen<comment>Add a new Sharpend layer and apply the sharpening filter with default
settings</comment>
+ <command>SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")</command>
+ <command>theImage.add_layer(SharpenLayer,0)</command>
+ <comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0</comment>
+ <command>pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)</command>
+ <comment>Adjust the opacity based on Property EnhanceContrastLevel</comment>
+ <command>SharpenLayer.opacity = 75.0</command>
+ <command>ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))</command>
+ <command>if (ContrastLevel == 'EXTRA'): SharpenLayer.opacity = 100.0</command>
+ <command>if (ContrastLevel == 'NORMAL'): SharpenLayer.opacity = 75.0</command>
+ <command>if (ContrastLevel == 'MID'): SharpenLayer.opacity = 50.0</command>
+ <command>if (ContrastLevel == 'NONE'): SharpenLayer.opacity = 0.0</command>
+ </step>
+ <step>ColorAdjust<comment>Merge the work layers together and raise the color layer to the top</comment>
+ <comment>First the Retinex layer</comment>
+ <command>RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')</command>
+ <command>templayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)</command>
+ <comment>Then the Sharpen Layer</comment>
+ <command>SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')</command>
+ <command>newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)</command>
+ <command>newLayer.name = 'Contrast'</command>
+ <comment>Desaturate the resultant layer</comment>
+ <command>pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)</command>
+ <comment>Now grab the color layer and move it to the top</comment>
+ <command>ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')</command>
+ <command>pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)</command>
+ <command>ColorLayer.opacity = 80.0</command>
+ <comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as
needed.</comment>
+ <command>ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)</command>
+ <command>theImage.add_layer(ColorAdd, 0)</command>
+ <command>ColorAdd.name = 'ColorAdd'</command>
+ <comment>Take a shot at adjusting the Color Layer based on Property EnhanceColorLevel</comment>
+ <command>ColorLevel = str(theImage.parasite_find('EnhanceColorLevel'))</command>
+ <comment>Set Color level opacity, first setting is default - if clauses fail.</comment>
+ <command>ColorAdd.opacity = 20.0</command>
+ <command>if (ColorLevel == 'EXTRA'): ColorAdd.opacity = 60.0</command>
+ <command>if (ColorLevel == 'NORMAL'): ColorAdd.opacity = 40.0</command>
+ <command>if (ColorLevel == 'MID'): ColorAdd.opacity = 20.0</command>
+ <command>if (ColorLevel == 'NONE'): ColorAdd.opacity = 0.0</command>
+ </step>
+ </flow>
+ </combined>
\ No newline at end of file
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/fullauto.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/fullauto.def
new file mode 100644
index 0000000..e874878
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/fullauto.def
@@ -0,0 +1,128 @@
+flow>FullAuto
+#flow>Standard
+step>FinalAdjust
+#step>Alignment
+
+ comment>Set up the grid for Rotate and or Perspective Transform
+ comment>Easier to do geometric operations with single layer
+ comment>This first step is run as part of the import jpeg
+
+ comment>In the console get ID with: theImage = gimp.image_list()[0]
+ comment>First set some variables and establish grid spacing and style
+ >>> centerX = theImage.width/2
+ >>> centerY = theImage.height/2
+ >>> gridSpacing = max(theImage.width, theImage.height)/24
+ >>> pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)
+ >>> pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)
+ >>> pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)
+
+ comment>Expand the canvas by 25 percent -easier use to rotate / perspective
+ >>> adjust = max(theImage.height, theImage.width)/4
+ >>> theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2, adjust/2)
+
+ comment>Rename the base layer to 'Original'
+ >>> theLayer = theImage.layers[0]
+ >>> theLayer.name = 'Original'
+
+#step>DynamicRange
+
+ comment>Shrink the Canvas back to fit the layer
+ >>> theImage.resize_to_layers()
+
+ comment>Set grid to origin and size = image
+ >>> pdb.gimp_image_grid_set_offset(theImage, 0, 0)
+ >>> pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)
+
+ comment>Capture a new 'Color Layer'. Move it to the bottom of the stack
+ comment>Save 'Color' so we can recover it at the end of the flow
+ comment>We don't have to worry if some of the filters skew the color.
+ comment>We can also use this to amp up the color
+ >>> theImage.active_layer = theImage.layers[0]
+ >>> currentLayer = theImage.active_layer
+ >>> tempLayer = currentLayer.copy()
+ >>> theImage.add_layer(tempLayer, 0)
+ >>> pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)
+ >>> tempLayer.mode = GRAIN_EXTRACT_MODE
+ >>> colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')
+ >>> theImage.add_layer(colorLayer, len(theImage.layers))
+ >>> colorLayer.mode = GRAIN_MERGE_MODE
+ >>> theImage.remove_layer(tempLayer)
+ >>> theImage.active_layer = theImage.layers[0]
+
+ comment>Create a Dynamic Range Layer and add it at the top of the stack
+ comment>Run autostretch_hsv leave mode Normal and at 100% opacity
+ comment>May have to use 'Curves' to tune up histogram
+ >>> original = theImage.active_layer
+ >>> DynRange = original.copy()
+ >>> DynRange.name = "DynRange"
+ >>> theImage.add_layer(DynRange, 0)
+ >>> pdb.plug_in_autostretch_hsv(theImage, DynRange)
+
+#step>Retinex-Filter
+ comment>Add a new Retinex layer and apply the retinex filter with default settings
+ >>> RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")
+ >>> theImage.add_layer(RetinexLayer,0)
+ comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2
+ >>> pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)
+
+ comment>Make the retinex layer B&W - retinex distorts color
+ >>> pdb.gimp_desaturate_full(RetinexLayer, 1)
+ >>> RetinexLayer.mode = OVERLAY_MODE
+ >>> RetinexLayer.opacity = 75.0
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>> ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))
+ >>> if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0
+ >>> if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0
+ >>> if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0
+ >>> if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0
+
+#step>Sharpen
+ comment>Add a new Sharpend layer and apply the sharpening filter with default settings
+ >>> SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")
+ >>> theImage.add_layer(SharpenLayer,0)
+ comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0
+ >>> pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)
+
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>> SharpenLayer.opacity = 75.0
+ >>> ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))
+ >>> if (ContrastLevel == 'EXTRA'): SharpenLayer.opacity = 100.0
+ >>> if (ContrastLevel == 'NORMAL'): SharpenLayer.opacity = 75.0
+ >>> if (ContrastLevel == 'MID'): SharpenLayer.opacity = 50.0
+ >>> if (ContrastLevel == 'NONE'): SharpenLayer.opacity = 0.0
+
+#step>ColorAdjust
+#step>Finished
+ comment>Merge the work layers together and raise the color layer to the top
+ comment>First the Retinex layer
+ >>> RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')
+ >>> templayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)
+
+ comment>Then the Sharpen Layer
+ >>> SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')
+ >>> newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)
+ >>> newLayer.name = 'Contrast'
+ comment>Desaturate the resultant layer
+ >>> pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)
+
+ comment>Now grab the color layer and move it to the top
+ >>> ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')
+ >>> pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)
+ >>> ColorLayer.opacity = 80.0
+
+ comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as needed.
+ >>> ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)
+ >>> theImage.add_layer(ColorAdd, 0)
+ >>> ColorAdd.name = 'ColorAdd'
+
+ comment>Take a shot at adjusting the Color Layer based on Property EnhanceColorLevel
+ >>> ColorLevel = str(theImage.parasite_find('EnhanceColorLevel'))
+ comment>Set Color level opacity, first setting is default - if clauses fail.
+ >>> ColorAdd.opacity = 20.0
+ >>> if (ColorLevel == 'EXTRA'): ColorAdd.opacity = 60.0
+ >>> if (ColorLevel == 'NORMAL'): ColorAdd.opacity = 40.0
+ >>> if (ColorLevel == 'MID'): ColorAdd.opacity = 20.0
+ >>> if (ColorLevel == 'NONE'): ColorAdd.opacity = 0.0
+ >>>theImage.attach_new_parasite('UpdateFlag', 5, 'YES')
+
+
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/semiauto.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/semiauto.def
new file mode 100644
index 0000000..f636f03
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/semiauto.def
@@ -0,0 +1,126 @@
+flow>SemiAuto
+#flow>Standard
+step>Alignment
+
+ comment>Set up the grid for Rotate and or Perspective Transform
+ comment>Easier to do geometric operations with single layer
+ comment>This first step is run as part of the import jpeg
+
+ comment>In the console get ID with: theImage = gimp.image_list()[0]
+ comment>First set some variables and establish grid spacing and style
+ >>> centerX = theImage.width/2
+ >>> centerY = theImage.height/2
+ >>> gridSpacing = max(theImage.width, theImage.height)/24
+ >>> pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)
+ >>> pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)
+ >>> pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)
+
+ comment>Expand the canvas by 25 percent -easier use to rotate / perspective
+ >>> adjust = max(theImage.height, theImage.width)/4
+ >>> theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2, adjust/2)
+
+ comment>Rename the base layer to 'Original'
+ >>> theLayer = theImage.layers[0]
+ >>> theLayer.name = 'Original'
+
+step>FinalAdjust
+#step>DynamicRange
+
+ comment>Shrink the Canvas back to fit the layer
+ >>> theImage.resize_to_layers()
+
+ comment>Set grid to origin and size = image
+ >>> pdb.gimp_image_grid_set_offset(theImage, 0, 0)
+ >>> pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)
+
+ comment>Capture a new 'Color Layer'. Move it to the bottom of the stack
+ comment>Save 'Color' so we can recover it at the end of the flow
+ comment>We don't have to worry if some of the filters skew the color.
+ comment>We can also use this to amp up the color
+ >>> theImage.active_layer = theImage.layers[0]
+ >>> currentLayer = theImage.active_layer
+ >>> tempLayer = currentLayer.copy()
+ >>> theImage.add_layer(tempLayer, 0)
+ >>> pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)
+ >>> tempLayer.mode = GRAIN_EXTRACT_MODE
+ >>> colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')
+ >>> theImage.add_layer(colorLayer, len(theImage.layers))
+ >>> colorLayer.mode = GRAIN_MERGE_MODE
+ >>> theImage.remove_layer(tempLayer)
+ >>> theImage.active_layer = theImage.layers[0]
+
+ comment>Create a Dynamic Range Layer and add it at the top of the stack
+ comment>Run autostretch_hsv leave mode Normal and at 100% opacity
+ comment>May have to use 'Curves' to tune up histogram
+ >>> original = theImage.active_layer
+ >>> DynRange = original.copy()
+ >>> DynRange.name = "DynRange"
+ >>> theImage.add_layer(DynRange, 0)
+ >>> pdb.plug_in_autostretch_hsv(theImage, DynRange)
+
+#step>Retinex-Filter
+ comment>Add a new Retinex layer and apply the retinex filter with default settings
+ >>> RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")
+ >>> theImage.add_layer(RetinexLayer,0)
+ comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2
+ >>> pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)
+
+ comment>Make the retinex layer B&W - retinex distorts color
+ >>> pdb.gimp_desaturate_full(RetinexLayer, 1)
+ >>> RetinexLayer.mode = OVERLAY_MODE
+ >>> RetinexLayer.opacity = 75.0
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>> ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))
+ >>> if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0
+ >>> if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0
+ >>> if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0
+ >>> if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0
+
+#step>Sharpen
+ comment>Add a new Sharpend layer and apply the sharpening filter with default settings
+ >>> SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")
+ >>> theImage.add_layer(SharpenLayer,0)
+ comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0
+ >>> pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)
+
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>> SharpenLayer.opacity = 75.0
+ >>> ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))
+ >>> if (ContrastLevel == 'EXTRA'): SharpenLayer.opacity = 100.0
+ >>> if (ContrastLevel == 'NORMAL'): SharpenLayer.opacity = 75.0
+ >>> if (ContrastLevel == 'MID'): SharpenLayer.opacity = 50.0
+ >>> if (ContrastLevel == 'NONE'): SharpenLayer.opacity = 0.0
+
+#step>ColorAdjust
+#step>Finished
+ comment>Merge the work layers together and raise the color layer to the top
+ comment>First the Retinex layer
+ >>> RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')
+ >>> templayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)
+
+ comment>Then the Sharpen Layer
+ >>> SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')
+ >>> newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)
+ >>> newLayer.name = 'Contrast'
+ comment>Desaturate the resultant layer
+ >>> pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)
+
+ comment>Now grab the color layer and move it to the top
+ >>> ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')
+ >>> pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)
+ >>> ColorLayer.opacity = 80.0
+
+ comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as needed.
+ >>> ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)
+ >>> theImage.add_layer(ColorAdd, 0)
+ >>> ColorAdd.name = 'ColorAdd'
+
+ comment>Take a shot at adjusting the Color Layer based on Property EnhanceColorLevel
+ >>> ColorLevel = str(theImage.parasite_find('EnhanceColorLevel'))
+ comment>Set Color level opacity, first setting is default - if clauses fail.
+ >>> ColorAdd.opacity = 20.0
+ >>> if (ColorLevel == 'EXTRA'): ColorAdd.opacity = 60.0
+ >>> if (ColorLevel == 'NORMAL'): ColorAdd.opacity = 40.0
+ >>> if (ColorLevel == 'MID'): ColorAdd.opacity = 20.0
+ >>> if (ColorLevel == 'NONE'): ColorAdd.opacity = 0.0
+
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/standard.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/standard.def
new file mode 100644
index 0000000..32235b1
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/flow/standard.def
@@ -0,0 +1,124 @@
+flow>Standard
+step>Alignment
+
+ comment>Set up the grid for Rotate and or Perspective Transform
+ comment>Easier to do geometric operations with single layer
+ comment>This first step is run as part of the import jpeg
+
+ comment>In the console get ID with: theImage = gimp.image_list()[0]
+ comment>First set some variables and establish grid spacing and style
+ >>> centerX = theImage.width/2
+ >>> centerY = theImage.height/2
+ >>> gridSpacing = max(theImage.width, theImage.height)/24
+ >>> pdb.gimp_image_grid_set_offset(theImage, centerX, centerY)
+ >>> pdb.gimp_image_grid_set_spacing(theImage, gridSpacing, gridSpacing)
+ >>> pdb.gimp_image_grid_set_style(theImage, GRID_ON_OFF_DASH)
+
+ comment>Expand the canvas by 25 percent -easier use to rotate / perspective
+ >>> adjust = max(theImage.height, theImage.width)/4
+ >>> theImage.resize(theImage.width + adjust, theImage.height+ adjust, adjust/2, adjust/2)
+
+ comment>Rename the base layer to 'Original'
+ >>> theLayer = theImage.layers[0]
+ >>> theLayer.name = 'Original'
+
+step>DynamicRange
+
+ comment>Shrink the Canvas back to fit the layer
+ >>> theImage.resize_to_layers()
+
+ comment>Set grid to origin and size = image
+ >>> pdb.gimp_image_grid_set_offset(theImage, 0, 0)
+ >>> pdb.gimp_image_grid_set_spacing(theImage, theImage.width, theImage.height)
+
+ comment>Capture a new 'Color Layer'. Move it to the bottom of the stack
+ comment>Save 'Color' so we can recover it at the end of the flow
+ comment>We don't have to worry if some of the filters skew the color.
+ comment>We can also use this to amp up the color
+ >>> theImage.active_layer = theImage.layers[0]
+ >>> currentLayer = theImage.active_layer
+ >>> tempLayer = currentLayer.copy()
+ >>> theImage.add_layer(tempLayer, 0)
+ >>> pdb.gimp_desaturate_full(tempLayer, DESATURATE_LUMINOSITY)
+ >>> tempLayer.mode = GRAIN_EXTRACT_MODE
+ >>> colorLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, 'ColorLayer')
+ >>> theImage.add_layer(colorLayer, len(theImage.layers))
+ >>> colorLayer.mode = GRAIN_MERGE_MODE
+ >>> theImage.remove_layer(tempLayer)
+ >>> theImage.active_layer = theImage.layers[0]
+
+ comment>Create a Dynamic Range Layer and add it at the top of the stack
+ comment>Run autostretch_hsv leave mode Normal and at 100% opacity
+ comment>May have to use 'Curves' to tune up histogram
+ >>> original = theImage.active_layer
+ >>> DynRange = original.copy()
+ >>> DynRange.name = "DynRange"
+ >>> theImage.add_layer(DynRange, 0)
+ >>> pdb.plug_in_autostretch_hsv(theImage, DynRange)
+
+step>Retinex-Filter
+ comment>Add a new Retinex layer and apply the retinex filter with default settings
+ >>> RetinexLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Retinex")
+ >>> theImage.add_layer(RetinexLayer,0)
+ comment>Retinex parameters - Scale = 240; ScaleDiv = 3; Level = 0; Dynamic = 1.2
+ >>> pdb.plug_in_retinex(theImage, RetinexLayer, 240, 3, 0, 1.2)
+
+ comment>Make the retinex layer B&W - retinex distorts color
+ >>> pdb.gimp_desaturate_full(RetinexLayer, 1)
+ >>> RetinexLayer.mode = OVERLAY_MODE
+ >>> RetinexLayer.opacity = 75.0
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>> ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))
+ >>> if (ContrastLevel == 'EXTRA'): RetinexLayer.opacity = 100.0
+ >>> if (ContrastLevel == 'NORMAL'): RetinexLayer.opacity = 75.0
+ >>> if (ContrastLevel == 'MID'): RetinexLayer.opacity = 50.0
+ >>> if (ContrastLevel == 'NONE'): RetinexLayer.opacity = 0.0
+
+step>Sharpen
+ comment>Add a new Sharpend layer and apply the sharpening filter with default settings
+ >>> SharpenLayer = pdb.gimp_layer_new_from_visible(theImage, theImage, "Sharpen")
+ >>> theImage.add_layer(SharpenLayer,0)
+ comment>Sharpen parameters - Radius = 5.0; Amount = 0.5; Threshold = 0
+ >>> pdb.plug_in_unsharp_mask(theImage, SharpenLayer, 5.0, 0.5, 0)
+
+ comment>Adjust the opacity based on Property EnhanceContrastLevel
+ >>> SharpenLayer.opacity = 75.0
+ >>> ContrastLevel = str(theImage.parasite_find('EnhanceContrastLevel'))
+ >>> if (ContrastLevel == 'EXTRA'): SharpenLayer.opacity = 100.0
+ >>> if (ContrastLevel == 'NORMAL'): SharpenLayer.opacity = 75.0
+ >>> if (ContrastLevel == 'MID'): SharpenLayer.opacity = 50.0
+ >>> if (ContrastLevel == 'NONE'): SharpenLayer.opacity = 0.0
+
+step>ColorAdjust
+#step>Finished
+ comment>Merge the work layers together and raise the color layer to the top
+ comment>First the Retinex layer
+ >>> RetinexLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Retinex')
+ >>> templayer = pdb.gimp_image_merge_down(theImage, RetinexLayer, EXPAND_AS_NECESSARY)
+
+ comment>Then the Sharpen Layer
+ >>> SharpenLayer = pdb.gimp_image_get_layer_by_name(theImage, 'Sharpen')
+ >>> newLayer = pdb.gimp_image_merge_down(theImage, SharpenLayer, EXPAND_AS_NECESSARY)
+ >>> newLayer.name = 'Contrast'
+ comment>Desaturate the resultant layer
+ >>> pdb.gimp_desaturate_full(newLayer, DESATURATE_LUMINOSITY)
+
+ comment>Now grab the color layer and move it to the top
+ >>> ColorLayer = pdb.gimp_image_get_layer_by_name(theImage, 'ColorLayer')
+ >>> pdb.gimp_image_raise_item_to_top(theImage, ColorLayer)
+ >>> ColorLayer.opacity = 80.0
+
+ comment>Copy the Color Layer, call it ColorAdd, set opacity to 20%. Adjust by hand as needed.
+ >>> ColorAdd = pdb.gimp_layer_copy(ColorLayer, FALSE)
+ >>> theImage.add_layer(ColorAdd, 0)
+ >>> ColorAdd.name = 'ColorAdd'
+
+ comment>Take a shot at adjusting the Color Layer based on Property EnhanceColorLevel
+ >>> ColorLevel = str(theImage.parasite_find('EnhanceColorLevel'))
+ comment>Set Color level opacity, first setting is default - if clauses fail.
+ >>> ColorAdd.opacity = 20.0
+ >>> if (ColorLevel == 'EXTRA'): ColorAdd.opacity = 60.0
+ >>> if (ColorLevel == 'NORMAL'): ColorAdd.opacity = 40.0
+ >>> if (ColorLevel == 'MID'): ColorAdd.opacity = 20.0
+ >>> if (ColorLevel == 'NONE'): ColorAdd.opacity = 0.0
+
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/property/flagProperties.def
b/content/tutorials/Automate_Editing_in_GIMP/myXml/property/flagProperties.def
new file mode 100644
index 0000000..9e5c84b
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/property/flagProperties.def
@@ -0,0 +1,34 @@
+flags>Control Properties
+property>UpdateFlag
+ comment>Initial value set on import to Xcf
+ comment>Set by user on Image from Automation Menu
+ comment>Read by autoAutoUpdate (updateImage function)
+ comment>Updates Image (executes Next Step in Flow) if YES
+ comment>Reset to NO by updateImage
+ default>YES
+ option>NO
+ option>YES
+
+property>EnhanceColorLevel
+ default>NORMAL
+ option>EXTRA
+ option>NORMAL
+ option>MID
+ option>NONE
+
+property>EnhanceContrastLevel
+ default>NORMAL
+ option>EXTRA
+ option>NORMAL
+ option>MID
+ option>NONE
+
+property>OverwriteXcf
+ default>NO
+ option>YES
+ option>NO
+
+property>OverwriteJpg
+ default>NO
+ option>YES
+ option>NO
diff --git a/content/tutorials/Automate_Editing_in_GIMP/myXml/property/flagProperties.xml
b/content/tutorials/Automate_Editing_in_GIMP/myXml/property/flagProperties.xml
new file mode 100644
index 0000000..ad60a81
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/myXml/property/flagProperties.xml
@@ -0,0 +1,32 @@
+<combined>Definition
+ <flags>Control Properties<property>UpdateFlag<comment>Initial value set on import to Xcf</comment>
+ <comment>Set by user on Image from Automation Menu</comment>
+ <comment>Read by autoAutoUpdate (updateImage function)</comment>
+ <comment>Updates Image (executes Next Step in Flow) if YES</comment>
+ <comment>Reset to NO by updateImage</comment>
+ <default>YES</default>
+ <option>NO</option>
+ <option>YES</option>
+ </property>
+ <property>EnhanceColorLevel<default>NORMAL</default>
+ <option>EXTRA</option>
+ <option>NORMAL</option>
+ <option>MID</option>
+ <option>NONE</option>
+ </property>
+ <property>EnhanceContrastLevel<default>NORMAL</default>
+ <option>EXTRA</option>
+ <option>NORMAL</option>
+ <option>MID</option>
+ <option>NONE</option>
+ </property>
+ <property>OverwriteXcf<default>NO</default>
+ <option>YES</option>
+ <option>NO</option>
+ </property>
+ <property>OverwriteJpg<default>NO</default>
+ <option>YES</option>
+ <option>NO</option>
+ </property>
+ </flags>
+ </combined>
\ No newline at end of file
diff --git a/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoAutoUpdate.py
b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoAutoUpdate.py
new file mode 100644
index 0000000..7c97144
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoAutoUpdate.py
@@ -0,0 +1,110 @@
+#! /usr/bin/env python
+#
+# File = autoAutoUpdate.py
+# Part of a set of scripts to Automate the Editing of images with Gimp
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################
+#
+from gimpfu import *
+import os
+import re
+import xml.etree.ElementTree as ET
+from autoBase import *
+#
+if os.name == 'posix':
+ Home = os.environ['HOME']
+elif os.name == 'nt':
+ Home = os.environ['HOMEPATH']
+xcfDir = os.path.join(Home, "Pictures")
+#
+flowObj = BaseXmlReader()
+
+def updateImage(fileName):
+ """This image update function operates on one image at a time.
+ The variables are 'local' for each step for each image and go
+ out of scope when a particular image update is finished. The
+ updateImage function is called by autoAutoUpdate.
+ The WorkFlow Step commands are pulled from a 'tree' which is
+ accessed through the BaseXmlReader class (from autoBase).
+ """
+ # Open the image indicated by passed fileName
+ theImage = pdb.gimp_file_load(fileName, fileName)
+ theActiveLayer = pdb.gimp_image_get_active_layer(theImage)
+ # Get the image update flag and Flow Control properties
+ UpdateFlag = str(theImage.parasite_find('UpdateFlag'))
+ Flow = str(theImage.parasite_find('Flow'))
+ CurrentStep = str(theImage.parasite_find('CurrentStep'))
+ NextStep = str(theImage.parasite_find('NextStep'))
+ pIndex = 5
+ # If the update flag is "NO" do nothing and close the image. (done)
+ # autoAutoUpdate will move on to the next image
+ if (UpdateFlag == 'NO'):
+ pdb.gimp_image_delete(theImage)
+ elif (UpdateFlag == "YES"):
+ # get the list of commands and new next step based on the
+ # current state and flow of this image
+ commandList, NewNextStep = flowObj.FlowExtract(Flow, NextStep)
+ # Run the commands for this step
+ for Cmd in commandList:
+ exec(Cmd)
+ # Update the properties
+ theImage.attach_new_parasite('CurrentStep', pIndex, NextStep)
+ theImage.attach_new_parasite('NextStep', pIndex, NewNextStep)
+ theImage.attach_new_parasite('UpdateFlag', pIndex, 'NO')
+ # Save the image and close it
+ theActiveLayer = pdb.gimp_image_get_active_layer(theImage)
+ pdb.gimp_xcf_save(0, theImage, theActiveLayer, fileName, fileName)
+ pdb.gimp_image_delete(theImage)
+ else:
+ pdb.gimp_message("Parasite UpdateFlag has an unexpected value\n")
+#
+def autoAutoUpdate(srcPath):
+ """Registered function autoAutoUpdate. Creates a list of all of the
+ *.xcf files in a selected directory and calls a function 'updateImage'
+ with each filename in that list.
+ """
+ pdb.gimp_displays_flush()
+ # Find all of the Xcf files.
+ allFileList = os.listdir(srcPath)
+ srcFileList = []
+ for fileName in allFileList:
+ if fileName.count('.xcf') > 0:
+ fullName = os.path.join(srcPath, fileName)
+ srcFileList.append(fullName)
+ # Pass them one at a time to function updateImage
+ for fileName in srcFileList:
+ updateImage(fileName)
+#
+############################################################################
+#
+register (
+ "autoAutoUpdate", # Name registered in Procedure Browser
+ "Auto Update a Directory of Images", # Widget title
+ "Auot Update a Directory of Images", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "Aug 2013", # Date
+ "2) Auto Update Images (Directory)", # Menu Entry
+ "", # Image Type - Operate with NO image loaded
+ [
+ ( PF_DIRNAME, "srcPath", "XCF (source) Directory:", xcfDir ),
+ ],
+ [],
+ autoAutoUpdate, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+main()
diff --git a/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoBase.py
b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoBase.py
new file mode 100644
index 0000000..3f0f6c9
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoBase.py
@@ -0,0 +1,468 @@
+# File = autoBase.py
+# Part of a set of scripts to Automate the Editing of images with Gimp
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################
+#
+import xml.etree.ElementTree as ET
+import os
+import re
+import sys
+#from gimpfu import *
+
+class BaseXmlReader(object):
+ """\tReads data for xml files. Used for automating the editing process
+ with Gimp. Has methods to obtain and format the data for 'Commander'
+ and 'AutoUpdate'. The public functions are: CommanderMacros,
+ CommanderExtract, FlowNames, FlowExtract, FlowTree, PropertyNames, and
+ PropertyTree. Creating an instance does not require any arguments or
+ attributes to be set.
+ """
+ def __init__(self):
+ self._srcPath = ''
+ self.cmdrPath = 'commander/combinedCommander.xml'
+ self.propPath = 'property/flagProperties.xml'
+ self.flowPath = 'flow/combinedFlow.xml'
+
+ def __BasePath(self):
+ self.basePath = os.path.realpath(__file__)
+ (self.basePath, tail) = os.path.split(self.basePath)
+ (self.basePath, tail) = os.path.split(self.basePath)
+ self.basePath = os.path.join(self.basePath, 'myXml')
+ return self.basePath
+
+ def __XmlPath(self):
+ self.basePath = self.__BasePath()
+ self.xmlPath = os.path.join(self.basePath, self.srcPath)
+ return self.xmlPath
+
+ def __Reader(self):
+ #
+ self.getpath = self.__XmlPath()
+ self.tree = ET.parse(self.getpath)
+ return self.tree
+
+ def __Lev1List(self):
+ self.lev1List = []
+ self.L1tree = self.__Reader()
+ self.L1root = self.L1tree.getroot()
+ for self.l1 in self.L1root:
+ self.lev1List.append(self.l1.text)
+ return self.lev1List
+
+ def __Lev2List(self):
+ self.lev2List = []
+ self.L2tree = self.__Reader()
+ self.L2root = self.L2tree.getroot()
+ for self.l1a in self.L2root:
+ for self.l2 in self.l1a:
+ self.lev2List.append(self.l2.text)
+ return self.lev2List
+
+ def CommanderExtract(self, MacName):
+ """\tA Commander specific method which takes a Commander Macro
+ name as an argument and returns the list of commands associated
+ with that Macro. This list is used by Commander and passed to
+ the Python 'exec' function and executed.
+ """
+ self.srcPath = self.cmdrPath
+ self.commanderList = []
+ cmdrTree = self.__Reader()
+ cmdrRoot = cmdrTree.getroot()
+ for cName in cmdrRoot:
+ if cName.text == MacName:
+ for command in cName:
+ if command.tag == 'command':
+ self.commanderList.append(command.text)
+ return self.commanderList
+
+ def CommanderMacros(self):
+ """\tA Commander specific method which takes no arguments and returns
+ a list of the Commander Macro names represented in the xml.
+ """
+ self.srcPath = self.cmdrPath
+ self.macros = self.__Lev1List()
+ self.macros.sort()
+ return self.macros
+
+ def PropertyNames(self):
+ """\tA Property specific method which takes no arguments and returns
+ a list of the Property Names represented in the xml.
+ """
+ self.srcPath = self.propPath
+ self.pNames = self.__Lev2List()
+ return self.pNames
+
+ def PropertyTree(self):
+ """\tA Property specific method which takes no arguments and returns a
+ tree that can be processed using the python 'ElementTree'. All of the
+ property information in the xml will be represented in this tree.
+ """
+ self.srcPath = self.propPath
+ self.pTree = self.__Reader()
+ return self.pTree
+
+ def PropertyOption(self,PropMatch):
+ """\tA Property specific method which takes a property name as an
+ argument and returns the list of options for that property. Can be
+ used to populate a list for a menu in the user interface.
+ """
+ self.optionList = []
+ self.srcPath = self.propPath
+ pTree = self.__Reader()
+ proproot = pTree.getroot()
+ for top in proproot:
+ for propName in top:
+ if propName.text == PropMatch:
+ for option in propName:
+ if option.tag == 'option':
+ self.optionList.append(option.text)
+ return self.optionList
+
+ def PropertyDefaults(self):
+ self.defaultList = []
+ self.srcPath = self.propPath
+ pTree = self.__Reader()
+ proproot = pTree.getroot()
+ for top in proproot:
+ for propName in top:
+ pName = propName.text
+ for default in propName:
+ if default.tag == 'default':
+ nameVal = (pName, default.text)
+ self.defaultList.append(nameVal)
+ return self.defaultList
+
+ def FlowNames (self):
+ """\tA Flow specific method which takes no arguments and returns a list
+ of the Work Flows defined in the xml.
+ """
+ self.srcPath = self.flowPath
+ self.fNames = self.__Lev1List()
+ return self.fNames
+
+ def FlowTree (self):
+ """\tA Flow specific method which takes no arguments and returns a tree
+ that can be processed using the python 'ElementTree'. All of the flow
+ information in the xml will be represented in this tree.
+ """
+ self.srcPath = self.flowPath
+ self.fTree = self.__Reader()
+ return self.fTree
+
+ def FlowExtract (self, flowMatch, stepMatch):
+ """\tA Flow specific method which takes two arguments, a {flow name}, and
+ a {step name}. The method returns a list and the name of the 'next step'.
+ The list is the commands associated with the given flow and step arguments.
+ This method is used by the AutoUpdate function.
+ """
+ self.srcPath = self.flowPath
+ self.NewNextStep = "FINISHED"
+ getNextStep = False
+ self.commandList = []
+ flowtree = self.__Reader()
+ flowroot = flowtree.getroot()
+ for flowname in flowroot:
+ if flowname.text == flowMatch:
+ for stepName in flowname:
+ if stepName.text == stepMatch:
+ for command in stepName:
+ if command.tag == 'command':
+ self.commandList.append(command.text)
+ if getNextStep:
+ self.NewNextStep = stepName.text
+ getNextStep = False
+ if stepName.text == stepMatch:
+ getNextStep = True
+ return self.commandList, self.NewNextStep
+
+ def FlowFirstNameDict(self):
+ self.firstNameDict = {}
+ self.srcPath = self.flowPath
+ flowtree = self.__Reader()
+ flowroot = flowtree.getroot()
+ for flowname in flowroot:
+ self.firstNameDict[flowname.text] = flowname[0].text
+ return self.firstNameDict
+
+
+
+#
+############################################################################
+#
+class XmlGenerator(object):
+ """\tXmlGenerator has three methods which write xml to a file. The three
+ methods are:
+ ** GenCommanderXml
+ ** GenFlowXml
+ ** GenPropertyXml.
+ The methods set the following internal variables that are used to specify
+ the xml tree being written to disk and then calls internal method gentree.
+ * srcType - one of 'cmdr', 'flow', or, 'prop' used to derive path name
+ * fglob - the common extension for pseudo code files '.def'
+ * rootList - list of tags for root level, should be one element
+ * lev1List - list of tags for the 1st level of hierarchy under root
+ * lev2List - list of tags for the 2nd level of hierarchy under root.
+ After the variables have been set the 'gentree' internal function writes a
+ tree that is written as an xml file (by calling function). gentree
+ uses internal sub - functions 'parsetag' and 'psuedo2Xml'.
+ """
+
+ ################# Set up Attributes
+
+ def __init__(self):
+ #self._srcDirectory = ''
+ self._fglob = ''
+ self._rootList = []
+ self._lev1List = []
+ self._lev2List = []
+ self._srcType = ''
+
+ def setPath(self):
+ derivedPath = os.path.realpath(__file__)
+ (derivedPath, tail) = os.path.split(derivedPath)
+ (derivedPath, tail) = os.path.split(derivedPath)
+ derivedPath = os.path.join(derivedPath, 'myXml')
+ if self.srcType == 'flow':
+ xmlPath = os.path.join(derivedPath, 'flow',
+ 'combinedFlow.xml')
+ elif self.srcType == 'prop':
+ xmlPath = os.path.join(derivedPath, 'property',
+ 'flagProperties.xml')
+ elif self.srcType == 'cmdr':
+ xmlPath = os.path.join(derivedPath, 'commander',
+ 'combinedCommander.xml')
+ return xmlPath
+
+ def parsetag(self, line):
+ """\tSplit the input string into 'tags' and 'tails'. The tags
+ will be the xml identifiers or enclosures, and the tails will be
+ the associated text. If a line is blank or starts with a '#'
+ it will be ignored and skipped.
+ """
+ tag = ''
+ tail = ''
+ level = ''
+ # Ignore blank Lines and commented out
+ if len(line) > 0 and line[0] != '#':
+ # Find tag & tail, for tag to lower case
+ tag = line[0:line.find(">")]
+ tag = tag.lower()
+ tail = line[line.find(">")+1:]
+ # Tag hierarchy level in tree
+ if tag in self.rootList:
+ level = 'root'
+ elif tag in self.lev1List:
+ level = 'level1'
+ elif tag in self.lev2List:
+ level = 'level2'
+ else:
+ level = 'none'
+ return tag, tail, level
+ #
+ def psuedo2Xml(self, inputPseudo):
+ """\tRead the passed pseudo code file and parse it into an xml
+ tree. Pass the newly created tree back to the calling function.
+ The generated tree will have a root with two levels of sub
+ hierarchy. Uses sub - function parsetag to break the individual
+ lines into tags and the associated text.
+ """
+ infile = open(inputPseudo)
+ # convert '>>>' alias for 'command>'
+ xform = re.compile('^>>>\s*')
+ for line in infile:
+ line = line.strip()
+ line = xform.sub('command>', line)
+ (tag, tail, level) = self.parsetag(line)
+ # build line into tree.
+ # Add a little formatting - so it isn't all one line
+ if level == 'root':
+ root = ET.Element(tag)
+ root.text = tail
+ root.tail = "\n "
+ elif level == 'level1':
+ elLev1 = ET.SubElement(root, tag)
+ elLev1.text = tail
+ elLev1.tail = "\n "
+ elif level == 'level2':
+ elLev2 = ET.SubElement(elLev1, tag)
+ elLev2.text = tail
+ elLev2.tail = "\n "
+ tree = ET.ElementTree(root)
+ return tree
+ #
+ def gentree(self):
+ """\tRead all of the *.def files in the named xml directory. For
+ each flow *.def psuedo code file, read it into a tree. Append
+ the flow xml trees together into a combined tree. Uses sub -
+ function psuedo2Xml to covert individual *.def into xml.
+ """
+ filePath = self.setPath()
+ (fileDir, fileName) = os.path.split(filePath)
+ root = ET.Element('combined')
+ root.text = 'Definition' + "\n "
+ try:
+ fileList = os.listdir(fileDir)
+ except OSError:
+ print "******** could not find " + fileDir
+ for fname in fileList:
+ if fname.count('.def') > 0:
+ fname = os.path.join(fileDir, fname)
+ subTree = self.psuedo2Xml(fname)
+ subNode = subTree.getroot()
+ root.append(subNode)
+ tree = ET.ElementTree(root)
+ tree.write(filePath)
+ #return tree
+
+ def GenCommanderXml(self):
+ """\tA method to write the Commander xml to a file. It takes no
+ arguments and does not return anything. It sets the variables for
+ the Commander xml write and then calls the 'gentree' method.
+ """
+ self.srcType = 'cmdr'
+ self.fglob = '.def'
+ self.rootList = ['commander']
+ self.lev1List = ['command', 'comment']
+ self.lev2List = []
+ self.gentree()
+
+ def GenFlowXml(self):
+ """\tA method to write the Flow xml to a file. It takes no
+ arguments and does not return anything. It sets the variables for
+ the Flow xml write and then calls the 'gentree' method.
+ """
+ self.srcType = 'flow'
+ self.fglob = '.def'
+ self.rootList = ['flow']
+ self.lev1List = ['step']
+ self.lev2List = ['command', 'comment']
+ self.gentree()
+
+ def GenPropertyXml(self):
+ """\tA method to write the Property xml to a file. It takes no
+ arguments and does not return anything. It sets the variables for
+ the Property xml write and then calls the 'gentree' method.
+ """
+ self.srcType = 'prop'
+ self.fglob = '.def'
+ self.rootList = ['flags']
+ self.lev1List = ['property']
+ self.lev2List = ['default', 'option', 'comment']
+ self.gentree()
+
+
+class TestBench(object):
+ """Exercises the classes XmlGenerator and BaseXmlReader
+ """
+
+ def __init__(self):
+ #self._srcDirectory = ''
+ pass
+
+ def ListFunctions(self):
+ print "XmlGenerator Methods\n"
+ print " GenCommanderXml"
+ print " GenFlowXml"
+ print " GenPropertyXml"
+ print "\nBaseXmlReader Methods\n"
+ print " CommanderExtract"
+ print " CommanderMacros\n"
+ print " FlowExtract"
+ print " FlowFirstNameDict"
+ print " FlowNames"
+ print " FlowTree\n"
+ print " PropertyDefaults"
+ print " PropertyNames"
+ print " PropertyOption"
+ print "\nTestBench Methods\n"
+ print " ListFunctions"
+ print " PrintClassDocs"
+ print " "
+
+ def PrintClassDocs(self):
+ print "*** XmlGenerator"
+ print XmlGenerator.__doc__
+ print "\n*** BaseXmlReader"
+ print BaseXmlReader.__doc__
+ print "\n*** TestBench"
+ print TestBench.__doc__
+
+ def TestXmlGen(self):
+ print "*** Testing the XmlGenerator Class"
+ print "\nWriting commander xml file"
+ xmlObj = XmlGenerator()
+ xmlObj.GenCommanderXml()
+ print "\nWriting flow xml file"
+ xmlObj.GenFlowXml()
+ print "\nWriting property xml file"
+ print "\nDone."
+ xmlObj.GenPropertyXml()
+ print "Check the time / date stamp of the xml files in the:"
+ print " .../myXml/flow"
+ print " .../myXml/commander"
+ print " .../myXml/property"
+ print "directories. myXml is under the {home}/.gimp-x.x directory"
+ print "\nCheck the correctness of the content by exercising the"
+ print "TestXmlRead method which reads the xml and prints the"
+ print "output of each method."
+
+
+ def TestXmlRead(self):
+ print "*** Testing the BaseXmlReader Class"
+ print ""
+ xmlObj = BaseXmlReader()
+ print "\n** Commander BaseXmlReader method CommanderMacros() **:\n%s"\
+ % xmlObj.CommanderMacros()
+ print "\n** Commander BaseXmlReader method CommanderExtract() **:\n%s"\
+ % xmlObj.CommanderExtract('Centered Grid')
+ print""
+ #xmlObj = BaseXmlReader()
+ print "\n** Property BaseXmlReader Property Names **: %s" % xmlObj.PropertyNames()
+ print "\n** Property BaseXmlReader method Tree **"
+ newtree = xmlObj.PropertyTree()
+ newroot = newtree.getroot()
+ for L1 in newroot:
+ for L2 in L1:
+ print L2.text
+ for L3 in L2:
+ if L3.tag == 'default':
+ print " default value => " + L3.text
+ if L3.tag == 'option':
+ print " option value -> " + L3.text
+ print "\nProperty Specific BaseXmlReader Property Options: %s" %
xmlObj.PropertyOption('EnhanceContrastLevel')
+ print "\nProperty Specific BaseXmlReadr Property Default (tuples): %s" % xmlObj.PropertyDefaults()
+ print
+ xmlObj = BaseXmlReader()
+ print "\n** Flow Specific BaseXmlReader Flow Names**: %s" % xmlObj.FlowNames()
+ print "\n** Flow Specific BaseXmlReader Flow Tree **"
+ flowTree = xmlObj.FlowTree()
+ flowRoot = flowTree.getroot()
+ for flowName in flowRoot:
+ print flowName.text
+ for flowStep in flowName:
+ print ' Step -> ' + flowStep.text
+ for Command in flowStep:
+ if Command.tag == 'command':
+ print " Command => " + Command.text
+ if Command.tag == 'comment':
+ print " Comment -- " + Command.text
+ print
+ cmdList, nStep = xmlObj.FlowExtract('Standard', 'DynamicRange')
+ print "\n** Flow Specific BaseXmlReader FlowExtract Next Name: %s" % nStep
+ print "\n** Flow Specific BaseXmlReader FlowExtract Command List: %s" % cmdList
+ print "\n** Flow Specific BaseXmlReader Flow First Name Dict: %s" % xmlObj.FlowFirstNameDict()
+
+
diff --git a/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoCommander.py
b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoCommander.py
new file mode 100644
index 0000000..ae05de6
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoCommander.py
@@ -0,0 +1,72 @@
+#! /usr/bin/env python
+#
+# File = autoCommander.py
+# Part of a set of scripts to Automate the Editing of images with Gimp
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################
+#
+from gimpfu import *
+import xml.etree.ElementTree as ET
+import os
+import re
+import sys
+from autoBase import *
+#
+############################################################################
+#
+cmdrReadObj = BaseXmlReader()
+cmdList = cmdrReadObj.CommanderMacros()
+#
+############################################################################
+#
+def autoCommander(theImage, cmdListIndex):
+ """Registered function autoCommander. Prompt the user to select a
+ macro sequence by name. Use the name to locate the set of commands
+ associated with that macro in the commander tree. Form a list from the
+ command set, ignoring comments, and run that list of commands on the
+ open image with the python 'exec' command.
+ """
+ # Get the selected command name from the list
+ commanderName = cmdList[cmdListIndex]
+ commandList = cmdrReadObj.CommanderExtract(commanderName)
+ # Run the commands in newly created commandList through 'exec'
+ # Set up and 'undo' group
+ pdb.gimp_image_undo_group_start(theImage)
+ for Cmd in commandList:
+ exec(Cmd)
+ pdb.gimp_image_undo_group_end(theImage)
+#
+############################################################################
+#
+register (
+ "autoCommander", # Name registered in Procedure Browser
+ "Commander", # Widget title
+ "Commander", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "August 2013", # Date
+ "Commander - Command Sequencer", # Menu Entry
+ "*", # Image Type, an open image
+ [
+ ( PF_IMAGE, "theImage", "Input Image", None ),
+ ( PF_OPTION, "cmdSet", "Select a command", 0, cmdList ),
+ ],
+ [],
+ autoCommander, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+
+main()
diff --git a/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoJpegToXcf.py
b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoJpegToXcf.py
new file mode 100644
index 0000000..6cfbf3f
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoJpegToXcf.py
@@ -0,0 +1,131 @@
+#! /usr/bin/env python
+#
+# File = autoJpegToXcf.py
+# Part of a set of scripts to Automate the Editing of images with Gimp
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################
+#
+from gimpfu import *
+import os
+import re
+import xml.etree.ElementTree as ET
+from autoBase import *
+#
+xmlObj = BaseXmlReader()
+flowList = xmlObj.FlowNames()
+
+if os.name == 'posix':
+ Home = os.environ['HOME']
+elif os.name == 'nt':
+ Home = os.environ['HOMEPATH']
+xcfDir = os.path.join(Home, "Pictures")
+jpegDir = os.path.join(Home, "Pictures")
+
+def PropWrite(theImage, pList):
+ pIndex = 5
+ for (pName, pVal) in pList:
+ theImage.attach_new_parasite(pName, pIndex, pVal)
+
+def autoJpgToXcf(srcPath, tgtPath, flowIndex):
+ """Registered function autoJpgToXcf, Converts all of the
+ jpegs in the source directory into xcf files in a target
+ directory. Requires two arguments, the paths to the source and
+ target directories. DOES NOT require an image to be open.
+ """
+ ###
+ pdb.gimp_displays_flush()
+ open_images, image_ids = pdb.gimp_image_list()
+ if open_images > 0:
+ pdb.gimp_message ("Close open Images & Rerun")
+ else:
+ flowName = flowList[flowIndex]
+ flowStepDict = xmlObj.FlowFirstNameDict()
+ nextStep = flowStepDict[flowName]
+ propList = xmlObj.PropertyDefaults()
+ propList.append(('Flow', flowName))
+ propList.append(('NextStep', nextStep))
+ propList.append(('CurrentStep', 'First'))
+ allFileList = os.listdir(srcPath)
+ existingList = os.listdir(tgtPath)
+ srcFileList = []
+ tgtFileList = []
+ xform = re.compile('\.jpg', re.IGNORECASE)
+ # Find all of the jpeg files in the list & make xcf file names
+ for fname in allFileList:
+ fnameLow = fname.lower()
+ if fnameLow.count('.jpg') > 0:
+ srcFileList.append(fname)
+ tgtFileList.append(xform.sub('.xcf',fname))
+ # Dictionary - source & target file names
+ tgtFileDict = dict(zip(srcFileList, tgtFileList))
+ # Loop on jpegs, open each & save as xcf
+ for srcFile in srcFileList:
+ # Don't overwrite existing, might be work in Progress
+ if tgtFileDict[srcFile] not in existingList:
+ tgtFile = os.path.join(tgtPath, tgtFileDict[srcFile])
+ srcFile = os.path.join(srcPath, srcFile)
+ theImage = pdb.file_jpeg_load(srcFile, srcFile)
+ theDrawable = theImage.active_drawable
+ # Set Flag Properties / Parasites
+ PropWrite(theImage, propList)
+ pdb.gimp_xcf_save(0, theImage, theDrawable, tgtFile, \
+ tgtFile)
+ pdb.gimp_image_delete(theImage)
+ else:
+ # Check to see if flag for overwrite
+ tgtFile = os.path.join(tgtPath, tgtFileDict[srcFile])
+ theImage = pdb.gimp_file_load(tgtFile, tgtFile)
+ OverwriteFlag = str(theImage.parasite_find('OverwriteXcf'))
+ if (OverwriteFlag == 'YES'):
+ # Close xcf, open Jpeg and overwrite with new
+ pdb.gimp_image_delete(theImage)
+ srcFile = os.path.join(srcPath, srcFile)
+ theImage = pdb.file_jpeg_load(srcFile, srcFile)
+ theDrawable = theImage.active_drawable
+ # Set Flag Properties / Parasites
+ PropWrite(theImage, propList)
+ pdb.gimp_xcf_save(0, theImage, theDrawable, tgtFile, \
+ tgtFile)
+ pdb.gimp_image_delete(theImage)
+ else:
+ # Close the xcf leave it alone & move on
+ pdb.gimp_image_delete(theImage)
+
+ # AutoUpdate the images just imported with first step of assigned flow
+ pdb.python_fu_autoAutoUpdate(tgtPath)
+#
+############################################################################
+#
+register (
+ "autoJpgToXcf", # Name registered in Procedure Browser
+ "Convert jpg files to xcf", # Widget title
+ "Convert jpg files to xcf", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "1) Import JPG to XCF (Directory)", # Menu Entry
+ "", # Image Type - No Image Loaded
+ [
+ ( PF_DIRNAME, "srcPath", "JPG Originals (source) Directory:", jpegDir ),
+ ( PF_DIRNAME, "tgtPath", "XCF Working (target) Directory:", xcfDir ),
+ ( PF_OPTION, "flowIndex", "Select Workflow", 0, flowList ),
+ ],
+ [],
+ autoJpgToXcf, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+main()
diff --git a/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoRWparasites.py
b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoRWparasites.py
new file mode 100644
index 0000000..cc00db7
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoRWparasites.py
@@ -0,0 +1,222 @@
+#! /usr/bin/env python
+#
+# File = autoRWparasites.py
+# Part of a set of scripts to Automate the Editing of images with Gimp
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################
+#
+from gimpfu import *
+import os
+import re
+import xml.etree.ElementTree as ET
+from autoBase import *
+xmlObj = BaseXmlReader()
+
+#
+def autoDisplayAssignedParasites(theImage):
+ """Registered function autoDisplayAssignedParasites. Displays the
+ parasites assigned to the current image in a gimp message window.
+ """
+ flowPropNameList = ['Flow', 'CurrentStep', 'NextStep']
+ flagPropNameList = xmlObj.PropertyNames()
+
+ messageStr = "**Flow Control Parasites\n"
+ for parasiteName in flowPropNameList:
+ messageStr = messageStr + str(parasiteName) + ": " + \
+ str(theImage.parasite_find(parasiteName)) + "\n"
+ messageStr = messageStr + "\n**Status Flag Parasites\n"
+ for parasiteName in flagPropNameList:
+ messageStr = messageStr + str(parasiteName) + ": " + \
+ str(theImage.parasite_find(parasiteName)) + "\n"
+
+ pdb.gimp_message(messageStr)
+#
+############################################################################
+#
+register (
+ "autoDisplayAssignedParasites", # Name registered in Procedure Browser
+ "Display Parasites", # Widget title
+ "Display Image Parasites in Gimp Message", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "A1) Display Assigned Parasites (File)", # Menu Entry
+ "*", # Image Type - Valid image loaded
+ [
+ ( PF_IMAGE, "theImage", "Input Image", None ),
+ ],
+ [],
+ autoDisplayAssignedParasites, # Matches function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+############################################################################
+#
+def autoMarkAutoUpdate(theImage):
+ """Registered function autoMarkAutoUpdate. Writes parasite value to
+ YES for for UpdateFlag. Used for process flow control. The
+ function takes on argument, the image object.
+ """
+ theImage.attach_new_parasite('UpdateFlag', 5, 'YES')
+#
+############################################################################
+#
+register (
+ "autoMarkAutoUpdate", # Name registered in Procedure Browser
+ "Mark AutoUpdate", # Widget title
+ "Mark AutoUpdate", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "A2) Mark for AutoUpdate (File)", # Menu Entry
+ "*", # Image Type - Valid image open
+ [
+ ( PF_IMAGE, "theImage", "Input Image", None ),
+ ],
+ [],
+ autoMarkAutoUpdate, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+############################################################################
+#
+def autoMarkXcfOverWriteYes(theImage):
+ """Registered function autoMarkXcfOverWriteYes. Writes parasite value to
+ YES for for UpdateFlag. Used for process flow control. The
+ function takes on argument, the image object.
+ """
+ theImage.attach_new_parasite('OverwriteXcf', 5, 'YES')
+#
+############################################################################
+#
+register (
+ "autoMarkXcfOverWriteYes", # Name registered in Procedure Browser
+ "Mark XCF Overwrite", # Widget title
+ "Mark XCF Overwrite", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "A3) Mark Xcf Overwrite (File)", # Menu Entry
+ "*", # Image Type - Valid image open
+ [
+ ( PF_IMAGE, "theImage", "Input Image", None ),
+ ],
+ [],
+ autoMarkXcfOverWriteYes, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+############################################################################
+#
+def autoMarkJpgOverWriteYes(theImage):
+ """Registered function autoMarkJpgOverWriteYes. Writes parasite value to
+ YES for for OverwriteJpg. Used for process flow control. The
+ function takes on argument, the image object.
+ """
+ theImage.attach_new_parasite('OverwriteJpg', 5, 'YES')
+#
+############################################################################
+#
+register (
+ "autoMarkJpgOverWriteYes", # Name registered in Procedure Browser
+ "Mark XCF Overwrite", # Widget title
+ "Mark XCF Overwrite", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "A4) Mark Jpg Overwrite (File)", # Menu Entry
+ "*", # Image Type - Valid image open
+ [
+ ( PF_IMAGE, "theImage", "Input Image", None ),
+ ],
+ [],
+ autoMarkJpgOverWriteYes, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+#
+############################################################################
+#
+levelList = xmlObj.PropertyOption('EnhanceColorLevel')
+#
+def autoSetEnhanceColorLevel(theImage, colorlevelIndex):
+ """Registered function autoSetEnhanceColorLevel. Writes parasite value to
+ assigned value for for EnhanceColorLevel. Used for process flow control.
+ The function takes two arguments, the image object and parasite value. A
+ separate function reads the xml tree to make a list of the available
+ options. That option list is presented in the PF_OPTION widget.
+ """
+ pValue = levelList[colorlevelIndex]
+ theImage.attach_new_parasite('EnhanceColorLevel', 5, pValue)
+#
+############################################################################
+#
+register (
+ "autoSetEnhanceColorLevel", # Name registered in Procedure Browser
+ "Set Enhance Color Level Parasite / Property", # Widget title
+ "Set Enhance Color Level Parasite / Property", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "A5) Set Color Enhance Level (File)", # Menu Entry
+ "*", # Image Type - Valid image open
+ [
+ ( PF_IMAGE, "theImage", "Input Image", None ),
+ ( PF_OPTION, "colorlevel", "Select Color Level", 0, levelList ),
+ ],
+ [],
+ autoSetEnhanceColorLevel, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+############################################################################
+#
+levelList = xmlObj.PropertyOption('EnhanceContrastLevel')
+#
+def autoSetEnhanceContrastLevel(theImage, colorlevelIndex):
+ """Registered function autoSetEnhanceContrastLevel. Writes parasite value to
+ assigned value for for EnhanceContrastLevel. Used for process flow control.
+ The function takes two arguments, the image object and parasite value. A
+ separate function reads the xml tree to make a list of the available
+ options. That option list is presented in the PF_OPTION widget.
+ """
+ pValue = levelList[colorlevelIndex]
+ theImage.attach_new_parasite('EnhanceContrastLevel', 5, pValue)
+#
+############################################################################
+#
+register (
+ "autoSetEnhanceContrastLevel", # Name registered in Procedure Browser
+ "Set Enhance Contrast Level Parasite / Property", # Widget title
+ "Set Enhance Contrast Level Parasite / Property", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "A6) Set Contrast Enhance Level (File)", # Menu Entry
+ "*", # Image Type - Valid image open
+ [
+ ( PF_IMAGE, "theImage", "Input Image", None ),
+ ( PF_OPTION, "colorlevel", "Select Contrast Level", 0, levelList ),
+ ],
+ [],
+ autoSetEnhanceContrastLevel, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+#
+#
+############################################################################
+#
+main()
diff --git a/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoWriteXml.py
b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoWriteXml.py
new file mode 100644
index 0000000..2529b3f
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoWriteXml.py
@@ -0,0 +1,73 @@
+#! /usr/bin/env python
+#
+# File = autoWriteXml.py
+# Part of a set of scripts to Automate the Editing of images with Gimp
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################
+#
+from gimpfu import *
+import xml.etree.ElementTree as ET
+import os
+import re
+from autoBase import *
+#
+############################################################################
+#
+def autoWriteXml():
+ """Registered function autoWriteFlowXml. Uses the XmlGenerator class
+ in the autoBase module to read the Psuedocode *.def files and write
+ the information into xml files. The methods GenCommanderXml,
+ GenFlowXml, and GenPropertyXml read Pseudocode and write xml in the
+ 'commander', 'flow', and 'properties' subdirectories of the myXml
+ directory.
+ Additional information from within a Python shell:
+ from autoBase import *
+ print XmlGenerator.__doc__
+ print dir(XmlGenerator)
+ print XmlGenerator.GenCommanderXml.__doc__
+ print XmlGenerator.GenFlowXml.__doc__
+ print XmlGenerator.GenPropertyXml.__doc__
+ The xml written with this command is referenced by the BaseXmlReader
+ class which is also in the autoBase module and furnishes information
+ to the AutoUpdate and Commander plug-in scripts.
+ """
+ xmlWriteObj = XmlGenerator()
+ xmlWriteObj.GenCommanderXml()
+ xmlWriteObj.GenFlowXml()
+ xmlWriteObj.GenPropertyXml()
+ pdb.gimp_message("Wrote / Updated xml for:\
+ \n\tCommander\n\tProperties\n\tFlow")
+#
+############################################################################
+#
+register (
+ "autoWriteXml", # Name registered in Procedure Browser
+ "Write Pseudocode (Flow, Property, & Commander) to xml", # Widget title
+ "Write Pseudocode (Flow, Property, & commander) to xml", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "Aug 2013", # Date
+ "Pseudocode to XML", # Menu Entry
+ "", # Image Type
+ [
+ #( PF_FILENAME, "inputPseudo", "Psuedocode Text File", flowXmlDirPath ),
+ ],
+ [],
+ autoWriteXml, # Matches to name of function being defined
+ menu = "<Image>/Automation/Utilities" # Menu Location
+ ) # End register
+#
+main()
diff --git a/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoXcfToJpg.py
b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoXcfToJpg.py
new file mode 100644
index 0000000..98be9d6
--- /dev/null
+++ b/content/tutorials/Automate_Editing_in_GIMP/plug-ins/autoXcfToJpg.py
@@ -0,0 +1,84 @@
+#! /usr/bin/env python
+#
+############################################################################
+#
+from gimpfu import *
+import os
+import re
+#
+if os.name == 'posix':
+ Home = os.environ['HOME']
+elif os.name == 'nt':
+ Home = os.environ['HOMEPATH']
+xcfDir = os.path.join(Home, "Pictures")
+jpegDir = os.path.join(Home, "Pictures")
+#
+def autoXcfToJpg(srcPath, tgtPath):
+ """Registered function autoXcfToJpg, Converts all of the
+ Xcfs in the source directory into jpeg files in a target
+ directory. Requires two arguments, the paths to the source and
+ target directories. DOES NOT require an image to be open.
+ """
+ # Run autoUpdate on all of the images in the source directory
+ pdb.python_fu_autoAutoUpdate(srcPath)
+
+ # Find all of the files in the source and target directories
+ allFileList = os.listdir(srcPath)
+ existingList = os.listdir(tgtPath)
+ srcFileList = []
+ tgtFileList = []
+ # Index for parasites
+ pIndex = 5
+ xform = re.compile('\.xcf', re.IGNORECASE)
+ # Find all of the xcf files in the list & make jpg file names
+ for fname in allFileList:
+ fnameLow = fname.lower()
+ if fnameLow.count('.xcf') > 0:
+ srcFileList.append(fname)
+ tgtFileList.append(xform.sub('.jpg',fname))
+ tgtFileDict = dict(zip(srcFileList, tgtFileList))
+ quality = 0.95
+ for srcFile in srcFileList:
+ doIt = False
+ srcFilePath = os.path.join(srcPath, srcFile)
+ theImage = pdb.gimp_file_load(srcFilePath, srcFilePath)
+ theDrawable = theImage.active_drawable
+ if 'FINISHED' == str(theImage.parasite_find('CurrentStep')):
+ if 'YES' == str(theImage.parasite_find('OverwriteJpg')):
+ doIt = True
+ # Reset the overwrite flag to NO, so it does it once.
+ theImage.attach_new_parasite('OverwriteJpg',pIndex, 'NO')
+ pdb.gimp_xcf_save(0, theImage, theDrawable,
+ srcFilePath, srcFilePath)
+ if tgtFileDict[srcFile] not in existingList:
+ doIt = True
+ if doIt:
+ tgtFilePath = os.path.join(tgtPath, tgtFileDict[srcFile])
+ # All sorts of parameters on jpeg save, no idea what
+ # most of them are.
+ theDrawable = pdb.gimp_image_flatten(theImage)
+ pdb.file_jpeg_save(theImage, theDrawable, tgtFilePath,
+ tgtFilePath, quality, 0, 1, 0, "", 0, 1, 0, 0)
+ pdb.gimp_image_delete(theImage)
+#
+############################################################################
+#
+register (
+ "autoXcfToJpg", # Name registered in Procedure Browser
+ "TITLE", # Widget title
+ "TITLE", #
+ "Stephen Kiel", # Author
+ "Stephen Kiel", # Copyright Holder
+ "July 2013", # Date
+ "3) Export XCF to JPG (Directory)", # Menu Entry
+ "", # Image Type
+ [
+ ( PF_DIRNAME, "srcPath", "XCF Edited Images (source) Directory:", xcfDir ),
+ ( PF_DIRNAME, "tgtPath", "JPG Finished (target) Directory:", jpegDir ),
+ ],
+ [],
+ autoXcfToJpg, # Matches to name of function being defined
+ menu = "<Image>/Automation" # Menu Location
+ ) # End register
+
+main()
diff --git a/content/unix/fonts.md b/content/unix/fonts.md
new file mode 100644
index 0000000..b30d9f8
--- /dev/null
+++ b/content/unix/fonts.md
@@ -0,0 +1,49 @@
+Title: Fonts in GIMP 2.X
+Date: 2015-08-17T16:18:41-05:00
+Modified: 2015-08-17T16:18:45-05:00
+Author: Pat David
+Status: hidden
+
+
+GIMP 2.x handles a variety of font formats, most notably TrueType, OpenType and Type1.
+
+## Adding Fonts for GIMP 2.x
+
+### System-Wide
+
+Most distributions will propose a large choice of fonts in their package manager. The easier is usually to
install them this way.
+
+In case you want to manually add third-party fonts (commercial, downloaded...), adding fonts is usually just
a matter of moving font files into a directory that is searched by the font system. Have a look at
<tt>/etc/fonts/fonts.conf</tt> (and perhaps <tt>/etc/fonts/local.conf</tt>) to find out which directories are
searched, or look for your operating system documentation. After copying the fonts there, you should run
**fc-cache** to regenerate the fonts cache.
+
+Some distributions also propose a graphical tool allowing to install fonts from third-party without
bothering about the specifics.
+
+Fonts added this way will be available to all applications using the Fontconfig system (such as GIMP).
+
+### For GIMP only
+
+You might want to install fonts for use with GIMP only or you might not have permissions to install fonts
system-wide. For such cases, GIMP 2.x also looks for fonts in a GIMP specific font search path. The default
place where GIMP will look for user fonts is <tt>~/.gimp-2.8/fonts/</tt> but you can change it or add other
directories by modifying your <tt>gimprc</tt> or in _Edit -> Preferences -> Folders -> Fonts_. Then press the
_Refresh_ button in the _Fonts_ dialog and start using your new fonts.
+
+## Internal Mechanics
+
+_This section is mostly informational, for users or developers who want to know more about under-the-hood
font handling in GIMP 2.x. In nearly no case would you have to understand and know any of this in order to
have font support in GIMP 2.x. See above for adding fonts simply._
+
+Starting with GIMP version 2.0, font rendering is handled significantly differently from the way it was done
in GIMP 1.0 and 1.2\. GIMP no longer uses the X server to render the fonts. Instead it uses
[Pango](http://www.pango.org/) and the [FreeType](http://www.freetype.org/) library. Font configuration is
handled by [Fontconfig](http://www.fontconfig.org/). As a result you get much better font rendering with real
antialiasing, support for bidirectional text and various scripts.
+
+Fontconfig can nowadays be considered a de-facto standard on Linux and other Unix operating systems as the
simple way to list and share the same fonts accross all application. Most modern graphical programs with text
support now uses this library. And desktop environments (GNOME or KDE for instance) use it too. Therefore it
is likely already installed and properly set up out of the box in most Unix/Linux machines and you have
probably nothing to do in particular to have fonts working in GIMP 2.x.
+
+If you use a very raw operating system though, or if you simply want to know more, you may want to have a
look at the [Fontconfig User Manual](http://www.fontconfig.org/fontconfig-user.html) to create or edit your
font configuration file. Note though that since it is such a widespread system, modern desktops environments
such as GNOME or KDE, or other distribution software, may overwrite your font configuration file. They
sometimes provide an easier interface to manage your fonts instead. For this reason, you are advised to
search the specific documentation of your operating system distribution before updating your font
configuration.
+
+## Known Problems
+
+<dl>
+
+<dt>GIMP crashes when scanning fonts</dt>
+
+<dd>There have been reports of crashes at startup when GIMP scans your font directories. These crashes
should go away as soon as you update to a newer version of fontconfig (>= 2.2.0). As a quick workaround you
can start gimp with the <kbd>--no-fonts</kbd> command-line option but of course you will not be able to use
the text tool then.</dd>
+
+<dt>GIMP cannot see my X fonts</dt>
+
+<dd>GIMP does not use the X server or any X font server, so don't be surprised if GIMP doesn't see the fonts
you configured in your X11 setup. If you wish to add fonts, see the instructions above.</dd>
+
+</dl>
+
diff --git a/content/unix/gimprc b/content/unix/gimprc
new file mode 100644
index 0000000..8474f35
--- /dev/null
+++ b/content/unix/gimprc
@@ -0,0 +1,583 @@
+# This is the system-wide gimprc file. Any change made in this file will
+# affect all users of this system, provided that they are not overriding the
+# default values in their personal gimprc file.
+#
+# Lines that start with a '#' are comments. Blank lines are ignored.
+#
+# By default everything in this file is commented out. The file then
+# documents the default values and shows what changes are possible.
+#
+# The variable ${gimp_dir} is set to the value of the environment variable
+# GIMP2_DIRECTORY or, if that is not set, the compiled-in default value is
+# used. If GIMP2_DIRECTORY is not an absolute path, it is interpreted
+# relative to your home directory.
+
+# Sets the temporary storage directory. Files will appear here during the
+# course of running the GIMP. Most files will disappear when the GIMP exits,
+# but some files are likely to remain, so it is best if this directory not be
+# one that is shared by other users. This is a single folder.
+#
+# (temp-path "${gimp_dir}/tmp")
+
+# Sets the swap file location. The gimp uses a tile based memory allocation
+# scheme. The swap file is used to quickly and easily swap tiles out to disk
+# and back in. Be aware that the swap file can easily get very large if the
+# GIMP is used with large images. Also, things can get horribly slow if the
+# swap file is created on a directory that is mounted over NFS. For these
+# reasons, it may be desirable to put your swap file in "/tmp". This is a
+# single folder.
+#
+# (swap-path "${gimp_dir}")
+
+# There is always a tradeoff between memory usage and speed. In most cases,
+# the GIMP opts for speed over memory. However, if memory is a big issue,
+# try to enable this setting. Possible values are yes and no.
+#
+# (stingy-memory-use no)
+
+# On multiprocessor machines, if GIMP has been compiled with --enable-mp this
+# sets how many processors GIMP should use simultaneously. This is an
+# integer value.
+#
+# (num-processors 1)
+
+# The tile cache is used to make sure the GIMP doesn't thrash tiles between
+# memory and disk. Setting this value higher will cause the GIMP to use less
+# swap space, but will also cause the GIMP to use more memory. Conversely, a
+# smaller cache size causes the GIMP to use more swap space and less memory.
+# The integer size can contain a suffix of 'B', 'K', 'M' or 'G' which makes
+# GIMP interpret the size as being specified in bytes, kilobytes, megabytes
+# or gigabytes. If no suffix is specified the size defaults to being
+# specified in kilobytes.
+#
+# (tile-cache-size 64M)
+
+# Sets the level of interpolation used for scaling and other transformations.
+# Possible values are none, linear and cubic.
+#
+# (interpolation-type linear)
+
+# Sets the plug-in search path. This is a colon-separated list of folders to
+# search.
+#
+# (plug-in-path "${gimp_dir}/plug-ins:${gimp_plug_in_dir}/plug-ins")
+
+# Sets the module search path. This is a colon-separated list of folders to
+# search.
+#
+# (module-path "${gimp_dir}/modules:${gimp_plug_in_dir}/modules")
+
+# Sets the environ search path. This is a colon-separated list of folders to
+# search.
+#
+# (environ-path "${gimp_dir}/environ:${gimp_plug_in_dir}/environ")
+
+# Sets the brush search path. This is a colon-separated list of folders to
+# search.
+#
+# (brush-path "${gimp_dir}/brushes:${gimp_data_dir}/brushes")
+
+# This is a colon-separated list of folders to search.
+#
+# (brush-path-writable "${gimp_dir}/brushes")
+
+# Sets the pattern search path. This is a colon-separated list of folders to
+# search.
+#
+# (pattern-path "${gimp_dir}/patterns:${gimp_data_dir}/patterns")
+
+# This is a colon-separated list of folders to search.
+#
+# (pattern-path-writable "${gimp_dir}/patterns")
+
+# Sets the palette search path. This is a colon-separated list of folders to
+# search.
+#
+# (palette-path "${gimp_dir}/palettes:${gimp_data_dir}/palettes")
+
+# This is a colon-separated list of folders to search.
+#
+# (palette-path-writable "${gimp_dir}/palettes")
+
+# Sets the gradient search path. This is a colon-separated list of folders
+# to search.
+#
+# (gradient-path "${gimp_dir}/gradients:${gimp_data_dir}/gradients")
+
+# This is a colon-separated list of folders to search.
+#
+# (gradient-path-writable "${gimp_dir}/gradients")
+
+# Where to look for fonts. This is a colon-separated list of folders to
+# search.
+#
+# (font-path "${gimp_dir}/fonts:${gimp_data_dir}/fonts")
+
+# This is a colon-separated list of folders to search.
+#
+# (font-path-writable "${gimp_dir}/fonts")
+
+# Specify a default brush. The brush is searched for in the specified brush
+# path. This is a string value.
+#
+# (default-brush "Circle (11)")
+
+# Specify a default pattern. The pattern is searched for in the specified
+# pattern path. This is a string value.
+#
+# (default-pattern "Pine")
+
+# Specify a default palette. The palette is searched for in the specified
+# palette path. This is a string value.
+#
+# (default-palette "Default")
+
+# Specify a default gradient. The gradient is searched for in the specified
+# gradient path. This is a string value.
+#
+# (default-gradient "FG to BG (RGB)")
+
+# Specify a default font. The font is searched for in the fontconfig font
+# path. This is a string value.
+#
+# (default-font "Sans")
+
+# When enabled, the selected brush will be used for all tools. Possible
+# values are yes and no.
+#
+# (global-brush yes)
+
+# When enabled, the selected pattern will be used for all tools. Possible
+# values are yes and no.
+#
+# (global-pattern yes)
+
+# When enabled, the selected palette will be used for all tools. Possible
+# values are yes and no.
+#
+# (global-palette yes)
+
+# When enabled, the selected gradient will be used for all tools. Possible
+# values are yes and no.
+#
+# (global-gradient yes)
+
+# When enabled, the selected font will be used for all tools. Possible
+# values are yes and no.
+#
+# (global-font yes)
+
+# Sets the default image in the "File/New" dialog. This is a parameter list.
+#
+# (default-image
+# (width 256)
+# (height 256)
+# (unit inches)
+# (xresolution 72.000000)
+# (yresolution 72.000000)
+# (resolution-unit inches)
+# (image-type rgb)
+# (fill-type background-fill)
+# (comment "Created with The GIMP"))
+
+# Specify a default image grid. This is a parameter list.
+#
+# (default-grid
+# (style intersections)
+# (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000))
+# (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000))
+# (xspacing 10.000000)
+# (yspacing 10.000000)
+# (spacing-unit inches)
+# (xoffset 0.000000)
+# (yoffset 0.000000)
+# (offset-unit inches))
+
+# Sets the minimal number of operations that can be undone. More undo levels
+# are kept available until the undo-size limit is reached. This is an
+# integer value.
+#
+# (undo-levels 5)
+
+# Sets an upper limit to the memory that is used per image to keep operations
+# on the undo stack. Regardless of this setting, at least as many undo-levels
+# as configured can be undone. The integer size can contain a suffix of 'B',
+# 'K', 'M' or 'G' which makes GIMP interpret the size as being specified in
+# bytes, kilobytes, megabytes or gigabytes. If no suffix is specified the
+# size defaults to being specified in kilobytes.
+#
+# (undo-size 4M)
+
+# Sets the size of the previews in the Undo History. Possible values are
+# tiny, extra-small, small, medium, large, extra-large, huge, enormous and
+# gigantic.
+#
+# (undo-preview-size large)
+
+# Sets the pluginrc search path. This is a single filename.
+#
+# (pluginrc-path "${gimp_dir}/pluginrc")
+
+# Sets whether GIMP should create previews of layers and channels. Previews
+# in the layers and channels dialog are nice to have but they can slow things
+# down when working with large images. Possible values are yes and no.
+#
+# (layer-previews yes)
+
+# Sets the default preview size for layers and channels. Possible values are
+# tiny, extra-small, small, medium, large, extra-large, huge, enormous and
+# gigantic.
+#
+# (layer-preview-size medium)
+
+# Sets the size of the thumbnail saved with each image. Note that GIMP can
+# not save thumbnails if layer previews are disabled. Possible values are
+# none, normal and large.
+#
+# (thumbnail-size normal)
+
+# Install a private colormap; might be useful on pseudocolor visuals.
+# Possible values are yes and no.
+#
+# (install-colormap no)
+
+# Generally only a concern for 8-bit displays, this sets the minimum number
+# of system colors allocated for the GIMP. This is an integer value.
+#
+# (min-colors 144)
+
+# Speed of marching ants in the selection outline. This value is in
+# milliseconds (less time indicates faster marching). This is an integer
+# value.
+#
+# (marching-ants-speed 300)
+
+# When enabled, the image window will automatically resize itself, when
+# zooming into and out of images. Possible values are yes and no.
+#
+# (resize-windows-on-zoom no)
+
+# When enabled, the image window will automatically resize itself, whenever
+# the physical image size changes. Possible values are yes and no.
+#
+# (resize-windows-on-resize no)
+
+# When enabled, this will ensure that each pixel of an image gets mapped to a
+# pixel on the screen. Possible values are yes and no.
+#
+# (default-dot-for-dot yes)
+
+# When enabled, this will ensure that the full image is visible after a file
+# is opened, otherwise it will be displayed with a scale of 1:1. Possible
+# values are yes and no.
+#
+# (initial-zoom-to-fit yes)
+
+# When enabled, the X server is queried for the mouse's current position on
+# each motion event, rather than relying on the position hint. This means
+# painting with large brushes should be more accurate, but it may be slower.
+# Perversely, on some X servers enabling this option results in faster
+# painting. Possible values are yes and no.
+#
+# (perfect-mouse yes)
+
+# Sets the mode of cursor the GIMP will use. Possible values are tool-icon,
+# tool-crosshair and crosshair.
+#
+# (cursor-mode tool-icon)
+
+# Context-dependent cursors are cool. They are enabled by default. However,
+# they require overhead that you may want to do without. Possible values are
+# yes and no.
+#
+# (cursor-updating yes)
+
+# When enabled, all paint tools will show a preview of the current brush's
+# outline. Possible values are yes and no.
+#
+# (show-brush-outline yes)
+
+# Sets the text to appear in image window titles. This is a format string;
+# certain % character sequences are recognised and expanded as follows:
+#
+# %% literal percent sign
+# %f bare filename, or "Untitled"
+# %F full path to file, or "Untitled"
+# %p PDB image id
+# %i view instance number
+# %t image type (RGB, grayscale, indexed)
+# %z zoom factor as a percentage
+# %s source scale factor
+# %d destination scale factor
+# %Dx expands to x if the image is dirty, the empty string otherwise
+# %Cx expands to x if the image is clean, the empty string otherwise
+# %l the number of layers
+# %L the number of layers (long form)
+# %m memory used by the image
+# %n the name of the active layer/channel
+# %P the PDB id of the active layer/channel
+# %w image width in pixels
+# %W image width in real-world units
+# %h image height in pixels
+# %H image height in real-world units
+# %u unit symbol
+# %U unit abbreviation
+#
+#
+# (image-title-format "%D*%f-%p.%i (%t, %L) %z%%")
+
+# Sets the text to appear in image window status bars. This is a format
+# string; certain % character sequences are recognised and expanded as
+# follows:
+#
+# %% literal percent sign
+# %f bare filename, or "Untitled"
+# %F full path to file, or "Untitled"
+# %p PDB image id
+# %i view instance number
+# %t image type (RGB, grayscale, indexed)
+# %z zoom factor as a percentage
+# %s source scale factor
+# %d destination scale factor
+# %Dx expands to x if the image is dirty, the empty string otherwise
+# %Cx expands to x if the image is clean, the empty string otherwise
+# %l the number of layers
+# %L the number of layers (long form)
+# %m memory used by the image
+# %n the name of the active layer/channel
+# %P the PDB id of the active layer/channel
+# %w image width in pixels
+# %W image width in real-world units
+# %h image height in pixels
+# %H image height in real-world units
+# %u unit symbol
+# %U unit abbreviation
+#
+#
+# (image-status-format "%n (%m)")
+
+# Ask for confirmation before closing an image without saving. Possible
+# values are yes and no.
+#
+# (confirm-on-close yes)
+
+# Sets the monitor's horizontal resolution, in dots per inch. If set to 0,
+# forces the X server to be queried for both horizontal and vertical
+# resolution information. This is a float value.
+#
+# (monitor-xresolution 72.000000)
+
+# Sets the monitor's vertical resolution, in dots per inch. If set to 0,
+# forces the X server to be queried for both horizontal and vertical
+# resolution information. This is a float value.
+#
+# (monitor-yresolution 72.000000)
+
+# When enabled, the GIMP will use the monitor resolution from the windowing
+# system. Possible values are yes and no.
+#
+# (monitor-resolution-from-windowing-system yes)
+
+# Sets the size of the navigation preview available in the lower right corner
+# of the image window. Possible values are tiny, extra-small, small, medium,
+# large, extra-large, huge, enormous and gigantic.
+#
+# (navigation-preview-size medium)
+
+# Sets the default settings for the image view. This is a parameter list.
+#
+# (default-view
+# (show-menubar yes)
+# (show-rulers yes)
+# (show-scrollbars yes)
+# (show-statusbar yes)
+# (show-selection yes)
+# (show-layer-boundary yes)
+# (show-guides yes)
+# (show-grid no)
+# (padding-mode default)
+# (padding-color (color-rgba 1.000000 1.000000 1.000000 1.000000)))
+
+# Sets the default settings used when an image is viewed in fullscreen mode.
+# This is a parameter list.
+#
+# (default-fullscreen-view
+# (show-menubar no)
+# (show-rulers no)
+# (show-scrollbars no)
+# (show-statusbar no)
+# (show-selection no)
+# (show-layer-boundary no)
+# (show-guides no)
+# (show-grid no)
+# (padding-mode custom)
+# (padding-color (color-rgba 0.000000 0.000000 0.000000 1.000000)))
+
+# When enabled, an image will become the active image when its image window
+# receives the focus. This is useful for window managers using "click to
+# focus". Possible values are yes and no.
+#
+# (activate-on-focus yes)
+
+# Sets the size of the checkerboard used to display transparency. Possible
+# values are small-checks, medium-checks and large-checks.
+#
+# (transparency-size medium-checks)
+
+# Sets the manner in which transparency is displayed in images. Possible
+# values are light-checks, gray-checks, dark-checks, white-only, gray-only
+# and black-only.
+#
+# (transparency-type gray-checks)
+
+# This is the distance in pixels where Guide and Grid snapping activates.
+# This is an integer value.
+#
+# (snap-distance 8)
+
+# Tools such as fuzzy-select and bucket fill find regions based on a
+# seed-fill algorithm. The seed fill starts at the intially selected pixel
+# and progresses in all directions until the difference of pixel intensity
+# from the original is greater than a specified threshold. This value
+# represents the default threshold. This is an integer value.
+#
+# (default-threshold 15)
+
+# When enabled, the GIMP will use a different info window per image view.
+# Possible values are yes and no.
+#
+# (info-window-per-display no)
+
+# When enabled, the GIMP will not save if the image is unchanged since
+# opening it. Possible values are yes and no.
+#
+# (trust-dirty-flag no)
+
+# Remember the current tool, pattern, color, and brush across GIMP sessions.
+# Possible values are yes and no.
+#
+# (save-device-status no)
+
+# Save the positions and sizes of the main dialogs when the GIMP exits.
+# Possible values are yes and no.
+#
+# (save-session-info yes)
+
+# Let GIMP try to restore your last saved session on each startup. Possible
+# values are yes and no.
+#
+# (restore-session yes)
+
+# Enable to display a handy GIMP tip on startup. Possible values are yes and
+# no.
+#
+# (show-tips yes)
+
+# Enable to display tooltips. Possible values are yes and no.
+#
+# (show-tool-tips yes)
+
+# When enabled, menus can be torn off. Possible values are yes and no.
+#
+# (tearoff-menus yes)
+
+# When enabled, you can change keyboard shortcuts for menu items by hitting a
+# key combination while the menu item is highlighted. Possible values are
+# yes and no.
+#
+# (can-change-accels no)
+
+# Save changed keyboard shortcuts when the GIMP exits. Possible values are
+# yes and no.
+#
+# (save-accels yes)
+
+# Restore saved keyboard shortcuts on each GIMP startup. Possible values are
+# yes and no.
+#
+# (restore-accels yes)
+
+# How many recently opened image filenames to keep on the File menu. This is
+# an integer value.
+#
+# (last-opened-size 10)
+
+# GIMP will warn the user if an attempt is made to create an image that would
+# take more memory than the size specified here. The integer size can
+# contain a suffix of 'B', 'K', 'M' or 'G' which makes GIMP interpret the
+# size as being specified in bytes, kilobytes, megabytes or gigabytes. If no
+# suffix is specified the size defaults to being specified in kilobytes.
+#
+# (max-new-image-size 64M)
+
+# Sets the theme search path. This is a colon-separated list of folders to
+# search.
+#
+# (theme-path "${gimp_dir}/themes:${gimp_data_dir}/themes")
+
+# The name of the theme to use. This is a string value.
+#
+# (theme "Default")
+
+# When enabled, pressing F1 will open the help browser. Possible values are
+# yes and no.
+#
+# (use-help yes)
+
+# Specifies the language preferences used by the help system. This is a
+# colon-separated list of language identifiers with decreasing priority. If
+# empty, the language is taken from the user's locale setting. This is a
+# string value.
+#
+# (help-locales "")
+
+# Sets the browser used by the help system. Possible values are gimp and
+# web-browser.
+#
+# (help-browser gimp)
+
+# Sets the external web browser to be used. This can be an absolute path or
+# the name of an executable to search for in the user's PATH. If the command
+# contains '%s' it will be replaced with the URL, else the URL will be
+# appended to the command with a space separating the two. This is a single
+# filename.
+#
+# (web-browser "mozilla %s")
+
+# The window type hint that is set on the toolbox. This may affect how your
+# window manager decorates and handles the toolbox window. Possible values
+# are normal and utility.
+#
+# (toolbox-window-hint normal)
+
+# The window type hint that is set on dock windows. This may affect the way
+# your window manager decorates and handles dock windows. Possible values
+# are normal and utility.
+#
+# (dock-window-hint normal)
+
+# Where to search for fractals used by the Fractal Explorer plug-in. This is
+# a colon-separated list of folders to search.
+#
+# (fractalexplorer-path "${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer")
+
+# Where to search for Gfig figures used by the Gfig plug-in. This is a
+# colon-separated list of folders to search.
+#
+# (gfig-path "${gimp_dir}/gfig:${gimp_data_dir}/gfig")
+
+# Where to search for gflares used by the GFlare plug-in. This is a
+# colon-separated list of folders to search.
+#
+# (gflare-path "${gimp_dir}/gflare:${gimp_data_dir}/gflare")
+
+# Where to search for data used by the Gimpressionist plug-in. This is a
+# colon-separated list of folders to search.
+#
+# (gimpressionist-path "${gimp_dir}/gimpressionist:${gimp_data_dir}/gimpressionist")
+
+# This path will be searched for scripts when the Script-Fu plug-in is run.
+# This is a colon-separated list of folders to search.
+#
+# (script-fu-path "${gimp_dir}/scripts:${gimp_data_dir}/scripts")
+
diff --git a/content/unix/gimprc.md b/content/unix/gimprc.md
new file mode 100644
index 0000000..7810074
--- /dev/null
+++ b/content/unix/gimprc.md
@@ -0,0 +1,596 @@
+Title: gimprc
+Date: 2015-08-17T16:27:52-05:00
+Author: Pat David
+Status: hidden
+
+<style>
+ .codehilite {
+ max-width: 40rem;
+ font-size: 0.75rem;
+ }
+</style>
+
+
+ # This is the system-wide gimprc file. Any change made in this file will
+ # affect all users of this system, provided that they are not overriding the
+ # default values in their personal gimprc file.
+ #
+ # Lines that start with a '#' are comments. Blank lines are ignored.
+ #
+ # By default everything in this file is commented out. The file then
+ # documents the default values and shows what changes are possible.
+ #
+ # The variable ${gimp_dir} is set to the value of the environment variable
+ # GIMP2_DIRECTORY or, if that is not set, the compiled-in default value is
+ # used. If GIMP2_DIRECTORY is not an absolute path, it is interpreted
+ # relative to your home directory.
+
+ # Sets the temporary storage directory. Files will appear here during the
+ # course of running the GIMP. Most files will disappear when the GIMP exits,
+ # but some files are likely to remain, so it is best if this directory not be
+ # one that is shared by other users. This is a single folder.
+ #
+ # (temp-path "${gimp_dir}/tmp")
+
+ # Sets the swap file location. The gimp uses a tile based memory allocation
+ # scheme. The swap file is used to quickly and easily swap tiles out to disk
+ # and back in. Be aware that the swap file can easily get very large if the
+ # GIMP is used with large images. Also, things can get horribly slow if the
+ # swap file is created on a directory that is mounted over NFS. For these
+ # reasons, it may be desirable to put your swap file in "/tmp". This is a
+ # single folder.
+ #
+ # (swap-path "${gimp_dir}")
+
+ # There is always a tradeoff between memory usage and speed. In most cases,
+ # the GIMP opts for speed over memory. However, if memory is a big issue,
+ # try to enable this setting. Possible values are yes and no.
+ #
+ # (stingy-memory-use no)
+
+ # On multiprocessor machines, if GIMP has been compiled with --enable-mp this
+ # sets how many processors GIMP should use simultaneously. This is an
+ # integer value.
+ #
+ # (num-processors 1)
+
+ # The tile cache is used to make sure the GIMP doesn't thrash tiles between
+ # memory and disk. Setting this value higher will cause the GIMP to use less
+ # swap space, but will also cause the GIMP to use more memory. Conversely, a
+ # smaller cache size causes the GIMP to use more swap space and less memory.
+ # The integer size can contain a suffix of 'B', 'K', 'M' or 'G' which makes
+ # GIMP interpret the size as being specified in bytes, kilobytes, megabytes
+ # or gigabytes. If no suffix is specified the size defaults to being
+ # specified in kilobytes.
+ #
+ # (tile-cache-size 64M)
+
+ # Sets the level of interpolation used for scaling and other transformations.
+ # Possible values are none, linear and cubic.
+ #
+ # (interpolation-type linear)
+
+ # Sets the plug-in search path. This is a colon-separated list of folders to
+ # search.
+ #
+ # (plug-in-path "${gimp_dir}/plug-ins:${gimp_plug_in_dir}/plug-ins")
+
+ # Sets the module search path. This is a colon-separated list of folders to
+ # search.
+ #
+ # (module-path "${gimp_dir}/modules:${gimp_plug_in_dir}/modules")
+
+ # Sets the environ search path. This is a colon-separated list of folders to
+ # search.
+ #
+ # (environ-path "${gimp_dir}/environ:${gimp_plug_in_dir}/environ")
+
+ # Sets the brush search path. This is a colon-separated list of folders to
+ # search.
+ #
+ # (brush-path "${gimp_dir}/brushes:${gimp_data_dir}/brushes")
+
+ # This is a colon-separated list of folders to search.
+ #
+ # (brush-path-writable "${gimp_dir}/brushes")
+
+ # Sets the pattern search path. This is a colon-separated list of folders to
+ # search.
+ #
+ # (pattern-path "${gimp_dir}/patterns:${gimp_data_dir}/patterns")
+
+ # This is a colon-separated list of folders to search.
+ #
+ # (pattern-path-writable "${gimp_dir}/patterns")
+
+ # Sets the palette search path. This is a colon-separated list of folders to
+ # search.
+ #
+ # (palette-path "${gimp_dir}/palettes:${gimp_data_dir}/palettes")
+
+ # This is a colon-separated list of folders to search.
+ #
+ # (palette-path-writable "${gimp_dir}/palettes")
+
+ # Sets the gradient search path. This is a colon-separated list of folders
+ # to search.
+ #
+ # (gradient-path "${gimp_dir}/gradients:${gimp_data_dir}/gradients")
+
+ # This is a colon-separated list of folders to search.
+ #
+ # (gradient-path-writable "${gimp_dir}/gradients")
+
+ # Where to look for fonts. This is a colon-separated list of folders to
+ # search.
+ #
+ # (font-path "${gimp_dir}/fonts:${gimp_data_dir}/fonts")
+
+ # This is a colon-separated list of folders to search.
+ #
+ # (font-path-writable "${gimp_dir}/fonts")
+
+ # Specify a default brush. The brush is searched for in the specified brush
+ # path. This is a string value.
+ #
+ # (default-brush "Circle (11)")
+
+ # Specify a default pattern. The pattern is searched for in the specified
+ # pattern path. This is a string value.
+ #
+ # (default-pattern "Pine")
+
+ # Specify a default palette. The palette is searched for in the specified
+ # palette path. This is a string value.
+ #
+ # (default-palette "Default")
+
+ # Specify a default gradient. The gradient is searched for in the specified
+ # gradient path. This is a string value.
+ #
+ # (default-gradient "FG to BG (RGB)")
+
+ # Specify a default font. The font is searched for in the fontconfig font
+ # path. This is a string value.
+ #
+ # (default-font "Sans")
+
+ # When enabled, the selected brush will be used for all tools. Possible
+ # values are yes and no.
+ #
+ # (global-brush yes)
+
+ # When enabled, the selected pattern will be used for all tools. Possible
+ # values are yes and no.
+ #
+ # (global-pattern yes)
+
+ # When enabled, the selected palette will be used for all tools. Possible
+ # values are yes and no.
+ #
+ # (global-palette yes)
+
+ # When enabled, the selected gradient will be used for all tools. Possible
+ # values are yes and no.
+ #
+ # (global-gradient yes)
+
+ # When enabled, the selected font will be used for all tools. Possible
+ # values are yes and no.
+ #
+ # (global-font yes)
+
+ # Sets the default image in the "File/New" dialog. This is a parameter list.
+ #
+ # (default-image
+ # (width 256)
+ # (height 256)
+ # (unit inches)
+ # (xresolution 72.000000)
+ # (yresolution 72.000000)
+ # (resolution-unit inches)
+ # (image-type rgb)
+ # (fill-type background-fill)
+ # (comment "Created with The GIMP"))
+
+ # Specify a default image grid. This is a parameter list.
+ #
+ # (default-grid
+ # (style intersections)
+ # (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000))
+ # (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000))
+ # (xspacing 10.000000)
+ # (yspacing 10.000000)
+ # (spacing-unit inches)
+ # (xoffset 0.000000)
+ # (yoffset 0.000000)
+ # (offset-unit inches))
+
+ # Sets the minimal number of operations that can be undone. More undo levels
+ # are kept available until the undo-size limit is reached. This is an
+ # integer value.
+ #
+ # (undo-levels 5)
+
+ # Sets an upper limit to the memory that is used per image to keep operations
+ # on the undo stack. Regardless of this setting, at least as many undo-levels
+ # as configured can be undone. The integer size can contain a suffix of 'B',
+ # 'K', 'M' or 'G' which makes GIMP interpret the size as being specified in
+ # bytes, kilobytes, megabytes or gigabytes. If no suffix is specified the
+ # size defaults to being specified in kilobytes.
+ #
+ # (undo-size 4M)
+
+ # Sets the size of the previews in the Undo History. Possible values are
+ # tiny, extra-small, small, medium, large, extra-large, huge, enormous and
+ # gigantic.
+ #
+ # (undo-preview-size large)
+
+ # Sets the pluginrc search path. This is a single filename.
+ #
+ # (pluginrc-path "${gimp_dir}/pluginrc")
+
+ # Sets whether GIMP should create previews of layers and channels. Previews
+ # in the layers and channels dialog are nice to have but they can slow things
+ # down when working with large images. Possible values are yes and no.
+ #
+ # (layer-previews yes)
+
+ # Sets the default preview size for layers and channels. Possible values are
+ # tiny, extra-small, small, medium, large, extra-large, huge, enormous and
+ # gigantic.
+ #
+ # (layer-preview-size medium)
+
+ # Sets the size of the thumbnail saved with each image. Note that GIMP can
+ # not save thumbnails if layer previews are disabled. Possible values are
+ # none, normal and large.
+ #
+ # (thumbnail-size normal)
+
+ # Install a private colormap; might be useful on pseudocolor visuals.
+ # Possible values are yes and no.
+ #
+ # (install-colormap no)
+
+ # Generally only a concern for 8-bit displays, this sets the minimum number
+ # of system colors allocated for the GIMP. This is an integer value.
+ #
+ # (min-colors 144)
+
+ # Speed of marching ants in the selection outline. This value is in
+ # milliseconds (less time indicates faster marching). This is an integer
+ # value.
+ #
+ # (marching-ants-speed 300)
+
+ # When enabled, the image window will automatically resize itself, when
+ # zooming into and out of images. Possible values are yes and no.
+ #
+ # (resize-windows-on-zoom no)
+
+ # When enabled, the image window will automatically resize itself, whenever
+ # the physical image size changes. Possible values are yes and no.
+ #
+ # (resize-windows-on-resize no)
+
+ # When enabled, this will ensure that each pixel of an image gets mapped to a
+ # pixel on the screen. Possible values are yes and no.
+ #
+ # (default-dot-for-dot yes)
+
+ # When enabled, this will ensure that the full image is visible after a file
+ # is opened, otherwise it will be displayed with a scale of 1:1. Possible
+ # values are yes and no.
+ #
+ # (initial-zoom-to-fit yes)
+
+ # When enabled, the X server is queried for the mouse's current position on
+ # each motion event, rather than relying on the position hint. This means
+ # painting with large brushes should be more accurate, but it may be slower.
+ # Perversely, on some X servers enabling this option results in faster
+ # painting. Possible values are yes and no.
+ #
+ # (perfect-mouse yes)
+
+ # Sets the mode of cursor the GIMP will use. Possible values are tool-icon,
+ # tool-crosshair and crosshair.
+ #
+ # (cursor-mode tool-icon)
+
+ # Context-dependent cursors are cool. They are enabled by default. However,
+ # they require overhead that you may want to do without. Possible values are
+ # yes and no.
+ #
+ # (cursor-updating yes)
+
+ # When enabled, all paint tools will show a preview of the current brush's
+ # outline. Possible values are yes and no.
+ #
+ # (show-brush-outline yes)
+
+ # Sets the text to appear in image window titles. This is a format string;
+ # certain % character sequences are recognised and expanded as follows:
+ #
+ # %% literal percent sign
+ # %f bare filename, or "Untitled"
+ # %F full path to file, or "Untitled"
+ # %p PDB image id
+ # %i view instance number
+ # %t image type (RGB, grayscale, indexed)
+ # %z zoom factor as a percentage
+ # %s source scale factor
+ # %d destination scale factor
+ # %Dx expands to x if the image is dirty, the empty string otherwise
+ # %Cx expands to x if the image is clean, the empty string otherwise
+ # %l the number of layers
+ # %L the number of layers (long form)
+ # %m memory used by the image
+ # %n the name of the active layer/channel
+ # %P the PDB id of the active layer/channel
+ # %w image width in pixels
+ # %W image width in real-world units
+ # %h image height in pixels
+ # %H image height in real-world units
+ # %u unit symbol
+ # %U unit abbreviation
+ #
+ #
+ # (image-title-format "%D*%f-%p.%i (%t, %L) %z%%")
+
+ # Sets the text to appear in image window status bars. This is a format
+ # string; certain % character sequences are recognised and expanded as
+ # follows:
+ #
+ # %% literal percent sign
+ # %f bare filename, or "Untitled"
+ # %F full path to file, or "Untitled"
+ # %p PDB image id
+ # %i view instance number
+ # %t image type (RGB, grayscale, indexed)
+ # %z zoom factor as a percentage
+ # %s source scale factor
+ # %d destination scale factor
+ # %Dx expands to x if the image is dirty, the empty string otherwise
+ # %Cx expands to x if the image is clean, the empty string otherwise
+ # %l the number of layers
+ # %L the number of layers (long form)
+ # %m memory used by the image
+ # %n the name of the active layer/channel
+ # %P the PDB id of the active layer/channel
+ # %w image width in pixels
+ # %W image width in real-world units
+ # %h image height in pixels
+ # %H image height in real-world units
+ # %u unit symbol
+ # %U unit abbreviation
+ #
+ #
+ # (image-status-format "%n (%m)")
+
+ # Ask for confirmation before closing an image without saving. Possible
+ # values are yes and no.
+ #
+ # (confirm-on-close yes)
+
+ # Sets the monitor's horizontal resolution, in dots per inch. If set to 0,
+ # forces the X server to be queried for both horizontal and vertical
+ # resolution information. This is a float value.
+ #
+ # (monitor-xresolution 72.000000)
+
+ # Sets the monitor's vertical resolution, in dots per inch. If set to 0,
+ # forces the X server to be queried for both horizontal and vertical
+ # resolution information. This is a float value.
+ #
+ # (monitor-yresolution 72.000000)
+
+ # When enabled, the GIMP will use the monitor resolution from the windowing
+ # system. Possible values are yes and no.
+ #
+ # (monitor-resolution-from-windowing-system yes)
+
+ # Sets the size of the navigation preview available in the lower right corner
+ # of the image window. Possible values are tiny, extra-small, small, medium,
+ # large, extra-large, huge, enormous and gigantic.
+ #
+ # (navigation-preview-size medium)
+
+ # Sets the default settings for the image view. This is a parameter list.
+ #
+ # (default-view
+ # (show-menubar yes)
+ # (show-rulers yes)
+ # (show-scrollbars yes)
+ # (show-statusbar yes)
+ # (show-selection yes)
+ # (show-layer-boundary yes)
+ # (show-guides yes)
+ # (show-grid no)
+ # (padding-mode default)
+ # (padding-color (color-rgba 1.000000 1.000000 1.000000 1.000000)))
+
+ # Sets the default settings used when an image is viewed in fullscreen mode.
+ # This is a parameter list.
+ #
+ # (default-fullscreen-view
+ # (show-menubar no)
+ # (show-rulers no)
+ # (show-scrollbars no)
+ # (show-statusbar no)
+ # (show-selection no)
+ # (show-layer-boundary no)
+ # (show-guides no)
+ # (show-grid no)
+ # (padding-mode custom)
+ # (padding-color (color-rgba 0.000000 0.000000 0.000000 1.000000)))
+
+ # When enabled, an image will become the active image when its image window
+ # receives the focus. This is useful for window managers using "click to
+ # focus". Possible values are yes and no.
+ #
+ # (activate-on-focus yes)
+
+ # Sets the size of the checkerboard used to display transparency. Possible
+ # values are small-checks, medium-checks and large-checks.
+ #
+ # (transparency-size medium-checks)
+
+ # Sets the manner in which transparency is displayed in images. Possible
+ # values are light-checks, gray-checks, dark-checks, white-only, gray-only
+ # and black-only.
+ #
+ # (transparency-type gray-checks)
+
+ # This is the distance in pixels where Guide and Grid snapping activates.
+ # This is an integer value.
+ #
+ # (snap-distance 8)
+
+ # Tools such as fuzzy-select and bucket fill find regions based on a
+ # seed-fill algorithm. The seed fill starts at the intially selected pixel
+ # and progresses in all directions until the difference of pixel intensity
+ # from the original is greater than a specified threshold. This value
+ # represents the default threshold. This is an integer value.
+ #
+ # (default-threshold 15)
+
+ # When enabled, the GIMP will use a different info window per image view.
+ # Possible values are yes and no.
+ #
+ # (info-window-per-display no)
+
+ # When enabled, the GIMP will not save if the image is unchanged since
+ # opening it. Possible values are yes and no.
+ #
+ # (trust-dirty-flag no)
+
+ # Remember the current tool, pattern, color, and brush across GIMP sessions.
+ # Possible values are yes and no.
+ #
+ # (save-device-status no)
+
+ # Save the positions and sizes of the main dialogs when the GIMP exits.
+ # Possible values are yes and no.
+ #
+ # (save-session-info yes)
+
+ # Let GIMP try to restore your last saved session on each startup. Possible
+ # values are yes and no.
+ #
+ # (restore-session yes)
+
+ # Enable to display a handy GIMP tip on startup. Possible values are yes and
+ # no.
+ #
+ # (show-tips yes)
+
+ # Enable to display tooltips. Possible values are yes and no.
+ #
+ # (show-tool-tips yes)
+
+ # When enabled, menus can be torn off. Possible values are yes and no.
+ #
+ # (tearoff-menus yes)
+
+ # When enabled, you can change keyboard shortcuts for menu items by hitting a
+ # key combination while the menu item is highlighted. Possible values are
+ # yes and no.
+ #
+ # (can-change-accels no)
+
+ # Save changed keyboard shortcuts when the GIMP exits. Possible values are
+ # yes and no.
+ #
+ # (save-accels yes)
+
+ # Restore saved keyboard shortcuts on each GIMP startup. Possible values are
+ # yes and no.
+ #
+ # (restore-accels yes)
+
+ # How many recently opened image filenames to keep on the File menu. This is
+ # an integer value.
+ #
+ # (last-opened-size 10)
+
+ # GIMP will warn the user if an attempt is made to create an image that would
+ # take more memory than the size specified here. The integer size can
+ # contain a suffix of 'B', 'K', 'M' or 'G' which makes GIMP interpret the
+ # size as being specified in bytes, kilobytes, megabytes or gigabytes. If no
+ # suffix is specified the size defaults to being specified in kilobytes.
+ #
+ # (max-new-image-size 64M)
+
+ # Sets the theme search path. This is a colon-separated list of folders to
+ # search.
+ #
+ # (theme-path "${gimp_dir}/themes:${gimp_data_dir}/themes")
+
+ # The name of the theme to use. This is a string value.
+ #
+ # (theme "Default")
+
+ # When enabled, pressing F1 will open the help browser. Possible values are
+ # yes and no.
+ #
+ # (use-help yes)
+
+ # Specifies the language preferences used by the help system. This is a
+ # colon-separated list of language identifiers with decreasing priority. If
+ # empty, the language is taken from the user's locale setting. This is a
+ # string value.
+ #
+ # (help-locales "")
+
+ # Sets the browser used by the help system. Possible values are gimp and
+ # web-browser.
+ #
+ # (help-browser gimp)
+
+ # Sets the external web browser to be used. This can be an absolute path or
+ # the name of an executable to search for in the user's PATH. If the command
+ # contains '%s' it will be replaced with the URL, else the URL will be
+ # appended to the command with a space separating the two. This is a single
+ # filename.
+ #
+ # (web-browser "mozilla %s")
+
+ # The window type hint that is set on the toolbox. This may affect how your
+ # window manager decorates and handles the toolbox window. Possible values
+ # are normal and utility.
+ #
+ # (toolbox-window-hint normal)
+
+ # The window type hint that is set on dock windows. This may affect the way
+ # your window manager decorates and handles dock windows. Possible values
+ # are normal and utility.
+ #
+ # (dock-window-hint normal)
+
+ # Where to search for fractals used by the Fractal Explorer plug-in. This is
+ # a colon-separated list of folders to search.
+ #
+ # (fractalexplorer-path "${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer")
+
+ # Where to search for Gfig figures used by the Gfig plug-in. This is a
+ # colon-separated list of folders to search.
+ #
+ # (gfig-path "${gimp_dir}/gfig:${gimp_data_dir}/gfig")
+
+ # Where to search for gflares used by the GFlare plug-in. This is a
+ # colon-separated list of folders to search.
+ #
+ # (gflare-path "${gimp_dir}/gflare:${gimp_data_dir}/gflare")
+
+ # Where to search for data used by the Gimpressionist plug-in. This is a
+ # colon-separated list of folders to search.
+ #
+ # (gimpressionist-path "${gimp_dir}/gimpressionist:${gimp_data_dir}/gimpressionist")
+
+ # This path will be searched for scripts when the Script-Fu plug-in is run.
+ # This is a colon-separated list of folders to search.
+ #
+ # (script-fu-path "${gimp_dir}/scripts:${gimp_data_dir}/scripts")
+
diff --git a/pelicanconf.py b/pelicanconf.py
index 28d9471..d6f0c57 100644
--- a/pelicanconf.py
+++ b/pelicanconf.py
@@ -44,10 +44,10 @@ RELATIVE_URLS = True
# We can probably remove 'pages' if nothing ends up there
# This will copy over these folders w/o modification
-STATIC_PATHS = ['images', 'pages', 'tutorials', 'about', 'books', 'develop', 'docs', 'donating',
'downloads', 'features']
+STATIC_PATHS = ['images', 'pages', 'tutorials', 'about', 'books', 'develop', 'docs', 'donating',
'downloads', 'features', 'bugs', 'links', 'man', 'release-notes', 'screenshots', 'source', 'unix']
-PAGE_PATHS = ['about', 'tutorials', 'books', 'develop', 'docs', 'donating', 'downloads', 'features']
+PAGE_PATHS = ['about', 'tutorials', 'books', 'develop', 'docs', 'donating', 'downloads', 'features', 'bugs',
'links', 'man', 'release-notes', 'screenshots', 'source', 'unix']
THEME = "./themes/newgimp"
diff --git a/themes/newgimp/static/css/gimp.css b/themes/newgimp/static/css/gimp.css
index ddd2668..61bb56d 100644
--- a/themes/newgimp/static/css/gimp.css
+++ b/themes/newgimp/static/css/gimp.css
@@ -167,3 +167,28 @@ dt {
dd {
font-weight: 300;
}
+
+
+.fluid-video {
+ position: relative;
+ padding-bottom: 56.25%;
+ padding-top: 30px;
+ height: 0;
+ overflow: hidden;
+}
+
+.fluid-video iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+ol > li > ol {
+ list-style-type: upper-alpha;
+}
+
+ol > li > ol > li > ol {
+ list-style-type: lower-roman;
+}
diff --git a/themes/newgimp/static/css/page.css b/themes/newgimp/static/css/page.css
index 7de0268..0572f48 100644
--- a/themes/newgimp/static/css/page.css
+++ b/themes/newgimp/static/css/page.css
@@ -61,6 +61,7 @@ figure img {
max-width: 100%;
/* margin-bottom: 0.5rem;
*/
+ max-width: 35rem;
}
figure figcaption {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]