[112309] trunk/dports/graphics/gegl

devans at macports.org devans at macports.org
Thu Oct 17 07:41:33 PDT 2013


Revision: 112309
          https://trac.macports.org/changeset/112309
Author:   devans at macports.org
Date:     2013-10-17 07:41:33 -0700 (Thu, 17 Oct 2013)
Log Message:
-----------
gegl: apply upstream patches to fix introspection, vala support 
  * introspection no longer depends on broken babl introspection
  * correctly configure introspection for muniversal
  * remove obsolete opencl and lua patches
  * consolidate ffmpeg patches
  * remove vala variant
  * builds with introspection and vala support by default

Modified Paths:
--------------
    trunk/dports/graphics/gegl/Portfile

Added Paths:
-----------
    trunk/dports/graphics/gegl/files/patch-configure.ac.diff
    trunk/dports/graphics/gegl/files/patch-ffmpeg.diff
    trunk/dports/graphics/gegl/files/patch-fix-introspection.diff

Removed Paths:
-------------
    trunk/dports/graphics/gegl/files/opencl.patch
    trunk/dports/graphics/gegl/files/patch-configure.diff
    trunk/dports/graphics/gegl/files/patch-ffmpeg-1.0.diff
    trunk/dports/graphics/gegl/files/patch-ffmpeg-2.0.diff
    trunk/dports/graphics/gegl/files/patch-workshop-lua-5.2.diff

Modified: trunk/dports/graphics/gegl/Portfile
===================================================================
--- trunk/dports/graphics/gegl/Portfile	2013-10-17 13:33:19 UTC (rev 112308)
+++ trunk/dports/graphics/gegl/Portfile	2013-10-17 14:41:33 UTC (rev 112309)
@@ -6,7 +6,7 @@
 
 name            gegl
 version         0.2.0
-revision        8
+revision        9
 license         {GPL-3+ LGPL-3+}
 set branch      [join [lrange [split ${version} .] 0 1] .]
 categories      graphics
@@ -36,6 +36,7 @@
 depends_lib \
     port:babl \
     port:gtk2 \
+    port:gobject-introspection\
     port:jpeg \
     port:lua \
     port:openexr \
@@ -45,22 +46,31 @@
     path:lib/pkgconfig/sdl.pc:libsdl \
     path:lib/libavcodec.dylib:ffmpeg \
     port:libspiro \
-    port:lensfun
+    port:lensfun \
+    port:vala
 
-patchfiles     patch-configure.diff \
-               opencl.patch \
-               rename-for-altivec.patch \
-               patch-ffmpeg-1.0.diff \
-               patch-ffmpeg-2.0.diff \
-               patch-workshop-lua-5.2.diff
+patchfiles      patch-configure.ac.diff \
+                patch-fix-introspection.diff \
+                rename-for-altivec.patch \
+                patch-ffmpeg.diff
 
-# introspection: Need to define Gegl_0_2_gir_FILES
+use_autoreconf  yes
+autoreconf.args -fvi
 
+# gobject-introspection uses g-ir-scanner, which uses $CC from env
+
+if {[variant_isset universal]} {
+    foreach arch ${configure.universal_archs} {
+        lappend merger_build_args(${arch})  CC='${configure.cc} -arch ${arch}'
+    }
+} else {
+    build.args-append       CC="${configure.cc} ${configure.cc_archflags}"
+}
+
 configure.args  --disable-docs \
                 --disable-silent-rules \
-                --disable-introspection \
+                --enable-introspection=yes \
                 --without-graphviz \
-                --without-vala \
                 --without-umfpack
 
 # disable parallel build, see #31498
@@ -106,11 +116,6 @@
     configure.args-delete --without-graphviz
 }
 
-variant vala description {Enable Vala bindings} {
-    depends_lib-append    port:vala
-    configure.args-delete --without-vala
-}
-
 variant python25 conflicts python26 python27 description {Build using Python 2.5} {
     configure.python          ${prefix}/bin/python2.5
     depends_build-append      port:python25

Deleted: trunk/dports/graphics/gegl/files/opencl.patch
===================================================================
--- trunk/dports/graphics/gegl/files/opencl.patch	2013-10-17 13:33:19 UTC (rev 112308)
+++ trunk/dports/graphics/gegl/files/opencl.patch	2013-10-17 14:41:33 UTC (rev 112309)
@@ -1,50 +0,0 @@
-diff -Naurp gegl/opencl/cl.h gegl/opencl/cl.h
---- gegl/opencl/cl.h	2012-09-03 13:51:13.000000000 -0700
-+++ gegl/opencl/cl.h	2012-09-03 13:46:10.000000000 -0700
-@@ -26,7 +26,7 @@
- #ifndef __OPENCL_CL_H
- #define __OPENCL_CL_H
- 
--#ifdef __APPLE__
-+#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
- #include <OpenCL/cl_platform.h>
- #else
- #include "cl_platform.h"
-diff -Naurp gegl/opencl/cl_gl.h gegl/opencl/cl_gl.h
---- gegl/opencl/cl_gl.h	2012-09-03 13:51:13.000000000 -0700
-+++ gegl/opencl/cl_gl.h	2012-09-03 13:46:10.000000000 -0700
-@@ -32,7 +32,7 @@
- #ifndef __OPENCL_CL_GL_H
- #define __OPENCL_CL_GL_H
- 
--#ifdef __APPLE__
-+#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
- #include <OpenCL/cl.h>
- #include <OpenGL/CGLDevice.h>
- #else
-diff -Naurp gegl/opencl/cl_platform.h gegl/opencl/cl_platform.h
---- gegl/opencl/cl_platform.h	2012-09-03 13:51:13.000000000 -0700
-+++ gegl/opencl/cl_platform.h	2012-09-03 13:53:20.000000000 -0700
-@@ -26,11 +26,6 @@
- #ifndef __CL_PLATFORM_H
- #define __CL_PLATFORM_H
- 
--#ifdef __APPLE__
--    /* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */
--    #include <AvailabilityMacros.h>
--#endif
--
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -45,7 +40,9 @@ extern "C" {
-     #define CL_CALLBACK
- #endif
- 
--#ifdef __APPLE__
-+#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
-+    #include <AvailabilityMacros.h>
-+
-     #define CL_EXTENSION_WEAK_LINK                  __attribute__((weak_import))
-     #define CL_API_SUFFIX__VERSION_1_0              AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
-     #define CL_EXT_SUFFIX__VERSION_1_0              CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER

Added: trunk/dports/graphics/gegl/files/patch-configure.ac.diff
===================================================================
--- trunk/dports/graphics/gegl/files/patch-configure.ac.diff	                        (rev 0)
+++ trunk/dports/graphics/gegl/files/patch-configure.ac.diff	2013-10-17 14:41:33 UTC (rev 112309)
@@ -0,0 +1,20 @@
+--- configure.ac.orig	2012-04-02 14:56:49.000000000 -0700
++++ configure.ac	2013-10-16 17:04:31.000000000 -0700
+@@ -577,6 +577,17 @@
+ AM_PATH_PYTHON([2.5.0],, [:])
+ AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
+ 
++dnl Override standard python locations with MacPorts version specific ones
++
++AC_SUBST([PYTHON_PREFIX], [`$PYTHON -c 'import sys; print(sys.prefix);'`])
++AC_SUBST([PYTHON_EXEC_PREFIX], [`$PYTHON -c 'import sys; print(sys.exec_prefix)'`])
++
++am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
++am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
++
++AC_SUBST([pythondir], [$am_cv_python_pythondir])
++AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
++
+ #################
+ # Check for Cairo
+ #################

Deleted: trunk/dports/graphics/gegl/files/patch-configure.diff
===================================================================
--- trunk/dports/graphics/gegl/files/patch-configure.diff	2013-10-17 13:33:19 UTC (rev 112308)
+++ trunk/dports/graphics/gegl/files/patch-configure.diff	2013-10-17 14:41:33 UTC (rev 112309)
@@ -1,93 +0,0 @@
---- configure.orig	2013-07-03 22:21:24.000000000 -0700
-+++ configure	2013-07-03 22:21:52.000000000 -0700
-@@ -742,7 +742,6 @@ CATALOGS
- MSGFMT_OPTS
- DATADIRNAME
- ALL_LINGUAS
--INTLTOOL_PERL
- GMSGFMT
- MSGFMT
- MSGMERGE
-@@ -18136,70 +18135,6 @@ if test -z "$xgversion" -o -z "$mmversio
-     as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
- fi
- 
--# Extract the first word of "perl", so it can be a program name with args.
--set dummy perl; ac_word=$2
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
--if ${ac_cv_path_INTLTOOL_PERL+:} false; then :
--  $as_echo_n "(cached) " >&6
--else
--  case $INTLTOOL_PERL in
--  [\\/]* | ?:[\\/]*)
--  ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path.
--  ;;
--  *)
--  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--    for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
--    ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
--    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--  done
--IFS=$as_save_IFS
--
--  ;;
--esac
--fi
--INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL
--if test -n "$INTLTOOL_PERL"; then
--  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5
--$as_echo "$INTLTOOL_PERL" >&6; }
--else
--  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
--$as_echo "no" >&6; }
--fi
--
--
--if test -z "$INTLTOOL_PERL"; then
--   as_fn_error $? "perl not found" "$LINENO" 5
--fi
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5
--$as_echo_n "checking for perl >= 5.8.1... " >&6; }
--$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
--if test $? -ne 0; then
--   as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5
--else
--   IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"`
--   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5
--$as_echo "$IT_PERL_VERSION" >&6; }
--fi
--if test "x" != "xno-xml"; then
--   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5
--$as_echo_n "checking for XML::Parser... " >&6; }
--   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
--       { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
--$as_echo "ok" >&6; }
--   else
--       as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5
--   fi
--fi
--
- # Substitute ALL_LINGUAS so we can use it in po/Makefile
- 
- 
-@@ -19635,9 +19570,9 @@ $as_echo "$am_cv_python_version" >&6; }
- 
- 
- 
--  PYTHON_PREFIX='${prefix}'
-+  PYTHON_PREFIX=`$PYTHON -c 'import sys; print sys.prefix;'`
- 
--  PYTHON_EXEC_PREFIX='${exec_prefix}'
-+  PYTHON_EXEC_PREFIX=`$PYTHON -c 'import sys; print sys.exec_prefix;'`
- 
- 
- 

Deleted: trunk/dports/graphics/gegl/files/patch-ffmpeg-1.0.diff
===================================================================
--- trunk/dports/graphics/gegl/files/patch-ffmpeg-1.0.diff	2013-10-17 13:33:19 UTC (rev 112308)
+++ trunk/dports/graphics/gegl/files/patch-ffmpeg-1.0.diff	2013-10-17 14:41:33 UTC (rev 112309)
@@ -1,11 +0,0 @@
---- operations/external/ff-load.c	2012-04-01 13:17:57.000000000 +0200
-+++ operations/external/ff-load.c	2012-07-11 12:42:05.174756560 +0200
-@@ -271,7 +271,7 @@
-       gint err;
- 
-       ff_cleanup (o);
--      err = av_open_input_file (&p->ic, o->path, NULL, 0, NULL);
-+      err = avformat_open_input (&p->ic, o->path, NULL, NULL);
-       if (err < 0)
-         {
-           print_error (o->path, err);

Deleted: trunk/dports/graphics/gegl/files/patch-ffmpeg-2.0.diff
===================================================================
--- trunk/dports/graphics/gegl/files/patch-ffmpeg-2.0.diff	2013-10-17 13:33:19 UTC (rev 112308)
+++ trunk/dports/graphics/gegl/files/patch-ffmpeg-2.0.diff	2013-10-17 14:41:33 UTC (rev 112309)
@@ -1,65 +0,0 @@
---- operations/external/ff-load.c.orig	2013-07-28 22:44:18.000000000 -0700
-+++ operations/external/ff-load.c	2013-07-28 22:45:01.000000000 -0700
-@@ -312,7 +312,7 @@
-       if (p->codec->capabilities & CODEC_CAP_TRUNCATED)
-         p->enc->flags |= CODEC_FLAG_TRUNCATED;
- 
--      if (avcodec_open (p->enc, p->codec) < 0)
-+      if (avcodec_open2 (p->enc, p->codec, NULL) < 0)
-         {
-           g_warning ("error opening codec %s", p->enc->codec->name);
-           return;
---- operations/workshop/external/ff-save.c.orig	2012-03-29 13:05:50.000000000 -0700
-+++ operations/workshop/external/ff-save.c	2013-09-29 13:36:04.000000000 -0700
-@@ -568,7 +568,7 @@
-     }
- 
-   /* open the codec */
--  if (avcodec_open (c, codec) < 0)
-+  if (avcodec_open2 (c, codec, NULL) < 0)
-     {
-       fprintf (stderr, "could not open codec\n");
-       exit (1);
-@@ -769,26 +769,24 @@
-      /*XXX: FOO p->audio_st = add_audio_stream (op, p->oc, p->fmt->audio_codec);*/
-     }
- 
--  if (av_set_parameters (p->oc, NULL) < 0)
--    {
--      fprintf (stderr, "Invalid output format propeters\n%s", "");
--      return -1;
--    }
--
--  dump_format (p->oc, 0, self->path, 1);
-+  av_dump_format (p->oc, 0, self->path, 1);
- 
-   if (p->video_st)
-     open_video (p, p->oc, p->video_st);
-   if (p->audio_st)
-     open_audio (p, p->oc, p->audio_st);
- 
--  if (url_fopen (&p->oc->pb, self->path, URL_WRONLY) < 0)
-+  if (avio_open (&p->oc->pb, self->path, AVIO_FLAG_WRITE) < 0)
-     {
-       fprintf (stderr, "couldn't open '%s'\n", self->path);
-       return -1;
-     }
- 
--  av_write_header (p->oc);
-+  if (avformat_write_header (p->oc, NULL) < 0)
-+     {
-+        fprintf(stderr, "Error occurred when opening output file\n");
-+        return 1;
-+     }
- 
-   return 0;
- }
-@@ -858,7 +856,7 @@
-             av_freep (&p->oc->streams[i]);
-           }
- 
--        url_fclose (&p->oc->pb);
-+        avio_close (p->oc->pb);
-         free (p->oc);
-       }
-       g_free (o->chant_data);

Added: trunk/dports/graphics/gegl/files/patch-ffmpeg.diff
===================================================================
--- trunk/dports/graphics/gegl/files/patch-ffmpeg.diff	                        (rev 0)
+++ trunk/dports/graphics/gegl/files/patch-ffmpeg.diff	2013-10-17 14:41:33 UTC (rev 112309)
@@ -0,0 +1,74 @@
+--- operations/external/ff-load.c.orig	2013-10-15 16:40:50.000000000 -0700
++++ operations/external/ff-load.c	2013-10-15 16:41:16.000000000 -0700
+@@ -271,7 +271,7 @@
+       gint err;
+ 
+       ff_cleanup (o);
+-      err = av_open_input_file (&p->ic, o->path, NULL, 0, NULL);
++      err = avformat_open_input (&p->ic, o->path, NULL, NULL);
+       if (err < 0)
+         {
+           print_error (o->path, err);
+@@ -312,7 +312,7 @@
+       if (p->codec->capabilities & CODEC_CAP_TRUNCATED)
+         p->enc->flags |= CODEC_FLAG_TRUNCATED;
+ 
+-      if (avcodec_open (p->enc, p->codec) < 0)
++      if (avcodec_open2 (p->enc, p->codec, NULL) < 0)
+         {
+           g_warning ("error opening codec %s", p->enc->codec->name);
+           return;
+--- operations/workshop/external/ff-save.c.orig	2013-10-15 16:41:03.000000000 -0700
++++ operations/workshop/external/ff-save.c	2013-10-15 16:41:16.000000000 -0700
+@@ -568,7 +568,7 @@
+     }
+ 
+   /* open the codec */
+-  if (avcodec_open (c, codec) < 0)
++  if (avcodec_open2 (c, codec, NULL) < 0)
+     {
+       fprintf (stderr, "could not open codec\n");
+       exit (1);
+@@ -769,26 +769,24 @@
+      /*XXX: FOO p->audio_st = add_audio_stream (op, p->oc, p->fmt->audio_codec);*/
+     }
+ 
+-  if (av_set_parameters (p->oc, NULL) < 0)
+-    {
+-      fprintf (stderr, "Invalid output format propeters\n%s", "");
+-      return -1;
+-    }
+-
+-  dump_format (p->oc, 0, self->path, 1);
++  av_dump_format (p->oc, 0, self->path, 1);
+ 
+   if (p->video_st)
+     open_video (p, p->oc, p->video_st);
+   if (p->audio_st)
+     open_audio (p, p->oc, p->audio_st);
+ 
+-  if (url_fopen (&p->oc->pb, self->path, URL_WRONLY) < 0)
++  if (avio_open (&p->oc->pb, self->path, AVIO_FLAG_WRITE) < 0)
+     {
+       fprintf (stderr, "couldn't open '%s'\n", self->path);
+       return -1;
+     }
+ 
+-  av_write_header (p->oc);
++  if (avformat_write_header (p->oc, NULL) < 0)
++     {
++        fprintf(stderr, "Error occurred when opening output file\n");
++        return 1;
++     }
+ 
+   return 0;
+ }
+@@ -858,7 +856,7 @@
+             av_freep (&p->oc->streams[i]);
+           }
+ 
+-        url_fclose (&p->oc->pb);
++        avio_close (p->oc->pb);
+         free (p->oc);
+       }
+       g_free (o->chant_data);

Added: trunk/dports/graphics/gegl/files/patch-fix-introspection.diff
===================================================================
--- trunk/dports/graphics/gegl/files/patch-fix-introspection.diff	                        (rev 0)
+++ trunk/dports/graphics/gegl/files/patch-fix-introspection.diff	2013-10-17 14:41:33 UTC (rev 112309)
@@ -0,0 +1,75596 @@
+diff --git a/AUTHORS b/AUTHORS
+index cbdf7df..a53e89a 100644
+--- AUTHORS
++++ AUTHORS
+@@ -14,7 +14,7 @@ Vincent Untz, Debarshi Ray, Stuart Axon, Kao, Barak Itkin, Michael Muré, Mikael
+ Magnusson, Patrick Horgan, Tobias Ellinghaus, Rasmus Hahn, Chantal Racette,
+ John Cupitt, Anthony Thyssen, Emilio Pozuelo Monfort, Robert Sasu, Massimo 
+ Valentini, Hans Lo, Zbigniew Chyla, David Evans, Javier Jardón, Matteo F.
+-Vescovi and Jan Rüegg.
++Vescovi, Jan Rüegg and Zhang Peixuan.
+ 
+ Documentation:
+ ^^^^^^^^^^^^^^
+diff --git a/NEWS b/NEWS
+index d55be3f..95bdda4 100644
+--- NEWS
++++ NEWS
+@@ -28,7 +28,7 @@ Changes in GEGL 0.2.0
+ Contributions from:
+ 
+ Øyvind Kolås, Martin Nordholts, Hans Petter Jansson, Mikael Magnusson, Victor
+-Oliveira, Nils Philippsen, Kevin Kozens, Michael Muré, Jan Rüegg, Michael
++Oliveira, Nils Philippsen, Kevin Cozens, Michael Muré, Jan Rüegg, Michael
+ Natterer, Michael Henning, Massimo Valentini, Alexandre Prokoudine and
+ Jon Nordby.
+ 
+diff --git a/bin/Makefile.am b/bin/Makefile.am
+index c85ecbd..9b6f60c 100644
+--- bin/Makefile.am
++++ bin/Makefile.am
+@@ -25,7 +25,7 @@ AM_LDFLAGS =  \
+ 	$(no_undefined) ../gegl/libgegl-$(GEGL_API_VERSION).la \
+ 	$(DEP_LIBS) $(BABL_LIBS) $(PNG_LIBS) $(LIBSPIRO)
+ 
+-bin_PROGRAMS = gegl
++bin_PROGRAMS = gegl gegl-tester
+ 
+ gegl_SOURCES =			\
+ 	gegl.c			\
+@@ -34,6 +34,9 @@ gegl_SOURCES =			\
+ 	gegl-path-smooth.c	\
+ 	gegl-path-smooth.h
+ 
++gegl_tester_SOURCES = \
++	gegl-tester.c
++
+ if HAVE_SPIRO
+ gegl_SOURCES += gegl-path-spiro.h gegl-path-spiro.c
+ endif
+diff --git a/bin/gegl-options.c b/bin/gegl-options.c
+index e538402..882eb36 100644
+--- bin/gegl-options.c
++++ bin/gegl-options.c
+@@ -18,6 +18,7 @@
+ 
+ #include "config.h"
+ 
++#include <glib/gi18n-lib.h>
+ #include <string.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+@@ -41,7 +42,7 @@ static G_GNUC_NORETURN void
+ usage (char *application_name)
+ {
+     fprintf (stderr,
+-"usage: %s [options] <file | -- [op [op] ..]>\n"
++_("usage: %s [options] <file | -- [op [op] ..]>\n"
+ "\n"
+ "  Options:\n"
+ "     -h, --help      this help information\n"
+@@ -65,7 +66,7 @@ usage (char *application_name)
+ "All parameters following -- are considered ops to be chained together\n"
+ "into a small composition instead of using an xml file, this allows for\n"
+ "easy testing of filters. Be aware that the default value will be used\n"
+-"for all properties.\n"
++"for all properties.\n")
+ , application_name);
+     exit (0);
+ }
+@@ -73,7 +74,7 @@ usage (char *application_name)
+ #define match(string) (!strcmp (*curr, (string)))
+ #define assert_argument() do {\
+     if (!curr[1] || curr[1][0]=='-') {\
+-        fprintf (stderr, "ERROR: '%s' option expected argument\n", *curr);\
++        fprintf (stderr, _("ERROR: '%s' option expected argument\n"), *curr);\
+         exit(-1);\
+     }\
+ }while(0)
+@@ -112,26 +113,27 @@ print_opts (GeglOptions *o)
+   switch (o->mode)
+     {
+       case GEGL_RUN_MODE_DISPLAY:
+-        mode_str = "Display on screen"; break;
++        mode_str = _("Display on screen"); break;
+       case GEGL_RUN_MODE_XML:
+-        mode_str = "Print XML"; break;
++        mode_str = _("Print XML"); break;
+       case GEGL_RUN_MODE_OUTPUT:
+-        mode_str = "Output in a file"; break;
++        mode_str = _("Output in a file"); break;
+       case GEGL_RUN_MODE_HELP:
+-        mode_str = "Display help information"; break;
++        mode_str = _("Display help information"); break;
+       default:
+-        g_warning ("Unknown GeglOption mode: %d", o->mode);
++        g_warning (_("Unknown GeglOption mode: %d"), o->mode);
++        mode_str = _("unknown mode");
+         break;
+     }
+ 
+     fprintf (stderr,
+-"Parsed commandline:\n"
++_("Parsed commandline:\n"
+ "\tmode:   %s\n"
+ "\tfile:   %s\n"
+ "\txml:    %s\n"
+ "\toutput: %s\n"
+ "\trest:   %s\n"
+-"\t\n",
++"\t\n"),
+     mode_str,
+     o->file==NULL?"(null)":o->file,
+     o->xml==NULL?"(null)":o->xml,
+@@ -252,7 +254,7 @@ parse_args (int    argc,
+         }
+ 
+         else if (*curr[0]=='-') {
+-            fprintf (stderr, "\n\nunknown parameter '%s' giving you help instead\n\n\n", *curr);
++            fprintf (stderr, _("\n\nunknown parameter '%s' giving you help instead\n\n\n"), *curr);
+             usage (argv[0]);
+         }
+ 
+diff --git a/bin/gegl-tester.c b/bin/gegl-tester.c
+new file mode 100644
+index 0000000..d30af73
+--- /dev/null
++++ bin/gegl-tester.c
+@@ -0,0 +1,355 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Ville Sokk <ville.sokk at gmail.com>
++ */
++
++#include <glib.h>
++#include <gegl.h>
++#include <gegl-plugin.h>
++#include <string.h>
++#include <glib/gprintf.h>
++
++
++static GRegex   *regex, *exc_regex;
++static gchar    *data_dir        = NULL;
++static gchar    *reference_dir   = NULL;
++static gchar    *output_dir      = NULL;
++static gchar    *pattern         = "";
++static gchar    *exclusion_pattern = "a^"; /* doesn't match anything by default */
++static gboolean *output_all      = FALSE;
++
++static const GOptionEntry options[] =
++{
++  {"data-directory", 'd', 0, G_OPTION_ARG_FILENAME, &data_dir,
++   "Root directory of files used in the composition", NULL},
++
++  {"reference-directory", 'r', 0, G_OPTION_ARG_FILENAME, &reference_dir,
++   "Directory where reference images are located", NULL},
++
++  {"output-directory", 'o', 0, G_OPTION_ARG_FILENAME, &output_dir,
++   "Directory where composition output and diff files are saved", NULL},
++
++  {"pattern", 'p', 0, G_OPTION_ARG_STRING, &pattern,
++   "Regular expression used to match names of operations to be tested", NULL},
++
++  {"exclusion-pattern", 'e', 0, G_OPTION_ARG_STRING, &exclusion_pattern,
++   "Regular expression used to match names of operations not to be tested", NULL},
++
++  {"all", 'a', 0, G_OPTION_ARG_NONE, &output_all,
++   "Create output for all operations using a standard composition "
++   "if no composition is specified", NULL},
++
++  { NULL }
++};
++
++/* convert operation name to output path */
++static gchar*
++operation_to_path (const gchar *op_name,
++                   gboolean     diff)
++{
++  gchar *cleaned = g_strdup (op_name);
++  gchar *filename, *output_path;
++
++  g_strdelimit (cleaned, ":", '-');
++  if (diff)
++    filename = g_strconcat (cleaned, "-diff.png", NULL);
++  else
++    filename = g_strconcat (cleaned, ".png", NULL);
++  output_path = g_build_path (G_DIR_SEPARATOR_S, output_dir, filename, NULL);
++
++  g_free (cleaned);
++  g_free (filename);
++
++  return output_path;
++}
++
++static gboolean
++test_operation (const gchar *op_name,
++                const gchar *image,
++                gchar       *output_path)
++{
++  gchar         *ref_path;
++  GeglNode      *img, *ref_img, *gegl;
++  GeglRectangle  ref_bounds, comp_bounds;
++  gint           ref_pixels;
++  gboolean       result = TRUE;
++
++  gegl = gegl_node_new ();
++
++  ref_path = g_build_path (G_DIR_SEPARATOR_S, reference_dir, image, NULL);
++  ref_img = gegl_node_new_child (gegl,
++                                 "operation", "gegl:load",
++                                 "path", ref_path,
++                                 NULL);
++  g_free (ref_path);
++
++  img = gegl_node_new_child (gegl,
++                             "operation", "gegl:load",
++                             "path", output_path,
++                             NULL);
++
++  ref_bounds  = gegl_node_get_bounding_box (ref_img);
++  comp_bounds = gegl_node_get_bounding_box (img);
++  ref_pixels  = ref_bounds.width * ref_bounds.height;
++
++  if (ref_bounds.width != comp_bounds.width ||
++      ref_bounds.height != comp_bounds.height)
++    {
++      g_printf ("FAIL\n  Reference and composition differ in size\n");
++      result = FALSE;
++    }
++  else
++    {
++      GeglNode *comparison;
++      gdouble   max_diff;
++
++      comparison = gegl_node_create_child (gegl, "gegl:image-compare");
++      gegl_node_link (img, comparison);
++      gegl_node_connect_to (ref_img, "output", comparison, "aux");
++      gegl_node_process (comparison);
++      gegl_node_get (comparison, "max diff", &max_diff, NULL);
++
++      if (max_diff < 1.0)
++        {
++          g_printf ("PASS\n");
++          result = TRUE;
++        }
++      else
++        {
++          GeglNode *output;
++          gchar    *diff_path;
++          gdouble   avg_diff_wrong, avg_diff_total;
++          gint      wrong_pixels;
++
++          gegl_node_get (comparison, "avg_diff_wrong", &avg_diff_wrong,
++                         "avg_diff_total", &avg_diff_total, "wrong_pixels",
++                         &wrong_pixels, NULL);
++
++          g_printf ("FAIL\n  Reference image and composition differ\n"
++                    "    wrong pixels : %i/%i (%2.2f%%)\n"
++                    "    max Δe       : %2.3f\n"
++                    "    avg Δe       : %2.3f (wrong) %2.3f (total)\n",
++                    wrong_pixels, ref_pixels,
++                    (wrong_pixels * 100.0 / ref_pixels),
++                    max_diff, avg_diff_wrong, avg_diff_total);
++
++          diff_path = operation_to_path (op_name, TRUE);
++          output = gegl_node_new_child (gegl,
++                                        "operation", "gegl:png-save",
++                                        "path", diff_path,
++                                        NULL);
++          gegl_node_link (comparison, output);
++          gegl_node_process (output);
++
++          g_free (diff_path);
++
++          result = FALSE;
++        }
++    }
++
++  g_object_unref (gegl);
++  return result;
++}
++
++static void
++standard_output (const gchar *op_name)
++{
++  GeglNode *composition, *input, *aux, *operation, *crop, *output;
++  gchar    *input_path  = g_build_path (G_DIR_SEPARATOR_S, data_dir,
++                                        "standard-input.png", NULL);
++  gchar    *aux_path    = g_build_path (G_DIR_SEPARATOR_S, data_dir,
++                                        "standard-aux.png", NULL);
++  gchar    *output_path = operation_to_path (op_name, FALSE);
++
++  composition = gegl_node_new ();
++  operation = gegl_node_create_child (composition, op_name);
++
++  if (gegl_node_has_pad (operation, "output"))
++    {
++      input = gegl_node_new_child (composition,
++                                   "operation", "gegl:load",
++                                   "path", input_path,
++                                   NULL);
++      aux = gegl_node_new_child (composition,
++                                 "operation", "gegl:load",
++                                 "path", aux_path,
++                                 NULL);
++      crop = gegl_node_new_child (composition,
++                                  "operation", "gegl:crop",
++                                  "width", 200.0,
++                                  "height", 200.0,
++                                  NULL);
++      output = gegl_node_new_child (composition,
++                                    "operation", "gegl:png-save",
++                                    "compression", 9,
++                                    "path", output_path,
++                                    NULL);
++
++      gegl_node_link_many (operation, crop, output, NULL);
++
++      if (gegl_node_has_pad (operation, "input"))
++        gegl_node_link (input, operation);
++
++      if (gegl_node_has_pad (operation, "aux"))
++        gegl_node_connect_to (aux, "output", operation, "aux");
++
++      gegl_node_process (output);
++    }
++
++  g_free (input_path);
++  g_free (aux_path);
++  g_free (output_path);
++  g_object_unref (composition);
++}
++
++static gboolean
++process_operations (GType type)
++{
++  GType    *operations;
++  gboolean  result = TRUE;
++  guint     count;
++  gint      i;
++
++  operations = g_type_children (type, &count);
++
++  if (!operations)
++    {
++      g_free (operations);
++      return TRUE;
++    }
++
++  for (i = 0; i < count; i++)
++    {
++      GeglOperationClass *operation_class;
++      const gchar        *image, *xml, *name;
++      gboolean            matches;
++
++      operation_class = g_type_class_ref (operations[i]);
++      image           = gegl_operation_class_get_key (operation_class, "reference-image");
++      xml             = gegl_operation_class_get_key (operation_class, "reference-composition");
++      name            = gegl_operation_class_get_key (operation_class, "name");
++
++      if (name == NULL)
++        {
++          result = result && process_operations (operations[i]);
++          continue;
++        }
++
++      matches = g_regex_match (regex, name, 0, NULL) &&
++        !g_regex_match (exc_regex, name, 0, NULL);
++
++      if (xml && matches)
++        {
++          GeglNode *composition;
++
++          if (output_all)
++            g_printf ("%s\n", name);
++          else if (image)
++            g_printf ("%s: ", name); /* more information will follow
++                                        if we're testing */
++
++          composition = gegl_node_new_from_xml (xml, data_dir);
++          if (!composition)
++            {
++              g_printf ("FAIL\n  Composition graph is flawed\n");
++              result = FALSE;
++            }
++          else if (image || output_all)
++            {
++              gchar    *output_path = operation_to_path (name, FALSE);
++              GeglNode *output      =
++                gegl_node_new_child (composition,
++                                     "operation", "gegl:png-save",
++                                     "compression", 9,
++                                     "path", output_path,
++                                     NULL);
++              gegl_node_link (composition, output);
++              gegl_node_process (output);
++              g_object_unref (composition);
++
++              /* don't test if run with --all */
++              if (!output_all && image)
++                result = test_operation (name, image, output_path) && result;
++
++              g_free (output_path);
++            }
++        }
++      /* if we are running with --all and the operation doesn't have a
++         composition, use standard composition and images, don't test */
++      else if (output_all && matches &&
++               !(g_type_is_a (operations[i], GEGL_TYPE_OPERATION_SINK) ||
++                 g_type_is_a (operations[i], GEGL_TYPE_OPERATION_TEMPORAL)))
++        {
++          g_printf ("%s\n", name);
++          standard_output (name);
++        }
++
++      result = process_operations (operations[i]) && result;
++    }
++
++  g_free (operations);
++
++  return result;
++}
++
++gint
++main (gint    argc,
++      gchar **argv)
++{
++  gboolean        result;
++  GError         *error = NULL;
++  GOptionContext *context;
++
++  g_thread_init (NULL);
++
++  context = g_option_context_new (NULL);
++  g_option_context_add_main_entries (context, options, NULL);
++  g_option_context_add_group (context, gegl_get_option_group ());
++
++  if (!g_option_context_parse (context, &argc, &argv, &error))
++    {
++      g_printf ("%s\n", error->message);
++      g_error_free (error);
++      result = FALSE;
++    }
++  else if (output_all && !(data_dir && output_dir))
++    {
++      g_printf ("Data and output directories must be specified\n");
++      result = FALSE;
++    }
++  else if (!(output_all || (data_dir && output_dir && reference_dir)))
++    {
++      g_printf ("Data, reference and output directories must be specified\n");
++      result = FALSE;
++    }
++  else
++    {
++      regex = g_regex_new (pattern, 0, 0, NULL);
++      exc_regex = g_regex_new (exclusion_pattern, 0, 0, NULL);
++
++      result = process_operations (GEGL_TYPE_OPERATION);
++
++      g_regex_unref (regex);
++      g_regex_unref (exc_regex);
++    }
++
++  gegl_exit ();
++
++  if (output_all)
++    return 0;
++  else
++    return result;
++}
+diff --git a/bin/gegl.c b/bin/gegl.c
+index 6db3884..25174ef 100644
+--- bin/gegl.c
++++ bin/gegl.c
+@@ -20,6 +20,7 @@
+ 
+ #include <glib.h>
+ #include <glib/gprintf.h>
++#include <glib/gi18n-lib.h>
+ #include <gegl.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -85,13 +86,6 @@ main (gint    argc,
+   GError      *err       = NULL;
+   gchar       *path_root = NULL;
+ 
+-  o = gegl_options_parse (argc, argv);
+-
+-  if (o->fatal_warnings)
+-    {
+-      gegl_enable_fatal_warnings ();
+-    }
+-
+   g_thread_init (NULL);
+   gegl_init (&argc, &argv);
+ #ifdef HAVE_SPIRO
+@@ -99,6 +93,13 @@ main (gint    argc,
+ #endif
+   gegl_path_smooth_init ();
+ 
++  o = gegl_options_parse (argc, argv);
++
++  if (o->fatal_warnings)
++    {
++      gegl_enable_fatal_warnings ();
++    }
++
+   if (o->xml)
+     {
+       path_root = g_get_current_dir ();
+@@ -143,7 +144,7 @@ main (gint    argc,
+           g_file_get_contents (o->file, &script, NULL, &err);
+           if (err != NULL)
+             {
+-              g_warning ("Unable to read file: %s", err->message);
++              g_warning (_("Unable to read file: %s"), err->message);
+             }
+         }
+       else
+@@ -187,7 +188,7 @@ main (gint    argc,
+ 
+   if (!gegl)
+     {
+-      g_print ("Invalid graph, abort.\n");
++      g_print (_("Invalid graph, abort.\n"));
+       return 1;
+     }
+ 
+@@ -247,13 +248,13 @@ main (gint    argc,
+           gegl_node_process (output);
+           g_object_unref (output);
+         }
+-        break;  
++        break;
+ 
+       case GEGL_RUN_MODE_HELP:
+         break;
+ 
+       default:
+-        g_warning ("Unknown GeglOption mode: %d", o->mode);
++        g_warning (_("Unknown GeglOption mode: %d"), o->mode);
+         break;
+     }
+ 
+diff --git a/configure.ac b/configure.ac
+index d18859b..948a942 100644
+--- configure.ac
++++ configure.ac
+@@ -14,7 +14,7 @@ dnl    set GEGL_BINARY_AGE _and_ GEGL_INTERFACE_AGE to 0.
+ 
+ m4_define([gegl_major_version], [0])
+ m4_define([gegl_minor_version], [2])
+-m4_define([gegl_micro_version], [0])
++m4_define([gegl_micro_version], [0])
+ m4_define([gegl_real_version],
+           [gegl_major_version.gegl_minor_version.gegl_micro_version])
+ m4_define([gegl_version], [gegl_real_version])
+@@ -217,6 +217,7 @@ case "$target_or_host" in
+     ;;
+   x86_64-*-*)
+     have_x86=yes
++    have_64_bit=yes
+     AC_DEFINE(ARCH_X86, 1, [Define to 1 if you are compiling for ix86.])
+     AC_DEFINE(ARCH_X86_64, 1, [Define to 1 if you are compiling for amd64.])
+     ;;
+@@ -226,6 +227,7 @@ case "$target_or_host" in
+     ;;
+   ppc64-*-* | powerpc64-*)
+     have_ppc=yes
++    have_64_bit=yes
+     AC_DEFINE(ARCH_PPC, 1, [Define to 1 if you are compiling for PowerPC.])
+     AC_DEFINE(ARCH_PPC64, 1, [Define to 1 if you are compiling for PowerPC64.])
+     ;;
+@@ -233,6 +235,7 @@ case "$target_or_host" in
+     ;;
+ esac
+ 
++AM_CONDITIONAL(HAVE_64_BIT, test "x$have_64_bit" = "xyes")  
+ 
+ 
+ ####################################################
+@@ -482,7 +485,9 @@ AC_CHECK_FUNCS(bind_textdomain_codeset,,
+ ]))
+ LIBS=$gegl_save_LIBS
+ 
+-IT_PROG_INTLTOOL(0.40.1)
++m4_ifdef([IT_PROG_INTLTOOL],[IT_PROG_INTLTOOL(0.40.1),],
++  AC_MSG_ERROR([*** intltool version 0.40.1 or later required]))
++
+ AM_GLIB_GNU_GETTEXT
+ 
+ #########################
+@@ -1098,8 +1103,6 @@ operations/workshop/generated/Makefile
+ tools/Makefile
+ docs/Makefile
+ docs/index-static.txt
+-docs/gallery/Makefile
+-docs/gallery/data/Makefile
+ examples/Makefile
+ examples/data/Makefile
+ tests/Makefile
+@@ -1119,6 +1122,8 @@ gegl-uninstalled.pc
+ # Files with versions in their names
+ AC_CONFIG_FILES(
+ gegl-gegl_api_version.pc:gegl.pc.in
++gegl/gegl-gegl_api_version.deps:gegl/gegl.deps.in
++gegl/Gegl-gegl_api_version.metadata:gegl/Gegl.metadata.in
+ )
+ 
+ AC_OUTPUT
+diff --git a/docs/Makefile.am b/docs/Makefile.am
+index 8f1f3ec..c31bb78 100644
+--- docs/Makefile.am
++++ docs/Makefile.am
+@@ -1,12 +1,13 @@
+-SUBDIRS= gallery
+-#DIST_SUBDIRS= graphics gallery
++#DIST_SUBDIRS= graphics
+ 
+-#	
++#
+ # The patterns used for html creation in the gegl build system
+ # is very small, and should probably be documented in a tutorial.
+ #
+ 
+ gtkdochtmldir = $(datadir)/gtk-doc/html/gegl
++gtkdocimgdir = $(datadir)/gtk-doc/html/gegl/images
++gtkdocexampledir = $(datadir)/gtk-doc/html/gegl/images/examples
+ 
+ HTML_FILES = \
+ 	operations.html		\
+@@ -63,9 +64,18 @@ EXTRA_DIST = \
+ 	images/GEGL.svg			\
+ 	images/gaussian-blur-graph.png	\
+ 	images/gegl.ico			\
++	images/standard-input.png \
++	images/standard-aux.png \
+ 	index-static.txt.in
+ 
++EXAMPLE_FILES = $(wildcard images/examples/*.png)
++EXTRA_DIST += $(EXAMPLE_FILES)
++
+ dist_gtkdochtml_DATA = $(GTKDOC_FILES)
++dist_gtkdocimg_DATA = \
++	images/standard-input.png \
++	images/standard-aux.png
++dist_gtkdocexample_DATA = $(EXAMPLE_FILES)
+ 
+ BUILT_EXTRA_DIST = index.html class-hierarchy.html operations.html
+ 
+@@ -73,9 +83,20 @@ CLEANFILES = README $(HTML_FILES) index-static.txt
+ DISTCLEANFILES = index-static.txt
+ MAINTAINERCLEANFILES = $(BUILT_EXTRA_DIST)
+ 
++exclusion_pattern = "load|buffer-source|pixbuf|nop|clone|convert-format|introspect|layer|image-compare|load|open-buffer|svg-load|exr-load|jpg-load|png-load|magick-load|box-blur|stretch-contrast|remap|matting-global|exp-combine|dropshadow|kuwahara|box-percentile|disc-percentile|snn-percentile|line-profile|buffer-cache|warp|mandelbrot|hstack"
++
+ all-local: $(HTML_FILES)
+ 
+-operations.html: $(top_builddir)/tools/operation_reference$(EXEEXT) $(top_srcdir)/operations/*/*.c
++examples:  $(top_builddir)/bin/gegl-tester$(EXEEXT) $(top_srcdir)/operations/*/*.c
++	@if test -d images/examples; then :; else \
++		echo "Generating example images" ; \
++		mkdir -p images/examples ; \
++		GEGL_SWAP=RAM GEGL_PATH=$(top_builddir)/operations \
++		$(top_builddir)/bin/gegl-tester$(EXEEXT) --all -o images/examples \
++		-d $(srcdir)/images -e $(exclusion_pattern) ; \
++	fi
++
++operations.html: $(top_builddir)/tools/operation_reference$(EXEEXT) $(top_srcdir)/operations/*/*.c | examples
+ 	GEGL_SWAP=RAM GEGL_PATH=$(top_builddir)/operations \
+ 	$(top_builddir)/tools/operation_reference$(EXEEXT) --ops-html > $@
+ 
+@@ -149,6 +170,7 @@ endif
+ api.html: $(top_srcdir)/gegl/gegl.h\
+           $(top_builddir)/gegl/gegl-version.h\
+           $(top_srcdir)/gegl/buffer/gegl-buffer.h\
++	  $(top_srcdir)/gegl/buffer/gegl-buffer-iterator.h\
+           $(top_srcdir)/gegl/gegl-utils.h\
+           $(top_srcdir)/gegl/property-types/gegl-color.h\
+           $(top_srcdir)/gegl/gegl-matrix.h\
+@@ -160,6 +182,7 @@ if HAVE_RUBY
+ 	    $(top_srcdir)/gegl/gegl.h			\
+ 	    $(top_builddir)/gegl/gegl-version.h		\
+ 	    $(top_srcdir)/gegl/buffer/gegl-buffer.h	\
++	    $(top_srcdir)/gegl/buffer/gegl-buffer-iterator.h\
+             $(top_srcdir)/gegl/gegl-utils.h \
+             $(top_srcdir)/gegl/property-types/gegl-color.h\
+             $(top_srcdir)/gegl/gegl-matrix.h \
+@@ -185,7 +208,7 @@ index.html: index-static.txt		\
+ 	Makefile.am
+ if HAVE_ASCIIDOC
+ 	@echo "HTML: $@"
+-	$(ASCIIDOC) --unsafe  -o $@ -a stylesdir=`pwd`/$(srcdir) -a toc -a theme=gegl -a quirks! $<
++	$(ASCIIDOC) --unsafe  -o $@ -a stylesheet=`pwd`/gegl.css -a toc -a quirks! $<
+ else
+ 	@echo "*** asciidoc must be available in order to make dist"
+ 	@false
+@@ -194,19 +217,18 @@ endif
+ development.html: $(top_srcdir)/docs/development.txt
+ if HAVE_ASCIIDOC
+ 	@echo "HTML: $@"
+-	$(ASCIIDOC) --unsafe  -o $@ -a stylesdir=`pwd`/$(srcdir) -a toc -a theme=gegl -a quirks! $<
++	$(ASCIIDOC) --unsafe  -o $@ -a stylesheet=`pwd`/gegl.css -a toc -a quirks! $<
+ else
+ 	@echo "*** asciidoc must be available in order to make dist"
+ 	@false
+ endif
+ 
+ clean-local:
++	rm -rf images/examples; \
+ 	if test $(srcdir) = .; then :; else 	\
+ 	    rm -f gegl.devhelp;	\
+ 	fi
+ 
+-
+-
+ distclean-local:
+ 	if test $(srcdir) = .; then :; else 	\
+ 		rm -f $(BUILT_EXTRA_DIST);	\
+diff --git a/docs/abyss_policy.txt b/docs/abyss_policy.txt
+new file mode 100644
+index 0000000..e1e862b
+--- /dev/null
++++ docs/abyss_policy.txt
+@@ -0,0 +1,23 @@
++gegl_buffer_get and gegl_buffer_set are the functions to read and
++write pixels in a GeglBuffer. They both take an array of pixels and
++write/read data from tiles according to the region of interest.
++
++Abyss is a rectangle that defines what area of the buffer is
++readable. Abyss policy determines how to read pixels when the
++requested region of interest (or pixel) is not contained within the
++abyss. Abyss policy only affects reading and not writing of pixels and
++does so when gegl_buffer_get is called. Each policy has a separate
++iterator function that reads data to the array. If the region of
++interest is inside the abyss rectangle a simple read function is used
++to avoid the overhead of dealing with abyss. Abyss policy also affects
++samplers since they use gegl_bufer_get.
++
++There are 5 abyss policies represented by the following enums
++GEGL_ABYSS_NONE - abyss pixels are zeroed
++GEGL_ABYSS_WHITE - abyss pixels are white
++GEGL_ABYSS_BLACK - abyss pixels are black
++GEGL_ABYSS_CLAMP - each pixel's coordinates are clamped to the abyss
++rectangle
++GEGL_ABYSS_LOOP - each pixel's coordinates wrap when exceeding the
++abyss rectangle (the buffer is essentially tiled)
++
+diff --git a/docs/editor.txt b/docs/editor.txt
+new file mode 100644
+index 0000000..bf14e8f
+--- /dev/null
++++ docs/editor.txt
+@@ -0,0 +1,35 @@
++This document outlines development on the node editor for 2012 Google Summer of Code
++
++Isaac Wagner
++isaacbw at src.gnome.org
++
++DESIRED FEATURES
++================
++
++*Resizable image preview thumbnails on nodes
++*Text annotations
++*Automatic graph layouts
++*Bezier curve pad connections
++*Undo/redo
++*Adding nodes from a list or by typing the name in manually
++*Copy and paste of single nodes or groups of nodes, preserves properties
++*Grayscale Mask Node - includes primitive painting interface for creating grayscale mask inputs directly in the editor
++*Load meta-ops from XML
++*Store node position data in composition XML file
++*Auto-arrange loaded compositions if no positional data is present
++*Display properties directly on node
++*Standard keyboard shortcuts for undo/redo, copy/paste, deleting nodes
++*Can "shade" nodes which reduces their size to just displaying the node title
++
++LIBRARIES
++=========
++
++GTK+
++Cairo
++
++DESIGN NOTES
++============
++
++Node editing and rendering code will be modular and reusable within other node manipulation applications
++
++The node editing will exist within its own GTK+ widget and other GEGL-specific functionality will be implemented within the shell application
+diff --git a/docs/gallery/Makefile.am b/docs/gallery/Makefile.am
+deleted file mode 100644
+index 61d8bde..0000000
+--- docs/gallery/Makefile.am
++++ /dev/null
+@@ -1,47 +0,0 @@
+-SUBDIRS=data
+-
+-EXTRA_DIST=$(wildcard *.xml)
+-
+-index.html: Makefile.am images.stamp
+-	@echo "<html><head><title>GEGL gallery</title><style type='text/css'>@import url(../gegl.css);</style><link rel='shortcut icon' href='../images/gegl.ico'/></head><body><div id='toc'><ul><li><a href='../index.html'>GEGL</a></li><li>&nbsp;</li><li><a href='#'>Gallery</a></li>" > index.html
+-
+-	@for XML in $(srcdir)/*.xml;do echo "<li><a href='#$$XML'>&nbsp;&nbsp;"`echo $$XML|sed -e 's/.xml//' -e 's/-/ /g'`"</a></li>">>index.html;done;
+-	@echo "</ul></div><div class='paper'><div class='content'>" >> index.html
+-	@echo "<p>This gallery shows samples of GEGL output it is used to both document current capabilities, and help spot regressions.</p>" >> index.html
+-	@for XML in $(srcdir)/*.xml; do\
+-	    export BASE=`echo $$XML | sed s?$(srcdir)/?? | sed s/\.xml//`;\
+-	    TXT=$$BASE".txt";\
+-	    PNG=$$BASE".png";\
+-	    GRAPH=$$BASE"-graph.png";\
+-	    echo "<div style='margin-bottom:3em;clear:both;'><a name='$$XML'></a>" >> index.html;\
+-	    echo "<h3>$$BASE</h3>" >> index.html; \
+-	    echo "<p><a href='$$XML'>xml</a> | <a href='$$GRAPH'>graph</a> | <a href='$$TXT'>time usage</a>" >> index.html; \
+-	    echo `cat $$TXT |grep "Total time:"|sed -e "s/Total time:/: /"`"&nbsp;&nbsp;" >> index.html;\
+-	    echo "<span style='color:red'>"`cat $$TXT |grep buffer-leaks`"</span>" >> index.html;\
+-	    echo "</p>" >> index.html;\
+-	    echo "<a href='$$PNG'><img src='$$PNG' style='border:0;float:right; max-width: 22em;padding-left:1em;padding-bottom: 1em;'></a>" >> index.html;\
+-	    echo "<form><textarea rows='14' cols='30' readonly='readonly'>" >> index.html;\
+-	    cat $$XML | sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/' >> index.html;\
+-	    echo "</textarea></form>" >> index.html;\
+-	    echo "</div>">>index.html;\
+-	   done;\
+-	echo "</div></div></div></body></html>" >> index.html
+-
+-images.stamp: $(wildcard $(top_builddir)/operations/*/*$(SHREXT)) \
+-	      $(top_builddir)/gegl/libgegl-$(GEGL_API_VERSION).la \
+-	      $(top_builddir)/bin/gegl$(EXEEXT)
+-	@echo "--[Updating sample compositions]--"; \
+-	for XML in $(srcdir)/*.xml; do \
+-	   echo $${XML}; \
+-	   $(MAKE) `echo $${XML}|sed s/xml/png/`>/dev/null; \
+-	done
+-	@touch images.stamp
+-
+-%.png: %.xml
+-	@GEGL_DEBUG_TIME=yes GEGL_SWAP=RAM GEGL_PATH=$(top_builddir)/operations \
+-	$(top_builddir)/bin/gegl$(EXEEXT) $< -o `echo $@ | sed s?$(srcdir)/??` > `echo $@ | sed s?$(srcdir)/?? | sed -e s/png/txt/`;
+-
+-all-local: images.stamp index.html
+-
+-clean-local:
+-	rm -f index.html images.stamp *.png *.txt
+diff --git a/docs/gallery/OpenRaster-00.xml b/docs/gallery/OpenRaster-00.xml
+deleted file mode 100644
+index aefd76a..0000000
+--- docs/gallery/OpenRaster-00.xml
++++ /dev/null
+@@ -1,7 +0,0 @@
+-<!-- Minimal OpenRaster test,
+-     a single JPG layer -->
+-<image>
+-  <stack>
+-      <layer src='data/romedalen.jpg'/>
+-  </stack>
+-</image>
+diff --git a/docs/gallery/OpenRaster-01.xml b/docs/gallery/OpenRaster-01.xml
+deleted file mode 100644
+index 0d9b549..0000000
+--- docs/gallery/OpenRaster-01.xml
++++ /dev/null
+@@ -1,15 +0,0 @@
+-<!-- A background layer and two
+-layers composited on top -->
+-
+-<image>
+-  <stack>
+-     <layer src='data/OpenRaster.png'
+-            x='10'
+-            y='40'
+-            opacity='0.4'/>
+-     <layer src='data/OpenRaster.png'
+-            x='72'
+-            y='8'/>
+-     <layer src='data/romedalen.jpg'/>
+-  </stack>
+-</image>
+diff --git a/docs/gallery/OpenRaster-04.xml b/docs/gallery/OpenRaster-04.xml
+deleted file mode 100644
+index f3b25c0..0000000
+--- docs/gallery/OpenRaster-04.xml
++++ /dev/null
+@@ -1,16 +0,0 @@
+-<image>
+-  <stack>
+-      <filter type='gegl:brightness-contrast'>
+-         <params>
+-              <param name='contrast'>1.4</param>
+-         </params>
+-      </filter>
+-      <filter type='gegl:unsharp-mask'>
+-          <params>
+-              <param name='std-dev'>4.8</param>
+-              <param name='scale'>2.0</param>
+-          </params>
+-      </filter>
+-      <layer src='data/romedalen.jpg'/>
+-  </stack>
+-</image>
+diff --git a/docs/gallery/clones.xml b/docs/gallery/clones.xml
+deleted file mode 100644
+index 69e1211..0000000
+--- docs/gallery/clones.xml
++++ /dev/null
+@@ -1,218 +0,0 @@
+-<?xml version='1.0' encoding='UTF-8'?>
+-<gegl>
+-  <node operation='gegl:over'>
+-      <node operation='gegl:translate'>
+-          <params>
+-            <param name='x'>10.000000</param>
+-            <param name='y'>280.000000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:scale'>
+-          <params>
+-            <param name='origin-x'>0.000000</param>
+-            <param name='origin-y'>0.000000</param>
+-            <param name='filter'>linear</param>
+-            <param name='hard-edges'>false</param>
+-            <param name='x'>0.200000</param>
+-            <param name='y'>0.200000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:box-blur'>
+-          <params>
+-            <param name='radius'>5.000000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:load' id='clone0'>
+-          <params>
+-            <param name='path'>data/car-stack.jpg</param>
+-          </params>
+-      </node>
+-  </node>
+-  <node operation='gegl:over'>
+-      <node operation='gegl:translate'>
+-          <params>
+-            <param name='x'>10.000000</param>
+-            <param name='y'>190.000000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:gamma'>
+-          <params>
+-            <param name='value'>2.500000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:scale'>
+-          <params>
+-            <param name='origin-x'>0.000000</param>
+-            <param name='origin-y'>0.000000</param>
+-            <param name='filter'>linear</param>
+-            <param name='hard-edges'>false</param>
+-            <param name='x'>0.200000</param>
+-            <param name='y'>0.200000</param>
+-          </params>
+-      </node>
+-      <clone ref='clone0'/>
+-  </node>
+-  <node operation='gegl:over'>
+-      <node operation='gegl:translate'>
+-          <params>
+-            <param name='x'>10.000000</param>
+-            <param name='y'>100.000000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:invert'>
+-      </node>
+-      <node operation='gegl:scale'>
+-          <params>
+-            <param name='origin-x'>0.000000</param>
+-            <param name='origin-y'>0.000000</param>
+-            <param name='filter'>linear</param>
+-            <param name='hard-edges'>false</param>
+-            <param name='x'>0.200000</param>
+-            <param name='y'>0.200000</param>
+-          </params>
+-      </node>
+-      <clone ref='clone0'/>
+-  </node>
+-  <node operation='gegl:over'>
+-      <node operation='gegl:translate'>
+-          <params>
+-            <param name='x'>10.000000</param>
+-            <param name='y'>10.000000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:threshold'>
+-          <params>
+-            <param name='value'>0.500000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:scale'>
+-          <params>
+-            <param name='origin-x'>0.000000</param>
+-            <param name='origin-y'>0.000000</param>
+-            <param name='filter'>linear</param>
+-            <param name='hard-edges'>false</param>
+-            <param name='x'>0.200000</param>
+-            <param name='y'>0.200000</param>
+-          </params>
+-      </node>
+-      <clone ref='clone0'/>
+-  </node>
+-  <node operation='gegl:over'>
+-      <node operation='gegl:translate'>
+-          <params>
+-            <param name='x'>335.000000</param>
+-            <param name='y'>210.000000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:over'>
+-          <node operation='gegl:translate'>
+-              <params>
+-                <param name='x'>-10.000000</param>
+-                <param name='y'>120.000000</param>
+-              </params>
+-          </node>
+-          <node operation='gegl:opacity'>
+-              <params>
+-                <param name='value'>0.600000</param>
+-              </params>
+-          </node>
+-          <node operation='gegl:dst-over'>
+-              <node operation='gegl:opacity'>
+-                  <params>
+-                    <param name='value'>2.000000</param>
+-                  </params>
+-              </node>
+-              <node operation='gegl:translate'>
+-                  <params>
+-                    <param name='x'>0.000000</param>
+-                    <param name='y'>0.000000</param>
+-                  </params>
+-              </node>
+-              <node operation='gegl:box-blur'>
+-                  <params>
+-                    <param name='radius'>4.000000</param>
+-                  </params>
+-              </node>
+-              <node operation='gegl:brightness-contrast'>
+-                  <params>
+-                    <param name='contrast'>1.000000</param>
+-                    <param name='brightness'>-1.000000</param>
+-                  </params>
+-              </node>
+-              <node operation='gegl:text' id='clone1'>
+-                  <params>
+-                    <param name='string'>warming up</param>
+-                    <param name='font'>Sans</param>
+-                    <param name='size'>30.000000</param>
+-                    <param name='color'>rgb(1.0000, 1.0000, 1.0000)</param>
+-                    <param name='wrap'>-1</param>
+-                    <param name='alignment'>0</param>
+-                    <param name='width'>177</param>
+-                    <param name='height'>36</param>
+-                  </params>
+-              </node>
+-          </node>
+-          <clone ref='clone1'/>
+-      </node>
+-      <node operation='gegl:scale'>
+-          <params>
+-            <param name='origin-x'>0.000000</param>
+-            <param name='origin-y'>0.000000</param>
+-            <param name='filter'>linear</param>
+-            <param name='hard-edges'>false</param>
+-            <param name='x'>0.500000</param>
+-            <param name='y'>0.500000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:dst-over' id='clone2'>
+-          <node operation='gegl:opacity'>
+-              <params>
+-                <param name='value'>0.800000</param>
+-              </params>
+-          </node>
+-          <node operation='gegl:translate'>
+-              <params>
+-                <param name='x'>5.000000</param>
+-                <param name='y'>-2.000000</param>
+-              </params>
+-          </node>
+-          <node operation='gegl:add'>
+-              <params>
+-                <param name='value'>0.500000</param>
+-              </params>
+-          </node>
+-          <node operation='gegl:gaussian-blur'>
+-              <params>
+-                <param name='std-dev-x'>5.000000</param>
+-                <param name='std-dev-y'>5.000000</param>
+-              </params>
+-          </node>
+-          <node operation='gegl:load' id='clone3'>
+-              <params>
+-                <param name='path'>data/gegl.png</param>
+-              </params>
+-          </node>
+-      </node>
+-      <clone ref='clone3'/>
+-  </node>
+-  <node operation='gegl:over'>
+-      <node operation='gegl:translate'>
+-          <params>
+-            <param name='x'>90.000000</param>
+-            <param name='y'>90.000000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:opacity'>
+-          <params>
+-            <param name='value'>-0.500000</param>
+-          </params>
+-      </node>
+-      <node operation='gegl:box-blur'>
+-          <params>
+-            <param name='radius'>15.000000</param>
+-          </params>
+-      </node>
+-      <clone ref='clone2'/>
+-  </node>
+-  <clone ref='clone0'/>
+-</gegl>
+diff --git a/docs/gallery/data/Makefile.am b/docs/gallery/data/Makefile.am
+deleted file mode 100644
+index 0f68210..0000000
+--- docs/gallery/data/Makefile.am
++++ /dev/null
+@@ -1 +0,0 @@
+-EXTRA_DIST=$(wildcard *.png) $(wildcard *.jpg)
+diff --git a/docs/gallery/data/car-stack.jpg b/docs/gallery/data/car-stack.jpg
+deleted file mode 100644
+index df558fe..0000000
+Binary files a/docs/gallery/data/car-stack.jpg and /dev/null differ
+diff --git a/docs/gallery/data/gegl.png b/docs/gallery/data/gegl.png
+deleted file mode 100644
+index 3bf4580..0000000
+Binary files a/docs/gallery/data/gegl.png and /dev/null differ
+diff --git a/docs/gallery/data/romedalen.jpg b/docs/gallery/data/romedalen.jpg
+deleted file mode 100644
+index 4ea3adb..0000000
+Binary files a/docs/gallery/data/romedalen.jpg and /dev/null differ
+diff --git a/docs/gallery/data/vinci-fly3.jpg b/docs/gallery/data/vinci-fly3.jpg
+deleted file mode 100644
+index 0f460f9..0000000
+Binary files a/docs/gallery/data/vinci-fly3.jpg and /dev/null differ
+diff --git a/docs/images/standard-aux.png b/docs/images/standard-aux.png
+new file mode 100644
+index 0000000..145abd5
+Binary files /dev/null and b/docs/images/standard-aux.png differ
+diff --git a/docs/images/standard-input.png b/docs/images/standard-input.png
+new file mode 100644
+index 0000000..339ccd1
+Binary files /dev/null and b/docs/images/standard-input.png differ
+diff --git a/docs/index-static.txt.in b/docs/index-static.txt.in
+index 4d0075e..88621df 100644
+--- docs/index-static.txt.in
++++ docs/index-static.txt.in
+@@ -28,7 +28,7 @@ Features
+      * Processes subregions and dependencies.
+      * Subgraph caches to aid performance of non-destructive editing.
+      * Experimental OpenCL acceleration, with possibility of hybrid cpu/gpu
+-       processing. 
++       processing.
+   - link:api.html#GeglBuffer[GeglBuffer]
+      * Storage of all babl supported formats.
+      * Tiled sparse buffers (larger than RAM images).
+@@ -40,8 +40,8 @@ Features
+   - Operations
+       * PNG, JPEG, SVG, EXR, RAW, ffmpeg, v4l and other image sources.
+       * link:operations.html#cat_render[Pattern renderers]
+-      * link:operations.html#math[Arithmetic operations]
+-      * link_operations.html#porter_duff[porter duff compositing]
++      * link:operations.html#cat_math[Arithmetic operations]
++      * link:operations.html#cat_porter-duff[porter duff compositing]
+       * SVG filter modes and full set of compositing ops from SVG-1.2 draft.
+       * Gaussian blur, bilateral-filter, symmetric nearest neighbour, linear
+       * blur, unsharp mask, pixelize and more.
+@@ -65,14 +65,10 @@ http://git.gnome.org/cgit/gegl/log/[Change log]::
+ http://git.gnome.org/cgit/gegl/tree/NEWS[NEWS]::
+   The NEWS file for a list of major new features (also contains older NEWS).
+ http://bugzilla.gnome.org/buglist.cgi?product=GEGL&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=UNCONFIRMED&bug_status=NEEDINFO[bugzilla]::
+- for known and tracked issues with GEGL and perhaps see the 
++ for known and tracked issues with GEGL and perhaps see the
+ http://blog.gmane.org/gmane.comp.video.gegl.devel?set_blog_all=yes[mail]::
+   The mailinglist archives for some discussion and announcement.
+ 
+-Gallery
+-~~~~~~~
+-For examples of what GEGL's rendering engine currently can do look at the
+-link:gallery/index.html[gallery].
+ 
+ Bugzilla
+ ~~~~~~~~
+@@ -231,7 +227,7 @@ sys::[cat @top_srcdir@/examples/hello-world.c]
+ Operation API
+ ~~~~~~~~~~~~~
+ An API to extend the functionality of GEGL with new image processing primitive,
+-file loaders, export formats or similar. 
++file loaders, export formats or similar.
+ 
+ Each GEGL operation is defined in a .c file that gets turned into a single
+ shared object that is loaded. Each operation is a subclass of one of the
+@@ -308,9 +304,6 @@ operation] for a point operation well sprinkled with comments as a starting poin
+ //
+ //The type of operation associated with a node can be specified either with a
+ //class attribute or by using the operation name as the tag name for the node.
+-//
+-//or documentation on how this XML works, take a look at the sources in the
+-//gallery. And browse the documentation for operations.
+ 
+ Environment
+ ~~~~~~~~~~~
+@@ -467,11 +460,11 @@ dropped into the directory in the build.
+   ├──operations        Runtime loaded plug-ins for image processing operations.
+   │   │
+   │   ├──core ⊙        Basic operations tightly coupled with GEGL.
+-  │   ├──affine        Transforming operations (rotate/scale/translate)
++  │   ├──transform     Transforming operations (rotate/scale/translate)
+   │   ├──generated ⊙   Operations generated from scripts (currently
+   │   ├──external      Operations with external dependencies.
+-  │   ├──common ⊙      Other operations. 
+-  │   └──workshop ⊙    Works in progress, (you must pass --enable-workshop 
++  │   ├──common ⊙      Other operations.
++  │   └──workshop ⊙    Works in progress, (you must pass --enable-workshop
+   │       │            when configurig to build these by default, you can enter
+   │       │            the directory manually and type make && sudo make install
+   │       │            as well.
+@@ -481,13 +474,8 @@ dropped into the directory in the build.
+   │
+   │
+   ├──docs              The GEGL website (this documentation), built for your
+-  │   │                the corresponding sourcetree with correct documentation
+-  │   │                etc.
+-  │   │
+-  │   └──gallery ⊙     A gallery of sample GEGL compositions, using the
+-  │       │            (not yet stabilized) XML format.
+-  │       │
+-  │       └──data      Image data used by the sample compositions.
++  │                    the corresponding sourcetree with correct documentation
++  │                    etc.
+   │
+   ├──bin               gegl binary, for processing XML compositions to png files.
+   │
+@@ -503,7 +491,6 @@ dropped into the directory in the build.
+ <div class="toclevel1"><a href="#gegl">GEGL</a></div>
+ <div class="toclevel2"><a href="#features">Features</a></div>
+ <div class="toclevel2"><a href="#_news">News</a></div>
+-<div class="toclevel2"><a href="gallery/index.html">Gallery</a></div>
+ <!--<div class="toclevel2"><a href="http://bugzilla.gnome.org/buglist.cgi?product=GEGL&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED">Bugzilla</a></div>
+ <div class="toclevel2"><a href="#_mailinglist">Mailinglist</a></div>-->
+ <div class="toclevel2"><a href="#_copyright">Copyright</a></div>
+@@ -529,7 +516,7 @@ dropped into the directory in the build.
+ <div class="toclevel1">&nbsp;</div>
+ <div class="toclevel2"><a href="http://git.gnome.org/cgit/gegl/log/">changes</a></div>
+ <div class="toclevel2"><a href="http://bugzilla.gnome.org/buglist.cgi?product=GEGL&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=UNCONFIRMED&bug_status=NEEDINFO">bugzilla</a></div>
+-<div class="toclevel2"><a href="http://blog.gmane.org/gmane.comp.video.gegl.devel?set_blog_all=yes">mailarchive</a></div>
++<div class="toclevel2"><a href="https://mail.gnome.org/archives/gegl-developer-list/">mailarchive</a></div>
+ <div class="toclevel2"><a href="http://git.gnome.org/cgit/gegl/log/">browse online</a></div>
+ 
+ 
+diff --git a/docs/journal.txt b/docs/journal.txt
+new file mode 100644
+index 0000000..af94b72
+--- /dev/null
++++ docs/journal.txt
+@@ -0,0 +1,155 @@
++Journal / transaction log
++
++The journal stores the changes done to a GEGL graph as a set of transactions.
++This journal can be used as a syncronization point for multiple users of
++a GEGL graph, and can be stored as a file. This file can be embedded into
++a higher level file format to persist undo/redo history across saves/loads
++of a document.
++A program using GEGL may use several independent GEGL graphs, and thus several
++independent journals.
++
++== Usecases ==
++* Base for undo/redo stacks in GEGL based applications
++* Automated testing of GEGL graph manipulation API and interactive view widgets
++* Sharing and manipulation of a GEGL graph between multiple programs
++
++== Operations ==
++- Add node. int parent_node_id, int new_node_id
++- Remove node. int node_id, int previous_parent_node_id
++
++- Link pads. int sink_node_id, char *input_pad_name, int source_node_id, char *output_pad_name
++- Unlink pads. int sink_node_id, char *input_pad_name, int source_node_id, char *output_pad_name
++
++- Change property. int node_id, char *key, char *value, char *previous_value
++- Change operation. int node_id, char *new_operation_name, char *previous_operation_name
++
++Each operation is stored such that the inverse operation can be created
++from the stored information alone. This avoids the need to rewind and replay
++parts of the journal when undoing.
++Property values are stored using property-type specific serialization.
++
++Node references/identifiers:
++- GEGL to maintain an (graph) unique identifier for each node: Add an integer identifier to node when added to the graph.
++- The identifier must be be maintained when changing operations.
++- This identifier should be hidden from applications: could be done by making the property read-only in public interface.
++
++== Transactions ==
++The operations are grouped in transactions. Applications can decide the start and end of a transaction.
++If no transaction is explicitly opened, an implicit transaction for the duration of the operation is created.
++
++After a add node operation, one or more change property and change operation operations must follow.
++
++Transaction operation:
++- Recall state. int block_no, int previous_transaction_block_no
++  The block_no must be for a transaction start
++  Sets the graph state back to that of the given transaction
++
++== File format ==
++Append only file format consisting of a series of entries.
++
++Entries can span a number of blocks, except for transaction end which must
++consist of one block, and file header which must consist of 4 blocks (?)
++
++Entry format:
++Each block entry has has a size of X times Y block. An integer in the start
++of the entry specifies how many blocks the entry consists of.
++Each entry has a integer type, denoting what kind of entry it is.
++
++Each entry has an integer entry_size denoting number of blocks the entry consists of.
++Integer precision: 32 bit?
++Block size: 32 bytes?
++
++File Header:
++- Stores a lock with PID for the active process.
++The lock is taken when a transaction starts, and released on transaction end.
++Other applications can check whether the PID is for an alive process.
++The header is not subject to the append-only rule.
++
++Transaction start:
++- Stores a human string description of the change
++? maybe a transaction size in blocks (can be used to quickly traverse forward)
++
++Transaction end:
++Contains a pointer to the start of transaction, as an integer of the transaction start entry.
++If the pointer ever points to a non-transaction start entry, the journal is inconsistent.
++
++Operation entries:
++Each entry (see above list) has a format depending on its type.
++
++=== Example ===
++
++	---------------------
++	| file header       |
++	---------------------
++	| transaction start |
++	---------------------
++	| add node          |
++	---------------------
++	| set property      |
++	---------------------
++	| set property      |
++	---------------------
++	| link pads         |
++	---------------------
++	| transaction end   |
++	---------------------
++	| transaction start |
++	---------------------
++	| remove node       |
++	---------------------
++	| transaction end   |
++	---------------------
++
++== Public API ==
++
++void gegl_graph_transaction_start(GeglGraph *graph, const char *description);
++ Start a graph journal transaction.
++ Any graph change after this and before transaction_end will be recorded
++ as part of the transaction.
++ @graph: top-level node in a GEGL graph
++ @description a human readable description of the change. UTF-8 encoded
++
++void gegl_graph_transaction_end(GeglGraph *graph);
++ End the current graph journal transaction.
++ @graph: top-level node in a GEGL graph
++
++int gegl_graph_transaction_previous(GeglGraph *graph, int block_no);
++ Return the block number of the transaction before the specified transaction. Does not change graph state.
++ @graph: top-level node in a GEGL graph
++ @block_no <= 0 means end of journal. Only block numbers for transaction start entries are valid
++ @return -1 on invalid block_no, else the block number of the previous transaction
++
++int gegl_graph_transaction_recall(GeglGraph *graph, int block_no);
++ Recall a previous state of the graph.
++ @graph: top-level node in a GEGL graph
++ @block_no <= 0 means end of journal. Only block numbers for transaction start entries are valid
++ @return -1 on invalid block_no, else the block number of the new transaction.
++
++char *gegl_graph_transaction_get_description(GeglGraph *graph, int block_no);
++ Return the human readable description for a given transaction.
++ @graph: top-level node in a GEGL graph
++ @block_no Only block numbers for transaction start entries are valid
++ @return NULL on invalid block_no, else the human readable description passed to transaction_start
++
++== Implementation notes ==
++The implementation could be based on the GeglBuffer file format implementation.
++It is suggested to keep the implementations separate, to risk avoid introducing
++regressions in exist code and because it is possible that GeglBuffer will be
++moved to a separate library at some point.
++
++Before writing a transaction into the log, the transaction should be compacted
++such that no superficial operations are stored. For example if a property
++was first changed from 1.0 to 2.0 and then to 3.0, only one operation should
++be recorded.
++
++== Ideas ==
++* Allow to peek at other versions of the graph in the journal?
++
++* Add API for compacting the journal (to avoid it growing without bounds).
++
++* Add a non-blocking version of transactions.
++Note: not guaranteed to succeed. Applications must gracefully handle the transaction being rejected.
++
++  void gegl_graph_transaction_open(GeglGraph *graph, const char *description);
++  gboolean gegl_graph_transaction_commit(GeglGraph *graph);
++
+diff --git a/gegl/gegl.deps.in b/gegl/gegl.deps.in
+new file mode 100644
+index 0000000..a0af5ae
+--- /dev/null
++++ gegl/gegl.deps.in
+@@ -0,0 +1 @@
++
+diff --git a/gegl/Gegl.metadata.in b/gegl/Gegl.metadata.in
+new file mode 100644
+index 0000000..364070e
+--- /dev/null
++++ gegl/Gegl.metadata.in
+@@ -0,0 +1,2 @@
++Gegl cheader_filename="gegl.h"
++module_register_type skip
+diff --git a/gegl/Makefile.am b/gegl/Makefile.am
+index aef4c33..601cade 100644
+--- gegl/Makefile.am
++++ gegl/Makefile.am
+@@ -50,6 +50,7 @@ GEGL_introspectable_headers =	\
+     buffer/gegl-buffer-backend.h	\
+     buffer/gegl-tile.h			\
+     buffer/gegl-tile-backend.h		\
++    buffer/gegl-tile-handler.h		\
+     buffer/gegl-tile-source.h		\
+     property-types/gegl-paramspecs.h	\
+     property-types/gegl-color.h		\
+@@ -118,10 +119,10 @@ introspection_sources = \
+ INCLUDES = $(AM_CFLAGS) $(AM_CPPFLAGS)
+ 
+ Gegl- at GEGL_API_VERSION@.gir: libgegl- at GEGL_API_VERSION@.la Makefile
+-Gegl_0_1_gir_INCLUDES = GObject-2.0 GLib-2.0 Babl-0.1
+-Gegl_0_1_gir_CFLAGS = $(INCLUDES)
+-Gegl_0_1_gir_LIBS = libgegl- at GEGL_API_VERSION@.la
+-Gegl_0_1_gir_FILES = $(introspection_sources)
++Gegl_ at GEGL_MAJOR_VERSION@_ at GEGL_MINOR_VERSION@_gir_INCLUDES = GObject-2.0 GLib-2.0
++Gegl_ at GEGL_MAJOR_VERSION@_ at GEGL_MINOR_VERSION@_gir_CFLAGS = $(INCLUDES)
++Gegl_ at GEGL_MAJOR_VERSION@_ at GEGL_MINOR_VERSION@_gir_LIBS = libgegl- at GEGL_API_VERSION@.la
++Gegl_ at GEGL_MAJOR_VERSION@_ at GEGL_MINOR_VERSION@_gir_FILES = $(introspection_sources)
+ INTROSPECTION_GIRS += Gegl- at GEGL_API_VERSION@.gir
+ 
+ girdir = $(datadir)/gir-1.0
+@@ -134,7 +135,7 @@ CLEANFILES += $(gir_DATA) $(typelib_DATA)
+ 
+ if HAVE_VALA
+ gegl- at GEGL_API_VERSION@.vapi: Gegl- at GEGL_API_VERSION@.gir
+-	$(VAPIGEN) --library=gegl- at GEGL_API_VERSION@ Gegl- at GEGL_API_VERSION@.gir
++	$(VAPIGEN) --library=gegl- at GEGL_API_VERSION@ --metadatadir=./ Gegl- at GEGL_API_VERSION@.gir
+ 
+ vapidir=$(datadir)/vala/vapi
+ vapi_DATA = \
+diff --git a/gegl/buffer/Makefile.am b/gegl/buffer/Makefile.am
+index 505906f..1a76bbb 100644
+--- gegl/buffer/Makefile.am
++++ gegl/buffer/Makefile.am
+@@ -23,8 +23,8 @@ libbuffer_la_SOURCES = \
+     gegl-buffer-cl-iterator.c	\
+     gegl-buffer-cl-cache.c	\
+     gegl-buffer-linear.c	\
++	gegl-buffer-load.c	\
+     gegl-buffer-save.c		\
+-    gegl-buffer-load.c		\
+     gegl-cache.c		\
+     gegl-sampler.c		\
+     gegl-sampler-cubic.c	\
+@@ -36,9 +36,9 @@ libbuffer_la_SOURCES = \
+     gegl-tile-source.c		\
+     gegl-tile-storage.c		\
+     gegl-tile-backend.c		\
+-    gegl-tile-backend-file.c	\
+     gegl-tile-backend-ram.c	\
+     gegl-tile-handler.c		\
++    gegl-tile-handler-private.h	\
+     gegl-tile-handler-cache.c	\
+     gegl-tile-handler-chain.c	\
+     gegl-tile-handler-empty.c	\
+@@ -76,3 +76,11 @@ libbuffer_la_SOURCES = \
+     gegl-tile-handler-log.h	\
+     gegl-tile-handler-zoom.h	\
+     gegl-id-pool.h
++
++libbuffer_la_SOURCES += gegl-tile-backend-file-async.c
++#if HAVE_64_BIT 
++#libbuffer_la_SOURCES += gegl-tile-backend-file-mapped.c
++#else
++#libbuffer_la_SOURCES += gegl-tile-backend-file-async.c
++#endif
++
+diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
+index c46da3f..909e04e 100644
+--- gegl/buffer/gegl-buffer-access.c
++++ gegl/buffer/gegl-buffer-access.c
+@@ -107,7 +107,7 @@ gegl_buffer_pixel_set (GeglBuffer *buffer,
+ #endif
+ 
+ static gboolean
+-gegl_buffer_in_abyss( GeglBuffer *buffer,
++gegl_buffer_in_abyss (GeglBuffer *buffer,
+                       gint        x,
+                       gint        y )
+ {
+@@ -134,138 +134,173 @@ gegl_buffer_set_pixel (GeglBuffer *buffer,
+                        const Babl *format,
+                        gpointer    data)
+ {
+-  guchar     *buf         = data;
+-  gint        tile_width  = buffer->tile_storage->tile_width;
+-  gint        tile_height = buffer->tile_storage->tile_height;
+-  gint        bpx_size    = babl_format_get_bytes_per_pixel (format);
+-  const Babl *fish        = NULL;
+-
+-  gint  buffer_shift_x = buffer->shift_x;
+-  gint  buffer_shift_y = buffer->shift_y;
+-  gint  px_size        = babl_format_get_bytes_per_pixel (buffer->soft_format);
+-
+-  if (format != buffer->soft_format)
+-    {
+-      fish = babl_fish ((gpointer) buffer->soft_format,
+-                        (gpointer) format);
+-    }
++  if (gegl_buffer_in_abyss( buffer, x, y))
++    /* Nothing to set here */
++    return;
+ 
+   {
+-    gint tiledy   = y + buffer_shift_y;
+-    gint tiledx   = x + buffer_shift_x;
+-
+-    if (gegl_buffer_in_abyss( buffer, x, y))
+-      { /* in abyss */
+-        return;
++    guchar         *buf = data;
++    gint    tile_width  = buffer->tile_storage->tile_width;
++    gint    tile_height = buffer->tile_storage->tile_height;
++    gint buffer_shift_x = buffer->shift_x;
++    gint buffer_shift_y = buffer->shift_y;
++    gint         tiledy = y + buffer_shift_y;
++    gint         tiledx = x + buffer_shift_x;
++    gint       indice_x = gegl_tile_indice (tiledx, tile_width);
++    gint       indice_y = gegl_tile_indice (tiledy, tile_height);
++    GeglTile      *tile = NULL;
++
++
++    if (buffer->tile_storage->hot_tile &&
++        buffer->tile_storage->hot_tile->x == indice_x &&
++        buffer->tile_storage->hot_tile->y == indice_y)
++      {
++        tile = buffer->tile_storage->hot_tile;
+       }
+     else
+       {
+-        gint      indice_x = gegl_tile_indice (tiledx, tile_width);
+-        gint      indice_y = gegl_tile_indice (tiledy, tile_height);
+-        GeglTile *tile     = NULL;
++        _gegl_buffer_drop_hot_tile (buffer);
++        tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
++                                         indice_x, indice_y,
++                                         0);
++      }
+ 
+-        if (buffer->tile_storage->hot_tile &&
+-            buffer->tile_storage->hot_tile->x == indice_x &&
+-            buffer->tile_storage->hot_tile->y == indice_y)
+-          {
+-            tile = buffer->tile_storage->hot_tile;
+-          }
+-        else
++    if (tile)
++      {
++        const Babl *fish  = NULL;
++        gint      offsetx = gegl_tile_offset (tiledx, tile_width);
++        gint      offsety = gegl_tile_offset (tiledy, tile_height);
++        gint     bpx_size = babl_format_get_bytes_per_pixel (format);
++        gint      px_size = babl_format_get_bytes_per_pixel (buffer->soft_format);
++        guchar *tp;
++
++        if (format != buffer->soft_format)
+           {
+-            _gegl_buffer_drop_hot_tile (buffer);
+-            tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
+-                                             indice_x, indice_y,
+-                                             0);
++            fish = babl_fish ((gpointer) format,
++                              (gpointer) buffer->soft_format);
+           }
+ 
+-        if (tile)
+-          {
+-            gint    offsetx = gegl_tile_offset (tiledx, tile_width);
+-            gint    offsety = gegl_tile_offset (tiledy, tile_height);
+-            guchar *tp;
+-
+-            gegl_tile_lock (tile);
++        gegl_tile_lock (tile);
+ 
+-            tp = gegl_tile_get_data (tile) +
+-                 (offsety * tile_width + offsetx) * px_size;
+-            if (fish)
+-              babl_process (fish, buf, tp, 1);
+-            else
+-              memcpy (tp, buf, bpx_size);
++        tp = gegl_tile_get_data (tile) +
++             (offsety * tile_width + offsetx) * px_size;
++        if (fish)
++          babl_process (fish, buf, tp, 1);
++        else
++          memcpy (tp, buf, bpx_size);
+ 
+-            gegl_tile_unlock (tile);
+-            buffer->tile_storage->hot_tile = tile;
+-          }
++        gegl_tile_unlock (tile);
++        buffer->tile_storage->hot_tile = tile;
+       }
+   }
+ }
+ 
+ static inline void
+-gegl_buffer_get_pixel (GeglBuffer *buffer,
+-                       gint        x,
+-                       gint        y,
+-                       const Babl *format,
+-                       gpointer    data)
++gegl_buffer_get_pixel (GeglBuffer     *buffer,
++                       gint            x,
++                       gint            y,
++                       const Babl     *format,
++                       gpointer        data,
++                       GeglAbyssPolicy repeat_mode)
+ {
+   guchar     *buf         = data;
+-  gint        tile_width  = buffer->tile_storage->tile_width;
+-  gint        tile_height = buffer->tile_storage->tile_height;
+   gint        bpx_size    = babl_format_get_bytes_per_pixel (format);
+-  const Babl *fish        = NULL;
+ 
+-  gint  buffer_shift_x = buffer->shift_x;
+-  gint  buffer_shift_y = buffer->shift_y;
+-  gint  px_size        = babl_format_get_bytes_per_pixel (buffer->soft_format);
++  if (gegl_buffer_in_abyss (buffer, x, y))
++    { /* in abyss */
++      const GeglRectangle *abyss;
++      switch (repeat_mode)
++      {
++        case GEGL_ABYSS_CLAMP:
++          abyss = gegl_buffer_get_abyss (buffer);
++          x = CLAMP (x, abyss->x, abyss->x+abyss->width-1);
++          y = CLAMP (y, abyss->y, abyss->x+abyss->height-1);
++          break;
++
++        case GEGL_ABYSS_LOOP:
++          abyss = gegl_buffer_get_abyss (buffer);
++          x = abyss->x + GEGL_REMAINDER (x - abyss->x, abyss->width);
++          y = abyss->y + GEGL_REMAINDER (y - abyss->y, abyss->height);
++          break;
++
++        case GEGL_ABYSS_BLACK:
++          {
++            gfloat color[4] = {0.0, 0.0, 0.0, 1.0};
++            babl_process (babl_fish (babl_format ("RGBA float"), format),
++                          color,
++                          buf,
++                          1);
++            return;
++          }
+ 
+-  if (format != buffer->soft_format)
+-    {
+-      fish = babl_fish ((gpointer) buffer->soft_format,
+-                        (gpointer) format);
++        case GEGL_ABYSS_WHITE:
++          {
++            gfloat color[4] = {1.0, 1.0, 1.0, 1.0};
++            babl_process (babl_fish (babl_format ("RGBA float"),
++                                     format),
++                          color,
++                          buf,
++                          1);
++            return;
++          }
++
++        default:
++        case GEGL_ABYSS_NONE:
++          memset (buf, 0x00, bpx_size);
++          return;
++      }
+     }
+ 
+   {
++    gint  tile_width     = buffer->tile_storage->tile_width;
++    gint  tile_height    = buffer->tile_storage->tile_height;
++
++    gint  buffer_shift_x = buffer->shift_x;
++    gint  buffer_shift_y = buffer->shift_y;
++    gint  px_size        = babl_format_get_bytes_per_pixel (buffer->soft_format);
++
+     gint tiledy = y + buffer_shift_y;
+     gint tiledx = x + buffer_shift_x;
+ 
+-    if (gegl_buffer_in_abyss (buffer, x, y))
+-      { /* in abyss */
+-        memset (buf, 0x00, bpx_size);
+-        return;
++    gint      indice_x = gegl_tile_indice (tiledx, tile_width);
++    gint      indice_y = gegl_tile_indice (tiledy, tile_height);
++    GeglTile *tile     = NULL;
++
++    const Babl *fish   = NULL;
++
++    if (format != buffer->soft_format)
++      {
++        fish = babl_fish ((gpointer) buffer->soft_format,
++                          (gpointer) format);
++      }
++
++    if (buffer->tile_storage->hot_tile &&
++        buffer->tile_storage->hot_tile->x == indice_x &&
++        buffer->tile_storage->hot_tile->y == indice_y)
++      {
++        tile = buffer->tile_storage->hot_tile;
+       }
+     else
+       {
+-        gint      indice_x = gegl_tile_indice (tiledx, tile_width);
+-        gint      indice_y = gegl_tile_indice (tiledy, tile_height);
+-        GeglTile *tile     = NULL;
++        _gegl_buffer_drop_hot_tile (buffer);
++        tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
++                                          indice_x, indice_y,
++                                          0);
++      }
+ 
+-        if (buffer->tile_storage->hot_tile &&
+-            buffer->tile_storage->hot_tile->x == indice_x &&
+-            buffer->tile_storage->hot_tile->y == indice_y)
+-          {
+-            tile = buffer->tile_storage->hot_tile;
+-          }
++    if (tile)
++      {
++        gint    offsetx = gegl_tile_offset (tiledx, tile_width);
++        gint    offsety = gegl_tile_offset (tiledy, tile_height);
++        guchar *tp      = gegl_tile_get_data (tile) +
++                          (offsety * tile_width + offsetx) * px_size;
++        if (fish)
++          babl_process (fish, tp, buf, 1);
+         else
+-          {
+-            _gegl_buffer_drop_hot_tile (buffer);
+-            tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
+-                                           indice_x, indice_y,
+-                                           0);
+-          }
++          memcpy (buf, tp, px_size);
+ 
+-        if (tile)
+-          {
+-            gint    offsetx = gegl_tile_offset (tiledx, tile_width);
+-            gint    offsety = gegl_tile_offset (tiledy, tile_height);
+-            guchar *tp      = gegl_tile_get_data (tile) +
+-                              (offsety * tile_width + offsetx) * px_size;
+-            if (fish)
+-              babl_process (fish, tp, buf, 1);
+-            else
+-              memcpy (buf, tp, px_size);
+-
+-            /*gegl_tile_unref (tile);*/
+-            buffer->tile_storage->hot_tile = tile;
+-          }
++        /*gegl_tile_unref (tile);*/
++        buffer->tile_storage->hot_tile = tile;
+       }
+   }
+ }
+@@ -299,35 +334,34 @@ gegl_buffer_flush (GeglBuffer *buffer)
+ 
+ 
+ static inline void
+-gegl_buffer_iterate (GeglBuffer          *buffer,
+-                     const GeglRectangle *roi, /* or NULL for extent */
+-                     guchar              *buf,
+-                     gint                 rowstride,
+-                     gboolean             write,
+-                     const Babl          *format,
+-                     gint                 level)
++gegl_buffer_iterate_write (GeglBuffer          *buffer,
++                           const GeglRectangle *roi,
++                           guchar              *buf,
++                           gint                 rowstride,
++                           const Babl          *format,
++                           gint                 level)
+ {
+-  gint  tile_width  = buffer->tile_storage->tile_width;
+-  gint  tile_height = buffer->tile_storage->tile_height;
+-  gint  px_size     = babl_format_get_bytes_per_pixel (buffer->soft_format);
+-  gint  bpx_size    = babl_format_get_bytes_per_pixel (format);
+-  gint  tile_stride = px_size * tile_width;
+-  gint  buf_stride;
+-  gint  bufy = 0;
+-
+-  gint  buffer_shift_x = buffer->shift_x;
+-  gint  buffer_shift_y = buffer->shift_y;
+-
+-  gint  width          = buffer->extent.width;
+-  gint  height         = buffer->extent.height;
+-  gint  buffer_x       = buffer->extent.x + buffer_shift_x;
+-  gint  buffer_y       = buffer->extent.y + buffer_shift_y;
+-
+-  gint  buffer_abyss_x = buffer->abyss.x + buffer_shift_x;
+-  gint  buffer_abyss_y = buffer->abyss.y + buffer_shift_y;
+-  gint  abyss_x_total  = buffer_abyss_x + buffer->abyss.width;
+-  gint  abyss_y_total  = buffer_abyss_y + buffer->abyss.height;
+-  gint  factor         = 1<<level;
++  gint tile_width  = buffer->tile_storage->tile_width;
++  gint tile_height = buffer->tile_storage->tile_height;
++  gint px_size     = babl_format_get_bytes_per_pixel (buffer->soft_format);
++  gint bpx_size    = babl_format_get_bytes_per_pixel (format);
++  gint tile_stride = px_size * tile_width;
++  gint buf_stride;
++  gint bufy        = 0;
++
++  gint buffer_shift_x = buffer->shift_x;
++  gint buffer_shift_y = buffer->shift_y;
++
++  gint width    = buffer->extent.width;
++  gint height   = buffer->extent.height;
++  gint buffer_x = buffer->extent.x + buffer_shift_x;
++  gint buffer_y = buffer->extent.y + buffer_shift_y;
++
++  gint buffer_abyss_x = buffer->abyss.x + buffer_shift_x;
++  gint buffer_abyss_y = buffer->abyss.y + buffer_shift_y;
++  gint abyss_x_total  = buffer_abyss_x + buffer->abyss.width;
++  gint abyss_y_total  = buffer_abyss_y + buffer->abyss.height;
++  gint factor         = 1<<level;
+   const Babl *fish;
+ 
+   /* roi specified, override buffers extent */
+@@ -357,18 +391,228 @@ gegl_buffer_iterate (GeglBuffer          *buffer,
+       fish = NULL;
+     }
+   else
++      fish = babl_fish ((gpointer) format,
++                        (gpointer) buffer->soft_format);
++
++  while (bufy < height)
+     {
+-      if (write)
++      gint tiledy  = buffer_y + bufy;
++      gint offsety = gegl_tile_offset (tiledy, tile_height);
++      gint bufx    = 0;
++
++      while (bufx < width)
+         {
+-          fish = babl_fish ((gpointer) format,
+-                            (gpointer) buffer->soft_format);
++          gint      tiledx  = buffer_x + bufx;
++          gint      offsetx = gegl_tile_offset (tiledx, tile_width);
++          gint      y       = bufy;
++          gint      lskip, rskip, pixels, row;
++          guchar   *bp, *tile_base, *tp;
++          GeglTile *tile;
++
++          bp = buf + bufy * buf_stride + bufx * bpx_size;
++
++          if (width + offsetx - bufx < tile_width)
++            pixels = (width + offsetx - bufx) - offsetx;
++          else
++            pixels = tile_width - offsetx;
++
++          tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
++                                            gegl_tile_indice (tiledx, tile_width),
++                                            gegl_tile_indice (tiledy, tile_height),
++                                            level);
++
++          lskip = (buffer_abyss_x) - (buffer_x + bufx);
++          /* gap between left side of tile, and abyss */
++          rskip = (buffer_x + bufx + pixels) - abyss_x_total;
++          /* gap between right side of tile, and abyss */
++
++          if (lskip < 0)
++            lskip = 0;
++          if (lskip > pixels)
++            lskip = pixels;
++          if (rskip < 0)
++            rskip = 0;
++          if (rskip > pixels)
++            rskip = pixels;
++
++          if (!tile)
++            {
++              g_warning ("didn't get tile, trying to continue");
++              bufx += (tile_width - offsetx);
++              continue;
++            }
++
++          gegl_tile_lock (tile);
++
++          tile_base = gegl_tile_get_data (tile);
++          tp        = ((guchar *) tile_base) + (offsety * tile_width + offsetx) * px_size;
++
++          if (fish)
++            {
++              for (row = offsety;
++                   row < tile_height &&
++                     y < height &&
++                     buffer_y + y < abyss_y_total;
++                   row++, y++)
++                {
++
++                  if (buffer_y + y >= buffer_abyss_y &&
++                      buffer_y + y < abyss_y_total)
++                    {
++                      babl_process (fish, bp + lskip * bpx_size, tp + lskip * px_size,
++                                    pixels - lskip - rskip);
++                    }
++
++                  tp += tile_stride;
++                  bp += buf_stride;
++                }
++            }
++          else
++            {
++              for (row = offsety;
++                   row < tile_height && y < height;
++                   row++, y++)
++                {
++
++                  if (buffer_y + y >= buffer_abyss_y &&
++                      buffer_y + y < abyss_y_total)
++                    {
++
++                      memcpy (tp + lskip * px_size, bp + lskip * px_size,
++                              (pixels - lskip - rskip) * px_size);
++                    }
++
++                  tp += tile_stride;
++                  bp += buf_stride;
++                }
++            }
++
++          gegl_tile_unlock (tile);
++          gegl_tile_unref (tile);
++          bufx += (tile_width - offsetx);
+         }
+-      else
++      bufy += (tile_height - offsety);
++    }
++}
++
++static inline void
++gegl_buffer_iterate_read_simple (GeglBuffer          *buffer,
++                                 const GeglRectangle *roi,
++                                 guchar              *buf,
++                                 gint                 buf_stride,
++                                 const Babl          *format,
++                                 gint                 level)
++{
++  gint tile_width  = buffer->tile_storage->tile_width;
++  gint tile_height = buffer->tile_storage->tile_height;
++  gint px_size     = babl_format_get_bytes_per_pixel (buffer->soft_format);
++  gint bpx_size    = babl_format_get_bytes_per_pixel (format);
++  gint tile_stride = px_size * tile_width;
++  gint bufy        = 0;
++
++  gint width    = roi->width;
++  gint height   = roi->height;
++  gint buffer_x = roi->x;
++  gint buffer_y = roi->y;
++
++  const Babl *fish;
++
++  if (format == buffer->soft_format)
++    fish = NULL;
++  else
++    fish = babl_fish ((gpointer) buffer->soft_format,
++                      (gpointer) format);
++
++  while (bufy < height)
++    {
++      gint tiledy  = buffer_y + bufy;
++      gint offsety = gegl_tile_offset (tiledy, tile_height);
++      gint bufx    = 0;
++
++      while (bufx < width)
+         {
+-          fish = babl_fish ((gpointer) buffer->soft_format,
+-                            (gpointer) format);
++          gint      tiledx  = buffer_x + bufx;
++          gint      offsetx = gegl_tile_offset (tiledx, tile_width);
++          guchar   *bp, *tile_base, *tp;
++          gint      pixels, row, y;
++          GeglTile *tile;
++
++          bp = buf + bufy * buf_stride + bufx * bpx_size;
++
++          if (width + offsetx - bufx < tile_width)
++            pixels = width - bufx;
++          else
++            pixels = tile_width - offsetx;
++
++          tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
++                                            gegl_tile_indice (tiledx, tile_width),
++                                            gegl_tile_indice (tiledy, tile_height),
++                                            level);
++
++          if (!tile)
++            {
++              g_warning ("didn't get tile, trying to continue");
++              bufx += (tile_width - offsetx);
++              continue;
++            }
++
++          tile_base = gegl_tile_get_data (tile);
++          tp        = ((guchar *) tile_base) + (offsety * tile_width + offsetx) * px_size;
++
++          y = bufy;
++          for (row = offsety;
++               row < tile_height && y < height;
++               row++, y++)
++            {
++              if (fish)
++                babl_process (fish, tp, bp, pixels);
++              else
++                memcpy (bp, tp, pixels * px_size);
++
++              tp += tile_stride;
++              bp += buf_stride;
++            }
++
++          gegl_tile_unref (tile);
++          bufx += (tile_width - offsetx);
+         }
++      bufy += (tile_height - offsety);
+     }
++}
++
++static inline void
++gegl_buffer_iterate_read_abyss_none (GeglBuffer          *buffer,
++                                     const GeglRectangle *roi,
++                                     const GeglRectangle *abyss,
++                                     guchar              *buf,
++                                     gint                 buf_stride,
++                                     const Babl          *format,
++                                     gint                 level)
++{
++  gint tile_width  = buffer->tile_storage->tile_width;
++  gint tile_height = buffer->tile_storage->tile_height;
++  gint px_size     = babl_format_get_bytes_per_pixel (buffer->soft_format);
++  gint bpx_size    = babl_format_get_bytes_per_pixel (format);
++  gint tile_stride = px_size * tile_width;
++  gint bufy        = 0;
++
++  gint width    = roi->width;
++  gint height   = roi->height;
++  gint buffer_x = roi->x;
++  gint buffer_y = roi->y;
++
++  gint buffer_abyss_x = abyss->x;
++  gint buffer_abyss_y = abyss->y;
++  gint abyss_x_total  = buffer_abyss_x + abyss->width;
++  gint abyss_y_total  = buffer_abyss_y + abyss->height;
++
++  const Babl *fish;
++
++  if (format == buffer->soft_format)
++    fish = NULL;
++  else
++    fish = babl_fish ((gpointer) buffer->soft_format,
++                      (gpointer) format);
+ 
+   while (bufy < height)
+     {
+@@ -380,19 +624,16 @@ gegl_buffer_iterate (GeglBuffer          *buffer,
+       if (!(buffer_y + bufy + (tile_height) >= buffer_abyss_y &&
+             buffer_y + bufy < abyss_y_total))
+         { /* entire row of tiles is in abyss */
+-          if (!write)
+-            {
+-              gint    row;
+-              gint    y  = bufy;
+-              guchar *bp = buf + ((bufy) * width) * bpx_size;
++          gint    row;
++          gint    y  = bufy;
++          guchar *bp = buf + bufy * buf_stride;
+ 
+-              for (row = offsety;
+-                   row < tile_height && y < height;
+-                   row++, y++)
+-                {
+-                  memset (bp, 0x00, buf_stride);
+-                  bp += buf_stride;
+-                }
++          for (row = offsety;
++               row < tile_height && y < height;
++               row++, y++)
++            {
++              memset (bp, 0x00, width * bpx_size);
++              bp += buf_stride;
+             }
+         }
+       else
+@@ -407,39 +648,195 @@ gegl_buffer_iterate (GeglBuffer          *buffer,
+             bp = buf + bufy * buf_stride + bufx * bpx_size;
+ 
+             if (width + offsetx - bufx < tile_width)
+-              pixels = (width + offsetx - bufx) - offsetx;
++              pixels = width - bufx;
+             else
+               pixels = tile_width - offsetx;
+ 
+-
+             if (!(buffer_x + bufx + tile_width >= buffer_abyss_x &&
+                   buffer_x + bufx < abyss_x_total))
+               { /* entire tile is in abyss */
+-                if (!write)
++                gint row;
++                gint y = bufy;
++
++                for (row = offsety;
++                     row < tile_height && y < height;
++                     row++, y++)
++                  {
++                    memset (bp, 0x00, pixels * bpx_size);
++                    bp += buf_stride;
++                  }
++              }
++            else
++              {
++                guchar   *tile_base, *tp;
++                gint      row, y, lskip, rskip;
++                GeglTile *tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
++                                                            gegl_tile_indice (tiledx, tile_width),
++                                                            gegl_tile_indice (tiledy, tile_height),
++                                                            level);
++
++                lskip = (buffer_abyss_x) - (buffer_x + bufx);
++                /* gap between left side of tile, and abyss */
++                rskip = (buffer_x + bufx + pixels) - abyss_x_total;
++                /* gap between right side of tile, and abyss */
++
++                if (lskip < 0)
++                  lskip = 0;
++                if (lskip > pixels)
++                  lskip = pixels;
++                if (rskip < 0)
++                  rskip = 0;
++                if (rskip > pixels)
++                  rskip = pixels;
++
++                if (!tile)
+                   {
+-                    gint row;
+-                    gint y = bufy;
++                    g_warning ("didn't get tile, trying to continue");
++                    bufx += (tile_width - offsetx);
++                    continue;
++                  }
++
++                tile_base = gegl_tile_get_data (tile);
++                tp        = ((guchar *) tile_base) + (offsety * tile_width + offsetx) * px_size;
+ 
+-                    for (row = offsety;
+-                         row < tile_height && y < height;
+-                         row++, y++)
++                y = bufy;
++                for (row = offsety;
++                     row < tile_height && y < height;
++                     row++, y++)
++                  {
++                    if (buffer_y + y >= buffer_abyss_y &&
++                        buffer_y + y < abyss_y_total)
++                      {
++                        if (fish)
++                          babl_process (fish, tp, bp, pixels);
++                        else
++                          memcpy (bp, tp, pixels * px_size);
++                      }
++                    else
+                       {
++                        /* entire row in abyss */
+                         memset (bp, 0x00, pixels * bpx_size);
+-                        bp += buf_stride;
+                       }
++
++                    /* left hand zeroing of abyss in tile */
++                    if (lskip)
++                      memset (bp, 0x00, bpx_size * lskip);
++
++                    /* right side zeroing of abyss in tile */
++                    if (rskip)
++                      memset (bp + (pixels - rskip) * bpx_size, 0x00, bpx_size * rskip);
++
++                    tp += tile_stride;
++                    bp += buf_stride;
++                  }
++                gegl_tile_unref (tile);
++              }
++            bufx += (tile_width - offsetx);
++          }
++      bufy += (tile_height - offsety);
++    }
++}
++
++static inline void
++gegl_buffer_iterate_read_abyss_color (GeglBuffer          *buffer,
++                                      const GeglRectangle *roi,
++                                      const GeglRectangle *abyss,
++                                      guchar              *buf,
++                                      gint                 buf_stride,
++                                      const Babl          *format,
++                                      gint                 level,
++                                      guchar              *color)
++{
++  gint tile_width  = buffer->tile_storage->tile_width;
++  gint tile_height = buffer->tile_storage->tile_height;
++  gint px_size     = babl_format_get_bytes_per_pixel (buffer->soft_format);
++  gint bpx_size    = babl_format_get_bytes_per_pixel (format);
++  gint tile_stride = px_size * tile_width;
++  gint bufy        = 0;
++
++  gint width    = roi->width;
++  gint height   = roi->height;
++  gint buffer_x = roi->x;
++  gint buffer_y = roi->y;
++
++  gint buffer_abyss_x = abyss->x;
++  gint buffer_abyss_y = abyss->y;
++  gint abyss_x_total  = buffer_abyss_x + abyss->width;
++  gint abyss_y_total  = buffer_abyss_y + abyss->height;
++
++  const Babl *fish;
++
++  if (format == buffer->soft_format)
++    fish = NULL;
++  else
++    fish = babl_fish ((gpointer) buffer->soft_format,
++                      (gpointer) format);
++
++  while (bufy < height)
++    {
++      gint tiledy  = buffer_y + bufy;
++      gint offsety = gegl_tile_offset (tiledy, tile_height);
++      gint bufx    = 0;
++      gint i;
++
++      if (!(buffer_y + bufy + (tile_height) >= buffer_abyss_y &&
++            buffer_y + bufy < abyss_y_total))
++        { /* entire row of tiles is in abyss */
++          gint    row;
++          gint    y  = bufy;
++          guchar *bp = buf + bufy * buf_stride;
++
++          for (row = offsety;
++               row < tile_height && y < height;
++               row++, y++)
++            {
++              for (i = 0; i < width * bpx_size; i += bpx_size)
++                memcpy (bp + i, color, bpx_size);
++              bp += buf_stride;
++            }
++        }
++      else
++        while (bufx < width)
++          {
++            gint    tiledx  = buffer_x + bufx;
++            gint    offsetx = gegl_tile_offset (tiledx, tile_width);
++            gint    pixels;
++            guchar *bp;
++
++            bp = buf + bufy * buf_stride + bufx * bpx_size;
++
++            if (width + offsetx - bufx < tile_width)
++              pixels = width - bufx;
++            else
++              pixels = tile_width - offsetx;
++
++            if (!(buffer_x + bufx + tile_width >= buffer_abyss_x &&
++                  buffer_x + bufx < abyss_x_total))
++              { /* entire tile is in abyss */
++                gint row;
++                gint y = bufy;
++
++                for (row = offsety;
++                     row < tile_height && y < height;
++                     row++, y++)
++                  {
++                    for (i = 0; i < pixels * bpx_size; i += bpx_size)
++                      memcpy (bp + i, color, bpx_size);
++                    bp += buf_stride;
+                   }
+               }
+             else
+               {
+                 guchar   *tile_base, *tp;
++                gint      row, y, lskip, rskip;
+                 GeglTile *tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
+-                                                           gegl_tile_indice (tiledx, tile_width),
+-                                                           gegl_tile_indice (tiledy, tile_height),
+-                                                           level);
++                                                            gegl_tile_indice (tiledx, tile_width),
++                                                            gegl_tile_indice (tiledy, tile_height),
++                                                            level);
+ 
+-                gint lskip = (buffer_abyss_x) - (buffer_x + bufx);
++                lskip = (buffer_abyss_x) - (buffer_x + bufx);
+                 /* gap between left side of tile, and abyss */
+-                gint rskip = (buffer_x + bufx + pixels) - abyss_x_total;
++                rskip = (buffer_x + bufx + pixels) - abyss_x_total;
+                 /* gap between right side of tile, and abyss */
+ 
+                 if (lskip < 0)
+@@ -458,97 +855,46 @@ gegl_buffer_iterate (GeglBuffer          *buffer,
+                     continue;
+                   }
+ 
+-                if (write)
+-                  gegl_tile_lock (tile);
+-
+                 tile_base = gegl_tile_get_data (tile);
+                 tp        = ((guchar *) tile_base) + (offsety * tile_width + offsetx) * px_size;
+ 
+-                if (write)
++                y = bufy;
++                for (row = offsety;
++                     row < tile_height && y < height;
++                     row++, y++)
+                   {
+-                    gint row;
+-                    gint y = bufy;
+-
+-
+-                    if (fish)
++                    if (buffer_y + y >= buffer_abyss_y &&
++                        buffer_y + y < abyss_y_total)
+                       {
+-                        for (row = offsety;
+-                             row < tile_height &&
+-                             y < height &&
+-                             buffer_y + y < abyss_y_total;
+-                             row++, y++)
+-                          {
+-
+-                            if (buffer_y + y >= buffer_abyss_y &&
+-                                buffer_y + y < abyss_y_total)
+-                              {
+-                                babl_process (fish, bp + lskip * bpx_size, tp + lskip * px_size,
+-                                 pixels - lskip - rskip);
+-                              }
+-
+-                            tp += tile_stride;
+-                            bp += buf_stride;
+-                          }
++                        if (fish)
++                          babl_process (fish, tp, bp, pixels);
++                        else
++                          memcpy (bp, tp, pixels * px_size);
+                       }
+                     else
+                       {
+-                        for (row = offsety;
+-                             row < tile_height && y < height;
+-                             row++, y++)
+-                          {
+-
+-                            if (buffer_y + y >= buffer_abyss_y &&
+-                                buffer_y + y < abyss_y_total)
+-                              {
+-
+-                                memcpy (tp + lskip * px_size, bp + lskip * px_size,
+-                                      (pixels - lskip - rskip) * px_size);
+-                              }
+-
+-                            tp += tile_stride;
+-                            bp += buf_stride;
+-                          }
++                        /* entire row in abyss */
++                        for (i = 0; i < pixels * bpx_size; i += bpx_size)
++                          memcpy (bp + i, color, bpx_size);
+                       }
+ 
+-                    gegl_tile_unlock (tile);
+-                  }
+-                else /* read */
+-                  {
+-                    gint row;
+-                    gint y = bufy;
++                    /* left hand zeroing of abyss in tile */
++                    if (lskip)
++                      {
++                        for (i = 0; i < lskip * bpx_size; i += bpx_size)
++                          memcpy (bp + i, color, bpx_size);
++                      }
+ 
+-                    for (row = offsety;
+-                         row < tile_height && y < height;
+-                         row++, y++)
++                    /* right side zeroing of abyss in tile */
++                    if (rskip)
+                       {
+-                        if (buffer_y + y >= buffer_abyss_y &&
+-                            buffer_y + y < abyss_y_total)
+-                          {
+-                            if (fish)
+-                              babl_process (fish, tp, bp, pixels);
+-                            else
+-                              memcpy (bp, tp, pixels * px_size);
+-                          }
+-                        else
+-                          {
+-                            /* entire row in abyss */
+-                            memset (bp, 0x00, pixels * bpx_size);
+-                          }
+-
+-                          /* left hand zeroing of abyss in tile */
+-                        if (lskip)
+-                          {
+-                            memset (bp, 0x00, bpx_size * lskip);
+-                          }
+-
+-                        /* right side zeroing of abyss in tile */
+-                        if (rskip)
+-                          {
+-                            memset (bp + (pixels - rskip) * bpx_size, 0x00, bpx_size * rskip);
+-                          }
+-                        tp += tile_stride;
+-                        bp += buf_stride;
++                        guchar *bp_ = bp + (pixels - rskip) * bpx_size;
++                        for (i = 0; i < rskip * bpx_size; i += bpx_size)
++                          memcpy (bp_ + i, color, bpx_size);
+                       }
++
++                    tp += tile_stride;
++                    bp += buf_stride;
+                   }
+                 gegl_tile_unref (tile);
+               }
+@@ -558,6 +904,343 @@ gegl_buffer_iterate (GeglBuffer          *buffer,
+     }
+ }
+ 
++static inline void
++gegl_buffer_iterate_read_abyss_clamp (GeglBuffer          *buffer,
++                                      const GeglRectangle *roi,
++                                      const GeglRectangle *abyss,
++                                      guchar              *buf,
++                                      gint                 buf_stride,
++                                      const Babl          *format,
++                                      gint                 level)
++{
++  gint tile_width  = buffer->tile_storage->tile_width;
++  gint tile_height = buffer->tile_storage->tile_height;
++  gint px_size     = babl_format_get_bytes_per_pixel (buffer->soft_format);
++  gint bpx_size    = babl_format_get_bytes_per_pixel (format);
++  gint tile_stride = px_size * tile_width;
++  gint bufy        = 0;
++
++  gint width    = roi->width;
++  gint height   = roi->height;
++  gint buffer_x = roi->x;
++  gint buffer_y = roi->y;
++
++  gint buffer_abyss_x = abyss->x;
++  gint buffer_abyss_y = abyss->y;
++  gint abyss_x_total  = buffer_abyss_x + abyss->width;
++  gint abyss_y_total  = buffer_abyss_y + abyss->height;
++
++  const Babl *fish;
++
++  if (format == buffer->soft_format)
++    fish = NULL;
++  else
++    fish = babl_fish ((gpointer) buffer->soft_format,
++                      (gpointer) format);
++
++  while (bufy < height)
++    {
++      gint     tiledy       = CLAMP (buffer_y + bufy, buffer_abyss_y, abyss_y_total - 1);
++      gint     offsety      = gegl_tile_offset (tiledy, tile_height);
++      gint     bufx         = 0;
++      gboolean row_in_abyss = !(buffer_y + bufy + (tile_height) >= buffer_abyss_y &&
++                                buffer_y + bufy < abyss_y_total);
++
++      while (bufx < width)
++        {
++          gint      tiledx  = CLAMP (buffer_x + bufx, buffer_abyss_x, abyss_x_total - 1);
++          gint      offsetx = gegl_tile_offset (tiledx, tile_width);
++          gint      row, y, pixels, lskip, rskip;
++          guchar   *bp, *tile_base, *tp;
++          GeglTile *tile;
++
++          bp = buf + bufy * buf_stride + bufx * bpx_size;
++
++          tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
++                                            gegl_tile_indice (tiledx, tile_width),
++                                            gegl_tile_indice (tiledy, tile_height),
++                                            level);
++
++          if (!tile)
++            {
++              g_warning ("didn't get tile, trying to continue");
++              bufx += (tile_width - offsetx);
++              continue;
++            }
++
++          tile_base = gegl_tile_get_data (tile);
++          tp        = ((guchar *) tile_base) + (offsety * tile_width + offsetx) * px_size;
++
++          y = bufy;
++          if (tiledx != buffer_x + bufx)
++            { /* x was clamped. Copy a single color since x remains clamped in
++               this iteration. */
++              guchar color[128];
++              gint   i;
++
++              /* gap between current column and left side of abyss rect */
++              lskip = (buffer_abyss_x) - (buffer_x + bufx);
++              /* gap between current column and end of roi */
++              rskip = width - bufx;
++              pixels = (lskip > 0 && lskip < width) ? lskip : rskip;
++
++              if (row_in_abyss)
++                { /* y remains clamped in this iteration so don't change the color */
++                  if (fish)
++                    babl_process (fish, tp, color, 1);
++                  else
++                    memcpy (color, tp, px_size);
++
++                  for (row = 0;
++                       row < tile_height && y < height;
++                       row++, y++)
++                    {
++                      for (i = 0; i < pixels * bpx_size; i += bpx_size)
++                        memcpy (bp + i, color, bpx_size);
++                      bp += buf_stride;
++                    }
++                }
++              else
++                {
++                  for (row = offsety;
++                       row < tile_height && y < height;
++                       row++, y++)
++                    {
++                      if (fish)
++                        babl_process (fish, tp, color, 1);
++                      else
++                        memcpy (color, tp, px_size);
++
++                      for (i = 0; i < pixels * bpx_size; i += bpx_size)
++                        memcpy (bp + i, color, bpx_size);
++
++                      if (buffer_y + y >= buffer_abyss_y &&
++                          buffer_y + y < abyss_y_total - 1)
++                        tp += tile_stride;
++                      bp += buf_stride;
++                    }
++                }
++            }
++          else
++            {
++              if (width + offsetx - bufx < tile_width)
++                pixels = width - bufx;
++              else
++                pixels = tile_width - offsetx;
++
++              /* gap between current column and right side of abyss rect */
++              rskip = abyss_x_total - (buffer_x + bufx);
++              if (rskip > 0 && rskip < pixels)
++                pixels = rskip;
++
++              for (row = (row_in_abyss) ? 0 : offsety;
++                   row < tile_height && y < height;
++                   row++, y++)
++                {
++                  if (fish)
++                    babl_process (fish, tp, bp, pixels);
++                  else
++                    memcpy (bp, tp, pixels * px_size);
++
++                  if (buffer_y + y >= buffer_abyss_y &&
++                      buffer_y + y < abyss_y_total - 1)
++                    tp += tile_stride;
++                  bp += buf_stride;
++                }
++            }
++          gegl_tile_unref (tile);
++          bufx += pixels;
++        }
++      if (row_in_abyss)
++        bufy += tile_height;
++      else
++        bufy += (tile_height - offsety);
++    }
++}
++
++static inline void
++gegl_buffer_iterate_read_abyss_loop (GeglBuffer          *buffer,
++                                     const GeglRectangle *roi,
++                                     const GeglRectangle *abyss,
++                                     guchar              *buf,
++                                     gint                 buf_stride,
++                                     const Babl          *format,
++                                     gint                 level)
++{
++  gint tile_width  = buffer->tile_storage->tile_width;
++  gint tile_height = buffer->tile_storage->tile_height;
++  gint px_size     = babl_format_get_bytes_per_pixel (buffer->soft_format);
++  gint bpx_size    = babl_format_get_bytes_per_pixel (format);
++  gint tile_stride = px_size * tile_width;
++  gint bufy        = 0;
++
++  gint width    = roi->width;
++  gint height   = roi->height;
++  gint buffer_x = roi->x;
++  gint buffer_y = roi->y;
++
++  gint buffer_abyss_x = abyss->x;
++  gint buffer_abyss_y = abyss->y;
++  gint abyss_x_total  = buffer_abyss_x + abyss->width;
++  gint abyss_y_total  = buffer_abyss_y + abyss->height;
++
++  const Babl *fish;
++
++  if (format == buffer->soft_format)
++    fish = NULL;
++  else
++    fish = babl_fish ((gpointer) buffer->soft_format,
++                      (gpointer) format);
++
++  while (bufy < height)
++    {
++      gint tiledy  = buffer_abyss_y +
++        GEGL_REMAINDER (buffer_y + bufy - buffer_abyss_y, abyss->height);
++      gint offsety = gegl_tile_offset (tiledy, tile_height);
++      gint bufx    = 0;
++      gint rows, topskip, bottomskip;
++
++      if (height + offsety - bufy < tile_height)
++        rows = height - bufy;
++      else
++        rows = tile_height - offsety;
++
++      /* gap between current row and top of abyss rect */
++      topskip = buffer_abyss_y - tiledy;
++      /* gap between current row and bottom of abyss rect */
++      bottomskip = abyss_y_total - tiledy;
++
++      if (topskip > 0 && topskip < rows)
++        rows = topskip;
++      else if (bottomskip > 0 && bottomskip < rows)
++        rows = bottomskip;
++
++      while (bufx < width)
++        {
++          gint      tiledx  = buffer_abyss_x +
++            GEGL_REMAINDER (buffer_x + bufx - buffer_abyss_x, abyss->width);
++          gint      offsetx = gegl_tile_offset (tiledx, tile_width);
++          guchar   *bp, *tile_base, *tp;
++          gint      pixels, row, y, lskip, rskip;
++          GeglTile *tile;
++
++          bp = buf + bufy * buf_stride + bufx * bpx_size;
++
++          if (width + offsetx - bufx < tile_width)
++            pixels = width - bufx;
++          else
++            pixels = tile_width - offsetx;
++
++          tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
++                                            gegl_tile_indice (tiledx, tile_width),
++                                            gegl_tile_indice (tiledy, tile_height),
++                                            level);
++
++          /* gap between current column and left side of abyss rect */
++          lskip = buffer_abyss_x - tiledx;
++          /* gap between current column and right side of abyss rect */
++          rskip = abyss_x_total - tiledx;
++
++          if (lskip > 0 && lskip < pixels)
++            pixels = lskip;
++          else if (rskip > 0 && rskip < pixels)
++            pixels = rskip;
++
++          if (!tile)
++            {
++              g_warning ("didn't get tile, trying to continue");
++              bufx += pixels;
++              continue;
++            }
++
++          tile_base = gegl_tile_get_data (tile);
++          tp        = ((guchar *) tile_base) + (offsety * tile_width + offsetx) * px_size;
++
++          y = bufy;
++          for (row = 0;
++               row < rows && y < height;
++               row++, y++)
++            {
++              if (fish)
++                babl_process (fish, tp, bp, pixels);
++              else
++                memcpy (bp, tp, pixels * px_size);
++
++              tp += tile_stride;
++              bp += buf_stride;
++            }
++
++          gegl_tile_unref (tile);
++          bufx += pixels;
++        }
++      bufy += rows;
++    }
++}
++
++static inline void
++gegl_buffer_iterate_read_dispatch (GeglBuffer          *buffer,
++                                   const GeglRectangle *roi,
++                                   guchar              *buf,
++                                   gint                 rowstride,
++                                   const Babl          *format,
++                                   gint                 level,
++                                   GeglAbyssPolicy      repeat_mode)
++{
++  GeglRectangle abyss          = buffer->abyss;
++  GeglRectangle abyss_factored = abyss;
++  GeglRectangle roi_factored   = *roi;
++  gint          factor         = 1<<level;
++
++  abyss_factored.x       = (buffer->shift_x + abyss.x) / factor;
++  abyss_factored.y       = (buffer->shift_y + abyss.y) / factor;
++  abyss_factored.width  /= factor;
++  abyss_factored.height /= factor;
++
++  roi_factored.x       = (buffer->shift_x + roi_factored.x) / factor;
++  roi_factored.y       = (buffer->shift_y + roi_factored.y) / factor;
++  roi_factored.width  /= factor;
++  roi_factored.height /= factor;
++
++  if (rowstride == GEGL_AUTO_ROWSTRIDE)
++    rowstride = roi_factored.width * babl_format_get_bytes_per_pixel (format);
++
++  if (gegl_rectangle_contains (&abyss, roi))
++    {
++      gegl_buffer_iterate_read_simple (buffer, &roi_factored, buf, rowstride, format, level);
++    }
++  else if (repeat_mode == GEGL_ABYSS_NONE)
++    {
++      gegl_buffer_iterate_read_abyss_none (buffer, &roi_factored, &abyss_factored,
++                                           buf, rowstride, format, level);
++    }
++  else if (repeat_mode == GEGL_ABYSS_WHITE ||
++           repeat_mode == GEGL_ABYSS_BLACK)
++    {
++      gfloat color_a[4] = {0.0, 0.0, 0.0, 1.0};
++      guchar color[128];
++      gint   i;
++
++      if (repeat_mode == GEGL_ABYSS_WHITE)
++        for (i = 0; i < 3; i++)
++          color_a[i] = 1.0;
++      babl_process (babl_fish (babl_format ("RGBA float"), format),
++                    color_a, color, 1);
++
++      gegl_buffer_iterate_read_abyss_color (buffer, &roi_factored, &abyss_factored,
++                                            buf, rowstride, format, level, color);
++    }
++  else if (repeat_mode == GEGL_ABYSS_CLAMP)
++    {
++      gegl_buffer_iterate_read_abyss_clamp (buffer, &roi_factored, &abyss_factored,
++                                            buf, rowstride, format, level);
++    }
++  else
++    {
++      gegl_buffer_iterate_read_abyss_loop (buffer, &roi_factored, &abyss_factored,
++                                           buf, rowstride, format, level);
++    }
++}
++
+ void
+ gegl_buffer_set_unlocked (GeglBuffer          *buffer,
+                           const GeglRectangle *rect,
+@@ -565,6 +1248,18 @@ gegl_buffer_set_unlocked (GeglBuffer          *buffer,
+                           const void          *src,
+                           gint                 rowstride)
+ {
++    gegl_buffer_set_unlocked_no_notify(buffer, rect, format, src, rowstride);
++    gegl_buffer_emit_changed_signal(buffer, rect);
++}
++
++
++void
++gegl_buffer_set_unlocked_no_notify (GeglBuffer          *buffer,
++                          const GeglRectangle *rect,
++                          const Babl          *format,
++                          const void          *src,
++                          gint                 rowstride)
++{
+   if (format == NULL)
+     format = buffer->soft_format;
+ 
+@@ -580,7 +1275,7 @@ gegl_buffer_set_unlocked (GeglBuffer          *buffer,
+     }
+   else
+ #endif
+-    gegl_buffer_iterate (buffer, rect, (void *) src, rowstride, TRUE, format, 0);
++    gegl_buffer_iterate_write (buffer, rect, (void *) src, rowstride, format, 0);
+ 
+   if (gegl_buffer_is_shared(buffer))
+     {
+@@ -924,7 +1619,8 @@ gegl_buffer_get_unlocked (GeglBuffer          *buffer,
+                           const GeglRectangle *rect,
+                           const Babl          *format,
+                           gpointer             dest_buf,
+-                          gint                 rowstride)
++                          gint                 rowstride,
++                          GeglAbyssPolicy      repeat_mode)
+ {
+ 
+   if (format == NULL)
+@@ -937,7 +1633,7 @@ gegl_buffer_get_unlocked (GeglBuffer          *buffer,
+       rect->width == 1 &&
+       rect->height == 1)  /* fast path */
+     {
+-      gegl_buffer_get_pixel (buffer, rect->x, rect->y, format, dest_buf);
++      gegl_buffer_get_pixel (buffer, rect->x, rect->y, format, dest_buf, repeat_mode);
+       return;
+     }
+ #endif
+@@ -949,7 +1645,8 @@ gegl_buffer_get_unlocked (GeglBuffer          *buffer,
+ 
+   if (!rect && scale == 1.0)
+     {
+-      gegl_buffer_iterate (buffer, NULL, dest_buf, rowstride, FALSE, format, 0);
++      gegl_buffer_iterate_read_dispatch (buffer, &buffer->extent, dest_buf,
++                                         rowstride, format, 0, repeat_mode);
+       return;
+     }
+ 
+@@ -961,7 +1658,8 @@ gegl_buffer_get_unlocked (GeglBuffer          *buffer,
+     }
+   if (GEGL_FLOAT_EQUAL (scale, 1.0))
+     {
+-      gegl_buffer_iterate (buffer, rect, dest_buf, rowstride, FALSE, format, 0);
++      gegl_buffer_iterate_read_dispatch (buffer, rect, dest_buf, rowstride,
++                                         format, 0, repeat_mode);
+       return;
+     }
+   else
+@@ -1001,7 +1699,8 @@ gegl_buffer_get_unlocked (GeglBuffer          *buffer,
+       offset_y = rect->y-floor(rect->y/scale) * scale;
+ 
+       sample_buf = g_malloc (buf_width * buf_height * bpp);
+-      gegl_buffer_iterate (buffer, &sample_rect, sample_buf, GEGL_AUTO_ROWSTRIDE, FALSE, format, level);
++      gegl_buffer_iterate_read_dispatch (buffer, &sample_rect, sample_buf, GEGL_AUTO_ROWSTRIDE,
++                                         format, level, repeat_mode);
+ #if 1
+   /* slows testing of rendering code speed too much for now and
+    * no time to make a fast implementation
+@@ -1052,10 +1751,10 @@ gegl_buffer_get (GeglBuffer          *buffer,
+                  const Babl          *format,
+                  gpointer             dest_buf,
+                  gint                 rowstride,
+-                 GeglAbyssPolicy       repeat_mode)
++                 GeglAbyssPolicy      repeat_mode)
+ {
+   g_return_if_fail (GEGL_IS_BUFFER (buffer));
+-  gegl_buffer_get_unlocked (buffer, scale, rect, format, dest_buf, rowstride);
++  gegl_buffer_get_unlocked (buffer, scale, rect, format, dest_buf, rowstride, repeat_mode);
+ }
+ 
+ const GeglRectangle *
+@@ -1077,14 +1776,14 @@ gegl_buffer_sample (GeglBuffer       *buffer,
+                     gpointer          dest,
+                     const Babl       *format,
+                     GeglSamplerType   sampler_type,
+-                    GeglAbyssPolicy    repeat_mode)
++                    GeglAbyssPolicy   repeat_mode)
+ {
+   GType desired_type;
+   g_return_if_fail (GEGL_IS_BUFFER (buffer));
+ 
+ /*#define USE_WORKING_SHORTCUT*/
+ #ifdef USE_WORKING_SHORTCUT
+-  gegl_buffer_get_pixel (buffer, x, y, format, dest);
++  gegl_buffer_get_pixel (buffer, x, y, format, dest, repeat_mode);
+   return;
+ #endif
+ 
+@@ -1097,7 +1796,7 @@ gegl_buffer_sample (GeglBuffer       *buffer,
+       sampler_type == GEGL_SAMPLER_NEAREST)
+     {
+       /* XXX: not thread safe */
+-      gegl_buffer_get_pixel (buffer, x, y, format, dest);
++      gegl_buffer_get_pixel (buffer, x, y, format, dest, repeat_mode);
+       return;
+     }
+   /* unset the cached sampler if it dosn't match the needs */
+@@ -1121,7 +1820,7 @@ gegl_buffer_sample (GeglBuffer       *buffer,
+       gegl_sampler_prepare (buffer->sampler);
+     }
+ 
+-  gegl_sampler_get (buffer->sampler, x, y, scale, dest, GEGL_ABYSS_NONE);
++  gegl_sampler_get (buffer->sampler, x, y, scale, dest, repeat_mode);
+ }
+ 
+ void
+@@ -1136,11 +1835,11 @@ gegl_buffer_sample_cleanup (GeglBuffer *buffer)
+     }
+ }
+ 
+-void
+-gegl_buffer_copy (GeglBuffer          *src,
+-                  const GeglRectangle *src_rect,
+-                  GeglBuffer          *dst,
+-                  const GeglRectangle *dst_rect)
++static void
++gegl_buffer_copy2 (GeglBuffer          *src,
++                   const GeglRectangle *src_rect,
++                   GeglBuffer          *dst,
++                   const GeglRectangle *dst_rect)
+ {
+   const Babl *fish;
+   g_return_if_fail (GEGL_IS_BUFFER (src));
+@@ -1156,6 +1855,9 @@ gegl_buffer_copy (GeglBuffer          *src,
+       dst_rect = src_rect;
+     }
+ 
++  if (src_rect->width == 0 || src_rect->height == 0)
++    return;
++
+   fish = babl_fish (src->soft_format, dst->soft_format);
+ 
+     {
+@@ -1166,7 +1868,7 @@ gegl_buffer_copy (GeglBuffer          *src,
+       dest_rect_r.width = src_rect->width;
+       dest_rect_r.height = src_rect->height;
+ 
+-      i = gegl_buffer_iterator_new (dst, &dest_rect_r, 0, dst->soft_format, 
++      i = gegl_buffer_iterator_new (dst, &dest_rect_r, 0, dst->soft_format,
+                                     GEGL_BUFFER_WRITE, GEGL_ABYSS_NONE);
+       read = gegl_buffer_iterator_add (i, src, src_rect, 0, src->soft_format,
+                                        GEGL_BUFFER_READ, GEGL_ABYSS_NONE);
+@@ -1176,8 +1878,192 @@ gegl_buffer_copy (GeglBuffer          *src,
+ }
+ 
+ void
+-gegl_buffer_clear (GeglBuffer          *dst,
+-                   const GeglRectangle *dst_rect)
++gegl_buffer_copy (GeglBuffer          *src,
++                  const GeglRectangle *src_rect,
++                  GeglBuffer          *dst,
++                  const GeglRectangle *dst_rect)
++{
++  g_return_if_fail (GEGL_IS_BUFFER (src));
++  g_return_if_fail (GEGL_IS_BUFFER (dst));
++
++  if (!src_rect)
++    {
++      src_rect = gegl_buffer_get_extent (src);
++    }
++
++  if (!dst_rect)
++    {
++      dst_rect = src_rect;
++    }
++
++
++  if (src->soft_format == dst->soft_format &&
++      src->tile_width == dst->tile_width  &&
++      src->tile_height == dst->tile_height &&
++      !g_object_get_data (G_OBJECT (dst), "is-linear") &&
++      gegl_buffer_scan_compatible (src, src_rect->x, src_rect->y,
++                                   dst, dst_rect->x, dst_rect->y))
++    {
++      GeglRectangle dest_rect_r = *dst_rect;
++
++      gint tile_width = dst->tile_width;
++      gint tile_height = dst->tile_height;
++
++      dest_rect_r.width = src_rect->width;
++      dest_rect_r.height = src_rect->height;
++      dst_rect = &dest_rect_r;
++
++      {
++        GeglRectangle cow_rect = *dst_rect;
++
++        /* adjust origin until we match the start of tile alignment */
++        while ( (cow_rect.x + dst->shift_x) % tile_width)
++          {
++            cow_rect.x ++;
++            cow_rect.width --;
++          }
++        while ( (cow_rect.y + dst->shift_y) % tile_height)
++          {
++            cow_rect.y ++;
++            cow_rect.height --;
++          }
++        /* adjust size of rect to match multiple of tiles */
++
++        cow_rect.width  = cow_rect.width  - (cow_rect.width  % tile_width);
++        cow_rect.height = cow_rect.height - (cow_rect.height % tile_height);
++
++        g_assert (cow_rect.width >= 0);
++        g_assert (cow_rect.height >= 0);
++
++        {
++          GeglRectangle top, bottom, left, right;
++
++          /* iterate over rectangle that can be cow copied, duplicating
++           * one and one tile
++           */
++          {
++            /* first we do a dumb copy,. but with fetched tiles */
++
++            gint dst_x, dst_y;
++            GeglTileHandlerChain   *storage;
++            GeglTileHandlerCache   *cache;
++
++            storage = GEGL_TILE_HANDLER_CHAIN (dst->tile_storage);
++            cache = GEGL_TILE_HANDLER_CACHE (gegl_tile_handler_chain_get_first (storage, GEGL_TYPE_TILE_HANDLER_CACHE));
++
++
++            for (dst_y = cow_rect.y + dst->shift_y; dst_y < cow_rect.y + dst->shift_y + cow_rect.height; dst_y += tile_height)
++            for (dst_x = cow_rect.x + dst->shift_x; dst_x < cow_rect.x + dst->shift_x + cow_rect.width; dst_x += tile_width)
++              {
++                GeglTile *src_tile;
++                GeglTile *dst_tile;
++                gint src_x, src_y;
++                gint stx, sty, dtx, dty;
++
++                src_x = dst_x - (dst_rect->x - src_rect->x) + src->shift_x;
++                src_y = dst_y - (dst_rect->y - src_rect->y) + src->shift_y;
++
++                stx = gegl_tile_indice (src_x, tile_width);
++                sty = gegl_tile_indice (src_y, tile_height);
++                dtx = gegl_tile_indice (dst_x, tile_width);
++                dty = gegl_tile_indice (dst_y, tile_height);
++
++#if 1
++                src_tile = gegl_tile_source_get_tile ((GeglTileSource*)(src),
++                                                      stx, sty, 0);
++
++                dst_tile = gegl_tile_dup (src_tile);
++                dst_tile->tile_storage = (void*)storage;
++
++                /* XXX: this call should only be neccesary as long as GIMP
++                 *      is dropping tile caches behind our back
++                 */
++                if(gegl_tile_source_set_tile ((GeglTileSource*)dst, dtx, dty, 0,
++                                           dst_tile));
++                gegl_tile_handler_cache_insert (cache, dst_tile, dtx, dty, 0);
++
++                gegl_tile_unref (src_tile);
++                gegl_tile_unref (dst_tile);
++#else
++                src_tile = gegl_tile_source_get_tile (
++                  (GeglTileSource*)(src), stx, sty, 0);
++                dst_tile = gegl_tile_source_get_tile (
++                  (GeglTileSource*)(dst), dtx, dty, 0);
++                gegl_tile_lock (dst_tile);
++                g_assert (src_tile->size == dst_tile->size);
++
++                memcpy (dst_tile->data, src_tile->data, src_tile->size);
++
++                gegl_tile_unlock (dst_tile);
++                gegl_tile_unref (dst_tile);
++                gegl_tile_unref (src_tile);
++#endif
++              }
++          }
++
++          top = *dst_rect;
++          top.height = (cow_rect.y - dst_rect->y);
++
++
++          left = *dst_rect;
++          left.y = cow_rect.y;
++          left.height = cow_rect.height;
++          left.width = (cow_rect.x - dst_rect->x);
++
++          bottom = *dst_rect;
++          bottom.y = (cow_rect.y + cow_rect.height);
++          bottom.height = (dst_rect->y + dst_rect->height) -
++                          (cow_rect.y  + cow_rect.height);
++
++          if (bottom.height < 0)
++            bottom.height = 0;
++
++          right  =  *dst_rect;
++          right.x = (cow_rect.x + cow_rect.width);
++          right.width = (dst_rect->x + dst_rect->width) -
++                          (cow_rect.x  + cow_rect.width);
++          right.y = cow_rect.y;
++          right.height = cow_rect.height;
++
++          if (right.width < 0)
++            right.width = 0;
++
++          if (top.height)
++          gegl_buffer_copy2 (src,
++                             GEGL_RECTANGLE (src_rect->x + (top.x-dst_rect->x),
++                                             src_rect->y + (top.y-dst_rect->y),
++                                 top.width, top.height),
++                             dst, &top);
++          if (bottom.height)
++          gegl_buffer_copy2 (src,
++                             GEGL_RECTANGLE (src_rect->x + (bottom.x-dst_rect->x),
++                                             src_rect->y + (bottom.y-dst_rect->y),
++                                 bottom.width, bottom.height),
++                             dst, &bottom);
++          if (left.width)
++          gegl_buffer_copy2 (src,
++                             GEGL_RECTANGLE (src_rect->x + (left.x-dst_rect->x),
++                                             src_rect->y + (left.y-dst_rect->y),
++                                 left.width, left.height),
++                             dst, &left);
++          if (right.width && right.height)
++          gegl_buffer_copy2 (src,
++                             GEGL_RECTANGLE (src_rect->x + (right.x-dst_rect->x),
++                                             src_rect->y + (right.y-dst_rect->y),
++                                 right.width, right.height),
++                             dst, &right);
++        }
++      }
++    }
++  else
++    {
++      gegl_buffer_copy2 (src, src_rect, dst, dst_rect);
++    }
++}
++
++static void
++gegl_buffer_clear2 (GeglBuffer          *dst,
++                    const GeglRectangle *dst_rect)
+ {
+   GeglBufferIterator *i;
+   gint                pxsize;
+@@ -1208,11 +2094,116 @@ gegl_buffer_clear (GeglBuffer          *dst,
+     }
+ }
+ 
+-void            gegl_buffer_set_pattern       (GeglBuffer          *buffer,
+-                                               const GeglRectangle *rect,
+-                                               GeglBuffer          *pattern,
+-                                               gdouble              x_offset,
+-                                               gdouble              y_offset)
++void
++gegl_buffer_clear (GeglBuffer          *dst,
++                   const GeglRectangle *dst_rect)
++{
++  g_return_if_fail (GEGL_IS_BUFFER (dst));
++
++  if (!dst_rect)
++    {
++      dst_rect = gegl_buffer_get_extent (dst);
++    }
++
++  goto nocow; // cow for clearing is currently broken, go to nocow case
++  if (!g_object_get_data (G_OBJECT (dst), "is-linear"))
++    {
++      gint tile_width = dst->tile_width;
++      gint tile_height = dst->tile_height;
++
++      {
++        GeglRectangle cow_rect = *dst_rect;
++
++        /* adjust origin until we match the start of tile alignment */
++        while ( (cow_rect.x + dst->shift_x) % tile_width)
++          {
++            cow_rect.x ++;
++            cow_rect.width --;
++          }
++        while ( (cow_rect.y + dst->shift_y) % tile_height)
++          {
++            cow_rect.y ++;
++            cow_rect.height --;
++          }
++        /* adjust size of rect to match multiple of tiles */
++
++        cow_rect.width  = cow_rect.width  - (cow_rect.width  % tile_width);
++        cow_rect.height = cow_rect.height - (cow_rect.height % tile_height);
++
++
++        g_assert (cow_rect.width >= 0);
++        g_assert (cow_rect.height >= 0);
++
++        {
++          GeglRectangle top, bottom, left, right;
++
++          /* iterate over rectangle that can be cow copied, duplicating
++           * one and one tile
++           */
++          {
++            /* first we do a dumb copy,. but with fetched tiles */
++
++            gint dst_x, dst_y;
++
++            for (dst_y = cow_rect.y + dst->shift_y; dst_y < cow_rect.y + dst->shift_y + cow_rect.height; dst_y += tile_height)
++            for (dst_x = cow_rect.x + dst->shift_x; dst_x < cow_rect.x + dst->shift_x + cow_rect.width; dst_x += tile_width)
++              {
++                gint dtx, dty;
++
++                dtx = gegl_tile_indice (dst_x, tile_width);
++                dty = gegl_tile_indice (dst_y, tile_height);
++
++                if(gegl_tile_source_void ((GeglTileSource*)dst, dtx, dty, 0));
++              }
++          }
++
++          top = *dst_rect;
++          top.height = (cow_rect.y - dst_rect->y);
++
++
++          left = *dst_rect;
++          left.y = cow_rect.y;
++          left.height = cow_rect.height;
++          left.width = (cow_rect.x - dst_rect->x);
++
++          bottom = *dst_rect;
++          bottom.y = (cow_rect.y + cow_rect.height);
++          bottom.height = (dst_rect->y + dst_rect->height) -
++                          (cow_rect.y  + cow_rect.height);
++
++          if (bottom.height < 0)
++            bottom.height = 0;
++
++          right  =  *dst_rect;
++          right.x = (cow_rect.x + cow_rect.width);
++          right.width = (dst_rect->x + dst_rect->width) -
++                          (cow_rect.x  + cow_rect.width);
++          right.y = cow_rect.y;
++          right.height = cow_rect.height;
++
++          if (right.width < 0)
++            right.width = 0;
++
++          if (top.height)     gegl_buffer_clear2 (dst, &top);
++          if (bottom.height)  gegl_buffer_clear2 (dst, &bottom);
++          if (left.width)     gegl_buffer_clear2 (dst, &left);
++          if (right.width)    gegl_buffer_clear2 (dst, &right);
++        }
++      }
++    }
++  else
++    {
++nocow:
++      gegl_buffer_clear2 (dst, dst_rect);
++    }
++}
++
++void
++gegl_buffer_set_pattern (GeglBuffer          *buffer,
++                         const GeglRectangle *rect, /* XXX:should be respected*/
++                         GeglBuffer          *pattern,
++                         gdouble              x_offset,
++                         gdouble              y_offset)
+ {
+   GeglRectangle src_rect = {0,}, dst_rect;
+   int pat_width, pat_height;
+@@ -1225,20 +2216,16 @@ void            gegl_buffer_set_pattern       (GeglBuffer          *buffer,
+   width      = gegl_buffer_get_width (buffer);
+   height     = gegl_buffer_get_height (buffer);
+ 
+-  while (x_offset > pat_width)
+-    x_offset -= pat_width;
+-  while (y_offset < pat_height)
+-    y_offset += pat_height;
++  while (y_offset < 0) y_offset += pat_height;
++  while (x_offset < 0) x_offset += pat_width;
+ 
+-  while (x_offset < 0)
+-    x_offset += pat_width;
+-  while (y_offset > pat_height)
+-    y_offset -= pat_height;
++  x_offset = fmod (x_offset, pat_width);
++  y_offset = fmod (y_offset, pat_height);
+ 
+-  src_rect.width = dst_rect.width = pat_width;
++  src_rect.width  = dst_rect.width  = pat_width;
+   src_rect.height = dst_rect.height = pat_height;
+ 
+-  cols = width / pat_width + 1;
++  cols = width  / pat_width  + 1;
+   rows = height / pat_height + 1;
+ 
+   for (row = 0; row <= rows + 1; row++)
+@@ -1250,9 +2237,10 @@ void            gegl_buffer_set_pattern       (GeglBuffer          *buffer,
+       }
+ }
+ 
+-void            gegl_buffer_set_color         (GeglBuffer          *dst,
+-                                               const GeglRectangle *dst_rect,
+-                                               GeglColor           *color)
++void
++gegl_buffer_set_color (GeglBuffer          *dst,
++                       const GeglRectangle *dst_rect,
++                       GeglColor           *color)
+ {
+   GeglBufferIterator *i;
+   gchar               buf[128];
+@@ -1276,7 +2264,7 @@ void            gegl_buffer_set_color         (GeglBuffer          *dst,
+   /* FIXME: this can be even further optimized by special casing it so
+    * that fully filled tiles are shared.
+    */
+-  i = gegl_buffer_iterator_new (dst, dst_rect, 0, dst->soft_format, 
++  i = gegl_buffer_iterator_new (dst, dst_rect, 0, dst->soft_format,
+                                 GEGL_BUFFER_WRITE, GEGL_ABYSS_NONE);
+   while (gegl_buffer_iterator_next (i))
+     {
+diff --git a/gegl/buffer/gegl-buffer-backend.h b/gegl/buffer/gegl-buffer-backend.h
+index 4d8320e..647f9ba 100644
+--- gegl/buffer/gegl-buffer-backend.h
++++ gegl/buffer/gegl-buffer-backend.h
+@@ -1,5 +1,4 @@
+ /* This file is part of GEGL.
+- * ck
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -20,23 +19,41 @@
+ #ifndef __GEGL_BUFFER_BACKEND_H__
+ #define __GEGL_BUFFER_BACKEND_H__
+ 
+-typedef struct _GeglTileSource            GeglTileSource;
+-typedef struct _GeglTileSourceClass       GeglTileSourceClass;
+-
+-typedef struct _GeglTileBackend           GeglTileBackend;
+-typedef struct _GeglTileBackendClass      GeglTileBackendClass;
+-typedef struct _GeglTileBackendPrivate    GeglTileBackendPrivate;
++G_BEGIN_DECLS
+ 
+ typedef struct _GeglTile                  GeglTile;
++typedef struct _GeglTileSource            GeglTileSource;
++typedef struct _GeglTileBackend           GeglTileBackend;
++typedef struct _GeglTileHandler           GeglTileHandler;
+ 
+ 
+ typedef void   (*GeglTileCallback)       (GeglTile *tile,
+                                           gpointer user_data);
+ 
++/* All commands have the ability to pass commands to all tiles the handlers
++ * add abstraction to the commands the documentaiton given here is valid
++ * when the commands are issued to a full blown GeglBuffer instance.
++ */
++typedef enum
++{
++  GEGL_TILE_IDLE = 0,
++  GEGL_TILE_SET,
++  GEGL_TILE_GET,
++  GEGL_TILE_IS_CACHED,
++  GEGL_TILE_EXIST,
++  GEGL_TILE_VOID,
++  GEGL_TILE_FLUSH,
++  GEGL_TILE_REFETCH,
++  GEGL_TILE_REINIT,
++  GEGL_TILE_LAST_COMMAND
++} GeglTileCommand;
++
++G_END_DECLS
+ 
+ #include "gegl-types.h"
+ #include "gegl-tile-backend.h"
+ #include "gegl-tile-source.h"
++#include "gegl-tile-handler.h"
+ #include "gegl-tile.h"
+ 
+ #endif
+diff --git a/gegl/buffer/gegl-buffer-cl-cache.c b/gegl/buffer/gegl-buffer-cl-cache.c
+index ad0f279..8c7fca0 100644
+--- gegl/buffer/gegl-buffer-cl-cache.c
++++ gegl/buffer/gegl-buffer-cl-cache.c
+@@ -1,3 +1,21 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #include "config.h"
+ #include <string.h>
+ #include <glib.h>
+@@ -134,20 +152,19 @@ gegl_buffer_cl_cache_flush2 (GeglTileHandlerCache *cache,
+ 
+           gegl_cl_color_babl (entry->buffer->soft_format, &size);
+ 
+-          data = gegl_clEnqueueMapBuffer(gegl_cl_get_command_queue(), entry->tex, CL_TRUE,
+-                                         CL_MAP_READ, 0, entry->roi.width * entry->roi.height * size,
+-                                         0, NULL, NULL, &cl_err);
+-          if (cl_err != CL_SUCCESS) CL_ERROR;
++          data = g_malloc(entry->roi.width * entry->roi.height * size);
++
++          cl_err = gegl_clEnqueueReadBuffer(gegl_cl_get_command_queue(),
++                                            entry->tex, CL_TRUE, 0, entry->roi.width * entry->roi.height * size, data,
++                                            0, NULL, NULL);
+ 
+           /* tile-ize */
+           gegl_buffer_set (entry->buffer, &entry->roi, 0, entry->buffer->soft_format, data, GEGL_AUTO_ROWSTRIDE);
+ 
+-          cl_err = gegl_clEnqueueUnmapMemObject (gegl_cl_get_command_queue(), entry->tex, data,
+-                                                 0, NULL, NULL);
+-          if (cl_err != CL_SUCCESS) CL_ERROR;
+-
+           entry->used --;
+           need_cl = TRUE;
++
++          g_free(data);
+         }
+     }
+ 
+diff --git a/gegl/buffer/gegl-buffer-cl-cache.h b/gegl/buffer/gegl-buffer-cl-cache.h
+index c7def05..3e319ae 100644
+--- gegl/buffer/gegl-buffer-cl-cache.h
++++ gegl/buffer/gegl-buffer-cl-cache.h
+@@ -1,3 +1,21 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #ifndef __GEGL_BUFFER_CL_CACHE_H__
+ #define __GEGL_BUFFER_CL_CACHE_H__
+ 
+diff --git a/gegl/buffer/gegl-buffer-cl-iterator.c b/gegl/buffer/gegl-buffer-cl-iterator.c
+index 9dbedea..aa5b15f 100644
+--- gegl/buffer/gegl-buffer-cl-iterator.c
++++ gegl/buffer/gegl-buffer-cl-iterator.c
+@@ -1,3 +1,21 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #include "config.h"
+ #include <stdlib.h>
+ #include <string.h>
+@@ -52,7 +70,7 @@ typedef struct GeglBufferClIterators
+   /* format */
+   size_t op_cl_format_size      [GEGL_CL_BUFFER_MAX_ITERATORS];
+ 
+-  gegl_cl_color_op conv         [GEGL_CL_BUFFER_MAX_ITERATORS];
++  GeglClColorOp conv         [GEGL_CL_BUFFER_MAX_ITERATORS];
+ 
+   /* total iteration */
+   gint           rois;
+@@ -222,10 +240,6 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
+         {
+           if (i->flags[no] == GEGL_CL_BUFFER_WRITE)
+             {
+-              /* Wait Processing */
+-              cl_err = gegl_clEnqueueBarrier(gegl_cl_get_command_queue());
+-              if (cl_err != CL_SUCCESS) CL_ERROR;
+-
+               /* color conversion in the GPU (output) */
+               if (i->conv[no] == GEGL_CL_COLOR_CONVERT)
+                 for (j=0; j < i->n; j++)
+@@ -235,10 +249,6 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
+                     if (cl_err == FALSE) CL_ERROR;
+                   }
+ 
+-              /* Wait Processing */
+-              cl_err = gegl_clEnqueueBarrier(gegl_cl_get_command_queue());
+-              if (cl_err != CL_SUCCESS) CL_ERROR;
+-
+               /* GPU -> CPU */
+               for (j=0; j < i->n; j++)
+                 {
+@@ -247,18 +257,18 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
+                   /* tile-ize */
+                   if (i->conv[no] == GEGL_CL_COLOR_NOT_SUPPORTED)
+                     {
+-                      data = gegl_clEnqueueMapBuffer(gegl_cl_get_command_queue(), i->tex_op[no][j], CL_TRUE,
+-                                                     CL_MAP_READ,
+-                                                     0, i->size[no][j] * i->op_cl_format_size [no],
+-                                                     0, NULL, NULL, &cl_err);
++                      data = g_malloc(i->size[no][j] * i->op_cl_format_size [no]);
++
++                      cl_err = gegl_clEnqueueReadBuffer(gegl_cl_get_command_queue(),
++                                                        i->tex_op[no][j], CL_TRUE,
++                                                        0, i->size[no][j] * i->op_cl_format_size [no], data,
++                                                        0, NULL, NULL);
+                       if (cl_err != CL_SUCCESS) CL_ERROR;
+ 
+                       /* color conversion using BABL */
+                       gegl_buffer_set (i->buffer[no], &i->roi[no][j], 0, i->format[no], data, GEGL_AUTO_ROWSTRIDE);
+ 
+-                      cl_err = gegl_clEnqueueUnmapMemObject (gegl_cl_get_command_queue(), i->tex_op[no][j], data,
+-                                                             0, NULL, NULL);
+-                      if (cl_err != CL_SUCCESS) CL_ERROR;
++                      g_free(data);
+                     }
+                   else
+ #ifdef OPENCL_USE_CACHE
+@@ -460,10 +470,6 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
+                     }
+                 }
+             }
+-
+-          /* Wait Processing */
+-          cl_err = gegl_clEnqueueBarrier(gegl_cl_get_command_queue());
+-          if (cl_err != CL_SUCCESS) CL_ERROR;
+         }
+       else if (i->flags[no] == GEGL_CL_BUFFER_WRITE)
+         {
+@@ -476,7 +482,7 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
+                   {
+                   g_assert (i->tex_op[no][j] == NULL);
+                   i->tex_op[no][j] = gegl_clCreateBuffer (gegl_cl_get_context (),
+-                                                          CL_MEM_ALLOC_HOST_PTR | CL_MEM_WRITE_ONLY,
++                                                          CL_MEM_WRITE_ONLY,
+                                                           i->size[no][j] * i->op_cl_format_size [no],
+                                                           NULL, &cl_err);
+                   if (cl_err != CL_SUCCESS) CL_ERROR;
+@@ -491,7 +497,7 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
+                   {
+                   g_assert (i->tex_buf[no][j] == NULL);
+                   i->tex_buf[no][j] = gegl_clCreateBuffer (gegl_cl_get_context (),
+-                                                           CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE, /* cache */
++                                                           CL_MEM_READ_WRITE, /* cache */
+                                                            i->size[no][j] * i->buf_cl_format_size [no],
+                                                            NULL, &cl_err);
+                   if (cl_err != CL_SUCCESS) CL_ERROR;
+@@ -506,7 +512,7 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
+                   {
+                   g_assert (i->tex_buf[no][j] == NULL);
+                   i->tex_buf[no][j] = gegl_clCreateBuffer (gegl_cl_get_context (),
+-                                                           CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE, /* cache */
++                                                           CL_MEM_READ_WRITE, /* cache */
+                                                            i->size[no][j] * i->buf_cl_format_size [no],
+                                                            NULL, &cl_err);
+                   if (cl_err != CL_SUCCESS) CL_ERROR;
+diff --git a/gegl/buffer/gegl-buffer-cl-iterator.h b/gegl/buffer/gegl-buffer-cl-iterator.h
+index 5e7558e..e05d80f 100644
+--- gegl/buffer/gegl-buffer-cl-iterator.h
++++ gegl/buffer/gegl-buffer-cl-iterator.h
+@@ -1,3 +1,21 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #ifndef __GEGL_BUFFER_CL_ITERATOR_H__
+ #define __GEGL_BUFFER_CL_ITERATOR_H__
+ 
+diff --git a/gegl/buffer/gegl-buffer-index.h b/gegl/buffer/gegl-buffer-index.h
+index e8475f7..ff0bda0 100644
+--- gegl/buffer/gegl-buffer-index.h
++++ gegl/buffer/gegl-buffer-index.h
+@@ -124,10 +124,12 @@ void gegl_buffer_header_init (GeglBufferHeader *header,
+ 
+ void gegl_tile_entry_destroy (GeglBufferTile *entry);
+ 
+-GeglBufferItem *gegl_buffer_read_header(int i,
+-                                        goffset      *offset);
+-GList          *gegl_buffer_read_index (int i,
+-                                        goffset      *offset);
++GeglBufferItem *gegl_buffer_read_header(int      i,
++                                        goffset *offset,
++                                        gchar   *map);
++GList          *gegl_buffer_read_index (int      i,
++                                        goffset *offset,
++                                        gchar   *map);
+ 
+ #define struct_check_padding(type, size) \
+   if (sizeof (type) != size) \
+diff --git a/gegl/buffer/gegl-buffer-iterator.c b/gegl/buffer/gegl-buffer-iterator.c
+index 5a08a7e..ef435d9 100644
+--- gegl/buffer/gegl-buffer-iterator.c
++++ gegl/buffer/gegl-buffer-iterator.c
+@@ -96,12 +96,12 @@ static gboolean  gegl_buffer_tile_iterator_next (GeglBufferTileIterator *i);
+  *  check whether iterations on two buffers starting from the given coordinates with
+  *  the same width and height would be able to run parallell.
+  */
+-static gboolean gegl_buffer_scan_compatible (GeglBuffer *bufferA,
+-                                             gint        xA,
+-                                             gint        yA,
+-                                             GeglBuffer *bufferB,
+-                                             gint        xB,
+-                                             gint        yB)
++gboolean gegl_buffer_scan_compatible (GeglBuffer *bufferA,
++                                      gint        xA,
++                                      gint        yA,
++                                      GeglBuffer *bufferB,
++                                      gint        xB,
++                                      gint        yB)
+ {
+   if (bufferA->tile_storage->tile_width !=
+       bufferB->tile_storage->tile_width)
+@@ -405,8 +405,14 @@ gegl_buffer_iterator_stop (GeglBufferIterator *iterator)
+             found = TRUE;
+             break;
+           }
+-      if (!found)
++      if (!found) {
+         gegl_buffer_unlock (i->buffer[no]);
++
++        if (i->flags[no] & GEGL_BUFFER_WRITE) {
++          gegl_buffer_emit_changed_signal(i->buffer[no], &(i->rect[no]));
++        }
++      }
++
+     }
+ 
+   for (no=0; no<i->iterators; no++)
+@@ -476,10 +482,8 @@ gegl_buffer_iterator_next (GeglBufferIterator *iterator)
+ 
+                   ensure_buf (i, no);
+ 
+-  /* XXX: should perhaps use _set_unlocked, and keep the lock in the
+-   * iterator.
+-   */
+-                  gegl_buffer_set (i->buffer[no], &(i->roi[no]), 0, i->format[no], i->buf[no], GEGL_AUTO_ROWSTRIDE); /* XXX: use correct level */
++                  /* Change notification is done in gegl_buffer_iterator_stop */
++                  gegl_buffer_set_unlocked_no_notify (i->buffer[no], &(i->roi[no]), i->format[no], i->buf[no], GEGL_AUTO_ROWSTRIDE); /* XXX: use correct level */
+                 }
+             }
+         }
+@@ -523,7 +527,8 @@ gegl_buffer_iterator_next (GeglBufferIterator *iterator)
+ 
+               if (i->flags[no] & GEGL_BUFFER_READ)
+                 {
+-                  gegl_buffer_get_unlocked (i->buffer[no], 1.0, &(i->roi[no]), i->format[no], i->buf[no], GEGL_AUTO_ROWSTRIDE);
++                  gegl_buffer_get_unlocked (i->buffer[no], 1.0, &(i->roi[no]), i->format[no], i->buf[no],
++                                            GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+                 }
+ 
+               i->data[no]=i->buf[no];
+@@ -543,7 +548,8 @@ gegl_buffer_iterator_next (GeglBufferIterator *iterator)
+ 
+           if (i->flags[no] & GEGL_BUFFER_READ)
+             {
+-              gegl_buffer_get_unlocked (i->buffer[no], 1.0, &(i->roi[no]), i->format[no], i->buf[no], GEGL_AUTO_ROWSTRIDE);
++              gegl_buffer_get_unlocked (i->buffer[no], 1.0, &(i->roi[no]), i->format[no], i->buf[no],
++                                        GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+             }
+           i->data[no]=i->buf[no];
+ 
+diff --git a/gegl/buffer/gegl-buffer-iterator.h b/gegl/buffer/gegl-buffer-iterator.h
+index 54ebef1..bbc8428 100644
+--- gegl/buffer/gegl-buffer-iterator.h
++++ gegl/buffer/gegl-buffer-iterator.h
+@@ -28,6 +28,13 @@
+ #define GEGL_BUFFER_WRITE     2
+ #define GEGL_BUFFER_READWRITE (GEGL_BUFFER_READ|GEGL_BUFFER_WRITE)
+ 
++/***
++ * GeglBufferIterator:
++ *
++ * GeglBufferIterator allows to iterate over one or more GeglBuffers.
++ * In each iteration the new data is available as a linear chunk of
++ * memory. See gegl_buffer_iterator_new() and gegl_buffer_iterator_next()
++ */
+ typedef struct GeglBufferIterator
+ {
+   gint          length;
+@@ -38,13 +45,16 @@ typedef struct GeglBufferIterator
+ 
+ 
+ /**
+- * gegl_buffer_iterator_new:
++ * gegl_buffer_iterator_new: (skip)
+  * @buffer: a #GeglBuffer
+  * @roi: the rectangle to iterate over
+- * @format: the format we want to process this buffers data in, pass 0 to use the buffers format.
+- * @flags: whether we need reading or writing to this buffer one of GEGL_BUFFER_READ, GEGL_BUFFER_WRITE and GEGL_BUFFER_READWRITE.
+  * @level: the level at which we are iterating, the roi will indicate the
+  * extent at 1:1, x,y,width and height are/(2^level)
++ * @format: the format we want to process this buffers data in, pass 0 to use the buffers format.
++ * @flags: whether we need reading or writing to this buffer one of GEGL_BUFFER_READ, GEGL_BUFFER_WRITE and GEGL_BUFFER_READWRITE.
++ * @repeat_mode: how request outside the buffer extent are handled.
++ * Valid values: GEGL_ABYSS_NONE
++
+  *
+  * Create a new buffer iterator, this buffer will be iterated through
+  * in linear chunks, some chunks might be full tiles the coordinates, see
+@@ -59,16 +69,20 @@ GeglBufferIterator * gegl_buffer_iterator_new  (GeglBuffer          *buffer,
+                                                 gint                 level,
+                                                 const Babl          *format,
+                                                 guint                flags,
+-                                                GeglAbyssPolicy      abyss_policy);
++                                                GeglAbyssPolicy      repeat_mode);
+ 
+ 
+ /**
+- * gegl_buffer_iterator_add:
++ * gegl_buffer_iterator_add: (skip)
+  * @iterator: a #GeglBufferIterator
+  * @buffer: a #GeglBuffer
+  * @roi: the rectangle to iterate over
++ * @level: the level at which we are iterating, the roi will indicate the
++ * extent at 1:1, x,y,width and height are/(2^level)
+  * @format: the format we want to process this buffers data in, pass 0 to use the buffers format.
+  * @flags: whether we need reading or writing to this buffer.
++ * @repeat_mode: how request outside the buffer extent are handled.
++ * Valid values: GEGL_ABYSS_NONE
+  *
+  * Adds an additional buffer iterator that will be processed in sync with
+  * the original one, if the buffer doesn't align with the other for tile access
+@@ -84,14 +98,14 @@ gint                 gegl_buffer_iterator_add  (GeglBufferIterator  *iterator,
+                                                 gint                 level,
+                                                 const Babl          *format,
+                                                 guint                flags,
+-                                                GeglAbyssPolicy      abyss_policy);
++                                                GeglAbyssPolicy      repeat_mode);
+ 
+ /**
+  * gegl_buffer_iterator_stop:
+  * @iterator: a GeglBufferIterator
+  *
+- * Cancels the current iteration, freeing up any temporary resources. You have
+- * to bail out of any loop you are currently.
++ * Cancels the current iteration, freeing up any temporary resources. The
++ * iterator handle is no longer valid after invoking this function.
+  */
+ void                 gegl_buffer_iterator_stop  (GeglBufferIterator *iterator);
+ 
+diff --git a/gegl/buffer/gegl-buffer-linear.c b/gegl/buffer/gegl-buffer-linear.c
+index a4cd108..27970c5 100644
+--- gegl/buffer/gegl-buffer-linear.c
++++ gegl/buffer/gegl-buffer-linear.c
+@@ -18,6 +18,8 @@ gegl_buffer_linear_new2 (const GeglRectangle *extent,
+                          const Babl          *format,
+                          gint                 rowstride)
+ {
++  GeglBuffer *buffer;
++
+   if (extent==NULL)
+     {
+       g_error ("got a NULL extent");
+@@ -33,17 +35,21 @@ gegl_buffer_linear_new2 (const GeglRectangle *extent,
+    * requesting the correct parameters when creating the
+    * buffer
+    */
+-  return g_object_new (GEGL_TYPE_BUFFER,
++  buffer = g_object_new (GEGL_TYPE_BUFFER,
+                        "x",          extent->x,
+                        "y",          extent->y,
+-                       "shift-x",    extent->x,
+-                       "shift-y",    extent->y,
++                       "shift-x",    0,
++                       "shift-y",    0,
+                        "width",      extent->width,
+                        "height",     extent->height,
+                        "tile-width", rowstride,
+                        "tile-height", extent->height,
+                        "format", format,
+                        NULL);
++
++  g_object_set_data (G_OBJECT (buffer), "is-linear", (void*)0xf00);
++
++  return buffer;
+ }
+ 
+ GeglBuffer *
+@@ -199,7 +205,7 @@ gegl_buffer_linear_open (GeglBuffer          *buffer,
+     if(rowstride)*rowstride = rs;
+ 
+     info->buf = gegl_malloc (rs * info->extent.height);
+-    gegl_buffer_get_unlocked (buffer, 1.0, &info->extent, format, info->buf, rs);
++    gegl_buffer_get_unlocked (buffer, 1.0, &info->extent, format, info->buf, rs, GEGL_ABYSS_NONE);
+     return info->buf;
+   }
+   return NULL;
+diff --git a/gegl/buffer/gegl-buffer-load.c b/gegl/buffer/gegl-buffer-load.c
+index f1c772d..8857318 100644
+--- gegl/buffer/gegl-buffer-load.c
++++ gegl/buffer/gegl-buffer-load.c
+@@ -47,6 +47,7 @@
+ #include "gegl-debug.h"
+ 
+ #include <glib/gprintf.h>
++#include <glib/gstdio.h>
+ 
+ typedef struct
+ {
+@@ -93,25 +94,37 @@ load_info_destroy (LoadInfo *info)
+   g_slice_free (LoadInfo, info);
+ }
+ 
++/* Reads buffer header from the file descriptor (first argument) or
++ * memory mapped file if map argument is not NULL
++ */
+ GeglBufferItem *
+-gegl_buffer_read_header (int i,
+-                         goffset      *offset)
++gegl_buffer_read_header (int      i,
++                         goffset *offset,
++                         gchar   *map)
+ {
+   goffset         placeholder;
+   GeglBufferItem *ret;
++
+   if (offset==0)
+     offset = &placeholder;
+ 
+-  if(lseek(i, 0, SEEK_SET) == -1)
+-    g_warning ("failed seeking to %i", 0);
++  if (map == NULL)
++    if(lseek(i, 0, SEEK_SET) == -1)
++      g_warning ("failed seeking to %i", 0);
+   *offset = 0;
+ 
+   ret = g_malloc (sizeof (GeglBufferHeader));
+-  {
+-    ssize_t sz_read = read(i, ret, sizeof(GeglBufferHeader));
+-    if (sz_read != -1)
+-      *offset += sz_read;
+-  }
++  if (map)
++    {
++      memcpy (ret, map, sizeof (GeglBufferHeader));
++      *offset += sizeof (GeglBufferHeader);
++    }
++  else
++    {
++      ssize_t sz_read = read(i, ret, sizeof(GeglBufferHeader));
++      if (sz_read != -1)
++        *offset += sz_read;
++    }
+ 
+   GEGL_NOTE (GEGL_DEBUG_BUFFER_LOAD, "read header: tile-width: %i tile-height: %i next:%i  %ix%i\n",
+                    ret->header.tile_width,
+@@ -132,30 +145,41 @@ gegl_buffer_read_header (int i,
+ }
+ 
+ /* reads a block of information from a geglbuffer that resides in an GInputStream,
+- * if offset is NULL it is read from the current offsetition of the stream. If offset
++ * if offset is NULL it is read from the current offset of the stream. If offset
+  * is passed in the offset stored at the location is used as the initial seeking
+  * point and will be updated with the offset after the read is completed.
++ *
++ * If the map argument is not NULL then the block is memcpyd from the passed in
++ * memory mapped file.
+  */
+-static GeglBufferItem *read_block (int           i,
+-                                   goffset      *offset)
++static GeglBufferItem *read_block (int      i,
++                                   goffset *offset,
++                                   gchar   *map)
+ {
+-  GeglBufferBlock block;
+-  GeglBufferItem *ret;
+-  gsize           byte_read = 0;
+-  gint            own_size=0;
++  GeglBufferBlock  block;
++  GeglBufferItem  *ret;
++  gsize            byte_read  = 0;
++  gint             own_size   = 0;
++  gsize            block_size = sizeof (GeglBufferBlock);
+ 
+   if (*offset==0)
+     return NULL;
+ 
+-  if (offset)
++  if (offset && map == NULL)
+     if(lseek(i, *offset, SEEK_SET) == -1)
+       g_warning ("failed seeking to %i", (gint)*offset);
+ 
+-  {
+-	ssize_t sz_read = read (i, &block,  sizeof (GeglBufferBlock));
+-    if(sz_read != -1)
+-      byte_read += sz_read;
+-  }
++  if (map)
++    {
++      memcpy (&block, map + *offset, block_size);
++      byte_read += block_size;
++    }
++  else
++    {
++      ssize_t sz_read = read (i, &block,  block_size);
++      if(sz_read != -1)
++        byte_read += sz_read;
++    }
+   GEGL_NOTE (GEGL_DEBUG_BUFFER_LOAD, "read block: length:%i next:%i",
+                           block.length, (guint)block.next);
+ 
+@@ -183,25 +207,41 @@ static GeglBufferItem *read_block (int           i,
+        * versions
+        */
+       ret = g_malloc (own_size);
+-      memcpy (ret, &block, sizeof (GeglBufferBlock));
+-      {
+-        ssize_t sz_read = read (i, ((gchar*)ret) + sizeof(GeglBufferBlock),
+-                                own_size - sizeof(GeglBufferBlock));
+-        if(sz_read != -1)
+-          byte_read += sz_read;
+-      }
++      memcpy (ret, &block, block_size);
++
++      if (map)
++        {
++          memcpy (((gchar*)ret) + block_size, map + *offset + byte_read,
++                  own_size - block_size);
++          byte_read += own_size - block_size;
++        }
++      else
++        {
++          ssize_t sz_read = read (i, ((gchar*)ret) + block_size,
++                                  own_size - block_size);
++          if(sz_read != -1)
++            byte_read += sz_read;
++        }
+       ret->block.length = own_size;
+     }
+   else if (block.length < own_size)
+     {
+       ret = g_malloc (own_size);
+-      memcpy (ret, &block, sizeof (GeglBufferBlock));
+-      {
+-        ssize_t sz_read = read (i, ret + sizeof(GeglBufferBlock),
+-								block.length - sizeof (GeglBufferBlock));
+-		if(sz_read != -1)
+-		  byte_read += sz_read;
+-      }
++      memcpy (ret, &block, block_size);
++
++      if (map)
++        {
++          memcpy (((gchar*)ret) + block_size, map + *offset + byte_read,
++                  block.length - block_size);
++          byte_read += block.length - block_size;
++        }
++      else
++        {
++          ssize_t sz_read = read (i, ((gchar*)ret) + block_size,
++                                  block.length - block_size);
++          if(sz_read != -1)
++            byte_read += sz_read;
++        }
+       ret->block.length = own_size;
+     }
+   else
+@@ -214,15 +254,21 @@ static GeglBufferItem *read_block (int           i,
+   return ret;
+ }
+ 
++/* Reads buffer index from the file descriptor (first argument) or
++ * memory mapped file if map argument is not NULL
++ */
+ GList *
+-gegl_buffer_read_index (int           i,
+-                        goffset      *offset)
++gegl_buffer_read_index (int      i,
++                        goffset *offset,
++                        gchar   *map)
+ /* load the index */
+ {
+   GList          *ret = NULL;
+   GeglBufferItem *item;
+ 
+-  for (item = read_block (i, offset); item; item = read_block (i, offset))
++  for (item = read_block (i, offset, map);
++       item;
++       item = read_block (i, offset, map))
+     {
+       g_assert (item);
+       GEGL_NOTE (GEGL_DEBUG_BUFFER_LOAD,"loaded item: %i, %i, %i offset:%i next:%i", item->tile.x,
+@@ -257,7 +303,7 @@ gegl_buffer_load (const gchar *path)
+   LoadInfo *info = g_slice_new0 (LoadInfo);
+ 
+   info->path = g_strdup (path);
+-  info->i = open (info->path, O_RDONLY);
++  info->i = g_open (info->path, O_RDONLY, 0770);
+   GEGL_NOTE (GEGL_DEBUG_BUFFER_LOAD, "starting to load buffer %s", path);
+   if (info->i == -1)
+     {
+@@ -266,7 +312,7 @@ gegl_buffer_load (const gchar *path)
+     }
+ 
+   {
+-    GeglBufferItem *header = gegl_buffer_read_header (info->i, &info->offset);
++    GeglBufferItem *header = gegl_buffer_read_header (info->i, &info->offset, NULL);
+     g_assert (header);
+     /*memcpy (&(info->header), header, sizeof (GeglBufferHeader));*/
+     info->header = *(&header->header);
+@@ -294,7 +340,7 @@ gegl_buffer_load (const gchar *path)
+   */
+   g_assert (babl_format_get_bytes_per_pixel (info->format) == info->header.bytes_per_pixel);
+ 
+-  info->tiles = gegl_buffer_read_index (info->i, &info->offset);
++  info->tiles = gegl_buffer_read_index (info->i, &info->offset, NULL);
+ 
+   /* load each tile */
+   {
+diff --git a/gegl/buffer/gegl-buffer-private.h b/gegl/buffer/gegl-buffer-private.h
+index 9e2e449..439f28c 100644
+--- gegl/buffer/gegl-buffer-private.h
++++ gegl/buffer/gegl-buffer-private.h
+@@ -32,6 +32,8 @@
+ #define GEGL_IS_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_BUFFER))
+ #define GEGL_BUFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_BUFFER, GeglBufferClass))
+ 
++typedef struct _GeglBufferClass GeglBufferClass;
++
+ struct _GeglBuffer
+ {
+   GeglTileHandler   parent_instance; /* which is a GeglTileHandler which has a
+@@ -46,10 +48,13 @@ struct _GeglBuffer
+                                 be different from format */
+ 
+   gint              shift_x; /* The relative offset of origins compared with */
+-  gint              shift_y; /* anchestral tile_storage buffer, during            */
+-                             /* construction relative to immediate source  */
++  gint              shift_y; /* anchestral tile_storage buffer, during       */
++                             /* construction relative to immediate source    */
+ 
+   GeglRectangle     abyss;
++  gboolean          abyss_tracks_extent; /* specifies whether the abyss rectangle
++                                            should track any modifications to the
++                                            extent rectangle */
+ 
+ 
+   GeglSampler      *sampler; /* cached sampler for speeding up random
+@@ -95,6 +100,7 @@ void              gegl_tile_cache_init    (void);
+ void              gegl_tile_cache_destroy (void);
+ 
+ GeglTileBackend * gegl_buffer_backend     (GeglBuffer *buffer);
++GeglTileBackend * gegl_buffer_backend2    (GeglBuffer *buffer); /* non-cached */
+ 
+ gboolean          gegl_buffer_is_shared   (GeglBuffer *buffer);
+ 
+@@ -106,12 +112,18 @@ void              gegl_buffer_set_unlocked (GeglBuffer          *buffer,
+                                             const Babl          *format,
+                                             const void          *src,
+                                             gint                 rowstride);
++void              gegl_buffer_set_unlocked_no_notify (GeglBuffer  *buffer,
++                                              const GeglRectangle *rect,
++                                              const Babl          *format,
++                                              const void          *src,
++                                              gint                 rowstride);
+ void              gegl_buffer_get_unlocked (GeglBuffer          *buffer,
+                                             gdouble              scale,
+                                             const GeglRectangle *rect,
+                                             const Babl          *format,
+                                             gpointer             dest_buf,
+-                                            gint                 rowstride);
++                                            gint                 rowstride,
++                                            GeglAbyssPolicy      repeat_mode);
+ 
+ GeglBuffer *
+ gegl_buffer_new_ram (const GeglRectangle *extent,
+@@ -125,7 +137,8 @@ void            gegl_buffer_sampler           (GeglBuffer     *buffer,
+                                                const Babl     *format,
+                                                gpointer        sampler);
+ 
+-
++void            gegl_buffer_emit_changed_signal(GeglBuffer *buffer,
++                                                const GeglRectangle *rect);
+ 
+ /* the instance size of a GeglTile is a bit large, and should if possible be
+  * trimmed down
+@@ -176,6 +189,14 @@ struct _GeglTile
+ 
+ void _gegl_buffer_drop_hot_tile (GeglBuffer *buffer);
+ 
++gboolean gegl_buffer_scan_compatible (GeglBuffer *bufferA,
++                                      gint        xA,
++                                      gint        yA,
++                                      GeglBuffer *bufferB,
++                                      gint        xB,
++                                      gint        yB);
++
++
+ #ifndef __GEGL_TILE_C
+ #define gegl_tile_get_data(tile)  ((guchar*)((tile)->data))
+ #endif // __GEGL_TILE_C
+@@ -188,6 +209,27 @@ void _gegl_buffer_drop_hot_tile (GeglBuffer *buffer);
+                     (divisor) - 1 - ((-((dividend) + 1)) % (divisor)) : \
+                     (dividend) % (divisor))
+ 
++/*
++ * FAST_PSEUDO_FLOOR is a floor replacement which has been found to be
++ * faster. It returns the floor of its argument unless the argument is
++ * a negative integer, in which case it returns one less than the
++ * floor. For example:
++ *
++ * FAST_PSEUDO_FLOOR(0.5) = 0
++ *
++ * FAST_PSEUDO_FLOOR(0.) = 0
++ *
++ * FAST_PSEUDO_FLOOR(-.5) = -1
++ *
++ * as expected, but
++ *
++ * FAST_PSEUDO_FLOOR(-1.) = -2
++ *
++ * The discontinuities of FAST_PSEUDO_FLOOR are on the right of
++ * negative numbers instead of on the left as is the case for floor.
++ */
++#define GEGL_FAST_PSEUDO_FLOOR(x) ( (gint) (x) - (gint) ( (gdouble) (x) < 0. ) )
++
+ #define gegl_tile_offset(coordinate, stride) GEGL_REMAINDER((coordinate), (stride))
+ 
+ /* helper function to compute tile indices and offsets for coordinates
+diff --git a/gegl/buffer/gegl-buffer-save.c b/gegl/buffer/gegl-buffer-save.c
+index e94a5b5..74c2d2c 100644
+--- gegl/buffer/gegl-buffer-save.c
++++ gegl/buffer/gegl-buffer-save.c
+@@ -27,6 +27,7 @@
+ #include <errno.h>
+ 
+ #include <glib-object.h>
++#include <glib/gstdio.h>
+ 
+ #include "gegl-types-internal.h"
+ 
+@@ -226,9 +227,9 @@ gegl_buffer_save (GeglBuffer          *buffer,
+   info->path = g_strdup (path);
+ 
+ #ifndef G_OS_WIN32
+-  info->o    = open (info->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
++  info->o    = g_open (info->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
+ #else
+-  info->o    = open (info->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
++  info->o    = g_open (info->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
+ #endif
+ 
+ 
+diff --git a/gegl/buffer/gegl-buffer-types.h b/gegl/buffer/gegl-buffer-types.h
+index 0a2b89f..6b8d3c3 100644
+--- gegl/buffer/gegl-buffer-types.h
++++ gegl/buffer/gegl-buffer-types.h
+@@ -19,8 +19,6 @@
+ #ifndef __GEGL_BUFFER_TYPES_H__
+ #define __GEGL_BUFFER_TYPES_H__
+ 
+-typedef struct _GeglTileClass             GeglTileClass;
+-
+ #include "gegl-types.h"
+ #include "gegl-buffer-backend.h"
+ 
+@@ -45,26 +43,16 @@ struct _GeglTileBackendPrivate
+   gboolean    shared;
+ };
+ 
+-
+-
+-typedef struct _GeglTileHandler           GeglTileHandler;
+-typedef struct _GeglTileHandlerClass      GeglTileHandlerClass;
+-
+ typedef struct _GeglTileHandlerChain      GeglTileHandlerChain;
+-typedef struct _GeglTileHandlerChainClass GeglTileHandlerChainClass;
+ 
+ typedef struct _GeglTileStorage           GeglTileStorage;
+-typedef struct _GeglTileStorageClass      GeglTileStorageClass;
+ 
+ #ifndef __GEGL_BUFFER_H__
+ typedef struct _GeglBuffer                GeglBuffer;
+ typedef struct _GeglSampler               GeglSampler;
+ #endif
+ 
+-typedef struct _GeglBufferClass           GeglBufferClass;
+-
+ typedef struct _GeglCache                 GeglCache;
+-typedef struct _GeglCacheClass            GeglCacheClass;
+ 
+ typedef struct _GeglRegion                GeglRegion;
+ 
+diff --git a/gegl/buffer/gegl-buffer.c b/gegl/buffer/gegl-buffer.c
+index 6d99861..874eede 100644
+--- gegl/buffer/gegl-buffer.c
++++ gegl/buffer/gegl-buffer.c
+@@ -27,12 +27,6 @@
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+-#include <errno.h>
+-
+-#include <sys/types.h>
+-#ifdef HAVE_UNISTD_H
+-#include <unistd.h>
+-#endif
+ 
+ #ifdef G_OS_WIN32
+ #include <process.h>
+@@ -352,6 +346,22 @@ gegl_buffer_set_extent (GeglBuffer          *buffer,
+       header->height = buffer->extent.height;
+     }
+ 
++  if (buffer->abyss_tracks_extent)
++    {
++      buffer->abyss = *extent;
++    }
++
++  return TRUE;
++}
++
++gboolean
++gegl_buffer_set_abyss (GeglBuffer          *buffer,
++                       const GeglRectangle *abyss)
++{
++  g_return_val_if_fail(GEGL_IS_BUFFER(buffer), FALSE);
++
++  buffer->abyss = *abyss;
++
+   return TRUE;
+ }
+ 
+@@ -444,8 +454,9 @@ gegl_buffer_finalize (GObject *object)
+   G_OBJECT_CLASS (parent_class)->finalize (object);
+ }
+ 
++
+ GeglTileBackend *
+-gegl_buffer_backend (GeglBuffer *buffer)
++gegl_buffer_backend2 (GeglBuffer *buffer)
+ {
+   GeglTileSource *tmp = GEGL_TILE_SOURCE (buffer);
+ 
+@@ -456,7 +467,6 @@ gegl_buffer_backend (GeglBuffer *buffer)
+     {
+       tmp = GEGL_TILE_HANDLER (tmp)->source;
+     } while (tmp &&
+-             /*GEGL_IS_TILE_TRAIT (tmp) &&*/
+              !GEGL_IS_TILE_BACKEND (tmp));
+   if (!tmp &&
+       !GEGL_IS_TILE_BACKEND (tmp))
+@@ -465,15 +475,28 @@ gegl_buffer_backend (GeglBuffer *buffer)
+   return (GeglTileBackend *) tmp;
+ }
+ 
++GeglTileBackend *
++gegl_buffer_backend (GeglBuffer *buffer)
++{
++  GeglTileBackend *tmp;
++  if (G_LIKELY (buffer->backend))
++    return buffer->backend;
++
++  tmp = gegl_buffer_backend2 (buffer);
++
++  if (tmp)
++    buffer->backend = tmp;
++
++  return (GeglTileBackend *) tmp;
++}
++
+ static GeglTileStorage *
+ gegl_buffer_tile_storage (GeglBuffer *buffer)
+ {
+-  GeglTileSource *tmp = GEGL_TILE_SOURCE (buffer);
++  GeglTileSource *tmp = (GeglTileSource*) (buffer);
+ 
+-  do
+-    {
+-      tmp = ((GeglTileHandler *) (tmp))->source;
+-    } while (!GEGL_IS_TILE_STORAGE (tmp));
++  do tmp = ((GeglTileHandler *) (tmp))->source;
++  while (!GEGL_IS_TILE_STORAGE (tmp));
+ 
+   g_assert (tmp);
+ 
+@@ -533,25 +556,25 @@ gegl_buffer_constructor (GType                  type,
+        */
+       if (buffer->backend)
+         {
+-          void             *storage;
++          void *storage;
+ 
+           storage = gegl_tile_storage_new (buffer->backend);
+ 
+           source = g_object_new (GEGL_TYPE_BUFFER, "source", storage, NULL);
+-
+           g_object_unref (storage);
+ 
+           gegl_tile_handler_set_source ((GeglTileHandler*)(buffer), source);
+           g_object_unref (source);
+ 
+           g_signal_connect (storage, "changed",
+-                            G_CALLBACK(gegl_buffer_storage_changed), buffer);
++                            G_CALLBACK (gegl_buffer_storage_changed),
++                            buffer);
+ 
+           g_assert (source);
+           backend = gegl_buffer_backend (GEGL_BUFFER (source));
+           g_assert (backend);
+-	        g_assert (backend == buffer->backend);
+-	      }
++          g_assert (backend == buffer->backend);
++        }
+       else if (buffer->path && g_str_equal (buffer->path, "RAM"))
+         {
+           source = GEGL_TILE_SOURCE (gegl_buffer_new_from_format (buffer->format,
+@@ -582,9 +605,12 @@ gegl_buffer_constructor (GType                  type,
+                                   "format", buffer->format?buffer->format:babl_format ("RGBA float"),
+                                   "path", buffer->path,
+                                   NULL);
++
+           storage = gegl_tile_storage_new (backend);
++          g_object_unref (backend);
+ 
+           source = g_object_new (GEGL_TYPE_BUFFER, "source", storage, NULL);
++          g_object_unref (storage);
+ 
+           /* after construction,. x and y should be set to reflect
+            * the top level behavior exhibited by this buffer object.
+@@ -593,7 +619,8 @@ gegl_buffer_constructor (GType                  type,
+           g_object_unref (source);
+ 
+           g_signal_connect (storage, "changed",
+-                            G_CALLBACK(gegl_buffer_storage_changed), buffer);
++                            G_CALLBACK (gegl_buffer_storage_changed),
++                            buffer);
+ 
+           g_assert (source);
+           backend = gegl_buffer_backend (GEGL_BUFFER (source));
+@@ -663,16 +690,19 @@ gegl_buffer_constructor (GType                  type,
+         }
+     }
+ 
++  buffer->abyss_tracks_extent = FALSE;
++
+   if (buffer->abyss.width == 0 &&
+       buffer->abyss.height == 0 &&
+       buffer->abyss.x == 0 &&
+       buffer->abyss.y == 0)      /* 0 sized extent == inherit buffer extent
+                                   */
+     {
+-      buffer->abyss.x      = buffer->extent.x;
+-      buffer->abyss.y      = buffer->extent.y;
+-      buffer->abyss.width  = buffer->extent.width;
+-      buffer->abyss.height = buffer->extent.height;
++      buffer->abyss.x             = buffer->extent.x;
++      buffer->abyss.y             = buffer->extent.y;
++      buffer->abyss.width         = buffer->extent.width;
++      buffer->abyss.height        = buffer->extent.height;
++      buffer->abyss_tracks_extent = TRUE;
+     }
+   else if (buffer->abyss.width == 0 &&
+            buffer->abyss.height == 0)
+@@ -712,6 +742,18 @@ gegl_buffer_constructor (GType                  type,
+ 
+       gegl_rectangle_intersect (&self, &parent, &request);
+ 
++      /* Don't have the abyss track the extent if the intersection is
++       * not the entire extent. Otherwise, setting the extent identical
++       * to itself could suddenly make the abyss bigger. */
++      if (buffer->abyss_tracks_extent && 
++          (buffer->extent.x      != self.x ||
++           buffer->extent.y      != self.y ||
++           buffer->extent.width  != self.width ||
++           buffer->extent.height != self.height) )
++        {
++          buffer->abyss_tracks_extent = FALSE;
++        }
++
+       buffer->abyss.x      = self.x;
+       buffer->abyss.y      = self.y;
+       buffer->abyss.width  = self.width;
+@@ -749,7 +791,7 @@ gegl_buffer_get_tile (GeglTileSource *source,
+                       gint        y,
+                       gint        z)
+ {
+-  GeglTileHandler *handler = GEGL_TILE_HANDLER (source);
++  GeglTileHandler *handler = (GeglTileHandler*) (source);
+   GeglTile    *tile   = NULL;
+   source = handler->source;
+ 
+@@ -760,7 +802,7 @@ gegl_buffer_get_tile (GeglTileSource *source,
+ 
+   if (tile)
+     {
+-      GeglBuffer *buffer = GEGL_BUFFER (handler);
++      GeglBuffer *buffer = (GeglBuffer*) (handler);
+ 
+       /* storing information in tile, to enable the dispose function of the
+        * tile instance to "hook" back to the storage with correct
+@@ -1057,6 +1099,50 @@ gegl_buffer_new_for_backend (const GeglRectangle *extent,
+                        NULL);
+ }
+ 
++void
++gegl_buffer_add_handler (GeglBuffer *buffer,
++                         gpointer    handler)
++{
++  GeglTileHandlerChain *chain;
++
++  g_return_if_fail (GEGL_IS_BUFFER (buffer));
++  g_return_if_fail (GEGL_IS_TILE_HANDLER (handler));
++
++  g_object_set (handler,
++                "format", buffer->tile_storage->format,
++                "tile-width", buffer->tile_storage->tile_width,
++                "tile-height", buffer->tile_storage->tile_height,
++                NULL);
++
++  chain = GEGL_TILE_HANDLER_CHAIN (buffer->tile_storage);
++
++  gegl_tile_handler_chain_add (chain, handler);
++
++  /* XXX */
++  chain->chain = g_slist_remove (chain->chain, handler);
++  chain->chain = g_slist_insert (chain->chain, handler, 2);
++
++  gegl_tile_handler_chain_bind (chain);
++}
++
++void
++gegl_buffer_remove_handler (GeglBuffer *buffer,
++                            gpointer    handler)
++{
++  GeglTileHandlerChain *chain;
++
++  g_return_if_fail (GEGL_IS_BUFFER (buffer));
++  g_return_if_fail (GEGL_IS_TILE_HANDLER (handler));
++
++  chain = GEGL_TILE_HANDLER_CHAIN (buffer->tile_storage);
++
++  g_return_if_fail (g_slist_find (chain->chain, handler));
++
++  chain->chain = g_slist_remove (chain->chain, handler);
++  g_object_unref (handler);
++
++  gegl_tile_handler_chain_bind (chain);
++}
+ 
+ /* FIXME: this function needs optimizing, perhaps keep a pool
+  * of GeglBuffer shells that can be adapted to the needs
+@@ -1150,7 +1236,7 @@ gegl_tile_storage_new_cached (gint tile_width, gint tile_height,
+       if (item->babl_fmt == babl_fmt &&
+           item->tile_width == tile_width &&
+           item->tile_height == tile_height &&
+-          item->ram == item->ram)
++          item->ram == use_ram)
+        {
+          storage = item->storage;
+          storage_cache = g_slist_remove (storage_cache, item);
+@@ -1179,6 +1265,7 @@ gegl_tile_storage_new_cached (gint tile_width, gint tile_height,
+                                   "format", babl_fmt,
+                                   NULL);
+           storage = gegl_tile_storage_new (backend);
++          g_object_unref (backend);
+         }
+       else
+         {
+@@ -1208,6 +1295,7 @@ gegl_tile_storage_new_cached (gint tile_width, gint tile_height,
+                                   "path", path,
+                                   NULL);
+           storage = gegl_tile_storage_new (backend);
++          g_object_unref (backend);
+           g_free (path);
+         }
+       item->storage = storage;
+@@ -1334,3 +1422,16 @@ gboolean gegl_buffer_unlock (GeglBuffer *buffer)
+   g_mutex_unlock (buffer->tile_storage->mutex);
+   return ret;
+ }
++
++void gegl_buffer_emit_changed_signal(GeglBuffer *buffer, const GeglRectangle *rect)
++{
++  GeglRectangle copy;
++
++  if (rect == NULL) {
++    copy = *gegl_buffer_get_extent (buffer);
++  } else {
++    copy = *rect;
++  }
++
++  g_signal_emit(buffer, gegl_buffer_signals[CHANGED], 0, &copy, NULL);
++}
+diff --git a/gegl/buffer/gegl-buffer.h b/gegl/buffer/gegl-buffer.h
+index c35dfa6..0d2d507 100644
+--- gegl/buffer/gegl-buffer.h
++++ gegl/buffer/gegl-buffer.h
+@@ -48,7 +48,7 @@ typedef struct _GeglSampler  GeglSampler;
+ GType           gegl_buffer_get_type          (void) G_GNUC_CONST;
+ 
+ /**
+- * gegl_buffer_new:
++ * gegl_buffer_new: (skip)
+  * @extent: the geometry of the buffer (origin, width and height) a
+  * GeglRectangle.
+  * @format: the Babl pixel format to be used, create one with babl_format("RGBA
+@@ -78,6 +78,26 @@ GeglBuffer *   gegl_buffer_new_for_backend    (const GeglRectangle *extent,
+                                                void                *backend);
+ 
+ /**
++ * gegl_buffer_add_handler:
++ * @buffer: a #GeglBuffer
++ * @handler: a #GeglTileHandler
++ *
++ * Add a new tile handler in the existing chain of tile handler of a GeglBuffer.
++ */
++void           gegl_buffer_add_handler        (GeglBuffer          *buffer,
++                                               gpointer             handler);
++
++/**
++ * gegl_buffer_remove_handler:
++ * @buffer: a #GeglBuffer
++ * @handler: a #GeglTileHandler
++ *
++ * Remove the provided tile handler in the existing chain of tile handler of a GeglBuffer.
++ */
++void           gegl_buffer_remove_handler     (GeglBuffer          *buffer,
++                                               gpointer             handler);
++
++/**
+  * gegl_buffer_open:
+  * @path: the path to a gegl buffer on disk.
+  *
+@@ -159,6 +179,18 @@ const GeglRectangle * gegl_buffer_get_extent  (GeglBuffer *buffer);
+ gboolean          gegl_buffer_set_extent      (GeglBuffer          *buffer,
+                                                const GeglRectangle *extent);
+ 
++/**
++ * gegl_buffer_set_abyss:
++ * @buffer: the buffer to operate on.
++ * @abyss: new abyss.
++ *
++ * Changes the size and position of the abyss rectangle of a buffer.
++ *
++ * Returns TRUE if the change of abyss was succesful.
++ */
++gboolean          gegl_buffer_set_abyss      (GeglBuffer          *buffer,
++                                              const GeglRectangle *abyss);
++
+ /* convenience access macros */
+ 
+ /**
+@@ -206,7 +238,7 @@ gboolean          gegl_buffer_set_extent      (GeglBuffer          *buffer,
+ #endif
+ 
+ /**
+- * gegl_buffer_get:
++ * gegl_buffer_get: (skip)
+  * @buffer: the buffer to retrieve data from.
+  * @rect: the coordinates we want to retrieve data from, and width/height of
+  * destination buffer, if NULL equal to the extent of the buffer. The
+@@ -217,8 +249,11 @@ gboolean          gegl_buffer_set_extent      (GeglBuffer          *buffer,
+  * depends on the requested BablFormat.
+  * @rowstride: rowstride in bytes, or GEGL_AUTO_ROWSTRIDE to compute the
+  * rowstride based on the width and bytes per pixel for the specified format.
+- * @repeat_mode: how request outside the buffer extent are handled.
+- * Valid values: GEGL_ABYSS_NONE
++ * @repeat_mode: how requests outside the buffer extent are handled.
++ * Valid values: GEGL_ABYSS_NONE (abyss pixels are zeroed), GEGL_ABYSS_WHITE
++ * (abyss pixels are white), GEGL_ABYSS_BLACK (abyss pixels are black),
++ * GEGL_ABYSS_CLAMP (coordinates are clamped to the abyss rectangle),
++ * GEGL_ABYSS_LOOP (buffer contents are tiled if outside of the abyss rectangle).
+  *
+  * Fetch a rectangular linear buffer of pixel data from the GeglBuffer, the
+  * data is converted to the desired BablFormat, if the BablFormat stored and
+@@ -301,7 +336,7 @@ const Babl *    gegl_buffer_get_format        (GeglBuffer           *buffer);
+ 
+ 
+ /**
+- * gegl_buffer_set_format:
++ * gegl_buffer_set_format: (skip)
+  * @buffer: a #GeglBuffer
+  * @format: the new babl format, must have same bpp as original format.
+  *
+@@ -360,7 +395,7 @@ GeglBuffer *    gegl_buffer_dup               (GeglBuffer       *buffer);
+ 
+ 
+ /**
+- * gegl_buffer_sample:
++ * gegl_buffer_sample: (skip)
+  * @buffer: the GeglBuffer to sample from
+  * @x: x coordinate to sample in buffer coordinates
+  * @y: y coordinate to sample in buffer coordinates
+@@ -371,8 +406,11 @@ GeglBuffer *    gegl_buffer_dup               (GeglBuffer       *buffer);
+  * @sampler_type: the sampler type to use,
+  * to be ported from working code. Valid values: GEGL_SAMPLER_NEAREST,
+  * GEGL_SAMPLER_LINEAR, GEGL_SAMPLER_CUBIC and GEGL_SAMPLER_LOHALO
+- * @repeat_mode: how request outside the buffer extent are handled.
+- * valid values: GEGL_ABYSS_NONE
++ * @repeat_mode: how requests outside the buffer extent are handled.
++ * Valid values: GEGL_ABYSS_NONE (abyss pixels are zeroed), GEGL_ABYSS_WHITE
++ * (abyss pixels are white), GEGL_ABYSS_BLACK (abyss pixels are black),
++ * GEGL_ABYSS_CLAMP (coordinates are clamped to the abyss rectangle),
++ * GEGL_ABYSS_LOOP (buffer contents are tiled if outside of the abyss rectangle).
+  *
+  * Query interpolate pixel values at a given coordinate using a specified form
+  * of interpolation. The samplers used cache for a small neighbourhood of the
+@@ -389,7 +427,6 @@ void              gegl_buffer_sample          (GeglBuffer       *buffer,
+ 
+ 
+ 
+-
+ /**
+  * gegl_buffer_sample_cleanup:
+  * @buffer: the GeglBuffer to sample from
+@@ -413,7 +450,7 @@ void            gegl_buffer_sample_cleanup    (GeglBuffer *buffer);
+ GeglSamplerType gegl_sampler_type_from_string (const gchar *string);
+ 
+ /**
+- * gegl_buffer_sampler_new:
++ * gegl_buffer_sampler_new: (skip)
+  * @buffer: buffer to create a new sampler for
+  * @format: format we want data back in
+  * @sampler_type: the sampler type to use,
+@@ -434,8 +471,11 @@ GeglSampler *    gegl_buffer_sampler_new      (GeglBuffer       *buffer,
+  * @y: y coordinate to sample
+  * @scale: matrix representing extent of sampling area in source buffer.
+  * @output: memory location for output data.
+- * @repeat_mode: how request outside the buffer extent are handled.
+- * valid values: GEGL_ABYSS_NONE
++ * @repeat_mode: how requests outside the buffer extent are handled.
++ * Valid values: GEGL_ABYSS_NONE (abyss pixels are zeroed), GEGL_ABYSS_WHITE
++ * (abyss pixels are white), GEGL_ABYSS_BLACK (abyss pixels are black),
++ * GEGL_ABYSS_CLAMP (coordinates are clamped to the abyss rectangle),
++ * GEGL_ABYSS_LOOP (buffer contents are tiled if outside of the abyss rectangle).
+  *
+  * Perform a sampling with the provided @sampler.
+  */
+@@ -455,7 +495,7 @@ void              gegl_sampler_get            (GeglSampler    *sampler,
+ const GeglRectangle * gegl_sampler_get_context_rect (GeglSampler *sampler);
+ 
+ /**
+- * gegl_buffer_linear_new:
++ * gegl_buffer_linear_new: (skip)
+  * @extent: dimensions of buffer.
+  * @format: desired pixel format.
+  *
+@@ -469,7 +509,7 @@ GeglBuffer *  gegl_buffer_linear_new          (const GeglRectangle *extent,
+                                                const Babl          *format);
+ 
+ /**
+- * gegl_buffer_linear_new_from_data:
++ * gegl_buffer_linear_new_from_data: (skip)
+  * @data: a pointer to a linear buffer in memory.
+  * @format: the format of the data in memory
+  * @extent: the dimensions (and upper left coordinates) of linear buffer.
+@@ -494,7 +534,7 @@ GeglBuffer * gegl_buffer_linear_new_from_data (const gpointer       data,
+                                                gpointer             destroy_fn_data);
+ 
+ /**
+- * gegl_buffer_linear_open:
++ * gegl_buffer_linear_open: (skip)
+  * @buffer: a #GeglBuffer.
+  * @extent: region to open, pass NULL for entire buffer.
+  * @rowstride: return location for rowstride.
+diff --git a/gegl/buffer/gegl-cache.c b/gegl/buffer/gegl-cache.c
+index 8505d19..8e2c920 100644
+--- gegl/buffer/gegl-cache.c
++++ gegl/buffer/gegl-cache.c
+@@ -21,6 +21,7 @@
+ #include <string.h>
+ 
+ #include <glib-object.h>
++#include <glib/gstdio.h>
+ 
+ #include <babl/babl.h>
+ 
+diff --git a/gegl/buffer/gegl-cache.h b/gegl/buffer/gegl-cache.h
+index df759a7..4f00ae9 100644
+--- gegl/buffer/gegl-cache.h
++++ gegl/buffer/gegl-cache.h
+@@ -31,6 +31,8 @@ G_BEGIN_DECLS
+ #define GEGL_IS_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_CACHE))
+ #define GEGL_CACHE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_CACHE, GeglCacheClass))
+ 
++typedef struct _GeglCacheClass GeglCacheClass;
++
+ struct _GeglCache
+ {
+   GeglBuffer    parent_instance;
+diff --git a/gegl/buffer/gegl-sampler-cubic.c b/gegl/buffer/gegl-sampler-cubic.c
+index 819e4d6..270644f 100644
+--- gegl/buffer/gegl-sampler-cubic.c
++++ gegl/buffer/gegl-sampler-cubic.c
+@@ -36,23 +36,24 @@ enum
+   PROP_LAST
+ };
+ 
+-static void      gegl_sampler_cubic_finalize (GObject      *gobject);
+-static void      gegl_sampler_cubic_get (GeglSampler  *sampler,
+-                                         gdouble       x,
+-                                         gdouble       y,
+-                                         GeglMatrix2  *scale,
+-                                         void         *output);
+-static void      get_property           (GObject      *gobject,
+-                                         guint         prop_id,
+-                                         GValue       *value,
+-                                         GParamSpec   *pspec);
+-static void      set_property           (GObject      *gobject,
+-                                         guint         prop_id,
+-                                         const GValue *value,
+-                                         GParamSpec   *pspec);
+-static inline gfloat cubicKernel       (gfloat        x,
+-                                        gfloat        b,
+-                                        gfloat        c);
++static void gegl_sampler_cubic_finalize (      GObject         *gobject);
++static void gegl_sampler_cubic_get      (      GeglSampler     *sampler,
++                                         const gdouble          absolute_x,
++                                         const gdouble          absolute_y,
++                                               GeglMatrix2     *scale,
++                                               void            *output,
++                                               GeglAbyssPolicy  repeat_mode);
++static void get_property                (      GObject         *gobject,
++                                               guint            prop_id,
++                                               GValue          *value,
++                                               GParamSpec      *pspec);
++static void set_property                (      GObject         *gobject,
++                                               guint            prop_id,
++                                         const GValue          *value,
++                                               GParamSpec      *pspec);
++static inline gfloat cubicKernel        (      gfloat           x,
++                                               gfloat           b,
++                                               gfloat           c);
+ 
+ 
+ G_DEFINE_TYPE (GeglSamplerCubic, gegl_sampler_cubic, GEGL_TYPE_SAMPLER)
+@@ -69,31 +70,30 @@ gegl_sampler_cubic_class_init (GeglSamplerCubicClass *klass)
+ 
+   sampler_class->get     = gegl_sampler_cubic_get;
+ 
+-  g_object_class_install_property (object_class, PROP_B,
+-                                   g_param_spec_double ("b",
+-                                                        "B",
+-                                                        "B-spline parameter",
+-                                                        0.0,
+-                                                        1.0,
+-                                                        1.0,
+-                                                        G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
+-
+-  g_object_class_install_property (object_class, PROP_C,
+-                                   g_param_spec_double ("c",
+-                                                        "C",
+-                                                        "C-spline parameter",
+-                                                        0.0,
+-                                                        1.0,
+-                                                        0.0,
+-                                                        G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
+-
+-  g_object_class_install_property (object_class, PROP_TYPE,
+-                                   g_param_spec_string ("type",
+-                                                        "type",
+-                                                        "B-spline type (cubic | catmullrom | formula) 2c+b=1",
+-                                                        "cubic",
+-                                                        G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
+-
++  g_object_class_install_property ( object_class, PROP_B,
++    g_param_spec_double ("b",
++                         "B",
++                         "B-spline parameter",
++                         0.0,
++                         1.0,
++                         1.0,
++                         G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
++
++  g_object_class_install_property ( object_class, PROP_C,
++    g_param_spec_double ("c",
++                         "C",
++                         "C-spline parameter",
++                         0.0,
++                         1.0,
++                         0.0,
++                         G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
++
++  g_object_class_install_property ( object_class, PROP_TYPE,
++    g_param_spec_string ("type",
++                         "type",
++                         "B-spline type (cubic | catmullrom | formula) 2c+b=1",
++                         "cubic",
++                         G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
+ }
+ 
+ static void
+@@ -106,15 +106,16 @@ gegl_sampler_cubic_finalize (GObject *object)
+ static void
+ gegl_sampler_cubic_init (GeglSamplerCubic *self)
+ {
+- GEGL_SAMPLER (self)->context_rect[0].x = -1;
+- GEGL_SAMPLER (self)->context_rect[0].y = -1;
+- GEGL_SAMPLER (self)->context_rect[0].width = 4;
+- GEGL_SAMPLER (self)->context_rect[0].height = 4;
+- GEGL_SAMPLER (self)->interpolate_format = babl_format ("RaGaBaA float");
+- self->b=1.0;
+- self->c=0.0;
+- self->type = g_strdup("cubic");
+- if (strcmp (self->type, "cubic"))
++  GEGL_SAMPLER (self)->context_rect[0].x = -1;
++  GEGL_SAMPLER (self)->context_rect[0].y = -1;
++  GEGL_SAMPLER (self)->context_rect[0].width = 4;
++  GEGL_SAMPLER (self)->context_rect[0].height = 4;
++  GEGL_SAMPLER (self)->interpolate_format = babl_format ("RaGaBaA float");
++
++  self->b=1.0;
++  self->c=0.0;
++  self->type = g_strdup("cubic");
++  if (strcmp (self->type, "cubic"))
+     {
+       /* cubic B-spline */
+       self->b = 0.0;
+@@ -128,19 +129,19 @@ gegl_sampler_cubic_init (GeglSamplerCubic *self)
+     }
+   else if (strcmp (self->type, "formula"))
+     {
+-      self->c = (1.0 - self->b) / 2.0;
++      self->c = 0.5 * (1.0 - self->b);
+     }
+ }
+ 
+ void
+-gegl_sampler_cubic_get (GeglSampler *self,
+-                        gdouble      x,
+-                        gdouble      y,
+-                        GeglMatrix2 *scale,
+-                        void        *output)
++gegl_sampler_cubic_get (      GeglSampler     *self,
++                        const gdouble          absolute_x,
++                        const gdouble          absolute_y,
++                              GeglMatrix2     *scale,
++                              void            *output,
++                              GeglAbyssPolicy  repeat_mode)
+ {
+   GeglSamplerCubic *cubic = (GeglSamplerCubic*)(self);
+-  GeglRectangle     context_rect;
+   const gint        offsets[16]={-4-64*4, 4, 4, 4,
+                                 (64-3)*4, 4, 4, 4,
+                                 (64-3)*4, 4, 4, 4,
+@@ -148,32 +149,48 @@ gegl_sampler_cubic_get (GeglSampler *self,
+   gfloat           *sampler_bptr;
+   gfloat            factor;
+ 
+-  gfloat             newval[4] = {0.0, 0.0, 0.0, 0.0};
+-
+-  gint              u,v;
+-  gint              dx,dy;
+-  gint              i;
+-
+-  context_rect = self->context_rect[0];
+-  dx = (gint) x;
+-  dy = (gint) y;
+-  sampler_bptr = gegl_sampler_get_ptr (self, dx, dy);
+-
+-     {
+-       for (v=dy+context_rect.y, i=0; v < dy+context_rect.y+context_rect.height ; v++)
+-         for (u=dx+context_rect.x ; u < dx+context_rect.x+context_rect.width  ; u++, i++)
+-           {
+-             /*sampler_bptr = gegl_sampler_get_from_buffer (self, u, v);*/
+-             sampler_bptr += offsets[i];
+-             factor = cubicKernel (y - v, cubic->b, cubic->c) *
+-                      cubicKernel (x - u, cubic->b, cubic->c);
+-
+-            newval[0] += factor * sampler_bptr[0];
+-            newval[1] += factor * sampler_bptr[1];
+-            newval[2] += factor * sampler_bptr[2];
+-            newval[3] += factor * sampler_bptr[3];
+-           }
+-     }
++  gfloat            newval[4] = {0.0, 0.0, 0.0, 0.0};
++
++  gint              i,j;
++  gint              k=0;
++
++  /*
++   * The "-1/2"s are there because we want the index of the pixel to
++   * the left and top of the location, and with GIMP's convention the
++   * top left of the top left pixel is located at
++   * (1/2,1/2). Basically, we are converting from a coordinate system
++   * in which the origin is at the top left pixel of the pixel with
++   * index (0,0), to a coordinate system in which the origin is at the
++   * center of the same pixel.
++   */
++  const gdouble iabsolute_x = absolute_x - (gdouble) 0.5;
++  const gdouble iabsolute_y = absolute_y - (gdouble) 0.5;
++
++  const gint ix = GEGL_FAST_PSEUDO_FLOOR (iabsolute_x);
++  const gint iy = GEGL_FAST_PSEUDO_FLOOR (iabsolute_y);
++
++  sampler_bptr = gegl_sampler_get_ptr (self, ix, iy, repeat_mode);
++
++  /*
++   * x is the x-coordinate of the sampling point relative to the
++   * position of the center of the top left pixel. Similarly for
++   * y. Range of values: [0,1].
++   */
++  const gfloat x = iabsolute_x - ix;
++  const gfloat y = iabsolute_y - iy;
++
++  for (j=-1; j<3; j++)
++    for (i=-1; i<3; i++)
++      {
++	sampler_bptr += offsets[k++];
++	factor = cubicKernel (y - j, cubic->b, cubic->c) *
++	         cubicKernel (x - i, cubic->b, cubic->c);
++
++	newval[0] += factor * sampler_bptr[0];
++	newval[1] += factor * sampler_bptr[1];
++	newval[2] += factor * sampler_bptr[2];
++	newval[3] += factor * sampler_bptr[3];
++      }
+ 
+   babl_process (self->fish, newval, output, 1);
+ }
+@@ -230,27 +247,22 @@ static inline gfloat
+ cubicKernel (gfloat x,
+              gfloat b,
+              gfloat c)
+- {
+-  gfloat weight, x2, x3;
+-  gfloat ax = x;
+-  if (ax < 0.0)
+-    ax *= -1.0;
+-
+-  if (ax > 2) return 0;
++{
++  gfloat weight;
++  gfloat x2 = x*x;
++  gfloat ax = ( x<(gfloat) 0. ? -x : x );
+ 
+-  x3 = ax * ax * ax;
+-  x2 = ax * ax;
++  if (x2 > (gfloat) 4.) return 0;
+ 
+-  if (ax < 1)
+-    weight = (12 - 9 * b - 6 * c) * x3 +
+-             (-18 + 12 * b + 6 * c) * x2 +
+-             (6 - 2 * b);
++  if (x2 < (gfloat) 1.)
++    weight = ( (gfloat) (12 - 9 * b - 6 * c) * ax +
++             (gfloat) (-18 + 12 * b + 6 * c) ) * x2 +
++             (gfloat) (6 - 2 * b);
+   else
+-    weight = (-b - 6 * c) * x3 +
+-             (6 * b + 30 * c) * x2 +
+-             (-12 * b - 48 * c) * ax +
+-             (8 * b + 24 * c);
++    weight = ( (gfloat) (-b - 6 * c) * ax +
++             (gfloat) (6 * b + 30 * c) ) * x2 +
++             (gfloat) (-12 * b - 48 * c) * ax +
++             (gfloat) (8 * b + 24 * c);
+ 
+-  return weight / 6.0;
++  return weight * ((gfloat) (1.0/6.0));
+ }
+-
+diff --git a/gegl/buffer/gegl-sampler-linear.c b/gegl/buffer/gegl-sampler-linear.c
+index 57370bf..c31a0f4 100644
+--- gegl/buffer/gegl-sampler-linear.c
++++ gegl/buffer/gegl-sampler-linear.c
+@@ -16,36 +16,6 @@
+  *
+  */
+ 
+-
+-/*
+- * FAST_PSEUDO_FLOOR is a floor and floorf replacement which has been
+- * found to be faster on several linux boxes than the library
+- * version. It returns the floor of its argument unless the argument
+- * is a negative integer, in which case it returns one less than the
+- * floor. For example:
+- *
+- * FAST_PSEUDO_FLOOR(0.5) = 0
+- *
+- * FAST_PSEUDO_FLOOR(0.f) = 0
+- *
+- * FAST_PSEUDO_FLOOR(-.5) = -1
+- *
+- * as expected, but
+- *
+- * FAST_PSEUDO_FLOOR(-1.f) = -2
+- *
+- * The locations of the discontinuities of FAST_PSEUDO_FLOOR are the
+- * same as floor and floorf; it is just that at negative integers the
+- * function is discontinuous on the right instead of the left.
+- */
+-#define FAST_PSEUDO_FLOOR(x) ( (int)(x) - ( (x) < 0. ) )
+-/*
+- * Alternative (if conditional move is fast and correctly identified
+- * by the compiler):
+- *
+- * #define FAST_PSEUDO_FLOOR(x) ( (x)>=0 ? (int)(x) : (int)(x)-1 )
+- */
+-
+ #include "config.h"
+ #include <glib-object.h>
+ #include <glib/gstdio.h>
+@@ -62,21 +32,12 @@ enum
+   PROP_LAST
+ };
+ 
+-static void gegl_sampler_linear_get (GeglSampler* restrict self,
+-                                     const gdouble         x,
+-                                     const gdouble         y,
+-                                     GeglMatrix2          *scale,
+-                                     void*        restrict output);
+-
+-static void set_property (GObject*      gobject,
+-                          guint         property_id,
+-                          const GValue* value,
+-                          GParamSpec*   pspec);
+-
+-static void get_property (GObject*    gobject,
+-                          guint       property_id,
+-                          GValue*     value,
+-                          GParamSpec* pspec);
++static void gegl_sampler_linear_get (      GeglSampler* restrict  self,
++                                     const gdouble                absolute_x,
++                                     const gdouble                absolute_y,
++                                           GeglMatrix2           *scale,
++                                           void*        restrict  output,
++                                           GeglAbyssPolicy        repeat_mode);
+ 
+ G_DEFINE_TYPE (GeglSamplerLinear, gegl_sampler_linear, GEGL_TYPE_SAMPLER)
+ 
+@@ -84,10 +45,6 @@ static void
+ gegl_sampler_linear_class_init (GeglSamplerLinearClass *klass)
+ {
+   GeglSamplerClass *sampler_class = GEGL_SAMPLER_CLASS (klass);
+-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+-
+-  object_class->set_property = set_property;
+-  object_class->get_property = get_property;
+ 
+   sampler_class->get = gegl_sampler_linear_get;
+ }
+@@ -103,38 +60,45 @@ gegl_sampler_linear_init (GeglSamplerLinear *self)
+ }
+ 
+ static void
+-gegl_sampler_linear_get (GeglSampler* restrict self,
+-                         const gdouble         absolute_x,
+-                         const gdouble         absolute_y,
+-                         GeglMatrix2          *scale,
+-                         void*        restrict output)
++gegl_sampler_linear_get (      GeglSampler*    restrict  self,
++                         const gdouble                   absolute_x,
++                         const gdouble                   absolute_y,
++                               GeglMatrix2              *scale,
++                               void*           restrict  output,
++                               GeglAbyssPolicy           repeat_mode)
+ {
+   const gint pixels_per_buffer_row = 64;
+   const gint channels = 4;
+ 
+   /*
+-   * floor's surrogate FAST_PSEUDO_FLOOR is used to make
+-   * sure that the transition through 0 is smooth. If it is known that
+-   * negative absolute_x and absolute_y will never be used, plain
+-   * cast---that is, const gint ix = absolute_x---is recommended
+-   * instead.
++   * The "-1/2"s are there because we want the index of the pixel to
++   * the left and top of the location, and with GIMP's convention the
++   * top left of the top left pixel is located at
++   * (1/2,1/2). Basically, we are converting from a coordinate system
++   * in which the origin is at the top left pixel of the pixel with
++   * index (0,0), to a coordinate system in which the origin is at the
++   * center of the same pixel.
+    */
+-  const gint ix = FAST_PSEUDO_FLOOR (absolute_x);
+-  const gint iy = FAST_PSEUDO_FLOOR (absolute_y);
++  const gdouble iabsolute_x = absolute_x - (gdouble) 0.5;
++  const gdouble iabsolute_y = absolute_y - (gdouble) 0.5;
+ 
+-  /*
+-   * x is the x-coordinate of the sampling point relative to the
+-   * position of the top left pixel center. Similarly for y. Range of
+-   * values: [0,1].
+-   */
+-  const gfloat x = absolute_x - ix;
+-  const gfloat y = absolute_y - iy;
++  const gint ix = GEGL_FAST_PSEUDO_FLOOR (iabsolute_x);
++  const gint iy = GEGL_FAST_PSEUDO_FLOOR (iabsolute_y);
+ 
+   /*
+    * Point the data tile pointer to the first channel of the top_left
+    * pixel value:
+    */
+-  const gfloat* restrict in_bptr = gegl_sampler_get_ptr (self, ix, iy);
++  const gfloat* restrict in_bptr =
++    gegl_sampler_get_ptr (self, ix, iy, repeat_mode);
++
++  /*
++   * x is the x-coordinate of the sampling point relative to the
++   * position of the center of the top left pixel. Similarly for
++   * y. Range of values: [0,1].
++   */
++  const gfloat x = iabsolute_x - ix;
++  const gfloat y = iabsolute_y - iy;
+ 
+   /*
+    * First bilinear weight:
+@@ -179,7 +143,7 @@ gegl_sampler_linear_get (GeglSampler* restrict self,
+   /*
+    * Last bilinear weight:
+    */
+-  const gfloat w_times_z = 1.f - ( x + w_times_y );
++  const gfloat w_times_z = (gfloat) 1. - ( x + w_times_y );
+ 
+   gfloat newval[4];
+ 
+@@ -222,22 +186,3 @@ gegl_sampler_linear_get (GeglSampler* restrict self,
+     babl_process (self->fish, newval, output, 1);
+   }
+ }
+-
+-static void
+-set_property (GObject*      gobject,
+-              guint         property_id,
+-              const GValue* value,
+-              GParamSpec*   pspec)
+-{
+-  G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+-}
+-
+-static void
+-get_property (GObject*    gobject,
+-              guint       property_id,
+-              GValue*     value,
+-              GParamSpec* pspec)
+-{
+-  G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+-}
+-
+diff --git a/gegl/buffer/gegl-sampler-lohalo.c b/gegl/buffer/gegl-sampler-lohalo.c
+index 731d344..49da984 100644
+--- gegl/buffer/gegl-sampler-lohalo.c
++++ gegl/buffer/gegl-sampler-lohalo.c
+@@ -14,6 +14,7 @@
+  * License along with GEGL; if not, see
+  * <http://www.gnu.org/licenses/>.
+  *
++ * 2012 (c) Nicolas Robidoux
+  * 2009-2011 (c) Nicolas Robidoux, Adam Turcotte, Chantal Racette,
+  * Anthony Thyssen, John Cupitt and Øyvind Kolås.
+  */
+@@ -56,7 +57,8 @@
+  * Jacobian adaptive resampling was developed by N. Robidoux and
+  * A. Turcotte of the Department of Mathematics and Computer Science
+  * of Laurentian University in the course of A. Turcotte's Masters in
+- * Computational Sciences.
++ * Computational Sciences. Later development was done while
++ * N. Robidoux was an independent consultant.
+  *
+  * Nohalo with LBB finishing scheme was developed by N. Robidoux and
+  * C. Racette of the Department of Mathematics and Computer Science of
+@@ -97,10 +99,29 @@
+  * E. Daoust's image resampling programming was funded by GSoC 2010
+  * funding awarded to GIMP.
+  *
+- * N. Robidoux thanks Ralf Meyer, Geert Jordaens, Craig DeForest and
+- * Sven Neumann for useful comments.
++ * N. Robidoux thanks his co-authors, Ralf Meyer, Geert Jordaens,
++ * Craig DeForest, Massimo Valentini, Sven Neumann, Mitch Natterer for
++ * useful comments.
+  */
+ 
++/*
++ * General convention:
++ *
++ * Looking at the image as a (linear algebra) matrix, the index j has
++ * to do with the x-coordinate, that is, horizontal position, and the
++ * index i has to do with the y-coordinate (which runs from top to
++ * bottom), that is, the vertical position.
++ *
++ * However, in order to match the GIMP convention that states that
++ * pixel indices match the position of the top left corner of the
++ * corresponding pixel, so that the center of pixel (i,j) is located
++ * at (i+1/2,j+1/2), pixel center positions do NOT match their index.
++ * Earlier versions of this code did not follow this convention: They
++ * assumed that the location of the center of a pixel matched its
++ * index.
++ */
++
++
+ #include "config.h"
+ #include <glib-object.h>
+ #include <math.h>
+@@ -176,28 +197,6 @@
+ 
+ 
+ /*
+- * FAST_PSEUDO_FLOOR is a floor replacement which has been found to be
+- * faster. It returns the floor of its argument unless the argument is
+- * a negative integer, in which case it returns one less than the
+- * floor. For example:
+- *
+- * FAST_PSEUDO_FLOOR(0.5) = 0
+- *
+- * FAST_PSEUDO_FLOOR(0.) = 0
+- *
+- * FAST_PSEUDO_FLOOR(-.5) = -1
+- *
+- * as expected, but
+- *
+- * FAST_PSEUDO_FLOOR(-1.) = -2
+- *
+- * The discontinuities of FAST_PSEUDO_FLOOR are on the right of
+- * negative numbers instead of on the left as is the case for floor.
+- */
+-#define LOHALO_FAST_PSEUDO_FLOOR(x) ( (gint)(x) - ( (x) < 0. ) )
+-
+-
+-/*
+  * Special case of of Knuth's floored division, that is:
+  *
+  * FLOORED_DIVISION(a,b) (((a) - ((a)<0 ? (b)-1 : 0)) / (b))
+@@ -214,15 +213,6 @@
+ 
+ 
+ /*
+- * General convention:
+- * Looking at the image as a (linear algebra) matrix, the index j has
+- * to do with the x-coordinate, that is, horizontal position, and the
+- * index i has to do with the y-coordinate (which runs from top to
+- * bottom), that is, the vertical position.
+- */
+-
+-
+-/*
+  * Convenience macro:
+  */
+ #define LOHALO_CALL_LEVEL_1_EWA_UPDATE(j,i) level_1_ewa_update ((j),           \
+@@ -258,31 +248,15 @@ static void gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+                                      const gdouble               absolute_x,
+                                      const gdouble               absolute_y,
+                                            GeglMatrix2          *scale,
+-                                           void*        restrict output);
+-
+-
+-static void set_property (      GObject*    gobject,
+-                                guint       property_id,
+-                          const GValue*     value,
+-                                GParamSpec* pspec);
+-
+-
+-static void get_property (GObject*    gobject,
+-                          guint       property_id,
+-                          GValue*     value,
+-                          GParamSpec* pspec);
+-
++                                           void*        restrict output,
++                                           GeglAbyssPolicy       repeat_mode);
+ 
+ G_DEFINE_TYPE (GeglSamplerLohalo, gegl_sampler_lohalo, GEGL_TYPE_SAMPLER)
+ 
+-
+ static void
+ gegl_sampler_lohalo_class_init (GeglSamplerLohaloClass *klass)
+ {
+   GeglSamplerClass *sampler_class = GEGL_SAMPLER_CLASS (klass);
+-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+-  object_class->set_property = set_property;
+-  object_class->get_property = get_property;
+   sampler_class->get = gegl_sampler_lohalo_get;
+ }
+ 
+@@ -293,20 +267,18 @@ gegl_sampler_lohalo_class_init (GeglSamplerLohaloClass *klass)
+  *
+  * 5x5 is the smallest "level 0" context_rect that works with the
+  * LBB-Nohalo component of the sampler. Because 5 = 1+2*2,
+- * LOHALO_OFFSET should consequently be >= 2.
+- */
+-/*
+- * Speed VS quality trade-off:
++ * LOHALO_OFFSET should be >= 2.
++ *
++ * Speed/quality trade-off:
+  *
+  * Downsampling quality will decrease around ratio 1/(LOHALO_OFFSET +
+- * .5); in addition, the smaller LOHALO_OFFSET, the more noticeable
++ * .5). In addition, the smaller LOHALO_OFFSET, the more noticeable
+  * the artifacts. To maintain maximum quality for the widest
+  * downsampling range possible, a somewhat large LOHALO_OFFSET should
+- * ideally be used. However, the larger the offset, the slower Lohalo
+- * will run when no significant downsampling is done, because the
+- * width and height of context_rect is (2*LOHALO_OFFSET+1), and
+- * consequently there will be less data "tile" reuse when
+- * LOHALO_OFFSET is large.
++ * be used. However, the larger the offset, the slower Lohalo will run
++ * when no significant downsampling is done, because the width and
++ * height of context_rect is (2*LOHALO_OFFSET+1), and consequently
++ * there will be less data "tile" reuse with large LOHALO_OFFSET.
+  */
+ /*
+  * IMPORTANT: LOHALO_OFFSET SHOULD BE AN INTEGER >= 2.
+@@ -324,7 +296,7 @@ gegl_sampler_lohalo_class_init (GeglSamplerLohaloClass *klass)
+  * mipmap level's offset should almost never smaller than half the
+  * previous level's offset.
+  */
+-#define LOHALO_OFFSET_1 (13)
++#define LOHALO_OFFSET_1 (23)
+ #define LOHALO_SIZE_1 ( 1 + 2 * LOHALO_OFFSET_1 )
+ 
+ /*
+@@ -1304,11 +1276,12 @@ level_1_ewa_update (const gint              j,
+ 
+ 
+ static void
+-gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+-                         const gdouble               absolute_x,
+-                         const gdouble               absolute_y,
+-                         GeglMatrix2                *scale,
+-                               void*        restrict output)
++gegl_sampler_lohalo_get (      GeglSampler*    restrict  self,
++                         const gdouble                   absolute_x,
++                         const gdouble                   absolute_y,
++                               GeglMatrix2              *scale,
++                               void*           restrict  output,
++                               GeglAbyssPolicy           repeat_mode)
+ {
+   /*
+    * Needed constants related to the input pixel value pointer
+@@ -1322,24 +1295,37 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+   /*
+    * The consequence of the following choice of anchor pixel location
+    * is that the sampling location is at most at a box distance of .5
+-   * from the anchor pixel location.
++   * from the anchor pixel location. That is: This computes the index
++   * of the closest pixel center (one of the closest when there are
++   * ties) within the GIMP convention.
+    */
+-  const gint ix_0 = LOHALO_FAST_PSEUDO_FLOOR (absolute_x + (gdouble) 0.5);
+-  const gint iy_0 = LOHALO_FAST_PSEUDO_FLOOR (absolute_y + (gdouble) 0.5);
++  const gint ix_0 = GEGL_FAST_PSEUDO_FLOOR (absolute_x);
++  const gint iy_0 = GEGL_FAST_PSEUDO_FLOOR (absolute_y);
+ 
+   /*
+    * This is the pointer we use to pull pixel from "base" mipmap level
+    * (level "0"), the one with scale=1.0.
+    */
+   const gfloat* restrict input_bptr =
+-    (gfloat*) gegl_sampler_get_ptr (self, ix_0, iy_0);
++    (gfloat*) gegl_sampler_get_ptr (self, ix_0, iy_0, repeat_mode);
++
++  /*
++   * First, we convert from the absolute position in the coordinate
++   * system with origin at the top left corner of the pixel with index
++   * (0,0) (the "GIMP convention" a.k.a. "corner-based"), to the
++   * position in the coordinate system with origin at the center of
++   * the pixel with index (0,0) (the "index" convention
++   * a.k.a. "center-based").
++   */
++  const gdouble iabsolute_x = absolute_x - (gdouble) 0.5;
++  const gdouble iabsolute_y = absolute_y - (gdouble) 0.5;
+ 
+   /*
+    * (x_0,y_0) is the relative position of the sampling location
+-   * w.r.t. the anchor pixel:
++   * w.r.t. the anchor pixel.
+    */
+-  const gfloat x_0 = absolute_x - ix_0;
+-  const gfloat y_0 = absolute_y - iy_0;
++  const gfloat x_0 = iabsolute_x - ix_0;
++  const gfloat y_0 = iabsolute_y - iy_0;
+ 
+   const gint sign_of_x_0 = 2 * ( x_0 >= (gfloat) 0. ) - 1;
+   const gint sign_of_y_0 = 2 * ( y_0 >= (gfloat) 0. ) - 1;
+@@ -2278,12 +2264,19 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+                  * Get pointer to mipmap level 1 data:
+                  */
+                 const gfloat* restrict input_bptr_1 =
+-                 (gfloat*) gegl_sampler_get_from_mipmap (self, ix_1, iy_1, 1);
++                  (gfloat*) gegl_sampler_get_from_mipmap (self,
++                                                          ix_1,
++                                                          iy_1,
++                                                          1,
++                                                          repeat_mode);
+ 
+                 /*
+                  * Position of the sampling location in the coordinate
+                  * system defined by the mipmap "pixel locations"
+-                 * relative to the level 1 anchor pixel location:
++                 * relative to the level 1 anchor pixel location. The
++                 * "-1/2"s are because the center of a level 0 pixel
++                 * is at a box distance of 1/2 from the center of the
++                 * closest level 1 pixel.
+                  */
+                 const gfloat x_1 =
+                   x_0 + (gfloat) ( ix_0 - 2 * ix_1 ) - (gfloat) 0.5;
+@@ -2312,7 +2305,11 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+                       (gint)
+                       (
+                         ceilf
+-                          ( ( x_1 - bounding_box_half_width  ) * (gfloat) 0.5 )
++                          (
++                            (float)
++                            ( ( x_1 - bounding_box_half_width  )
++                              * (gfloat) 0.5 )
++                          )
+                       )
+                       ,
+                       -LOHALO_OFFSET_1
+@@ -2323,7 +2320,11 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+                       (gint)
+                       (
+                         floorf
+-                          ( ( x_1 + bounding_box_half_width  ) * (gfloat) 0.5 )
++                          (
++                            (float)
++                            ( ( x_1 + bounding_box_half_width  )
++                              * (gfloat) 0.5 )
++                          )
+                       )
+                       ,
+                       LOHALO_OFFSET_1
+@@ -2334,7 +2335,11 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+                       (gint)
+                       (
+                         ceilf
+-                          ( ( y_1 - bounding_box_half_height ) * (gfloat) 0.5 )
++                          (
++                            (float)
++                            ( ( y_1 - bounding_box_half_height )
++                              * (gfloat) 0.5 )
++                          )
+                       )
+                       ,
+                       -LOHALO_OFFSET_1
+@@ -2345,7 +2350,11 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+                       (gint)
+                       (
+                         floorf
+-                          ( ( y_1 + bounding_box_half_height ) * (gfloat) 0.5 )
++                          (
++                            (float)
++                            ( ( y_1 + bounding_box_half_height )
++                              * (gfloat) 0.5 )
++                          )
+                       )
+                       ,
+                       LOHALO_OFFSET_1
+@@ -2353,7 +2362,8 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+ 
+                 /*
+                  * Update using mipmap level 1 values.
+-                 *
++                 */
++                /*
+                  * Possible future improvement: When the ellipse is
+                  * slanted, one could avoid many pixel value loads and
+                  * operations with Anthony Thyssen's formulas for the
+@@ -2429,23 +2439,3 @@ gegl_sampler_lohalo_get (      GeglSampler* restrict self,
+     }
+   }
+ }
+-
+-
+-static void
+-set_property (      GObject*    gobject,
+-                    guint       property_id,
+-              const GValue*     value,
+-                    GParamSpec* pspec)
+-{
+-  /* G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec); */
+-}
+-
+-
+-static void
+-get_property (GObject*    gobject,
+-              guint       property_id,
+-              GValue*     value,
+-              GParamSpec* pspec)
+-{
+-  /* G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec); */
+-}
+diff --git a/gegl/buffer/gegl-sampler-nearest.c b/gegl/buffer/gegl-sampler-nearest.c
+index 46fd9a1..a5b098e 100644
+--- gegl/buffer/gegl-sampler-nearest.c
++++ gegl/buffer/gegl-sampler-nearest.c
+@@ -32,19 +32,13 @@ enum
+   PROP_LAST
+ };
+ 
+-static void    gegl_sampler_nearest_get (GeglSampler  *self,
+-                                         gdouble       x,
+-                                         gdouble       y,
+-                                         GeglMatrix2  *scale,
+-                                         void         *output);
+-static void    set_property             (GObject      *gobject,
+-                                         guint         prop_id,
+-                                         const GValue *value,
+-                                         GParamSpec   *pspec);
+-static void    get_property             (GObject      *gobject,
+-                                         guint         prop_id,
+-                                         GValue       *value,
+-                                         GParamSpec   *pspec);
++static void
++gegl_sampler_nearest_get (GeglSampler    *self,
++                          gdouble         x,
++                          gdouble         y,
++                          GeglMatrix2    *scale,
++                          void           *output,
++                          GeglAbyssPolicy repeat_mode);
+ 
+ G_DEFINE_TYPE (GeglSamplerNearest, gegl_sampler_nearest, GEGL_TYPE_SAMPLER)
+ 
+@@ -52,61 +46,33 @@ static void
+ gegl_sampler_nearest_class_init (GeglSamplerNearestClass *klass)
+ {
+   GeglSamplerClass *sampler_class = GEGL_SAMPLER_CLASS (klass);
+-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+-
+-  object_class->set_property = set_property;
+-  object_class->get_property = get_property;
+-
+-  sampler_class->get     = gegl_sampler_nearest_get;
+ 
++  sampler_class->get = gegl_sampler_nearest_get;
+ }
+ 
+ static void
+ gegl_sampler_nearest_init (GeglSamplerNearest *self)
+ {
+-   GEGL_SAMPLER (self)->context_rect[0].x = 0;
+-   GEGL_SAMPLER (self)->context_rect[0].y = 0;
+-   GEGL_SAMPLER (self)->context_rect[0].width = 1;
+-   GEGL_SAMPLER (self)->context_rect[0].height = 1;
+-   GEGL_SAMPLER (self)->interpolate_format = babl_format ("RGBA float");
++  GEGL_SAMPLER (self)->context_rect[0].x = 0;
++  GEGL_SAMPLER (self)->context_rect[0].y = 0;
++  GEGL_SAMPLER (self)->context_rect[0].width = 1;
++  GEGL_SAMPLER (self)->context_rect[0].height = 1;
++  GEGL_SAMPLER (self)->interpolate_format = babl_format ("RGBA float");
+ }
+ 
+ void
+-gegl_sampler_nearest_get (GeglSampler *self,
+-                          gdouble      x,
+-                          gdouble      y,
+-                          GeglMatrix2 *scale,
+-                          void        *output)
+-{
+-  gfloat             *sampler_bptr;
+-  sampler_bptr = gegl_sampler_get_from_buffer (self, (gint)x, (gint)y);
+-  babl_process (babl_fish (self->interpolate_format, self->format), sampler_bptr, output, 1);
+-}
+-
+-static void
+-set_property (GObject      *gobject,
+-              guint         property_id,
+-              const GValue *value,
+-              GParamSpec   *pspec)
++gegl_sampler_nearest_get (GeglSampler     *self,
++                          gdouble          x,
++                          gdouble          y,
++                          GeglMatrix2     *scale,
++                          void            *output,
++                          GeglAbyssPolicy  repeat_mode)
+ {
+-  switch (property_id)
+-    {
+-      default:
+-        G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+-        break;
+-    }
+-}
++  gfloat *sampler_bptr;
+ 
+-static void
+-get_property (GObject    *gobject,
+-              guint       property_id,
+-              GValue     *value,
+-              GParamSpec *pspec)
+-{
+-  switch (property_id)
+-    {
+-      default:
+-        G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+-        break;
+-    }
++  sampler_bptr = gegl_sampler_get_from_buffer (self,
++                                               GEGL_FAST_PSEUDO_FLOOR (x),
++                                               GEGL_FAST_PSEUDO_FLOOR (y),
++                                               repeat_mode);
++  babl_process (self->fish, sampler_bptr, output, 1);
+ }
+diff --git a/gegl/buffer/gegl-sampler.c b/gegl/buffer/gegl-sampler.c
+index 2146f01..21bb5a3 100644
+--- gegl/buffer/gegl-sampler.c
++++ gegl/buffer/gegl-sampler.c
+@@ -57,10 +57,10 @@ static void get_property (GObject    *gobject,
+                           GValue     *value,
+                           GParamSpec *pspec);
+ 
+-static void set_property (      GObject      *gobject,
+-                                guint         property_id,
++static void set_property (GObject      *gobject,
++                          guint         property_id,
+                           const GValue *value,
+-                                GParamSpec   *pspec);
++                          GParamSpec   *pspec);
+ 
+ static void set_buffer (GeglSampler  *self,
+                         GeglBuffer   *buffer);
+@@ -122,7 +122,7 @@ gegl_sampler_get (GeglSampler   *self,
+                   void          *output,
+                   GeglAbyssPolicy repeat_mode)
+ {
+-  self->get (self, x, y, scale, output);
++  self->get (self, x, y, scale, output, repeat_mode);
+ }
+ 
+ void
+@@ -206,7 +206,8 @@ dispose (GObject *gobject)
+ gfloat *
+ gegl_sampler_get_ptr (GeglSampler *const sampler,
+                       const gint         x,
+-                      const gint         y)
++                      const gint         y,
++                      GeglAbyssPolicy    repeat_mode)
+ {
+   guchar *buffer_ptr;
+   gint    dx;
+@@ -282,7 +283,7 @@ gegl_sampler_get_ptr (GeglSampler *const sampler,
+                        sampler->interpolate_format,
+                        sampler->sampler_buffer[0],
+                        GEGL_AUTO_ROWSTRIDE,
+-                       GEGL_ABYSS_NONE);
++                       repeat_mode);
+ 
+       sampler->sampler_rectangle[0] = fetch_rectangle;
+     }
+@@ -298,7 +299,8 @@ gegl_sampler_get_ptr (GeglSampler *const sampler,
+ gfloat *
+ gegl_sampler_get_from_buffer (GeglSampler *const sampler,
+                               const gint         x,
+-                              const gint         y)
++                              const gint         y,
++                              GeglAbyssPolicy    repeat_mode)
+ {
+   guchar *buffer_ptr;
+   gint    dx;
+@@ -357,7 +359,7 @@ gegl_sampler_get_from_buffer (GeglSampler *const sampler,
+                        sampler->interpolate_format,
+                        sampler->sampler_buffer[0],
+                        GEGL_AUTO_ROWSTRIDE,
+-                       GEGL_ABYSS_NONE);
++                       repeat_mode);
+ 
+       sampler->sampler_rectangle[0] = fetch_rectangle;
+     }
+@@ -374,7 +376,8 @@ gfloat *
+ gegl_sampler_get_from_mipmap (GeglSampler *const sampler,
+                               const gint         x,
+                               const gint         y,
+-                              const gint         level)
++                              const gint         level,
++                              GeglAbyssPolicy    repeat_mode)
+ {
+   guchar *buffer_ptr;
+   gint    dx;
+@@ -453,7 +456,7 @@ gegl_sampler_get_from_mipmap (GeglSampler *const sampler,
+                        sampler->interpolate_format,
+                        sampler->sampler_buffer[level],
+                        GEGL_AUTO_ROWSTRIDE,
+-                       GEGL_ABYSS_NONE);
++                       repeat_mode);
+ 
+       sampler->sampler_rectangle[level] = fetch_rectangle;
+     }
+diff --git a/gegl/buffer/gegl-sampler.h b/gegl/buffer/gegl-sampler.h
+index 3cd8bab..49fff3c 100644
+--- gegl/buffer/gegl-sampler.h
++++ gegl/buffer/gegl-sampler.h
+@@ -38,11 +38,12 @@ typedef struct _GeglSamplerClass GeglSamplerClass;
+ struct _GeglSampler
+ {
+   GObject       parent_instance;
+-  void (* get) (GeglSampler *self,
+-                gdouble      x,
+-                gdouble      y,
+-                GeglMatrix2 *scale,
+-                void        *output);
++  void (* get) (GeglSampler     *self,
++                gdouble          x,
++                gdouble          y,
++                GeglMatrix2     *scale,
++                void            *output,
++                GeglAbyssPolicy  repeat_mode);
+   /* we cache the getter in the instance, (being able to return the
+      function pointer itself and cache it outside the calling loop
+      would be even quicker.
+@@ -66,14 +67,15 @@ struct _GeglSamplerClass
+ {
+   GObjectClass  parent_class;
+ 
+-  void (* prepare)   (GeglSampler *self);
+-  void (* get)       (GeglSampler *self,
+-                      gdouble      x,
+-                      gdouble      y,
+-                      GeglMatrix2 *scale,
+-                      void        *output);
+- void  (*set_buffer) (GeglSampler  *self,
+-                      GeglBuffer   *buffer);
++  void (* prepare)   (GeglSampler     *self);
++  void (* get)       (GeglSampler     *self,
++                      gdouble          x,
++                      gdouble          y,
++                      GeglMatrix2     *scale,
++                      void            *output,
++                      GeglAbyssPolicy  repeat_mode);
++ void  (*set_buffer) (GeglSampler     *self,
++                      GeglBuffer      *buffer);
+ 
+  gpointer       padding[8]; /* eat from the padding if adding to the struct */
+ };
+@@ -92,17 +94,19 @@ void  gegl_sampler_get         (GeglSampler   *self,
+                                 void          *output,
+                                 GeglAbyssPolicy repeat_mode);
+ 
+-gfloat * gegl_sampler_get_from_buffer (GeglSampler *sampler,
+-                                       gint         x,
+-                                       gint         y);
+-gfloat * gegl_sampler_get_from_mipmap (GeglSampler *sampler,
+-                                       gint         x,
+-                                       gint         y,
+-                                       gint         level);
+-gfloat *
+-gegl_sampler_get_ptr (GeglSampler         *sampler,
+-                      gint                 x,
+-                      gint                 y);
++gfloat * gegl_sampler_get_from_buffer (GeglSampler *const sampler,
++                                       const gint         x,
++                                       const gint         y,
++                                       GeglAbyssPolicy    repeat_mode);
++gfloat * gegl_sampler_get_from_mipmap (GeglSampler *const sampler,
++                                       const gint         x,
++                                       const gint         y,
++                                       const gint         level,
++                                       GeglAbyssPolicy    repeat_mode);
++gfloat * gegl_sampler_get_ptr         (GeglSampler *const sampler,
++                                       const gint         x,
++                                       const gint         y,
++                                       GeglAbyssPolicy    repeat_mode);
+ 
+ G_END_DECLS
+ 
+diff --git a/gegl/buffer/gegl-tile-backend-file-async.c b/gegl/buffer/gegl-tile-backend-file-async.c
+new file mode 100644
+index 0000000..1aa5cc7
+--- /dev/null
++++ gegl/buffer/gegl-tile-backend-file-async.c
+@@ -0,0 +1,1318 @@
++/* This file is part of GEGL.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2006, 2007, 2008 Øyvind Kolås <pippin at gimp.org>
++ *           2012 Ville Sokk <ville.sokk at gmail.com>
++ */
++
++/* GeglTileBackendFile stores tiles of a GeglBuffer on disk. There are
++ * two versions of the class. This one uses regular I/O calls in a
++ * separate thread (shared between instances of the class) that performs
++ * all file operations except reading and opening. Communication between
++ * the main gegl thread and the writer thread is performed using a
++ * queue. The writer thread sleeps if the queue is empty. If an entry is
++ * read and the tile is in the queue then its data is copied from the
++ * queue instead of read from disk. There are two locks, queue_mutex and
++ * write_mutex. The first one is used to append to the queue or read from
++ * it, the second one to completely stop the writer thread from working
++ * (to remove/change queue entries).
++ */
++
++#include "config.h"
++
++#include <gio/gio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <string.h>
++#include <errno.h>
++
++#include <glib-object.h>
++#include <glib/gprintf.h>
++#include <glib/gstdio.h>
++
++#include "gegl.h"
++#include "gegl-buffer-backend.h"
++#include "gegl-tile-backend.h"
++#include "gegl-tile-backend-file.h"
++#include "gegl-buffer-index.h"
++#include "gegl-buffer-types.h"
++#include "gegl-debug.h"
++#include "gegl-config.h"
++
++
++#ifndef HAVE_FSYNC
++
++#ifdef G_OS_WIN32
++#define fsync _commit
++#endif
++
++#endif
++
++
++struct _GeglTileBackendFile
++{
++  GeglTileBackend  parent_instance;
++
++  /* the path to our buffer */
++  gchar           *path;
++
++  /* the file exist (and we've thus been able to initialize i and o,
++   * the utility call ensure_exist() should be called before any code
++   * using i and o)
++   */
++  gboolean         exist;
++
++  /* total size of file */
++  guint            total;
++
++  /* hashtable containing all entries of buffer, the index is written
++   * to the swapfile conforming to the structures laid out in
++   * gegl-buffer-index.h
++   */
++  GHashTable      *index;
++
++  /* list of offsets to tiles that are free */
++  GSList          *free_list;
++
++  /* offset to next pre allocated tile slot */
++  guint            next_pre_alloc;
++
++  /* revision of last index sync, for cooperated sharing of a buffer
++   * file
++   */
++  guint32          rev;
++
++  /* a local copy of the header that will be written to the file, in a
++   * multiple user per buffer scenario, the flags in the header might
++   * be used for locking/signalling
++   */
++  GeglBufferHeader header;
++
++  /* cached offsets of the file handles to avoid lseek syscall if possible */
++  gint             in_offset;
++  gint             out_offset;
++
++  /* current offset, used when writing the index */
++  gint             offset;
++
++  /* when writing buffer blocks the writer keeps one block unwritten
++   * at all times to be able to keep track of the ->next offsets in
++   * the blocks.
++   */
++  GeglFileBackendEntry *in_holding;
++
++  /* loading buffer */
++  GList           *tiles;
++
++  /* GFile refering to our buffer */
++  GFile           *file;
++
++  GFileMonitor    *monitor;
++
++  /* number of write operations in the queue for this file */
++  gint             pending_ops;
++
++  /* used for waiting on writes to the file to be finished */
++  GCond           *cond;
++
++  /* for writing */
++  int              o;
++
++  /* for reading */
++  int              i;
++};
++
++
++static void     gegl_tile_backend_file_ensure_exist (GeglTileBackendFile  *self);
++static gboolean gegl_tile_backend_file_write_block  (GeglTileBackendFile  *self,
++                                                     GeglFileBackendEntry *block);
++static void     gegl_tile_backend_file_dbg_alloc    (int                   size);
++static void     gegl_tile_backend_file_dbg_dealloc  (int                   size);
++
++
++G_DEFINE_TYPE (GeglTileBackendFile, gegl_tile_backend_file, GEGL_TYPE_TILE_BACKEND)
++
++static GObjectClass * parent_class = NULL;
++
++/* this debugging is across all buffers */
++static gint allocs         = 0;
++static gint file_size      = 0;
++static gint peak_allocs    = 0;
++static gint peak_file_size = 0;
++
++static GQueue  queue      = G_QUEUE_INIT;
++static GMutex *mutex      = NULL;
++static GCond  *queue_cond = NULL;
++static GCond  *max_cond   = NULL;
++static GeglFileBackendThreadParams *in_progress;
++
++
++static void
++gegl_tile_backend_file_finish_writing (GeglTileBackendFile *self)
++{
++  g_mutex_lock (mutex);
++  while (self->pending_ops != 0)
++    g_cond_wait (self->cond, mutex);
++  g_mutex_unlock (mutex);
++}
++
++static void
++gegl_tile_backend_file_push_queue (GeglFileBackendThreadParams *params)
++{
++  guint length;
++
++  g_mutex_lock (mutex);
++
++  length = g_queue_get_length (&queue);
++
++  /* block if the queue has gotten too big */
++  if (length > gegl_config ()->queue_limit)
++    g_cond_wait (max_cond, mutex);
++
++  params->file->pending_ops += 1;
++  g_queue_push_tail (&queue, params);
++
++  if (params->entry)
++    {
++      if (params->operation == OP_WRITE)
++        params->entry->tile_link = g_queue_peek_tail_link (&queue);
++      else /* OP_WRITE_BLOCK */
++        params->entry->block_link = g_queue_peek_tail_link (&queue);
++    }
++
++  /* wake up the writer thread */
++  g_cond_signal (queue_cond);
++
++  g_mutex_unlock (mutex);
++}
++
++static inline void
++gegl_tile_backend_file_write (GeglFileBackendThreadParams *params)
++{
++  gint    to_be_written = params->length;
++  gint    fd            = params->file->o;
++  goffset offset        = params->offset;
++
++  if (params->file->out_offset != params->offset)
++    {
++      if (lseek (fd, offset, SEEK_SET) < 0)
++        {
++          g_warning ("unable to seek to tile in buffer: %s", g_strerror (errno));
++          return;
++        }
++      params->file->out_offset = params->offset;
++    }
++
++  while (to_be_written > 0)
++    {
++      gint wrote;
++      wrote = write (fd,
++                     params->source + params->length - to_be_written,
++                     to_be_written);
++      if (wrote <= 0)
++        {
++          g_message ("unable to write tile data to self: "
++                     "%s (%d/%d bytes written)",
++                     g_strerror (errno), wrote, to_be_written);
++          break;
++        }
++
++      to_be_written            -= wrote;
++      params->file->out_offset += wrote;;
++    }
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "writer thread wrote at %i", (gint)offset);
++}
++
++static gpointer
++gegl_tile_backend_file_writer_thread (gpointer ignored)
++{
++  while (TRUE)
++    {
++      GeglFileBackendThreadParams *params;
++
++      g_mutex_lock (mutex);
++
++      while (g_queue_is_empty (&queue))
++        g_cond_wait (queue_cond, mutex);
++
++      params = (GeglFileBackendThreadParams *)g_queue_pop_head (&queue);
++      if (params->entry)
++        {
++          in_progress = params;
++          if (params->operation == OP_WRITE)
++            params->entry->tile_link = NULL;
++          else /* OP_WRITE_BLOCK */
++            params->entry->block_link = NULL;
++        }
++      g_mutex_unlock (mutex);
++
++      switch (params->operation)
++        {
++        case OP_WRITE:
++          gegl_tile_backend_file_write (params);
++          break;
++        case OP_WRITE_BLOCK:
++          gegl_tile_backend_file_write (params);
++          break;
++        case OP_TRUNCATE:
++          ftruncate (params->file->o, params->length);
++          break;
++        case OP_SYNC:
++          fsync (params->file->o);
++          break;
++        }
++
++      g_mutex_lock (mutex);
++      in_progress = NULL;
++
++      /* the file maybe waiting for its file operations to finish */
++      params->file->pending_ops -= 1;
++      if (params->file->pending_ops == 0)
++        g_cond_signal (params->file->cond);
++
++      /* unblock the main thread if the queue had gotten too big */
++      if (g_queue_get_length (&queue) < gegl_config ()->queue_limit)
++        g_cond_signal (max_cond);
++
++      if (params->source)
++        g_free (params->source);
++
++      g_free (params);
++
++      g_mutex_unlock (mutex);
++    }
++
++  return NULL;
++}
++
++static void
++gegl_tile_backend_file_entry_read (GeglTileBackendFile  *self,
++                                   GeglFileBackendEntry *entry,
++                                   guchar               *dest)
++{
++  gint    tile_size  = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++  gint    to_be_read = tile_size;
++  goffset offset     = entry->tile->offset;
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  if (entry->tile_link || in_progress)
++    {
++      GeglFileBackendThreadParams *queued_op = NULL;
++      g_mutex_lock (mutex);
++
++      if (entry->tile_link)
++        queued_op = entry->tile_link->data;
++      else if (in_progress && in_progress->entry == entry &&
++               in_progress->operation == OP_WRITE)
++        queued_op = in_progress;
++
++      if (queued_op)
++        {
++          memcpy (dest, queued_op->source, to_be_read);
++          g_mutex_unlock (mutex);
++
++          GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "read entry %i,%i,%i from queue", entry->tile->x, entry->tile->y, entry->tile->z);
++
++          return;
++        }
++
++      g_mutex_unlock (mutex);
++    }
++
++  if (self->in_offset != offset)
++    {
++      if (lseek (self->i, offset, SEEK_SET) < 0)
++        {
++          g_warning ("unable to seek to tile in buffer: %s", g_strerror (errno));
++          return;
++        }
++      self->in_offset = offset;
++    }
++
++  while (to_be_read > 0)
++    {
++      GError *error = NULL;
++      gint    byte_read;
++
++      byte_read = read (self->i, dest + tile_size - to_be_read, to_be_read);
++      if (byte_read <= 0)
++        {
++          g_message ("unable to read tile data from self: "
++                     "%s (%d/%d bytes read) %s",
++                     g_strerror (errno), byte_read, to_be_read, error?error->message:"--");
++          return;
++        }
++      to_be_read      -= byte_read;
++      self->in_offset += byte_read;
++    }
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "read entry %i,%i,%i at %i", entry->tile->x, entry->tile->y, entry->tile->z, (gint)offset);
++}
++
++static inline void
++gegl_tile_backend_file_entry_write (GeglTileBackendFile  *self,
++                                    GeglFileBackendEntry *entry,
++                                    guchar               *source)
++{
++  GeglFileBackendThreadParams *params;
++  gint    length = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++  guchar *new_source;
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  if (entry->tile_link)
++    {
++      g_mutex_lock (mutex);
++
++      if (entry->tile_link)
++        {
++          params = entry->tile_link->data;
++          memcpy (params->source, source, length);
++          g_mutex_unlock (mutex);
++
++          GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "overwrote queue entry %i,%i,%i at %i", entry->tile->x, entry->tile->y, entry->tile->z, (gint)entry->tile->offset);
++
++          return;
++        }
++
++      g_mutex_unlock (mutex);
++    }
++
++  new_source = g_malloc (length);
++  memcpy (new_source, source, length);
++
++  params            = g_new0 (GeglFileBackendThreadParams, 1);
++  params->operation = OP_WRITE;
++  params->length    = length;
++  params->offset    = entry->tile->offset;
++  params->file      = self;
++  params->source    = new_source;
++  params->entry     = entry;
++
++  gegl_tile_backend_file_push_queue (params);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "pushed entry write %i,%i,%i at %i", entry->tile->x, entry->tile->y, entry->tile->z, (gint)entry->tile->offset);
++}
++
++static GeglFileBackendEntry *
++gegl_tile_backend_file_file_entry_create (gint x,
++                                          gint y,
++                                          gint z)
++{
++  GeglFileBackendEntry *entry = g_new0 (GeglFileBackendEntry, 1);
++
++  entry->tile       = gegl_tile_entry_new (x, y, z);
++  entry->tile_link  = NULL;
++  entry->block_link = NULL;
++
++  return entry;
++}
++
++static inline GeglFileBackendEntry *
++gegl_tile_backend_file_file_entry_new (GeglTileBackendFile *self)
++{
++  GeglFileBackendEntry *entry = gegl_tile_backend_file_file_entry_create (0,0,0);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "Creating new entry");
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  if (self->free_list)
++    {
++      guint64 offset = *(guint64*)self->free_list->data;
++
++      entry->tile->offset = offset;
++      self->free_list = g_slist_remove (self->free_list, self->free_list->data);
++
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "  set offset %i from free list", ((gint)entry->tile->offset));
++    }
++  else
++    {
++      gint tile_size = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++
++      entry->tile->offset = self->next_pre_alloc;
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "  set offset %i (next allocation)", (gint)entry->tile->offset);
++      self->next_pre_alloc += tile_size;
++
++      if (self->next_pre_alloc >= self->total) /* automatic growing ensuring that
++                                                  we have room for next allocation..
++                                                */
++        {
++          GeglFileBackendThreadParams *params = g_new0 (GeglFileBackendThreadParams, 1);
++
++          self->total       = self->total + 32 * tile_size;
++          params->operation = OP_TRUNCATE;
++          params->file      = self;
++          params->length    = self->total;
++
++          gegl_tile_backend_file_push_queue (params);
++
++          GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "pushed truncate to %i bytes", (gint)self->total);
++
++          self->in_offset = self->out_offset = -1;
++        }
++    }
++  gegl_tile_backend_file_dbg_alloc (gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self)));
++  return entry;
++}
++
++static void
++gegl_tile_backend_file_file_entry_destroy (GeglTileBackendFile  *self,
++                                           GeglFileBackendEntry *entry)
++{
++  guint64 *offset = g_new (guint64, 1);
++  *offset = entry->tile->offset;
++
++  if (entry->tile_link || entry->block_link)
++    {
++      gint   i;
++      GList *link;
++
++      g_mutex_lock (mutex);
++
++      for (i = 0, link = entry->tile_link;
++           i < 2;
++           i++, link = entry->block_link)
++        {
++          if (link)
++            {
++              GeglFileBackendThreadParams *queued_op = link->data;
++              queued_op->file->pending_ops -= 1;
++              g_queue_delete_link (&queue, link);
++              g_free (queued_op->source);
++              g_free (queued_op);
++            }
++        }
++
++      g_mutex_unlock (mutex);
++    }
++
++  self->free_list = g_slist_prepend (self->free_list, offset);
++  g_hash_table_remove (self->index, entry);
++
++  gegl_tile_backend_file_dbg_dealloc (gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self)));
++
++  g_free (entry->tile);
++  g_free (entry);
++}
++
++static gboolean
++gegl_tile_backend_file_write_header (GeglTileBackendFile *self)
++{
++  GeglFileBackendThreadParams *params = g_new0 (GeglFileBackendThreadParams, 1);
++  guchar *new_source = g_malloc (256);
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  memcpy (new_source, &(self->header), 256);
++
++  params->operation = OP_WRITE;
++  params->source    = new_source;
++  params->offset    = 0;
++  params->length    = 256;
++  params->file      = self;
++
++  gegl_tile_backend_file_push_queue (params);
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "pushed header write, next=%i", (gint)self->header.next);
++
++  params            = g_new0 (GeglFileBackendThreadParams, 1);
++  params->operation = OP_SYNC;
++  params->file      = self;
++
++  gegl_tile_backend_file_push_queue (params);
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "pushed sync of %s", self->path);
++
++  return TRUE;
++}
++
++static gboolean
++gegl_tile_backend_file_write_block (GeglTileBackendFile  *self,
++                                    GeglFileBackendEntry *item)
++{
++  gegl_tile_backend_file_ensure_exist (self);
++  if (self->in_holding)
++    {
++      GeglFileBackendThreadParams *params;
++      GeglBufferBlock *block           = &(self->in_holding->tile->block);
++      guint64          next_allocation = self->offset + block->length;
++      gint             length          = block->length;
++      guchar          *new_source;
++
++      /* update the next offset pointer in the previous block */
++      if (item == NULL)
++          /* the previous block was the last block */
++          block->next = 0;
++      else
++          block->next = next_allocation;
++
++      /* XXX: should promiscuosuly try to compress here as well,. if revisions
++              are not matching..
++       */
++
++      if (self->in_holding->block_link)
++        {
++          g_mutex_lock (mutex);
++
++          if (self->in_holding->block_link)
++            {
++              params = self->in_holding->block_link->data;
++              params->offset = self->offset;
++              memcpy (params->source, block, length);
++              g_mutex_unlock (mutex);
++
++              self->offset = next_allocation;
++              self->in_holding = item;
++              GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "Overwrote queue block: length:%i flags:%i next:%i at offset %i",
++                         block->length,
++                         block->flags,
++                         (gint)block->next,
++                         (gint)self->offset);
++              return TRUE;
++            }
++
++          g_mutex_unlock (mutex);
++        }
++
++      params     = g_new0 (GeglFileBackendThreadParams, 1);
++      new_source = g_malloc (length);
++
++      memcpy (new_source, block, length);
++
++      params->operation = OP_WRITE_BLOCK;
++      params->length    = length;
++      params->file      = self;
++      params->offset    = self->offset;
++      params->source    = new_source;
++      params->entry     = self->in_holding;
++
++      gegl_tile_backend_file_push_queue (params);
++
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "Pushed write of block: length:%i flags:%i next:%i at offset %i",
++                 block->length,
++                 block->flags,
++                 (gint)block->next,
++                 (gint)self->offset);
++
++      self->offset = next_allocation;
++    }
++  else
++    {
++      /* we're setting up for the first write */
++      self->offset = self->next_pre_alloc; /* start writing header at end
++                                            * of file, worry about writing
++                                            * header inside free list later
++                                            */
++    }
++  self->in_holding = item;
++
++  return TRUE;
++}
++
++void
++gegl_tile_backend_file_stats (void)
++{
++  g_warning ("leaked: %i chunks (%f mb)  peak: %i (%i bytes %fmb))",
++             allocs, file_size / 1024 / 1024.0,
++             peak_allocs, peak_file_size, peak_file_size / 1024 / 1024.0);
++}
++
++static void
++gegl_tile_backend_file_dbg_alloc (gint size)
++{
++  allocs++;
++  file_size += size;
++  if (allocs > peak_allocs)
++    peak_allocs = allocs;
++  if (file_size > peak_file_size)
++    peak_file_size = file_size;
++}
++
++static void
++gegl_tile_backend_file_dbg_dealloc (gint size)
++{
++  allocs--;
++  file_size -= size;
++}
++
++static inline GeglFileBackendEntry *
++gegl_tile_backend_file_lookup_entry (GeglTileBackendFile *self,
++                                     gint                 x,
++                                     gint                 y,
++                                     gint                 z)
++{
++  GeglFileBackendEntry *ret = NULL;
++  GeglFileBackendEntry *key = gegl_tile_backend_file_file_entry_create (x,y,z);
++  ret = g_hash_table_lookup (self->index, key);
++  g_free (key->tile);
++  g_free (key);
++  return ret;
++}
++
++/* this is the only place that actually should
++ * instantiate tiles, when the cache is large enough
++ * that should make sure we don't hit this function
++ * too often.
++ */
++static GeglTile *
++gegl_tile_backend_file_get_tile (GeglTileSource *self,
++                                 gint            x,
++                                 gint            y,
++                                 gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++  GeglTile             *tile = NULL;
++  gint                  tile_size;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  if (!entry)
++    return NULL;
++
++  tile_size = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++  tile      = gegl_tile_new (tile_size);
++  gegl_tile_set_rev (tile, entry->tile->rev);
++  gegl_tile_mark_as_stored (tile);
++
++  gegl_tile_backend_file_entry_read (tile_backend_file, entry, gegl_tile_get_data (tile));
++  return tile;
++}
++
++static gpointer
++gegl_tile_backend_file_set_tile (GeglTileSource *self,
++                                 GeglTile       *tile,
++                                 gint            x,
++                                 gint            y,
++                                 gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  if (entry == NULL)
++    {
++      entry          = gegl_tile_backend_file_file_entry_new (tile_backend_file);
++      entry->tile->x = x;
++      entry->tile->y = y;
++      entry->tile->z = z;
++      g_hash_table_insert (tile_backend_file->index, entry, entry);
++    }
++  entry->tile->rev = gegl_tile_get_rev (tile);
++
++  gegl_tile_backend_file_entry_write (tile_backend_file, entry, gegl_tile_get_data (tile));
++  gegl_tile_mark_as_stored (tile);
++  return NULL;
++}
++
++static gpointer
++gegl_tile_backend_file_void_tile (GeglTileSource *self,
++                                  GeglTile       *tile,
++                                  gint            x,
++                                  gint            y,
++                                  gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  if (entry != NULL)
++    {
++      gegl_tile_backend_file_file_entry_destroy (tile_backend_file, entry);
++    }
++
++  return NULL;
++}
++
++static gpointer
++gegl_tile_backend_file_exist_tile (GeglTileSource *self,
++                                   GeglTile       *tile,
++                                   gint            x,
++                                   gint            y,
++                                   gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  return entry!=NULL?((gpointer)0x1):NULL;
++}
++
++static gpointer
++gegl_tile_backend_file_flush (GeglTileSource *source,
++                              GeglTile       *tile,
++                              gint            x,
++                              gint            y,
++                              gint            z)
++{
++  GeglTileBackend     *backend;
++  GeglTileBackendFile *self;
++  GList               *tiles;
++
++  backend  = GEGL_TILE_BACKEND (source);
++  self     = GEGL_TILE_BACKEND_FILE (backend);
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "flushing %s", self->path);
++
++  self->header.rev ++;
++  self->header.next = self->next_pre_alloc; /* this is the offset
++                                               we start handing
++                                               out headers from*/
++  tiles = g_hash_table_get_keys (self->index);
++
++  if (tiles == NULL)
++    self->header.next = 0;
++  else
++    {
++      GList *iter;
++      for (iter = tiles; iter; iter = iter->next)
++        {
++          GeglFileBackendEntry *item = iter->data;
++
++          gegl_tile_backend_file_write_block (self, item);
++        }
++      gegl_tile_backend_file_write_block (self, NULL); /* terminate the index */
++      g_list_free (tiles);
++    }
++
++  gegl_tile_backend_file_write_header (self);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "flushed %s", self->path);
++
++  return (gpointer)0xf0f;
++}
++
++enum
++{
++  PROP_0,
++  PROP_PATH
++};
++
++static gpointer
++gegl_tile_backend_file_command (GeglTileSource  *self,
++                                GeglTileCommand  command,
++                                gint             x,
++                                gint             y,
++                                gint             z,
++                                gpointer         data)
++{
++  switch (command)
++    {
++      case GEGL_TILE_GET:
++        return gegl_tile_backend_file_get_tile (self, x, y, z);
++      case GEGL_TILE_SET:
++        return gegl_tile_backend_file_set_tile (self, data, x, y, z);
++
++      case GEGL_TILE_IDLE:
++        return NULL;       /* we could perhaps lazily be writing indexes
++                            * at some intervals, making it work as an
++                            * autosave for the buffer?
++                            */
++
++      case GEGL_TILE_VOID:
++        return gegl_tile_backend_file_void_tile (self, data, x, y, z);
++
++      case GEGL_TILE_EXIST:
++        return gegl_tile_backend_file_exist_tile (self, data, x, y, z);
++      case GEGL_TILE_FLUSH:
++        return gegl_tile_backend_file_flush (self, data, x, y, z);
++
++      default:
++        g_assert (command < GEGL_TILE_LAST_COMMAND &&
++                  command >= 0);
++    }
++  return FALSE;
++}
++
++static void
++gegl_tile_backend_file_set_property (GObject      *object,
++                                     guint         property_id,
++                                     const GValue *value,
++                                     GParamSpec   *pspec)
++{
++  GeglTileBackendFile *self = GEGL_TILE_BACKEND_FILE (object);
++
++  switch (property_id)
++    {
++      case PROP_PATH:
++        if (self->path)
++          g_free (self->path);
++        self->path = g_value_dup_string (value);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static void
++gegl_tile_backend_file_get_property (GObject    *object,
++                                     guint       property_id,
++                                     GValue     *value,
++                                     GParamSpec *pspec)
++{
++  GeglTileBackendFile *self = GEGL_TILE_BACKEND_FILE (object);
++
++  switch (property_id)
++    {
++      case PROP_PATH:
++        g_value_set_string (value, self->path);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static void
++gegl_tile_backend_file_free_free_list (GeglTileBackendFile *self)
++{
++  GSList *iter = self->free_list;
++
++  for (; iter; iter = iter->next)
++    g_free (iter->data);
++
++  g_slist_free (self->free_list);
++
++  self->free_list = NULL;
++}
++
++static void
++gegl_tile_backend_file_finalize (GObject *object)
++{
++  GeglTileBackendFile *self = (GeglTileBackendFile *) object;
++
++  if (self->index)
++    {
++      GList *tiles = g_hash_table_get_keys (self->index);
++
++      if (tiles != NULL)
++        {
++          GList *iter;
++
++          for (iter = tiles; iter; iter = iter->next)
++            gegl_tile_backend_file_file_entry_destroy (self, iter->data);
++        }
++
++      g_list_free (tiles);
++
++      g_hash_table_unref (self->index);
++    }
++
++  if (self->exist)
++    {
++      gegl_tile_backend_file_finish_writing (self);
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "finalizing buffer %s", self->path);
++
++      if (self->i != -1)
++        {
++          close (self->i);
++          self->i = -1;
++        }
++      if (self->o != -1)
++        {
++          close (self->o);
++          self->o = -1;
++        }
++    }
++
++  if (self->free_list)
++    gegl_tile_backend_file_free_free_list (self);
++
++  if (self->path)
++    g_free (self->path);
++
++  if (self->monitor)
++    g_object_unref (self->monitor);
++
++  if (self->file)
++    g_object_unref (self->file);
++
++  if (self->cond)
++    g_cond_free (self->cond);
++
++  (*G_OBJECT_CLASS (parent_class)->finalize)(object);
++}
++
++static guint
++gegl_tile_backend_file_hashfunc (gconstpointer key)
++{
++  const GeglBufferTile *e    = ((GeglFileBackendEntry *)key)->tile;
++  guint                 hash;
++  gint                  i;
++  gint                  srcA = e->x;
++  gint                  srcB = e->y;
++  gint                  srcC = e->z;
++
++  /* interleave the 10 least significant bits of all coordinates,
++   * this gives us Z-order / morton order of the space and should
++   * work well as a hash
++   */
++  hash = 0;
++  for (i = 9; i >= 0; i--)
++    {
++#define ADD_BIT(bit)    do { hash |= (((bit) != 0) ? 1 : 0); hash <<= 1; } while (0)
++      ADD_BIT (srcA & (1 << i));
++      ADD_BIT (srcB & (1 << i));
++      ADD_BIT (srcC & (1 << i));
++#undef ADD_BIT
++    }
++  return hash;
++}
++
++static gboolean
++gegl_tile_backend_file_equalfunc (gconstpointer a,
++                                  gconstpointer b)
++{
++  const GeglBufferTile *ea = ((GeglFileBackendEntry*)a)->tile;
++  const GeglBufferTile *eb = ((GeglFileBackendEntry*)b)->tile;
++
++  if (ea->x == eb->x &&
++      ea->y == eb->y &&
++      ea->z == eb->z)
++    return TRUE;
++
++  return FALSE;
++}
++
++
++static void
++gegl_tile_backend_file_load_index (GeglTileBackendFile *self,
++                                   gboolean             block)
++{
++  GeglBufferHeader  new_header;
++  GList            *iter;
++  GeglTileBackend  *backend;
++  goffset           offset = 0;
++  goffset           max    = 0;
++  gint              tile_size;
++
++  /* compute total from and next pre alloc by monitoring tiles as they
++   * are added here
++   */
++  /* reload header */
++  new_header = gegl_buffer_read_header (self->i, &offset, NULL)->header;
++
++  while (new_header.flags & GEGL_FLAG_LOCKED)
++    {
++      g_usleep (50000);
++      new_header = gegl_buffer_read_header (self->i, &offset, NULL)->header;
++    }
++
++  if (new_header.rev == self->header.rev)
++    {
++      GEGL_NOTE(GEGL_DEBUG_TILE_BACKEND, "header not changed: %s", self->path);
++      return;
++    }
++  else
++    {
++      self->header = new_header;
++      GEGL_NOTE(GEGL_DEBUG_TILE_BACKEND, "loading index: %s", self->path);
++    }
++
++  tile_size       = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++  offset          = self->header.next;
++  self->tiles     = gegl_buffer_read_index (self->i, &offset, NULL);
++  self->in_offset = self->out_offset = -1;
++  backend         = GEGL_TILE_BACKEND (self);
++
++  for (iter = self->tiles; iter; iter=iter->next)
++    {
++      GeglBufferItem       *item     = iter->data;
++      GeglFileBackendEntry *new      = gegl_tile_backend_file_file_entry_create (0, 0, 0);
++      GeglFileBackendEntry *existing =
++        gegl_tile_backend_file_lookup_entry (self, item->tile.x, item->tile.y, item->tile.z);
++
++      if (item->tile.offset > max)
++        max = item->tile.offset + tile_size;
++
++      if (existing)
++        {
++          if (existing->tile->rev == item->tile.rev)
++            {
++              g_assert (existing->tile->offset == item->tile.offset);
++              *existing->tile = item->tile;
++              g_free (item);
++              continue;
++            }
++          else
++            {
++              GeglTileStorage *storage =
++                (void*)gegl_tile_backend_peek_storage (backend);
++              GeglRectangle rect;
++              g_hash_table_remove (self->index, existing);
++
++              gegl_tile_source_refetch (GEGL_TILE_SOURCE (storage),
++                                        existing->tile->x,
++                                        existing->tile->y,
++                                        existing->tile->z);
++
++              if (existing->tile->z == 0)
++                {
++                  rect.width = self->header.tile_width;
++                  rect.height = self->header.tile_height;
++                  rect.x = existing->tile->x * self->header.tile_width;
++                  rect.y = existing->tile->y * self->header.tile_height;
++                }
++              g_free (existing->tile);
++              g_free (existing);
++
++              g_signal_emit_by_name (storage, "changed", &rect, NULL);
++            }
++        }
++      new->tile = iter->data;
++      g_hash_table_insert (self->index, new, new);
++    }
++  g_list_free (self->tiles);
++  gegl_tile_backend_file_free_free_list (self);
++  self->next_pre_alloc = max; /* if bigger than own? */
++  self->total          = max;
++  self->tiles          = NULL;
++}
++
++static void
++gegl_tile_backend_file_file_changed (GFileMonitor        *monitor,
++                                     GFile               *file,
++                                     GFile               *other_file,
++                                     GFileMonitorEvent    event_type,
++                                     GeglTileBackendFile *self)
++{
++  if (event_type == G_FILE_MONITOR_EVENT_CHANGED)
++    {
++      gegl_tile_backend_file_load_index (self, TRUE);
++      self->in_offset = self->out_offset = -1;
++    }
++}
++
++static GObject *
++gegl_tile_backend_file_constructor (GType                  type,
++                                    guint                  n_params,
++                                    GObjectConstructParam *params)
++{
++  GObject             *object;
++  GeglTileBackendFile *self;
++  GeglTileBackend     *backend;
++
++  object  = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
++  self    = GEGL_TILE_BACKEND_FILE (object);
++  backend = GEGL_TILE_BACKEND (object);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "constructing file backend: %s", self->path);
++
++  self->file        = g_file_new_for_commandline_arg (self->path);
++  self->i           = self->o = -1;
++  self->index       = g_hash_table_new (gegl_tile_backend_file_hashfunc,
++                                        gegl_tile_backend_file_equalfunc);
++  self->pending_ops = 0;
++  self->cond        = g_cond_new ();
++
++  /* If the file already exists open it, assuming it is a GeglBuffer. */
++  if (g_access (self->path, F_OK) != -1)
++    {
++      goffset offset = 0;
++
++      /* Install a monitor for changes to the file in case other applications
++       * might be writing to the buffer
++       */
++      self->monitor = g_file_monitor_file (self->file, G_FILE_MONITOR_NONE,
++                                           NULL, NULL);
++      g_signal_connect (self->monitor, "changed",
++                        G_CALLBACK (gegl_tile_backend_file_file_changed),
++                        self);
++
++      self->o = g_open (self->path, O_RDWR|O_CREAT, 0770);
++      if (self->o == -1)
++        {
++          /* Try again but this time with only read access. This is
++           * a quick-fix for make distcheck, where img_cmp fails
++           * when it opens a GeglBuffer file in the source tree
++           * (which is read-only).
++           */
++          self->o = g_open (self->path, O_RDONLY, 0770);
++
++          if (self->o == -1)
++            g_warning ("%s: Could not open '%s': %s", G_STRFUNC, self->path, g_strerror (errno));
++        }
++      self->i = g_open (self->path, O_RDONLY, 0);
++
++      self->header     = gegl_buffer_read_header (self->i, &offset, NULL)->header;
++      self->header.rev = self->header.rev -1;
++
++      /* we are overriding all of the work of the actual constructor here,
++       * a really evil hack :d
++       */
++      backend->priv->tile_width  = self->header.tile_width;
++      backend->priv->tile_height = self->header.tile_height;
++      backend->priv->format      = babl_format (self->header.description);
++      backend->priv->px_size     = babl_format_get_bytes_per_pixel (backend->priv->format);
++      backend->priv->tile_size   = backend->priv->tile_width *
++                                    backend->priv->tile_height *
++                                    backend->priv->px_size;
++
++      /* insert each of the entries into the hash table */
++      gegl_tile_backend_file_load_index (self, TRUE);
++      self->exist = TRUE;
++      g_assert (self->i != -1);
++      g_assert (self->o != -1);
++
++      /* to autoflush gegl_buffer_set */
++
++      /* XXX: poking at internals, icky */
++      backend->priv->shared = TRUE;
++    }
++  else
++    {
++      self->exist = FALSE; /* this is also the default, the file will be created on demand */
++    }
++
++  g_assert (self->file);
++
++  backend->priv->header = &self->header;
++
++  return object;
++}
++
++static void
++gegl_tile_backend_file_ensure_exist (GeglTileBackendFile *self)
++{
++  if (!self->exist)
++    {
++      GeglTileBackend *backend;
++      self->exist = TRUE;
++
++      backend = GEGL_TILE_BACKEND (self);
++
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "creating swapfile  %s", self->path);
++
++      self->o = g_open (self->path, O_RDWR|O_CREAT, 0770);
++      if (self->o == -1)
++        g_warning ("%s: Could not open '%s': %s", G_STRFUNC, self->path, g_strerror (errno));
++
++      self->next_pre_alloc = 256; /* reserved space for header */
++      self->total          = 256; /* reserved space for header */
++      self->in_offset      = self->out_offset = 0;
++      self->pending_ops = 0;
++      gegl_buffer_header_init (&self->header,
++                               backend->priv->tile_width,
++                               backend->priv->tile_height,
++                               backend->priv->px_size,
++                               backend->priv->format);
++      gegl_tile_backend_file_write_header (self);
++      self->i = g_open (self->path, O_RDONLY, 0);
++
++      g_assert (self->i != -1);
++      g_assert (self->o != -1);
++    }
++}
++
++static void
++gegl_tile_backend_file_class_init (GeglTileBackendFileClass *klass)
++{
++  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++
++  parent_class = g_type_class_peek_parent (klass);
++
++  gobject_class->get_property = gegl_tile_backend_file_get_property;
++  gobject_class->set_property = gegl_tile_backend_file_set_property;
++  gobject_class->constructor  = gegl_tile_backend_file_constructor;
++  gobject_class->finalize     = gegl_tile_backend_file_finalize;
++
++  queue_cond = g_cond_new ();
++  max_cond   = g_cond_new ();
++  mutex      = g_mutex_new ();
++  g_thread_create_full (gegl_tile_backend_file_writer_thread,
++                        NULL, 0, TRUE, TRUE, G_THREAD_PRIORITY_NORMAL, NULL);
++
++  GEGL_BUFFER_STRUCT_CHECK_PADDING;
++
++  g_object_class_install_property (gobject_class, PROP_PATH,
++                                   g_param_spec_string ("path",
++                                                        "path",
++                                                        "The base path for this backing file for a buffer",
++                                                        NULL,
++                                                        G_PARAM_CONSTRUCT |
++                                                        G_PARAM_READWRITE));
++}
++
++static void
++gegl_tile_backend_file_init (GeglTileBackendFile *self)
++{
++  ((GeglTileSource*)self)->command = gegl_tile_backend_file_command;
++  self->path                       = NULL;
++  self->file                       = NULL;
++  self->i                          = -1;
++  self->o                          = -1;
++  self->index                      = NULL;
++  self->free_list                  = NULL;
++  self->next_pre_alloc             = 256; /* reserved space for header */
++  self->total                      = 256; /* reserved space for header */
++  self->pending_ops                = 0;
++}
++
++gboolean
++gegl_tile_backend_file_try_lock (GeglTileBackendFile *self)
++{
++  GeglBufferHeader new_header;
++
++  new_header = gegl_buffer_read_header (self->i, NULL, NULL)->header;
++  if (new_header.flags & GEGL_FLAG_LOCKED)
++    {
++      return FALSE;
++    }
++  self->header.flags += GEGL_FLAG_LOCKED;
++  gegl_tile_backend_file_write_header (self);
++
++  return TRUE;
++}
++
++gboolean
++gegl_tile_backend_file_unlock (GeglTileBackendFile *self)
++{
++  if (!(self->header.flags & GEGL_FLAG_LOCKED))
++    {
++      g_warning ("tried to unlock unlocked buffer");
++      return FALSE;
++    }
++  self->header.flags -= GEGL_FLAG_LOCKED;
++  gegl_tile_backend_file_write_header (self);
++
++  /* wait until all writes to this file are finished before handing it over
++     to another process */
++  gegl_tile_backend_file_finish_writing (self);
++
++  return TRUE;
++}
+diff --git a/gegl/buffer/gegl-tile-backend-file-mapped.c b/gegl/buffer/gegl-tile-backend-file-mapped.c
+new file mode 100644
+index 0000000..28f95fc
+--- /dev/null
++++ gegl/buffer/gegl-tile-backend-file-mapped.c
+@@ -0,0 +1,1221 @@
++/* This file is part of GEGL.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2006, 2007, 2008 Øyvind Kolås <pippin at gimp.org>
++ *           2012 Ville Sokk <ville.sokk at gmail.com>
++ */
++
++/* GeglTileBackendFile stores tiles of a GeglBuffer on disk. There are
++ * two versions of the class. This one memory maps the file and I/O is
++ * performed using memcpy. There's a thread that performs writes like the
++ * async backend since the underlying file has to be grown often which
++ * has to be done with a system call which causes blocking. If the thread
++ * queue is empty then regular memcpy is used instead of pushing to the
++ * queue.
++ */
++
++#include "config.h"
++
++#include <gio/gio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/mman.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <string.h>
++#include <errno.h>
++
++#include <glib-object.h>
++#include <glib/gprintf.h>
++#include <glib/gstdio.h>
++
++#include "gegl.h"
++#include "gegl-buffer-backend.h"
++#include "gegl-tile-backend.h"
++#include "gegl-tile-backend-file.h"
++#include "gegl-buffer-index.h"
++#include "gegl-buffer-types.h"
++#include "gegl-debug.h"
++#include "gegl-config.h"
++
++
++#ifndef HAVE_FSYNC
++
++#ifdef G_OS_WIN32
++#define fsync _commit
++#endif
++
++#endif
++
++struct _GeglTileBackendFile
++{
++  GeglTileBackend  parent_instance;
++
++  /* the path to our buffer */
++  gchar           *path;
++
++  /* the file exist (and we've thus been able to initialize i and o,
++   * the utility call ensure_exist() should be called before any code
++   * using i and o)
++   */
++  gboolean         exist;
++
++  /* total size of file */
++  guint            total;
++
++  /* hashtable containing all entries of buffer, the index is written
++   * to the swapfile conforming to the structures laid out in
++   * gegl-buffer-index.h
++   */
++  GHashTable      *index;
++
++  /* list of offsets to tiles that are free */
++  GSList          *free_list;
++
++  /* offset to next pre allocated tile slot */
++  guint            next_pre_alloc;
++
++  /* revision of last index sync, for cooperated sharing of a buffer
++   * file
++   */
++  guint32          rev;
++
++  /* a local copy of the header that will be written to the file, in a
++   * multiple user per buffer scenario, the flags in the header might
++   * be used for locking/signalling
++   */
++  GeglBufferHeader header;
++
++  /* current offset, used when writing the index */
++  gint             offset;
++
++  /* when writing buffer blocks the writer keeps one block unwritten
++   * at all times to be able to keep track of the ->next offsets in
++   * the blocks.
++   */
++  GeglFileBackendEntry *in_holding;
++
++  /* loading buffer */
++  GList           *tiles;
++
++  /* GFile refering to our buffer */
++  GFile           *file;
++
++  GFileMonitor    *monitor;
++  /* for writing */
++  int              o;
++
++  /* for reading */
++  int              i;
++
++  /* pointer to the memory mapped file */
++  gchar           *map;
++
++  /* size of the memory mapped area */
++  guint            total_mapped;
++
++  /* number of write operations in the queue for this file */
++  gint             pending_ops;
++
++  /* used for waiting on writes to the file to be finished */
++  GCond           *cond;
++};
++
++
++static void     gegl_tile_backend_file_ensure_exist (GeglTileBackendFile  *self);
++static gboolean gegl_tile_backend_file_write_block  (GeglTileBackendFile  *self,
++                                                     GeglFileBackendEntry *block);
++static void     gegl_tile_backend_file_dbg_alloc    (int                   size);
++static void     gegl_tile_backend_file_dbg_dealloc  (int                   size);
++
++
++G_DEFINE_TYPE (GeglTileBackendFile, gegl_tile_backend_file, GEGL_TYPE_TILE_BACKEND)
++static GObjectClass * parent_class = NULL;
++
++/* this debugging is across all buffers */
++static gint allocs         = 0;
++static gint file_size      = 0;
++static gint peak_allocs    = 0;
++static gint peak_file_size = 0;
++
++static GQueue  queue      = G_QUEUE_INIT;
++static GMutex *mutex      = NULL;
++static GCond  *queue_cond = NULL;
++static GCond  *max_cond   = NULL;
++static GeglFileBackendThreadParams *in_progress;
++
++
++static void
++gegl_tile_backend_file_finish_writing (GeglTileBackendFile *self)
++{
++  g_mutex_lock (mutex);
++  while (self->pending_ops != 0)
++    g_cond_wait (self->cond, mutex);
++  g_mutex_unlock (mutex);
++}
++
++static void
++gegl_tile_backend_file_push_queue (GeglFileBackendThreadParams *params)
++{
++  guint length;
++
++  g_mutex_lock (mutex);
++
++  length = g_queue_get_length (&queue);
++
++  if (length > gegl_config()->queue_limit)
++    g_cond_wait (max_cond, mutex);
++
++  params->file->pending_ops += 1;
++  g_queue_push_tail (&queue, params);
++
++  if (params->entry)
++    {
++      if (params->operation == OP_WRITE)
++        params->entry->tile_link = g_queue_peek_tail_link (&queue);
++      else /* OP_WRITE_BLOCK */
++        params->entry->block_link = g_queue_peek_tail_link (&queue);
++    }
++
++  /* wake up the writer thread */
++  g_cond_signal (queue_cond);
++
++  g_mutex_unlock (mutex);
++}
++
++static void
++gegl_tile_backend_file_write (GeglTileBackendFile     *self,
++                              goffset                  offset,
++                              gchar                   *source,
++                              guint                    length,
++                              GeglFileBackendEntry    *entry,
++                              GeglFileBackendThreadOp  operation)
++{
++  if (g_queue_is_empty (&queue))
++    {
++      memcpy (self->map + offset, source, length);
++    }
++  else
++    {
++      GeglFileBackendThreadParams *params = NULL;
++      guchar *new_source;
++
++      if (entry && (entry->tile_link || entry->block_link))
++        {
++          gchar *msg;
++
++          g_mutex_lock (mutex);
++
++          if (operation == OP_WRITE && entry->tile_link)
++            {
++              params = entry->tile_link->data;
++              msg = "entry";
++            }
++          else if (operation == OP_WRITE_BLOCK && entry->block_link)
++            {
++              params = entry->block_link->data;
++              msg = "block";
++            }
++
++          if (params)
++            {
++              memcpy (params->source, source, length);
++              params->offset = offset;
++              g_mutex_unlock (mutex);
++
++              GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "overwrote queue %s %i,%i,%i at %i", msg, entry->tile->x, entry->tile->y, entry->tile->z, (gint)entry->tile->offset);
++
++              return;
++            }
++
++          g_mutex_unlock (mutex);
++        }
++
++      params = g_new0 (GeglFileBackendThreadParams, 1);
++      new_source = g_malloc (length);
++
++      memcpy (new_source, source, length);
++
++      params->operation = operation;
++      params->offset    = offset;
++      params->file      = self;
++      params->length    = length;
++      params->source    = new_source;
++      params->entry     = entry;
++
++      gegl_tile_backend_file_push_queue (params);
++    }
++}
++
++static inline void
++gegl_tile_backend_file_map (GeglTileBackendFile *self)
++{
++  self->map = mmap (NULL, self->total_mapped, PROT_READ|PROT_WRITE, MAP_SHARED, self->o, 0);
++  if (self->map == MAP_FAILED)
++    {
++      g_error ("Unable to memory map file %s: %s", self->path, g_strerror (errno));
++      return;
++    }
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "mapped %u bytes of file %s", self->total_mapped, self->path);
++}
++
++static inline void
++gegl_tile_backend_file_unmap (GeglTileBackendFile *self)
++{
++  if ((munmap (self->map, self->total_mapped)) < 0)
++    {
++      g_warning ("Unable to unmap file %s: %s", self->path, g_strerror (errno));
++      return;
++    }
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "unmapped file %s", self->path);
++}
++
++static gpointer
++gegl_tile_backend_file_writer_thread (gpointer ignored)
++{
++  while (TRUE)
++    {
++      GeglFileBackendThreadParams *params;
++
++      g_mutex_lock (mutex);
++
++      while (g_queue_is_empty (&queue))
++        g_cond_wait (queue_cond, mutex);
++
++      params = (GeglFileBackendThreadParams *)g_queue_pop_head (&queue);
++      if (params->entry)
++        {
++          in_progress = params;
++          if (params->operation == OP_WRITE)
++            params->entry->tile_link = NULL;
++          else /* OP_WRITE_BLOCK */
++            params->entry->block_link = NULL;
++        }
++      g_mutex_unlock (mutex);
++
++      switch (params->operation)
++        {
++        case OP_WRITE:
++          memcpy (params->file->map + params->offset,
++                  params->source, params->length);
++          break;
++        case OP_WRITE_BLOCK:
++          memcpy (params->file->map + params->offset,
++                  params->source, params->length);
++          break;
++        case OP_TRUNCATE:
++          {
++            GeglTileBackendFile *file = params->file;
++            ftruncate (file->o, params->length);
++            if (file->total > file->total_mapped)
++              {
++                g_mutex_lock (mutex);
++
++                gegl_tile_backend_file_unmap (file);
++                file->total_mapped = file->total * 5;
++                gegl_tile_backend_file_map (file);
++
++                g_mutex_unlock (mutex);
++              }
++          }
++          break;
++        default: /* OP_SYNC is not necessary for memory mapped files */
++          break;
++        }
++
++      g_mutex_lock (mutex);
++      in_progress = NULL;
++
++      params->file->pending_ops -= 1;
++      if (params->file->pending_ops == 0)
++        g_cond_signal (params->file->cond);
++
++      if (g_queue_get_length (&queue) < gegl_config ()->queue_limit)
++        g_cond_signal (max_cond);
++
++      if (params->source)
++        g_free (params->source);
++
++      g_free (params);
++
++      g_mutex_unlock (mutex);
++    }
++
++  return NULL;
++}
++
++static inline void
++gegl_tile_backend_file_file_entry_read (GeglTileBackendFile  *self,
++                                        GeglFileBackendEntry *entry,
++                                        guchar               *dest)
++{
++  gint     tile_size = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++  goffset  offset    = entry->tile->offset;
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  if (entry->tile_link || in_progress)
++    {
++      GeglFileBackendThreadParams *queued_op = NULL;
++      g_mutex_lock (mutex);
++
++      if (entry->tile_link)
++        queued_op = entry->tile_link->data;
++      else if (in_progress && in_progress->entry == entry &&
++               in_progress->operation == OP_WRITE)
++        queued_op = in_progress;
++
++      if (queued_op)
++        {
++          memcpy (dest, queued_op->source, tile_size);
++          g_mutex_unlock (mutex);
++
++          GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "read entry %i,%i,%i from queue", entry->tile->x, entry->tile->y, entry->tile->z);
++
++          return;
++        }
++
++      g_mutex_unlock (mutex);
++    }
++
++  memcpy (dest, self->map + offset, tile_size);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "read entry %i,%i,%i at %i", entry->tile->x, entry->tile->y, entry->tile->z, (gint)offset);
++}
++
++static GeglFileBackendEntry *
++gegl_tile_backend_file_file_entry_create (gint x,
++                                          gint y,
++                                          gint z)
++{
++  GeglFileBackendEntry *entry = g_new0 (GeglFileBackendEntry, 1);
++
++  entry->tile       = gegl_tile_entry_new (x, y, z);
++  entry->tile_link  = NULL;
++  entry->block_link = NULL;
++
++  return entry;
++}
++
++static inline GeglFileBackendEntry *
++gegl_tile_backend_file_file_entry_new (GeglTileBackendFile *self)
++{
++  GeglFileBackendEntry *entry = gegl_tile_backend_file_file_entry_create (0,0,0);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "Creating new entry");
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  if (self->free_list)
++    {
++      /* XXX: losing precision ?
++       * the free list seems to operate with fixed size datums and
++       * only keep track of offsets.
++       */
++      gint offset = GPOINTER_TO_INT (self->free_list->data);
++      entry->tile->offset = offset;
++      self->free_list = g_slist_remove (self->free_list, self->free_list->data);
++
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "  set offset %i from free list", ((gint)entry->tile->offset));
++    }
++  else
++    {
++      gint tile_size = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++
++      entry->tile->offset = self->next_pre_alloc;
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "  set offset %i (next allocation)", (gint)entry->tile->offset);
++      self->next_pre_alloc += tile_size;
++
++      if (self->next_pre_alloc >= self->total) /* automatic growing ensuring that
++                                                  we have room for next allocation..
++                                                */
++        {
++          GeglFileBackendThreadParams *params = g_new0 (GeglFileBackendThreadParams, 1);
++
++          self->total = self->total + 32 * tile_size;
++
++          params->operation = OP_TRUNCATE;
++          params->file      = self;
++          params->length    = self->total;
++
++          gegl_tile_backend_file_push_queue (params);
++
++          GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "pushed truncate to %i bytes", (gint)self->total);
++        }
++    }
++  gegl_tile_backend_file_dbg_alloc (gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self)));
++  return entry;
++}
++
++static inline void
++gegl_tile_backend_file_file_entry_destroy (GeglFileBackendEntry *entry,
++                                           GeglTileBackendFile  *self)
++{
++  /* XXX: EEEk, throwing away bits */
++  guint offset = entry->tile->offset;
++
++  if (entry->tile_link || entry->block_link)
++    {
++      gint   i;
++      GList *link;
++
++      g_mutex_lock (mutex);
++
++      for (i = 0, link = entry->tile_link;
++           i < 2;
++           i++, link = entry->block_link)
++        {
++          if (link)
++            {
++              GeglFileBackendThreadParams *queued_op = link->data;
++              queued_op->file->pending_ops -= 1;
++              g_queue_delete_link (&queue, link);
++              g_free (queued_op->source);
++              g_free (queued_op);
++            }
++        }
++
++      g_mutex_unlock (mutex);
++    }
++
++  self->free_list = g_slist_prepend (self->free_list,
++                                     GUINT_TO_POINTER (offset));
++  g_hash_table_remove (self->index, entry);
++
++  gegl_tile_backend_file_dbg_dealloc (gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self)));
++
++  g_free (entry->tile);
++  g_free (entry);
++}
++
++static gboolean
++gegl_tile_backend_file_write_header (GeglTileBackendFile *self)
++{
++  gegl_tile_backend_file_ensure_exist (self);
++
++  gegl_tile_backend_file_write (self, 0, (gchar*)&(self->header), 256, NULL, OP_WRITE);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "Wrote header, next=%i", (gint)self->header.next);
++  return TRUE;
++}
++
++static gboolean
++gegl_tile_backend_file_write_block (GeglTileBackendFile  *self,
++                                    GeglFileBackendEntry *item)
++{
++  gegl_tile_backend_file_ensure_exist (self);
++  if (self->in_holding)
++    {
++      GeglBufferBlock *block           = &(self->in_holding->tile->block);
++      guint64          next_allocation = self->offset + block->length;
++      gint             length          = block->length;
++
++      /* update the next offset pointer in the previous block */
++      if (item == NULL)
++          /* the previous block was the last block */
++          block->next = 0;
++      else
++          block->next = next_allocation;
++
++      /* XXX: should promiscuosuly try to compress here as well,. if revisions
++              are not matching..
++       */
++
++      gegl_tile_backend_file_write (self, self->offset, (gchar*)block, length,
++                                    self->in_holding, OP_WRITE_BLOCK);
++
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "Wrote block: length:%i flags:%i next:%i at offset %i",
++                 length,
++                 block->flags,
++                 (gint)block->next,
++                 self->offset);
++
++      self->offset = next_allocation;
++    }
++  else
++    {
++      /* we're setting up for the first write */
++      self->offset = self->next_pre_alloc; /* start writing header at end
++                                            * of file, worry about writing
++                                            * header inside free list later
++                                            */
++    }
++  self->in_holding = item;
++
++  return TRUE;
++}
++
++void
++gegl_tile_backend_file_stats (void)
++{
++  g_warning ("leaked: %i chunks (%f mb)  peak: %i (%i bytes %fmb))",
++             allocs, file_size / 1024 / 1024.0,
++             peak_allocs, peak_file_size, peak_file_size / 1024 / 1024.0);
++}
++
++static void
++gegl_tile_backend_file_dbg_alloc (gint size)
++{
++  allocs++;
++  file_size += size;
++  if (allocs > peak_allocs)
++    peak_allocs = allocs;
++  if (file_size > peak_file_size)
++    peak_file_size = file_size;
++}
++
++static void
++gegl_tile_backend_file_dbg_dealloc (gint size)
++{
++  allocs--;
++  file_size -= size;
++}
++
++static inline GeglFileBackendEntry *
++gegl_tile_backend_file_lookup_entry (GeglTileBackendFile *self,
++                                     gint                 x,
++                                     gint                 y,
++                                     gint                 z)
++{
++  GeglFileBackendEntry *ret = NULL;
++  GeglFileBackendEntry *key = gegl_tile_backend_file_file_entry_create (x,y,z);
++  ret = g_hash_table_lookup (self->index, key);
++  g_free (key->tile);
++  g_free (key);
++  return ret;
++}
++
++/* this is the only place that actually should
++ * instantiate tiles, when the cache is large enough
++ * that should make sure we don't hit this function
++ * too often.
++ */
++static GeglTile *
++gegl_tile_backend_file_get_tile (GeglTileSource *self,
++                                 gint            x,
++                                 gint            y,
++                                 gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++  GeglTile             *tile = NULL;
++  gint                  tile_size;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  if (!entry)
++    return NULL;
++
++  tile_size = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++  tile      = gegl_tile_new (tile_size);
++  gegl_tile_set_rev (tile, entry->tile->rev);
++  gegl_tile_mark_as_stored (tile);
++
++  gegl_tile_backend_file_file_entry_read (tile_backend_file, entry, gegl_tile_get_data (tile));
++  return tile;
++}
++
++static gpointer
++gegl_tile_backend_file_set_tile (GeglTileSource *self,
++                                 GeglTile       *tile,
++                                 gint            x,
++                                 gint            y,
++                                 gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  if (entry == NULL)
++    {
++      entry          = gegl_tile_backend_file_file_entry_new (tile_backend_file);
++      entry->tile->x = x;
++      entry->tile->y = y;
++      entry->tile->z = z;
++      g_hash_table_insert (tile_backend_file->index, entry, entry);
++    }
++  entry->tile->rev = gegl_tile_get_rev (tile);
++
++  gegl_tile_backend_file_write (tile_backend_file, entry->tile->offset,
++                                (gchar*)gegl_tile_get_data (tile),
++                                gegl_tile_backend_get_tile_size (backend),
++                                entry, OP_WRITE);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "wrote entry %i, %i, %i at %i", entry->tile->x, entry->tile->y, entry->tile->z, (gint)entry->tile->offset);
++
++  gegl_tile_mark_as_stored (tile);
++  return NULL;
++}
++
++static gpointer
++gegl_tile_backend_file_void_tile (GeglTileSource *self,
++                                  GeglTile       *tile,
++                                  gint            x,
++                                  gint            y,
++                                  gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  if (entry != NULL)
++    {
++      gegl_tile_backend_file_file_entry_destroy (entry, tile_backend_file);
++    }
++
++  return NULL;
++}
++
++static gpointer
++gegl_tile_backend_file_exist_tile (GeglTileSource *self,
++                                   GeglTile       *tile,
++                                   gint            x,
++                                   gint            y,
++                                   gint            z)
++{
++  GeglTileBackend      *backend;
++  GeglTileBackendFile  *tile_backend_file;
++  GeglFileBackendEntry *entry;
++
++  backend           = GEGL_TILE_BACKEND (self);
++  tile_backend_file = GEGL_TILE_BACKEND_FILE (backend);
++  entry             = gegl_tile_backend_file_lookup_entry (tile_backend_file, x, y, z);
++
++  return entry!=NULL?((gpointer)0x1):NULL;
++}
++
++
++static gpointer
++gegl_tile_backend_file_flush (GeglTileSource *source,
++                              GeglTile       *tile,
++                              gint            x,
++                              gint            y,
++                              gint            z)
++{
++  GeglTileBackend     *backend;
++  GeglTileBackendFile *self;
++  GList               *tiles;
++
++  backend  = GEGL_TILE_BACKEND (source);
++  self     = GEGL_TILE_BACKEND_FILE (backend);
++
++  gegl_tile_backend_file_ensure_exist (self);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "flushing %s", self->path);
++
++  self->header.rev ++;
++  self->header.next = self->next_pre_alloc; /* this is the offset
++                                               we start handing
++                                               out headers from*/
++  tiles = g_hash_table_get_keys (self->index);
++
++  if (tiles == NULL)
++    self->header.next = 0;
++  else
++    {
++      GList *iter;
++      for (iter = tiles; iter; iter = iter->next)
++        {
++          GeglFileBackendEntry *item = iter->data;
++
++          gegl_tile_backend_file_write_block (self, item);
++        }
++      gegl_tile_backend_file_write_block (self, NULL); /* terminate the index */
++      g_list_free (tiles);
++    }
++
++  gegl_tile_backend_file_write_header (self);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "flushed %s", self->path);
++
++  return (gpointer)0xf0f;
++}
++
++enum
++{
++  PROP_0,
++  PROP_PATH
++};
++
++static gpointer
++gegl_tile_backend_file_command (GeglTileSource  *self,
++                                GeglTileCommand  command,
++                                gint             x,
++                                gint             y,
++                                gint             z,
++                                gpointer         data)
++{
++  switch (command)
++    {
++      case GEGL_TILE_GET:
++        return gegl_tile_backend_file_get_tile (self, x, y, z);
++      case GEGL_TILE_SET:
++        return gegl_tile_backend_file_set_tile (self, data, x, y, z);
++
++      case GEGL_TILE_IDLE:
++        return NULL;       /* we could perhaps lazily be writing indexes
++                            * at some intervals, making it work as an
++                            * autosave for the buffer?
++                            */
++
++      case GEGL_TILE_VOID:
++        return gegl_tile_backend_file_void_tile (self, data, x, y, z);
++
++      case GEGL_TILE_EXIST:
++        return gegl_tile_backend_file_exist_tile (self, data, x, y, z);
++      case GEGL_TILE_FLUSH:
++        return gegl_tile_backend_file_flush (self, data, x, y, z);
++
++      default:
++        g_assert (command < GEGL_TILE_LAST_COMMAND &&
++                  command >= 0);
++    }
++  return FALSE;
++}
++
++static void
++gegl_tile_backend_file_set_property (GObject      *object,
++                                     guint         property_id,
++                                     const GValue *value,
++                                     GParamSpec   *pspec)
++{
++  GeglTileBackendFile *self = GEGL_TILE_BACKEND_FILE (object);
++
++  switch (property_id)
++    {
++      case PROP_PATH:
++        if (self->path)
++          g_free (self->path);
++        self->path = g_value_dup_string (value);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static void
++gegl_tile_backend_file_get_property (GObject    *object,
++                                     guint       property_id,
++                                     GValue     *value,
++                                     GParamSpec *pspec)
++{
++  GeglTileBackendFile *self = GEGL_TILE_BACKEND_FILE (object);
++
++  switch (property_id)
++    {
++      case PROP_PATH:
++        g_value_set_string (value, self->path);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static void
++gegl_tile_backend_file_finalize (GObject *object)
++{
++  GeglTileBackendFile *self = (GeglTileBackendFile *) object;
++
++  if (self->index)
++    g_hash_table_unref (self->index);
++
++  if (self->exist)
++    {
++      gegl_tile_backend_file_finish_writing (self);
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "finalizing buffer %s", self->path);
++
++      if (self->o != -1)
++        {
++          close (self->o);
++          self->o = -1;
++        }
++      if (self->map)
++        gegl_tile_backend_file_unmap (self);
++    }
++
++  if (self->path)
++    g_free (self->path);
++
++  if (self->monitor)
++    g_object_unref (self->monitor);
++
++  if (self->file)
++    g_object_unref (self->file);
++
++  (*G_OBJECT_CLASS (parent_class)->finalize)(object);
++}
++
++static guint
++gegl_tile_backend_file_hashfunc (gconstpointer key)
++{
++  const GeglBufferTile *e    = ((GeglFileBackendEntry *)key)->tile;
++  guint                 hash;
++  gint                  i;
++  gint                  srcA = e->x;
++  gint                  srcB = e->y;
++  gint                  srcC = e->z;
++
++  /* interleave the 10 least significant bits of all coordinates,
++   * this gives us Z-order / morton order of the space and should
++   * work well as a hash
++   */
++  hash = 0;
++  for (i = 9; i >= 0; i--)
++    {
++#define ADD_BIT(bit)    do { hash |= (((bit) != 0) ? 1 : 0); hash <<= 1; } while (0)
++      ADD_BIT (srcA & (1 << i));
++      ADD_BIT (srcB & (1 << i));
++      ADD_BIT (srcC & (1 << i));
++#undef ADD_BIT
++    }
++  return hash;
++}
++
++static gboolean
++gegl_tile_backend_file_equalfunc (gconstpointer a,
++                                  gconstpointer b)
++{
++  const GeglBufferTile *ea = ((GeglFileBackendEntry*)a)->tile;
++  const GeglBufferTile *eb = ((GeglFileBackendEntry*)b)->tile;
++
++  if (ea->x == eb->x &&
++      ea->y == eb->y &&
++      ea->z == eb->z)
++    return TRUE;
++
++  return FALSE;
++}
++
++static void
++gegl_tile_backend_file_load_index (GeglTileBackendFile *self,
++                                   gboolean             block)
++{
++  GeglBufferHeader  new_header;
++  GList            *iter;
++  GeglTileBackend  *backend;
++  goffset           offset = 0;
++  goffset           max    = 0;
++  gint              tile_size;
++
++  /* compute total from and next pre alloc by monitoring tiles as they
++   * are added here
++   */
++  /* reload header */
++  new_header = gegl_buffer_read_header (0, &offset, self->map)->header;
++
++  while (new_header.flags & GEGL_FLAG_LOCKED)
++    {
++      g_usleep (50000);
++      new_header = gegl_buffer_read_header (0, &offset, self->map)->header;
++    }
++
++  if (new_header.rev == self->header.rev)
++    {
++      GEGL_NOTE(GEGL_DEBUG_TILE_BACKEND, "header not changed: %s", self->path);
++      return;
++    }
++  else
++    {
++      self->header=new_header;
++      GEGL_NOTE(GEGL_DEBUG_TILE_BACKEND, "loading index: %s", self->path);
++    }
++
++  tile_size     = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
++  offset        = self->header.next;
++  self->tiles   = gegl_buffer_read_index (0, &offset, self->map);
++  backend       = GEGL_TILE_BACKEND (self);
++
++  for (iter = self->tiles; iter; iter=iter->next)
++    {
++      GeglBufferItem       *item     = iter->data;
++      GeglFileBackendEntry *new      = gegl_tile_backend_file_file_entry_create (0, 0, 0);
++      GeglFileBackendEntry *existing =
++        gegl_tile_backend_file_lookup_entry (self, item->tile.x, item->tile.y, item->tile.z);
++
++      if (item->tile.offset > max)
++        max = item->tile.offset + tile_size;
++
++      if (existing)
++        {
++          if (existing->tile->rev == item->tile.rev)
++            {
++              g_assert (existing->tile->offset == item->tile.offset);
++              *existing->tile = item->tile;
++              g_free (item);
++              continue;
++            }
++          else
++            {
++              GeglTileStorage *storage =
++                (void*)gegl_tile_backend_peek_storage (backend);
++              GeglRectangle rect;
++              g_hash_table_remove (self->index, existing);
++
++              gegl_tile_source_refetch (GEGL_TILE_SOURCE (storage),
++                                        existing->tile->x,
++                                        existing->tile->y,
++                                        existing->tile->z);
++
++              if (existing->tile->z == 0)
++                {
++                  rect.width = self->header.tile_width;
++                  rect.height = self->header.tile_height;
++                  rect.x = existing->tile->x * self->header.tile_width;
++                  rect.y = existing->tile->y * self->header.tile_height;
++                }
++              g_free (existing);
++
++              g_signal_emit_by_name (storage, "changed", &rect, NULL);
++            }
++        }
++      new->tile = iter->data;
++      g_hash_table_insert (self->index, new, new);
++    }
++  g_list_free (self->tiles);
++  g_slist_free (self->free_list);
++  self->free_list      = NULL;
++  self->next_pre_alloc = max; /* if bigger than own? */
++  self->tiles          = NULL;
++  self->total          = max;
++}
++
++static void
++gegl_tile_backend_file_file_changed (GFileMonitor        *monitor,
++                                     GFile               *file,
++                                     GFile               *other_file,
++                                     GFileMonitorEvent    event_type,
++                                     GeglTileBackendFile *self)
++{
++  if (event_type == G_FILE_MONITOR_EVENT_CHANGED /*G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT*/ )
++      gegl_tile_backend_file_load_index (self, TRUE);
++}
++
++static GObject *
++gegl_tile_backend_file_constructor (GType                  type,
++                                    guint                  n_params,
++                                    GObjectConstructParam *params)
++{
++  GObject             *object;
++  GeglTileBackendFile *self;
++  GeglTileBackend     *backend;
++
++  object  = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
++  self    = GEGL_TILE_BACKEND_FILE (object);
++  backend = GEGL_TILE_BACKEND (object);
++
++  GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "constructing file backend: %s", self->path);
++
++  self->file        = g_file_new_for_commandline_arg (self->path);
++  self->o           = -1;
++  self->index       = g_hash_table_new (gegl_tile_backend_file_hashfunc,
++                                        gegl_tile_backend_file_equalfunc);
++  self->pending_ops = 0;
++  self->cond        = g_cond_new ();
++
++  /* If the file already exists open it, assuming it is a GeglBuffer. */
++  if (g_access (self->path, F_OK) != -1)
++    {
++      GStatBuf  stats;
++
++      /* Install a monitor for changes to the file in case other applications
++       * might be writing to the buffer
++       */
++      self->monitor = g_file_monitor_file (self->file, G_FILE_MONITOR_NONE,
++                                           NULL, NULL);
++      g_signal_connect (self->monitor, "changed",
++                        G_CALLBACK (gegl_tile_backend_file_file_changed),
++                        self);
++
++      self->o = g_open (self->path, O_RDWR|O_CREAT, 0770);
++      if (self->o == -1)
++        {
++          /* Try again but this time with only read access. This is
++           * a quick-fix for make distcheck, where img_cmp fails
++           * when it opens a GeglBuffer file in the source tree
++           * (which is read-only).
++           */
++          self->o = g_open (self->path, O_RDONLY, 0770);
++
++          if (self->o == -1)
++            g_warning ("%s: Could not open '%s': %s", G_STRFUNC, self->path, g_strerror (errno));
++        }
++
++      g_stat (self->path, &stats);
++      self->total_mapped = stats.st_size;
++      gegl_tile_backend_file_map (self);
++
++      self->header = gegl_buffer_read_header (0, NULL, self->map)->header;
++      self->header.rev = self->header.rev -1;
++
++      /* we are overriding all of the work of the actual constructor here,
++       * a really evil hack :d
++       */
++      backend->priv->tile_width  = self->header.tile_width;
++      backend->priv->tile_height = self->header.tile_height;
++      backend->priv->format      = babl_format (self->header.description);
++      backend->priv->px_size     = babl_format_get_bytes_per_pixel (backend->priv->format);
++      backend->priv->tile_size   = backend->priv->tile_width *
++                                    backend->priv->tile_height *
++                                    backend->priv->px_size;
++
++      /* insert each of the entries into the hash table */
++      gegl_tile_backend_file_load_index (self, TRUE);
++      self->exist = TRUE;
++      g_assert (self->o != -1);
++
++      /* to autoflush gegl_buffer_set */
++
++      /* XXX: poking at internals, icky */
++      backend->priv->shared = TRUE;
++    }
++  else
++    {
++      self->exist = FALSE; /* this is also the default, the file will be created on demand */
++    }
++
++  g_assert (self->file);
++
++  backend->priv->header = &self->header;
++
++  return object;
++}
++
++static void
++gegl_tile_backend_file_ensure_exist (GeglTileBackendFile *self)
++{
++  if (!self->exist)
++    {
++      GeglTileBackend *backend;
++
++      self->exist = TRUE;
++
++      backend = GEGL_TILE_BACKEND (self);
++
++      GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "creating swapfile  %s", self->path);
++
++      self->o = g_open (self->path, O_RDWR|O_CREAT, 0770);
++      if (self->o == -1)
++        g_warning ("%s: Could not open '%s': %s", G_STRFUNC, self->path, g_strerror (errno));
++
++      self->next_pre_alloc = 256;  /* reserved space for header */
++      self->total          = 256;  /* reserved space for header */
++
++      ftruncate (self->o, 256);
++      self->total_mapped = 2000000000;
++      gegl_tile_backend_file_map (self);
++
++      gegl_buffer_header_init (&self->header,
++                               backend->priv->tile_width,
++                               backend->priv->tile_height,
++                               backend->priv->px_size,
++                               backend->priv->format
++                               );
++      gegl_tile_backend_file_write_header (self);
++
++      g_assert (self->o != -1);
++    }
++}
++
++static void
++gegl_tile_backend_file_class_init (GeglTileBackendFileClass *klass)
++{
++  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++
++  parent_class = g_type_class_peek_parent (klass);
++
++  gobject_class->get_property = gegl_tile_backend_file_get_property;
++  gobject_class->set_property = gegl_tile_backend_file_set_property;
++  gobject_class->constructor  = gegl_tile_backend_file_constructor;
++  gobject_class->finalize     = gegl_tile_backend_file_finalize;
++
++  queue_cond = g_cond_new ();
++  max_cond   = g_cond_new ();
++  mutex      = g_mutex_new ();
++  g_thread_create_full (gegl_tile_backend_file_writer_thread,
++                        NULL, 0, TRUE, TRUE, G_THREAD_PRIORITY_NORMAL, NULL);
++
++  GEGL_BUFFER_STRUCT_CHECK_PADDING;
++
++  g_object_class_install_property (gobject_class, PROP_PATH,
++                                   g_param_spec_string ("path",
++                                                        "path",
++                                                        "The base path for this backing file for a buffer",
++                                                        NULL,
++                                                        G_PARAM_CONSTRUCT |
++                                                        G_PARAM_READWRITE));
++}
++
++static void
++gegl_tile_backend_file_init (GeglTileBackendFile *self)
++{
++  ((GeglTileSource*)self)->command = gegl_tile_backend_file_command;
++  self->path                       = NULL;
++  self->file                       = NULL;
++  self->o                          = -1;
++  self->index                      = NULL;
++  self->free_list                  = NULL;
++  self->next_pre_alloc             = 256; /* reserved space for header */
++  self->total                      = 256; /* reserved space for header */
++  self->map                        = NULL;
++  self->pending_ops                = 0;
++}
++
++gboolean
++gegl_tile_backend_file_try_lock (GeglTileBackendFile *self)
++{
++  GeglBufferHeader new_header;
++
++  new_header = gegl_buffer_read_header (0, NULL, self->map)->header;
++  if (new_header.flags & GEGL_FLAG_LOCKED)
++    {
++      return FALSE;
++    }
++  self->header.flags += GEGL_FLAG_LOCKED;
++  gegl_tile_backend_file_write_header (self);
++  return TRUE;
++}
++
++gboolean
++gegl_tile_backend_file_unlock (GeglTileBackendFile *self)
++{
++  if (!(self->header.flags & GEGL_FLAG_LOCKED))
++    {
++      g_warning ("tried to unlock unlocked buffer");
++      return FALSE;
++    }
++  self->header.flags -= GEGL_FLAG_LOCKED;
++  gegl_tile_backend_file_write_header (self);
++
++  /* wait until all writes to this file are finished before handing it over
++     to another process */
++  gegl_tile_backend_file_finish_writing (self);
++
++  return TRUE;
++}
+diff --git a/gegl/buffer/gegl-tile-backend-file.c b/gegl/buffer/gegl-tile-backend-file.c
+index 63d6105..40bf5b0 100644
+--- gegl/buffer/gegl-tile-backend-file.c
++++ gegl/buffer/gegl-tile-backend-file.c
+@@ -28,14 +28,15 @@
+ 
+ #include <glib-object.h>
+ #include <glib/gprintf.h>
++#include <glib/gstdio.h>
+ 
+ #include "gegl.h"
++#include "gegl-buffer-backend.h"
+ #include "gegl-tile-backend.h"
+ #include "gegl-tile-backend-file.h"
+ #include "gegl-buffer-index.h"
+ #include "gegl-buffer-types.h"
+ #include "gegl-debug.h"
+-//#include "gegl-types-internal.h"
+ 
+ 
+ #ifndef HAVE_FSYNC
+@@ -46,6 +47,7 @@
+ 
+ #endif
+ 
++
+ struct _GeglTileBackendFile
+ {
+   GeglTileBackend  parent_instance;
+@@ -742,13 +744,13 @@ gegl_tile_backend_file_load_index (GeglTileBackendFile *self,
+    * are added here
+    */
+   /* reload header */
+-  new_header = gegl_buffer_read_header (self->i, &offset)->header;
++  new_header = gegl_buffer_read_header (self->i, &offset, NULL)->header;
+   self->foffset = 256;
+ 
+   while (new_header.flags & GEGL_FLAG_LOCKED)
+     {
+       g_usleep (50000);
+-      new_header = gegl_buffer_read_header (self->i, &offset)->header;
++      new_header = gegl_buffer_read_header (self->i, &offset, NULL)->header;
+       self->foffset = 256;
+     }
+ 
+@@ -765,7 +767,7 @@ gegl_tile_backend_file_load_index (GeglTileBackendFile *self,
+ 
+   tile_size = gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self));
+   offset      = self->header.next;
+-  self->tiles = gegl_buffer_read_index (self->i, &offset);
++  self->tiles = gegl_buffer_read_index (self->i, &offset, NULL);
+   self->foffset = -1;
+   backend     = GEGL_TILE_BACKEND (self);
+ 
+@@ -856,7 +858,7 @@ gegl_tile_backend_file_constructor (GType                  type,
+ 
+ 
+   /* If the file already exists open it, assuming it is a GeglBuffer. */
+-  if (access (self->path, F_OK) != -1)
++  if (g_access (self->path, F_OK) != -1)
+     {
+       goffset offset = 0;
+ 
+@@ -869,7 +871,7 @@ gegl_tile_backend_file_constructor (GType                  type,
+                         G_CALLBACK (gegl_tile_backend_file_file_changed),
+                         self);
+ 
+-      self->o = open (self->path, O_RDWR|O_CREAT, 0770);
++      self->o = g_open (self->path, O_RDWR|O_CREAT, 0770);
+       if (self->o == -1)
+         {
+           /* Try again but this time with only read access. This is
+@@ -877,14 +879,14 @@ gegl_tile_backend_file_constructor (GType                  type,
+            * when it opens a GeglBuffer file in the source tree
+            * (which is read-only).
+            */
+-          self->o = open (self->path, O_RDONLY, 0770);
++          self->o = g_open (self->path, O_RDONLY, 0770);
+ 
+           if (self->o == -1)
+             g_warning ("%s: Could not open '%s': %s", G_STRFUNC, self->path, g_strerror (errno));
+         }
+       self->i = dup (self->o);
+ 
+-      self->header = gegl_buffer_read_header (self->i, &offset)->header;
++      self->header = gegl_buffer_read_header (self->i, &offset, NULL)->header;
+       self->header.rev = self->header.rev -1;
+ 
+       /* we are overriding all of the work of the actual constructor here,
+@@ -933,7 +935,7 @@ gegl_tile_backend_file_ensure_exist (GeglTileBackendFile *self)
+ 
+       GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "creating swapfile  %s", self->path);
+ 
+-      self->o = open (self->path, O_RDWR|O_CREAT, 0770);
++      self->o = g_open (self->path, O_RDWR|O_CREAT, 0770);
+       if (self->o == -1)
+         g_warning ("%s: Could not open '%s': %s", G_STRFUNC, self->path, g_strerror (errno));
+ 
+@@ -1001,7 +1003,7 @@ gboolean
+ gegl_tile_backend_file_try_lock (GeglTileBackendFile *self)
+ {
+   GeglBufferHeader new_header;
+-  new_header = gegl_buffer_read_header (self->i, NULL)->header;
++  new_header = gegl_buffer_read_header (self->i, NULL, NULL)->header;
+   if (new_header.flags & GEGL_FLAG_LOCKED)
+     {
+       return FALSE;
+diff --git a/gegl/buffer/gegl-tile-backend-file.h b/gegl/buffer/gegl-tile-backend-file.h
+index 018503c..00ba5fc 100644
+--- gegl/buffer/gegl-tile-backend-file.h
++++ gegl/buffer/gegl-tile-backend-file.h
+@@ -20,6 +20,7 @@
+ #define __GEGL_TILE_BACKEND_FILE_H__
+ 
+ #include "gegl-tile-backend.h"
++#include "gegl-buffer-index.h"
+ 
+ /***
+  * GeglTileBackendFile is a GeglTileBackend that store tiles in a unique file.
+@@ -38,6 +39,33 @@ G_BEGIN_DECLS
+ typedef struct _GeglTileBackendFile      GeglTileBackendFile;
+ typedef struct _GeglTileBackendFileClass GeglTileBackendFileClass;
+ 
++typedef enum
++{
++  OP_WRITE,
++  OP_WRITE_BLOCK,
++  OP_TRUNCATE,
++  OP_SYNC
++} GeglFileBackendThreadOp;
++
++typedef struct
++{
++  GeglBufferTile *tile;
++  /* reference to the writer queue links of this entry when writing
++     tile data or a GeglBufferBlock*/
++  GList          *tile_link;
++  GList          *block_link;
++} GeglFileBackendEntry;
++
++typedef struct
++{
++  gint                     length;    /* length of data if writing tile or
++                                         length of file if truncating */
++  guchar                  *source;
++  goffset                  offset;
++  GeglTileBackendFile     *file;      /* the file we are operating on */
++  GeglFileBackendThreadOp  operation; /* type of file operation, see above */
++  GeglFileBackendEntry    *entry;
++} GeglFileBackendThreadParams;
+ 
+ struct _GeglTileBackendFileClass
+ {
+diff --git a/gegl/buffer/gegl-tile-backend-tiledir.c b/gegl/buffer/gegl-tile-backend-tiledir.c
+index 1fc08c9..2e2c87a 100644
+--- gegl/buffer/gegl-tile-backend-tiledir.c
++++ gegl/buffer/gegl-tile-backend-tiledir.c
+@@ -23,7 +23,7 @@
+ #include <string.h>
+ #include <errno.h>
+ 
+-#include "gegl-types.h"
++#include "gegl-buffer-backend.h"
+ #include "gegl-tile-backend.h"
+ #include "gegl-tile-backend-tiledir.h"
+ 
+diff --git a/gegl/buffer/gegl-tile-backend.c b/gegl/buffer/gegl-tile-backend.c
+index f2d8350..a64d7fd 100644
+--- gegl/buffer/gegl-tile-backend.c
++++ gegl/buffer/gegl-tile-backend.c
+@@ -16,18 +16,20 @@
+  * Copyright 2006, 2007 Øyvind Kolås <pippin at gimp.org>
+  */
+ #include "config.h"
+-#include <glib.h>
+-#include <glib-object.h>
++
+ #include <string.h>
+ 
+ #include <babl/babl.h>
++#include <glib-object.h>
++
+ #include "gegl-buffer-types.h"
+ #include "gegl-buffer-private.h"
+ #include "gegl-tile-source.h"
+ #include "gegl-tile-backend.h"
+ 
+ G_DEFINE_TYPE (GeglTileBackend, gegl_tile_backend, GEGL_TYPE_TILE_SOURCE)
+-static GObjectClass * parent_class = NULL;
++
++#define parent_class gegl_tile_backend_parent_class
+ 
+ enum
+ {
+@@ -117,7 +119,6 @@ constructor (GType                  type,
+   g_assert (backend->priv->tile_width > 0 && backend->priv->tile_height > 0);
+   g_assert (backend->priv->format);
+ 
+-
+   backend->priv->px_size = babl_format_get_bytes_per_pixel (backend->priv->format);
+   backend->priv->tile_size = backend->priv->tile_width * backend->priv->tile_height * backend->priv->px_size;
+ 
+@@ -129,73 +130,80 @@ gegl_tile_backend_class_init (GeglTileBackendClass *klass)
+ {
+   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ 
+-  parent_class  = g_type_class_peek_parent (klass);
+-
+   gobject_class->set_property = set_property;
+   gobject_class->get_property = get_property;
+   gobject_class->constructor  = constructor;
+ 
+   g_object_class_install_property (gobject_class, PROP_TILE_WIDTH,
+-                                   g_param_spec_int ("tile-width", "tile-width", "Tile width in pixels",
++                                   g_param_spec_int ("tile-width", "tile-width",
++                                                     "Tile width in pixels",
+                                                      0, G_MAXINT, 0,
+                                                      G_PARAM_READWRITE |
+                                                      G_PARAM_CONSTRUCT_ONLY));
+   g_object_class_install_property (gobject_class, PROP_TILE_HEIGHT,
+-                                   g_param_spec_int ("tile-height", "tile-height", "Tile height in pixels",
++                                   g_param_spec_int ("tile-height", "tile-height",
++                                                     "Tile height in pixels",
+                                                      0, G_MAXINT, 0,
+                                                      G_PARAM_READWRITE |
+                                                      G_PARAM_CONSTRUCT_ONLY));
+   g_object_class_install_property (gobject_class, PROP_TILE_SIZE,
+-                                   g_param_spec_int ("tile-size", "tile-size", "Size of the tiles linear buffer in bytes",
++                                   g_param_spec_int ("tile-size", "tile-size",
++                                                     "Size of the tiles linear buffer in bytes",
+                                                      0, G_MAXINT, 0,
+                                                      G_PARAM_READABLE));
+   g_object_class_install_property (gobject_class, PROP_PX_SIZE,
+-                                   g_param_spec_int ("px-size", "px-size", "Size of a single pixel in bytes",
++                                   g_param_spec_int ("px-size", "px-size",
++                                                     "Size of a single pixel in bytes",
+                                                      0, G_MAXINT, 0,
+                                                      G_PARAM_READABLE));
+   g_object_class_install_property (gobject_class, PROP_FORMAT,
+-                                   g_param_spec_pointer ("format", "format", "babl format",
++                                   g_param_spec_pointer ("format", "format",
++                                                         "babl format",
+                                                          G_PARAM_READWRITE |
+                                                          G_PARAM_CONSTRUCT_ONLY));
++
+   g_type_class_add_private (gobject_class, sizeof (GeglTileBackendPrivate));
+ }
+ 
+-#define GEGL_TILE_BACKEND_GET_PRIVATE(obj) \
+-    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GEGL_TYPE_TILE_BACKEND, GeglTileBackendPrivate))
+-
+-
+ static void
+ gegl_tile_backend_init (GeglTileBackend *self)
+ {
+-  self->priv = GEGL_TILE_BACKEND_GET_PRIVATE (self);
++  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
++                                            GEGL_TYPE_TILE_BACKEND,
++                                            GeglTileBackendPrivate);
+   self->priv->shared = FALSE;
+ }
+ 
+ 
+-gint gegl_tile_backend_get_tile_size (GeglTileBackend *tile_backend)
++gint
++gegl_tile_backend_get_tile_size (GeglTileBackend *tile_backend)
+ {
+   return tile_backend->priv->tile_size;
+ }
+ 
+ 
+-const Babl *gegl_tile_backend_get_format (GeglTileBackend *tile_backend)
++const Babl *
++gegl_tile_backend_get_format (GeglTileBackend *tile_backend)
+ {
+   return tile_backend->priv->format;
+ }
+ 
+ 
+-void  gegl_tile_backend_set_extent    (GeglTileBackend *tile_backend,
+-                                       GeglRectangle   *rectangle)
++void
++gegl_tile_backend_set_extent (GeglTileBackend *tile_backend,
++                              GeglRectangle   *rectangle)
+ {
+   tile_backend->priv->extent = *rectangle;
+ }
+ 
+-GeglRectangle gegl_tile_backend_get_extent (GeglTileBackend *tile_backend)
++GeglRectangle
++gegl_tile_backend_get_extent (GeglTileBackend *tile_backend)
+ {
+   return tile_backend->priv->extent;
+ }
+ 
+-GeglTileSource *gegl_tile_backend_peek_storage (GeglTileBackend *backend)
++GeglTileSource *
++gegl_tile_backend_peek_storage (GeglTileBackend *backend)
+ {
+   return backend->priv->storage;
+ }
+diff --git a/gegl/buffer/gegl-tile-backend.h b/gegl/buffer/gegl-tile-backend.h
+index bee433a..d3d38b7 100644
+--- gegl/buffer/gegl-tile-backend.h
++++ gegl/buffer/gegl-tile-backend.h
+@@ -35,6 +35,9 @@ G_BEGIN_DECLS
+ #define GEGL_IS_TILE_BACKEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_TILE_BACKEND))
+ #define GEGL_TILE_BACKEND_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_TILE_BACKEND, GeglTileBackendClass))
+ 
++typedef struct _GeglTileBackendClass   GeglTileBackendClass;
++typedef struct _GeglTileBackendPrivate GeglTileBackendPrivate;
++
+ struct _GeglTileBackend
+ {
+   GeglTileSource          parent_instance;
+diff --git a/gegl/buffer/gegl-tile-handler-cache.c b/gegl/buffer/gegl-tile-handler-cache.c
+index 79ad119..62c6298 100644
+--- gegl/buffer/gegl-tile-handler-cache.c
++++ gegl/buffer/gegl-tile-handler-cache.c
+@@ -41,12 +41,17 @@ typedef struct CacheItem
+ {
+   GeglTileHandlerCache *handler; /* The specific handler that cached this item*/
+   GeglTile *tile;                /* The tile */
++  GList     link;                /*  Link in the cache_queue, to avoid
++                                  *  queue lookups involving g_list_find() */
+ 
+   gint      x;                   /* The coordinates this tile was cached for */
+   gint      y;
+   gint      z;
+ } CacheItem;
+ 
++#define LINK_GET_ITEM(link) \
++        ((CacheItem *) ((guchar *) link - G_STRUCT_OFFSET (CacheItem, link)))
++
+ 
+ static void       gegl_tile_handler_cache_dispose    (GObject              *object);
+ static gboolean   gegl_tile_handler_cache_wash       (GeglTileHandlerCache *cache);
+@@ -83,7 +88,7 @@ static GStaticMutex mutex                 = G_STATIC_MUTEX_INIT;
+ static GQueue      *cache_queue           = NULL;
+ static GHashTable  *cache_ht              = NULL;
+ static gint         cache_wash_percentage = 20;
+-static gint         cache_total           = 0; /* approximate amount of bytes stored */
++static guint64      cache_total           = 0; /* approximate amount of bytes stored */
+ #ifdef GEGL_DEBUG_CACHE_HITS
+ static gint         cache_hits            = 0;
+ static gint         cache_misses          = 0;
+@@ -152,7 +157,7 @@ gegl_tile_handler_cache_reinit (GeglTileHandlerCache *cache)
+           gegl_tile_unref (item->tile);
+           cache->count--;
+         }
+-      g_queue_remove (cache_queue, item);
++      g_queue_unlink (cache_queue, &item->link);
+       g_hash_table_remove (cache_ht, item);
+       g_slice_free (CacheItem, item);
+     }
+@@ -181,7 +186,7 @@ gegl_tile_handler_cache_dispose (GObject *object)
+   CacheItem            *item;
+   GSList               *iter;
+ 
+-  cache = GEGL_TILE_HANDLER_CACHE (object);
++  cache = (GeglTileHandlerCache*) (object);
+ 
+   /* only throw out items belonging to this cache instance */
+ 
+@@ -204,7 +209,7 @@ gegl_tile_handler_cache_dispose (GObject *object)
+                 gegl_tile_unref (item->tile);
+                 cache->count--;
+               }
+-            g_queue_remove (cache_queue, item);
++            g_queue_unlink (cache_queue, &item->link);
+             g_hash_table_remove (cache_ht, item);
+             g_slice_free (CacheItem, item);
+         }
+@@ -213,7 +218,7 @@ gegl_tile_handler_cache_dispose (GObject *object)
+       g_static_mutex_unlock (&mutex);
+     }
+ 
+-  if (cache->count != 0)
++  if (cache->count < 0)
+     {
+       g_warning ("cache-handler tile balance not zero: %i\n", cache->count);
+     }
+@@ -226,11 +231,11 @@ gegl_tile_handler_cache_get_tile_command (GeglTileSource *tile_store,
+                                           gint        y,
+                                           gint        z)
+ {
+-  GeglTileHandlerCache *cache    = GEGL_TILE_HANDLER_CACHE (tile_store);
+-  GeglTileSource       *source = GEGL_TILE_HANDLER (tile_store)->source;
++  GeglTileHandlerCache *cache    = (GeglTileHandlerCache*) (tile_store);
++  GeglTileSource       *source   = ((GeglTileHandler*) (tile_store))->source;
+   GeglTile             *tile     = NULL;
+ 
+-  if (gegl_cl_is_accelerated ())
++  if (G_UNLIKELY (gegl_cl_is_accelerated ()))
+     gegl_buffer_cl_cache_flush2 (cache, NULL);
+ 
+   tile = gegl_tile_handler_cache_get_tile (cache, x, y, z);
+@@ -262,8 +267,8 @@ gegl_tile_handler_cache_command (GeglTileSource  *tile_store,
+                                  gint             z,
+                                  gpointer         data)
+ {
+-  GeglTileHandler      *handler = GEGL_TILE_HANDLER (tile_store);
+-  GeglTileHandlerCache *cache   = GEGL_TILE_HANDLER_CACHE (handler);
++  GeglTileHandler      *handler = (GeglTileHandler*) (tile_store);
++  GeglTileHandlerCache *cache   = (GeglTileHandlerCache*) (handler);
+ 
+   switch (command)
+     {
+@@ -272,13 +277,13 @@ gegl_tile_handler_cache_command (GeglTileSource  *tile_store,
+           GList     *link;
+ 
+           if (gegl_cl_is_accelerated ())
+-            gegl_buffer_cl_cache_flush2 (GEGL_TILE_HANDLER_CACHE (tile_store), NULL);
++            gegl_buffer_cl_cache_flush2 (cache, NULL);
+ 
+           if (cache->count)
+             {
+               for (link = g_queue_peek_head_link (cache_queue); link; link = link->next)
+                 {
+-                  CacheItem *item = link->data;
++                  CacheItem *item = LINK_GET_ITEM (link);
+                   GeglTile  *tile = item->tile;
+ 
+                   if (tile != NULL &&
+@@ -345,7 +350,7 @@ gegl_tile_handler_cache_wash (GeglTileHandlerCache *cache)
+ 
+   for (link = g_queue_peek_head_link (cache_queue); link; link = link->next)
+     {
+-      CacheItem *item = link->data;
++      CacheItem *item = LINK_GET_ITEM (link);
+       GeglTile  *tile = item->tile;
+ 
+       count++;
+@@ -362,6 +367,22 @@ gegl_tile_handler_cache_wash (GeglTileHandlerCache *cache)
+   return FALSE;
+ }
+ 
++static inline CacheItem *
++cache_lookup (GeglTileHandlerCache *cache,
++              gint                  x,
++              gint                  y,
++              gint                  z)
++{
++  CacheItem key;
++
++  key.x       = x;
++  key.y       = y;
++  key.z       = z;
++  key.handler = cache;
++
++  return g_hash_table_lookup (cache_ht, &key);
++}
++
+ /* returns the requested Tile if it is in the cache, NULL otherwize.
+  */
+ static GeglTile *
+@@ -371,22 +392,16 @@ gegl_tile_handler_cache_get_tile (GeglTileHandlerCache *cache,
+                                   gint                  z)
+ {
+   CacheItem *result;
+-  CacheItem pin;
+ 
+   if (cache->count == 0)
+     return NULL;
+ 
+-  pin.x = x;
+-  pin.y = y;
+-  pin.z = z;
+-  pin.handler = cache;
+-
+   g_static_mutex_lock (&mutex);
+-  result = g_hash_table_lookup (cache_ht, &pin);
++  result = cache_lookup (cache, x, y, z);
+   if (result)
+     {
+-      g_queue_remove (cache_queue, result);
+-      g_queue_push_head (cache_queue, result);
++      g_queue_unlink (cache_queue, &result->link);
++      g_queue_push_head_link (cache_queue, &result->link);
+       g_static_mutex_unlock (&mutex);
+       return gegl_tile_ref (result->tile);
+     }
+@@ -414,12 +429,14 @@ gegl_tile_handler_cache_has_tile (GeglTileHandlerCache *cache,
+ static gboolean
+ gegl_tile_handler_cache_trim (GeglTileHandlerCache *cache)
+ {
+-  CacheItem *last_writable;
++  GList *link;
+ 
+-  last_writable = g_queue_pop_tail (cache_queue);
++  link = g_queue_pop_tail_link (cache_queue);
+ 
+-  if (last_writable != NULL)
++  if (link != NULL)
+     {
++      CacheItem *last_writable = LINK_GET_ITEM (link);
++
+       g_hash_table_remove (cache_ht, last_writable);
+       cache_total  -= last_writable->tile->size;
+       gegl_tile_unref (last_writable->tile);
+@@ -436,30 +453,19 @@ gegl_tile_handler_cache_invalidate (GeglTileHandlerCache *cache,
+                                     gint                  y,
+                                     gint                  z)
+ {
+-  GList *link;
++  CacheItem *item;
+ 
+   g_static_mutex_lock (&mutex);
+-  for (link = g_queue_peek_head_link (cache_queue); link; link = link->next)
++  item = cache_lookup (cache, x, y, z);
++  if (item)
+     {
+-      CacheItem *item = link->data;
+-      GeglTile  *tile = item->tile;
+-
+-      if (tile != NULL &&
+-          item->x == x &&
+-          item->y == y &&
+-          item->z == z &&
+-          item->handler == cache)
+-        {
+-          cache_total  -= item->tile->size;
+-          tile->tile_storage = NULL;
+-          gegl_tile_mark_as_stored (tile); /* to cheat it out of being stored */
+-          gegl_tile_unref (tile);
+-          g_hash_table_remove (cache_ht, item);
+-          g_slice_free (CacheItem, item);
+-          g_queue_delete_link (cache_queue, link);
+-          g_static_mutex_unlock (&mutex);
+-          return;
+-        }
++      cache_total -= item->tile->size;
++      item->tile->tile_storage = NULL;
++      gegl_tile_mark_as_stored (item->tile); /* to cheat it out of being stored */
++      gegl_tile_unref (item->tile);
++      g_queue_unlink (cache_queue, &item->link);
++      g_hash_table_remove (cache_ht, item);
++      g_slice_free (CacheItem, item);
+     }
+   g_static_mutex_unlock (&mutex);
+ }
+@@ -471,32 +477,19 @@ gegl_tile_handler_cache_void (GeglTileHandlerCache *cache,
+                               gint                  y,
+                               gint                  z)
+ {
+-  GList *link;
+-
+-  if (!cache_queue)
+-    return;
++  CacheItem *item;
+ 
+   g_static_mutex_lock (&mutex);
+-  for (link = g_queue_peek_head_link (cache_queue); link; link = link->next)
++  item = cache_lookup (cache, x, y, z);
++  if (item)
+     {
+-      CacheItem *item = link->data;
+-      GeglTile  *tile = item->tile;
+-
+-      if (tile != NULL &&
+-          item->x == x &&
+-          item->y == y &&
+-          item->z == z &&
+-          item->handler == cache)
+-        {
+-          gegl_tile_void (tile);
+-          cache_total -= item->tile->size;
+-          gegl_tile_unref (tile);
+-          g_hash_table_remove (cache_ht, item);
+-          g_slice_free (CacheItem, item);
+-          g_queue_delete_link (cache_queue, link);
+-          g_static_mutex_unlock (&mutex);
+-          return;
+-        }
++      gegl_tile_void (item->tile);
++      cache_total -= item->tile->size;
++      gegl_tile_unref (item->tile);
++      g_queue_unlink (cache_queue, &item->link);
++      g_hash_table_remove (cache_ht, item);
++      g_slice_free (CacheItem, item);
++      cache->count --;
+     }
+   g_static_mutex_unlock (&mutex);
+ }
+@@ -510,24 +503,31 @@ gegl_tile_handler_cache_insert (GeglTileHandlerCache *cache,
+ {
+   CacheItem *item = g_slice_new (CacheItem);
+ 
+-  item->handler = cache;
+-  item->tile    = gegl_tile_ref (tile);
+-  item->x       = x;
+-  item->y       = y;
+-  item->z       = z;
++  item->handler   = cache;
++  item->tile      = gegl_tile_ref (tile);
++  item->link.data = item;
++  item->link.next = NULL;
++  item->link.prev = NULL;
++  item->x         = x;
++  item->y         = y;
++  item->z         = z;
++
++  // XXX : remove entry if it already exists
++  gegl_tile_handler_cache_void (cache, x, y, z);
+ 
+   g_static_mutex_lock (&mutex);
+   cache_total  += item->tile->size;
+-  g_queue_push_head (cache_queue, item);
++  g_queue_push_head_link (cache_queue, &item->link);
+ 
+   cache->count ++;
+ 
++
+   g_hash_table_insert (cache_ht, item, item);
+ 
+-  while (cache_total > gegl_config()->cache_size)
++  while (cache_total > gegl_config()->tile_cache_size)
+     {
+ #ifdef GEGL_DEBUG_CACHE_HITS
+-      GEGL_NOTE(GEGL_DEBUG_CACHE, "cache_total:%i > cache_size:%i", cache_total, gegl_config()->cache_size);
++      GEGL_NOTE(GEGL_DEBUG_CACHE, "cache_total:"G_GUINT64_FORMAT" > cache_size:"G_GUINT64_FORMAT, cache_total, gegl_config()->tile_cache_size);
+       GEGL_NOTE(GEGL_DEBUG_CACHE, "%f%% hit:%i miss:%i  %i]", cache_hits*100.0/(cache_hits+cache_misses), cache_hits, cache_misses, g_queue_get_length (cache_queue));
+ #endif
+       gegl_tile_handler_cache_trim (cache);
+@@ -535,7 +535,7 @@ gegl_tile_handler_cache_insert (GeglTileHandlerCache *cache,
+   g_static_mutex_unlock (&mutex);
+ }
+ 
+-GeglTileHandlerCache *
++GeglTileHandler *
+ gegl_tile_handler_cache_new (void)
+ {
+   return g_object_new (GEGL_TYPE_TILE_HANDLER_CACHE, NULL);
+@@ -596,7 +596,10 @@ void
+ gegl_tile_cache_destroy (void)
+ {
+   if (cache_queue)
+-    g_queue_free (cache_queue);
++    {
++      while (g_queue_pop_head_link (cache_queue));
++      g_queue_free (cache_queue);
++    }
+   if (cache_ht)
+     g_hash_table_destroy (cache_ht);
+   cache_queue = NULL;
+diff --git a/gegl/buffer/gegl-tile-handler-cache.h b/gegl/buffer/gegl-tile-handler-cache.h
+index c716698..b130a62 100644
+--- gegl/buffer/gegl-tile-handler-cache.h
++++ gegl/buffer/gegl-tile-handler-cache.h
+@@ -49,12 +49,13 @@ struct _GeglTileHandlerCacheClass
+   GeglTileHandlerClass parent_class;
+ };
+ 
+-GType                  gegl_tile_handler_cache_get_type (void) G_GNUC_CONST;
+-GeglTileHandlerCache * gegl_tile_handler_cache_new      (void);
+-void                   gegl_tile_handler_cache_insert   (GeglTileHandlerCache *cache,
+-                                                         GeglTile             *tile,
+-                                                         gint                  x,
+-                                                         gint                  y,
+-                                                         gint                  z);
++GType             gegl_tile_handler_cache_get_type (void) G_GNUC_CONST;
++
++GeglTileHandler * gegl_tile_handler_cache_new      (void);
++void              gegl_tile_handler_cache_insert   (GeglTileHandlerCache *cache,
++                                                    GeglTile             *tile,
++                                                    gint                  x,
++                                                    gint                  y,
++                                                    gint                  z);
+ 
+ #endif
+diff --git a/gegl/buffer/gegl-tile-handler-chain.c b/gegl/buffer/gegl-tile-handler-chain.c
+index bc847a9..28e193c 100644
+--- gegl/buffer/gegl-tile-handler-chain.c
++++ gegl/buffer/gegl-tile-handler-chain.c
+@@ -18,15 +18,16 @@
+ 
+ #include "config.h"
+ 
+-#include <glib.h>
++#include <glib-object.h>
+ 
+-#include "glib-object.h"
+ #include "gegl-buffer-types.h"
+ #include "gegl-tile-handler-chain.h"
+ #include "gegl-tile-handler-cache.h"
++#include "gegl-tile-handler-private.h"
+ 
+ 
+-G_DEFINE_TYPE (GeglTileHandlerChain, gegl_tile_handler_chain, GEGL_TYPE_TILE_HANDLER)
++G_DEFINE_TYPE (GeglTileHandlerChain, gegl_tile_handler_chain,
++               GEGL_TYPE_TILE_HANDLER)
+ 
+ static void
+ gegl_tile_handler_chain_nuke_cache (GeglTileHandlerChain *tile_handler_chain)
+@@ -161,11 +162,20 @@ gegl_tile_handler_chain_bind (GeglTileHandlerChain *tile_handler_chain)
+ }
+ 
+ GeglTileHandler *
+-gegl_tile_handler_chain_add (GeglTileHandlerChain *tile_handler_chain,
++gegl_tile_handler_chain_add (GeglTileHandlerChain *chain,
+                              GeglTileHandler      *handler)
+ {
+-  tile_handler_chain->chain = g_slist_prepend (tile_handler_chain->chain, handler);
+-  /*gegl_tile_handler_chain_bind (tile_handler_chain);*/
++  GeglTileStorage      *storage;
++  GeglTileHandlerCache *cache;
++
++  storage = _gegl_tile_handler_get_tile_storage ((GeglTileHandler *) chain);
++  cache = _gegl_tile_handler_get_cache ((GeglTileHandler *) chain);
++
++  _gegl_tile_handler_set_tile_storage (handler, storage);
++  _gegl_tile_handler_set_cache (handler, cache);
++
++  chain->chain = g_slist_prepend (chain->chain, g_object_ref (handler));
++
+   return handler;
+ }
+ 
+diff --git a/gegl/buffer/gegl-tile-handler-chain.h b/gegl/buffer/gegl-tile-handler-chain.h
+index 17beaf8..6a26f13 100644
+--- gegl/buffer/gegl-tile-handler-chain.h
++++ gegl/buffer/gegl-tile-handler-chain.h
+@@ -32,6 +32,8 @@
+ #define GEGL_IS_TILE_HANDLER_CHAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_TILE_HANDLER_CHAIN))
+ #define GEGL_TILE_HANDLER_CHAIN_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_TILE_HANDLER_CHAIN, GeglTileHandlerChainClass))
+ 
++typedef struct _GeglTileHandlerChainClass GeglTileHandlerChainClass;
++
+ struct _GeglTileHandlerChain
+ {
+   GeglTileHandler  parent_instance;
+diff --git a/gegl/buffer/gegl-tile-handler-empty.c b/gegl/buffer/gegl-tile-handler-empty.c
+index e6a775a..c4b40fe 100644
+--- gegl/buffer/gegl-tile-handler-empty.c
++++ gegl/buffer/gegl-tile-handler-empty.c
+@@ -26,10 +26,10 @@
+ #include "gegl-buffer-private.h"
+ #include "gegl-tile-handler.h"
+ #include "gegl-tile-handler-empty.h"
+-#include "gegl-tile-handler-cache.h"
+ #include "gegl-tile-backend.h"
+ 
+-G_DEFINE_TYPE (GeglTileHandlerEmpty, gegl_tile_handler_empty, GEGL_TYPE_TILE_HANDLER)
++G_DEFINE_TYPE (GeglTileHandlerEmpty, gegl_tile_handler_empty,
++               GEGL_TYPE_TILE_HANDLER)
+ 
+ static void
+ finalize (GObject *object)
+@@ -49,24 +49,17 @@ get_tile (GeglTileSource *gegl_tile_source,
+           gint            y,
+           gint            z)
+ {
+-  GeglTileSource       *source = GEGL_TILE_HANDLER (gegl_tile_source)->source;
+-  GeglTileHandlerEmpty *empty  = GEGL_TILE_HANDLER_EMPTY (gegl_tile_source);
++  GeglTileSource       *source = ((GeglTileHandler *) gegl_tile_source)->source;
++  GeglTileHandlerEmpty *empty  = (GeglTileHandlerEmpty *) gegl_tile_source;
+   GeglTile             *tile   = NULL;
+ 
+   if (source)
+     tile = gegl_tile_source_get_tile (source, x, y, z);
+-  if (tile != NULL)
++  if (tile)
+     return tile;
+ 
+-  tile = gegl_tile_dup (empty->tile);
+-  tile->x = x;
+-  tile->y = y;
+-  tile->z = z;
+-
+-  if (empty->cache)
+-    gegl_tile_handler_cache_insert (empty->cache, tile, x, y, z);
+-
+-  return tile;
++  return gegl_tile_handler_dup_tile (GEGL_TILE_HANDLER (empty),
++                                     empty->tile, x, y, z);
+ }
+ 
+ static gpointer
+@@ -79,6 +72,7 @@ gegl_tile_handler_empty_command (GeglTileSource  *buffer,
+ {
+   if (command == GEGL_TILE_GET)
+     return get_tile (buffer, x, y, z);
++
+   return gegl_tile_handler_source_command (buffer, command, x, y, z, data);
+ }
+ 
+@@ -86,24 +80,25 @@ static void
+ gegl_tile_handler_empty_class_init (GeglTileHandlerEmptyClass *klass)
+ {
+   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+-  gobject_class->finalize     = finalize;
++
++  gobject_class->finalize = finalize;
+ }
+ 
+ static void
+ gegl_tile_handler_empty_init (GeglTileHandlerEmpty *self)
+ {
+-  ((GeglTileSource*)self)->command = gegl_tile_handler_empty_command;
++  ((GeglTileSource *) self)->command = gegl_tile_handler_empty_command;
+ }
+ 
+ GeglTileHandler *
+-gegl_tile_handler_empty_new (GeglTileBackend      *backend,
+-                             GeglTileHandlerCache *cache)
++gegl_tile_handler_empty_new (GeglTileBackend *backend)
+ {
+   GeglTileHandlerEmpty *empty = g_object_new (GEGL_TYPE_TILE_HANDLER_EMPTY, NULL);
+   gint tile_size = gegl_tile_backend_get_tile_size (backend);
++
+   empty->backend = backend;
+-  empty->cache = cache;
+-  empty->tile = gegl_tile_new (tile_size);
++  empty->tile    = gegl_tile_new (tile_size);
+   memset (gegl_tile_get_data (empty->tile), 0x00, tile_size);
++
+   return (void*)empty;
+ }
+diff --git a/gegl/buffer/gegl-tile-handler-empty.h b/gegl/buffer/gegl-tile-handler-empty.h
+index db66eb1..02a744f 100644
+--- gegl/buffer/gegl-tile-handler-empty.h
++++ gegl/buffer/gegl-tile-handler-empty.h
+@@ -47,7 +47,6 @@ struct _GeglTileHandlerEmpty
+ 
+   GeglTile               *tile;
+   GeglTileBackend        *backend;
+-  GeglTileHandlerCache   *cache;
+ };
+ 
+ struct _GeglTileHandlerEmptyClass
+@@ -55,9 +54,9 @@ struct _GeglTileHandlerEmptyClass
+   GeglTileHandlerClass parent_class;
+ };
+ 
+-GType gegl_tile_handler_empty_get_type (void) G_GNUC_CONST;
+-GeglTileHandler *gegl_tile_handler_empty_new (GeglTileBackend      *backend,
+-                                              GeglTileHandlerCache *cache);
++GType             gegl_tile_handler_empty_get_type (void) G_GNUC_CONST;
++
++GeglTileHandler * gegl_tile_handler_empty_new      (GeglTileBackend *backend);
+ 
+ G_END_DECLS
+ 
+diff --git a/gegl/buffer/gegl-tile-handler-private.h b/gegl/buffer/gegl-tile-handler-private.h
+new file mode 100644
+index 0000000..46c94e3
+--- /dev/null
++++ gegl/buffer/gegl-tile-handler-private.h
+@@ -0,0 +1,30 @@
++/* This file is part of GEGL.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2006,2007 Øyvind Kolås <pippin at gimp.org>
++ */
++
++#ifndef __GEGL_TILE_HANDLER_PRIVATE_H__
++#define __GEGL_TILE_HANDLER_PRIVATE_H__
++
++void   _gegl_tile_handler_set_tile_storage (GeglTileHandler      *handler,
++                                            GeglTileStorage      *tile_storage);
++void   _gegl_tile_handler_set_cache        (GeglTileHandler      *handler,
++                                            GeglTileHandlerCache *cache);
++
++GeglTileStorage      * _gegl_tile_handler_get_tile_storage (GeglTileHandler *handler);
++GeglTileHandlerCache * _gegl_tile_handler_get_cache        (GeglTileHandler *handler);
++
++#endif
+diff --git a/gegl/buffer/gegl-tile-handler-zoom.c b/gegl/buffer/gegl-tile-handler-zoom.c
+index 8da214d..9ad6833 100644
+--- gegl/buffer/gegl-tile-handler-zoom.c
++++ gegl/buffer/gegl-tile-handler-zoom.c
+@@ -15,31 +15,29 @@
+  *
+  * Copyright 2006,2007 Øyvind Kolås <pippin at gimp.org>
+  */
++
+ #include "config.h"
+-#include <glib.h>
+-#include <glib-object.h>
++
+ #include <string.h>
+ 
++#include <babl/babl.h>
++#include <glib-object.h>
++
+ #include "gegl-types.h"
+ #include "gegl-matrix.h"
+ #include "gegl-buffer-types.h"
+ #include "gegl-buffer-private.h"
+ #include "gegl-tile-handler.h"
+-#include "gegl-tile-handler-zoom.h"
+ #include "gegl-tile-handler-cache.h"
+-
+-
+-G_DEFINE_TYPE (GeglTileHandlerZoom, gegl_tile_handler_zoom, GEGL_TYPE_TILE_HANDLER)
+-
+-#include <babl/babl.h>
++#include "gegl-tile-handler-private.h"
++#include "gegl-tile-handler-zoom.h"
+ #include "gegl-tile-backend.h"
+ #include "gegl-tile-storage.h"
+ 
+-void gegl_tile_handler_cache_insert (GeglTileHandlerCache *cache,
+-                                     GeglTile             *tile,
+-                                     gint                  x,
+-                                     gint                  y,
+-                                     gint                  z);
++
++G_DEFINE_TYPE (GeglTileHandlerZoom, gegl_tile_handler_zoom,
++               GEGL_TYPE_TILE_HANDLER)
++
+ static inline void set_blank (GeglTile   *dst_tile,
+                               gint        width,
+                               gint        height,
+@@ -201,18 +199,17 @@ get_tile (GeglTileSource *gegl_tile_source,
+           gint            y,
+           gint            z)
+ {
+-  GeglTileSource      *source = ((GeglTileHandler*)(gegl_tile_source))->source;
+-  GeglTileHandlerZoom *zoom   = (GeglTileHandlerZoom*)(gegl_tile_source);
++  GeglTileSource      *source = ((GeglTileHandler *) gegl_tile_source)->source;
++  GeglTileHandlerZoom *zoom   = (GeglTileHandlerZoom *) gegl_tile_source;
+   GeglTile            *tile   = NULL;
+   const Babl          *format = gegl_tile_backend_get_format (zoom->backend);
++  GeglTileStorage     *tile_storage;
+   gint                 tile_width;
+   gint                 tile_height;
+   gint                 tile_size;
+ 
+   if (source)
+-    {
+-      tile = gegl_tile_source_get_tile (source, x, y, z);
+-    }
++    tile = gegl_tile_source_get_tile (source, x, y, z);
+ 
+   if (tile)
+     return tile;
+@@ -223,11 +220,13 @@ get_tile (GeglTileSource *gegl_tile_source,
+       return NULL;
+     }
+ 
+-  if (z>zoom->tile_storage->seen_zoom)
+-    zoom->tile_storage->seen_zoom = z;
++  tile_storage = _gegl_tile_handler_get_tile_storage ((GeglTileHandler *) zoom);
+ 
+-  g_assert (zoom->backend);
+-  g_object_get (zoom->backend, "tile-width", &tile_width,
++  if (z > tile_storage->seen_zoom)
++    tile_storage->seen_zoom = z;
++
++  g_object_get (zoom->backend,
++                "tile-width", &tile_width,
+                 "tile-height", &tile_height,
+                 "tile-size", &tile_size,
+                 NULL);
+@@ -255,18 +254,9 @@ get_tile (GeglTileSource *gegl_tile_source,
+       }
+ 
+     g_assert (tile == NULL);
+-    if (tile == NULL)
+-      {
+-        tile = gegl_tile_new (tile_size);
+ 
+-        tile->x = x;
+-        tile->y = y;
+-        tile->z = z;
+-        tile->tile_storage = zoom->tile_storage;
++    tile = gegl_tile_handler_create_tile (GEGL_TILE_HANDLER (zoom), x, y, z);
+ 
+-        if (zoom->cache)
+-          gegl_tile_handler_cache_insert (zoom->cache, tile, x, y, z);
+-      }
+     gegl_tile_lock (tile);
+ 
+     for (i = 0; i < 2; i++)
+@@ -312,20 +302,15 @@ gegl_tile_handler_zoom_class_init (GeglTileHandlerZoomClass *klass)
+ static void
+ gegl_tile_handler_zoom_init (GeglTileHandlerZoom *self)
+ {
+-  ((GeglTileSource*)self)->command = gegl_tile_handler_zoom_command;
+-  self->backend = NULL;
+-  self->tile_storage = NULL;
++  ((GeglTileSource *) self)->command = gegl_tile_handler_zoom_command;
+ }
+ 
+ GeglTileHandler *
+-gegl_tile_handler_zoom_new (GeglTileBackend      *backend,
+-                            GeglTileStorage      *tile_storage,
+-                            GeglTileHandlerCache *cache)
++gegl_tile_handler_zoom_new (GeglTileBackend *backend)
+ {
+   GeglTileHandlerZoom *ret = g_object_new (GEGL_TYPE_TILE_HANDLER_ZOOM, NULL);
+-  ((GeglTileSource*)ret)->command = gegl_tile_handler_zoom_command;
++
+   ret->backend = backend;
+-  ret->tile_storage = tile_storage;
+-  ret->cache = cache;
++
+   return (void*)ret;
+ }
+diff --git a/gegl/buffer/gegl-tile-handler-zoom.h b/gegl/buffer/gegl-tile-handler-zoom.h
+index 749f6e1..b3fa0f2 100644
+--- gegl/buffer/gegl-tile-handler-zoom.h
++++ gegl/buffer/gegl-tile-handler-zoom.h
+@@ -42,7 +42,6 @@ typedef struct _GeglTileHandlerZoomClass GeglTileHandlerZoomClass;
+ struct _GeglTileHandlerZoom
+ {
+   GeglTileHandler       parent_instance;
+-  GeglTileHandlerCache *cache;
+   GeglTileBackend      *backend;
+   GeglTileStorage      *tile_storage;
+ };
+@@ -52,10 +51,9 @@ struct _GeglTileHandlerZoomClass
+   GeglTileHandlerClass  parent_class;
+ };
+ 
+-GType gegl_tile_handler_zoom_get_type (void) G_GNUC_CONST;
+-GeglTileHandler *gegl_tile_handler_zoom_new (GeglTileBackend *backend,
+-                                             GeglTileStorage *tile_storage,
+-                                             GeglTileHandlerCache *cache);
++GType             gegl_tile_handler_zoom_get_type (void) G_GNUC_CONST;
++
++GeglTileHandler * gegl_tile_handler_zoom_new      (GeglTileBackend *backend);
+ 
+ G_END_DECLS
+ 
+diff --git a/gegl/buffer/gegl-tile-handler.c b/gegl/buffer/gegl-tile-handler.c
+index 601f770..72f610e 100644
+--- gegl/buffer/gegl-tile-handler.c
++++ gegl/buffer/gegl-tile-handler.c
+@@ -23,10 +23,16 @@
+ #include <glib-object.h>
+ 
+ #include "gegl-buffer-types.h"
+-#include "gegl-tile-source.h"
+-#include "gegl-tile-handler.h"
+-#include "gegl-tile-handler-chain.h"
++#include "gegl-tile-handler-cache.h"
++#include "gegl-tile-handler-private.h"
+ #include "gegl-tile-storage.h"
++#include "gegl-buffer-private.h"
++
++struct _GeglTileHandlerPrivate
++{
++  GeglTileStorage      *tile_storage;
++  GeglTileHandlerCache *cache;
++};
+ 
+ G_DEFINE_TYPE (GeglTileHandler, gegl_tile_handler, GEGL_TYPE_TILE_SOURCE)
+ 
+@@ -43,11 +49,9 @@ gegl_tile_handler_dispose (GObject *object)
+ {
+   GeglTileHandler *handler = GEGL_TILE_HANDLER (object);
+ 
+-  if (handler->source != NULL)
++  if (handler->source)
+     {
+-      if (!(GEGL_IS_TILE_STORAGE (handler->source) &&
+-	    gegl_tile_storage_cached_release ((void*)handler->source)))
+-        g_object_unref (handler->source);
++      g_object_unref (handler->source);
+       handler->source = NULL;
+     }
+ 
+@@ -87,22 +91,6 @@ gegl_tile_handler_get_property (GObject    *gobject,
+     }
+ }
+ 
+-void
+-gegl_tile_handler_set_source (GeglTileHandler *handler,
+-                              GeglTileSource  *source)
+-{
+-  if (handler->source != NULL)
+-    g_object_unref (handler->source);
+-
+-  if (source == NULL)
+-    {
+-      handler->source = NULL;
+-      return;
+-    }
+-  handler->source = g_object_ref (source);
+-
+-}
+-
+ static void
+ gegl_tile_handler_set_property (GObject      *gobject,
+                                 guint         property_id,
+@@ -114,7 +102,7 @@ gegl_tile_handler_set_property (GObject      *gobject,
+   switch (property_id)
+     {
+       case PROP_SOURCE:
+-        gegl_tile_handler_set_source (handler, GEGL_TILE_SOURCE (g_value_get_object (value)));
++        gegl_tile_handler_set_source (handler, g_value_get_object (value));
+         return;
+ 
+       default:
+@@ -126,7 +114,7 @@ gegl_tile_handler_set_property (GObject      *gobject,
+ static void
+ gegl_tile_handler_class_init (GeglTileHandlerClass *klass)
+ {
+-  GObjectClass    *gobject_class  = G_OBJECT_CLASS (klass);
++  GObjectClass *gobject_class  = G_OBJECT_CLASS (klass);
+ 
+   gobject_class->set_property = gegl_tile_handler_set_property;
+   gobject_class->get_property = gegl_tile_handler_get_property;
+@@ -137,14 +125,100 @@ gegl_tile_handler_class_init (GeglTileHandlerClass *klass)
+                                                         "GeglBuffer",
+                                                         "The tilestore to be a facade for",
+                                                         G_TYPE_OBJECT,
+-                                                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++                                                        G_PARAM_READWRITE |
++                                                        G_PARAM_CONSTRUCT));
++
++  g_type_class_add_private (gobject_class, sizeof (GeglTileHandlerPrivate));
+ }
+ 
+ static void
+ gegl_tile_handler_init (GeglTileHandler *self)
+ {
+-  ((GeglTileSource*)self)->command = gegl_tile_handler_command;
+-  self->source = NULL;
++  ((GeglTileSource *) self)->command = gegl_tile_handler_command;
++
++  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
++                                            GEGL_TYPE_TILE_HANDLER,
++                                            GeglTileHandlerPrivate);
+ }
+ 
++void
++gegl_tile_handler_set_source (GeglTileHandler *handler,
++                              GeglTileSource  *source)
++{
++  if (source != handler->source)
++    {
++      if (handler->source)
++        g_object_unref (handler->source);
++
++      handler->source = source;
++
++      if (handler->source)
++        g_object_ref (handler->source);
++    }
++}
+ 
++void
++_gegl_tile_handler_set_tile_storage (GeglTileHandler *handler,
++                                     GeglTileStorage *tile_storage)
++{
++  handler->priv->tile_storage = tile_storage;
++}
++
++void
++_gegl_tile_handler_set_cache (GeglTileHandler      *handler,
++                              GeglTileHandlerCache *cache)
++{
++  handler->priv->cache = cache;
++}
++
++GeglTileStorage *
++_gegl_tile_handler_get_tile_storage (GeglTileHandler *handler)
++{
++  return handler->priv->tile_storage;
++}
++
++GeglTileHandlerCache *
++_gegl_tile_handler_get_cache (GeglTileHandler *handler)
++{
++  return handler->priv->cache;
++}
++
++GeglTile *
++gegl_tile_handler_create_tile (GeglTileHandler *handler,
++                               gint             x,
++                               gint             y,
++                               gint             z)
++{
++  GeglTile *tile;
++
++  tile = gegl_tile_new (handler->priv->tile_storage->tile_size);
++
++  tile->tile_storage = handler->priv->tile_storage;
++  tile->x            = x;
++  tile->y            = y;
++  tile->z            = z;
++
++  if (handler->priv->cache)
++    gegl_tile_handler_cache_insert (handler->priv->cache, tile, x, y, z);
++
++  return tile;
++}
++
++GeglTile *
++gegl_tile_handler_dup_tile (GeglTileHandler *handler,
++                            GeglTile        *tile,
++                            gint             x,
++                            gint             y,
++                            gint             z)
++{
++  tile = gegl_tile_dup (tile);
++
++  tile->x = x;
++  tile->y = y;
++  tile->z = z;
++
++  if (handler->priv->cache)
++    gegl_tile_handler_cache_insert (handler->priv->cache, tile, x, y, z);
++
++  return tile;
++}
+diff --git a/gegl/buffer/gegl-tile-handler.h b/gegl/buffer/gegl-tile-handler.h
+index 2d60e9c..8d6f192 100644
+--- gegl/buffer/gegl-tile-handler.h
++++ gegl/buffer/gegl-tile-handler.h
+@@ -39,13 +39,18 @@ G_BEGIN_DECLS
+ #define GEGL_IS_TILE_HANDLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_TILE_HANDLER))
+ #define GEGL_TILE_HANDLER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_TILE_HANDLER, GeglTileHandlerClass))
+ 
++typedef struct _GeglTileHandlerClass   GeglTileHandlerClass;
++typedef struct _GeglTileHandlerPrivate GeglTileHandlerPrivate;
++
+ struct _GeglTileHandler
+ {
+   GeglTileSource  parent_instance;
+-  GeglTileSource *source; /* The source of the data, which we can rely on if
+-                             our command handler doesn't handle a command, this
+-                             is typically done with gegl_tile_handler_source_command
+-                             passing ourself as the first parameter. */
++  GeglTileSource *source; /* The source of the data, which we can rely
++                             on if our command handler doesn't handle
++                             a command, this is typically done with
++                             gegl_tile_handler_source_command passing
++                             ourself as the first parameter. */
++  GeglTileHandlerPrivate *priv;
+ };
+ 
+ struct _GeglTileHandlerClass
+@@ -53,17 +58,24 @@ struct _GeglTileHandlerClass
+   GeglTileSourceClass parent_class;
+ };
+ 
+-GType gegl_tile_handler_get_type (void) G_GNUC_CONST;
+-
+-void
+-gegl_tile_handler_set_source (GeglTileHandler *handler,
+-                              GeglTileSource  *source);
++GType   gegl_tile_handler_get_type   (void) G_GNUC_CONST;
+ 
++void    gegl_tile_handler_set_source (GeglTileHandler *handler,
++                                      GeglTileSource  *source);
+ 
+-#define gegl_tile_handler_get_source(handler)  (((GeglTileHandler*)handler)->source)
++#define gegl_tile_handler_get_source(handler) (((GeglTileHandler*)handler)->source)
+ 
+ #define gegl_tile_handler_source_command(handler,command,x,y,z,data) (gegl_tile_handler_get_source(handler)?gegl_tile_source_command(gegl_tile_handler_get_source(handler), command, x, y, z, data):NULL)
+ 
++GeglTile * gegl_tile_handler_create_tile (GeglTileHandler *handler,
++                                          gint             x,
++                                          gint             y,
++                                          gint             z);
++GeglTile * gegl_tile_handler_dup_tile    (GeglTileHandler *handler,
++                                          GeglTile        *tile,
++                                          gint             x,
++                                          gint             y,
++                                          gint             z);
+ 
+ G_END_DECLS
+ 
+diff --git a/gegl/buffer/gegl-tile-source.h b/gegl/buffer/gegl-tile-source.h
+index 9c69d3d..6bf5028 100644
+--- gegl/buffer/gegl-tile-source.h
++++ gegl/buffer/gegl-tile-source.h
+@@ -38,7 +38,7 @@ G_BEGIN_DECLS
+ #define GEGL_IS_TILE_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_TILE_SOURCE))
+ #define GEGL_TILE_SOURCE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_TILE_SOURCE, GeglTileSourceClass))
+ 
+-typedef gint GeglTileCommand;
++typedef struct _GeglTileSourceClass GeglTileSourceClass;
+ 
+ struct _GeglTileSource
+ {
+@@ -60,25 +60,6 @@ struct _GeglTileSourceClass
+ 
+ GType      gegl_tile_source_get_type (void) G_GNUC_CONST;
+ 
+-/* All commands have the ability to pass commands to all tiles the handlers
+- * add abstraction to the commands the documentaiton given here is valid
+- * when the commands are issued to a full blown GeglBuffer instance.
+- */
+-
+-enum _GeglTileCommand
+-{
+-  GEGL_TILE_IDLE = 0,
+-  GEGL_TILE_SET,
+-  GEGL_TILE_GET,
+-  GEGL_TILE_IS_CACHED,
+-  GEGL_TILE_EXIST,
+-  GEGL_TILE_VOID,
+-  GEGL_TILE_FLUSH,
+-  GEGL_TILE_REFETCH,
+-  GEGL_TILE_REINIT,
+-  GEGL_TILE_LAST_COMMAND
+-};
+-
+ #ifdef NOT_REALLY_COS_THIS_IS_MACROS
+ /* The functions documented below are actually macros, all using the command vfunc */
+ 
+diff --git a/gegl/buffer/gegl-tile-storage.c b/gegl/buffer/gegl-tile-storage.c
+index 9393962..db1a369 100644
+--- gegl/buffer/gegl-tile-storage.c
++++ gegl/buffer/gegl-tile-storage.c
+@@ -19,6 +19,7 @@
+ #include "config.h"
+ 
+ #include <glib-object.h>
++#include <glib/gstdio.h>
+ 
+ #include "gegl.h"
+ #include "gegl-buffer-types.h"
+@@ -31,9 +32,11 @@
+ #include "gegl-tile-handler-zoom.h"
+ #include "gegl-tile-handler-cache.h"
+ #include "gegl-tile-handler-log.h"
++#include "gegl-tile-handler-private.h"
+ #include "gegl-types-internal.h"
+ #include "gegl-utils.h"
+ #include "gegl-config.h"
++#include "gegl-buffer-private.h"
+ 
+ 
+ G_DEFINE_TYPE (GeglTileStorage, gegl_tile_storage, GEGL_TYPE_TILE_HANDLER_CHAIN)
+@@ -62,7 +65,7 @@ tile_storage_idle (gpointer data)
+   return gegl_tile_source_idle (GEGL_TILE_SOURCE (tile_storage));
+ }
+ 
+-GeglTileBackend *gegl_buffer_backend (GObject *buffer);
++GeglTileBackend * gegl_buffer_backend (GeglBuffer *buffer);
+ 
+ GeglTileStorage *
+ gegl_tile_storage_new (GeglTileBackend *backend)
+@@ -70,9 +73,9 @@ gegl_tile_storage_new (GeglTileBackend *backend)
+   GeglTileStorage *tile_storage = g_object_new (GEGL_TYPE_TILE_STORAGE, NULL);
+   GeglTileHandlerChain  *tile_handler_chain;
+   GeglTileHandler       *handler;
++  GeglTileHandler       *cache = NULL;
+   GeglTileHandler       *empty = NULL;
+   GeglTileHandler       *zoom = NULL;
+-  GeglTileHandlerCache  *cache = NULL;
+ 
+   tile_storage->seen_zoom = 0;
+   tile_storage->mutex = g_mutex_new ();
+@@ -113,34 +116,43 @@ gegl_tile_storage_new (GeglTileBackend *backend)
+   if (g_getenv("GEGL_LOG_TILE_BACKEND")||
+       g_getenv("GEGL_TILE_LOG"))
+     gegl_tile_handler_chain_add (tile_handler_chain,
+-                      g_object_new (GEGL_TYPE_TILE_HANDLER_LOG, NULL));
++                                 g_object_new (GEGL_TYPE_TILE_HANDLER_LOG, NULL));
+ #endif
+ 
+-  cache = g_object_new (GEGL_TYPE_TILE_HANDLER_CACHE, NULL);
+-  empty = gegl_tile_handler_empty_new (backend, cache);
+-  zoom = gegl_tile_handler_zoom_new (backend, tile_storage, cache);
++  cache = gegl_tile_handler_cache_new ();
++  empty = gegl_tile_handler_empty_new (backend);
++  zoom = gegl_tile_handler_zoom_new (backend);
++
++  /* set storage and cache on ourself so chain_add() can use it */
++  _gegl_tile_handler_set_tile_storage (handler, tile_storage);
++  _gegl_tile_handler_set_cache (handler, (GeglTileHandlerCache *) cache);
+ 
+-  gegl_tile_handler_chain_add (tile_handler_chain, (void*)cache);
++  gegl_tile_handler_chain_add (tile_handler_chain, cache);
+   gegl_tile_handler_chain_add (tile_handler_chain, zoom);
+   gegl_tile_handler_chain_add (tile_handler_chain, empty);
+ 
++  g_object_unref (cache);
++  g_object_unref (zoom);
++  g_object_unref (empty);
++
+ #if 0
+   if (g_getenv("GEGL_LOG_TILE_CACHE"))
+     gegl_tile_handler_chain_add (tile_handler_chain,
+                                  g_object_new (GEGL_TYPE_TILE_HANDLER_LOG, NULL));
+ #endif
+-  tile_storage->cache = cache;
+-  cache->tile_storage = tile_storage;
++
++  tile_storage->cache = (GeglTileHandlerCache *) cache;
++  ((GeglTileHandlerCache *) cache)->tile_storage = tile_storage;
+   gegl_tile_handler_chain_bind (tile_handler_chain);
+ 
+-  ((GeglTileBackend *)gegl_buffer_backend ((void*)tile_storage))->priv->storage = (gpointer)
+-                                             tile_storage;
++  ((GeglTileBackend *)gegl_buffer_backend2 ((void*)tile_storage))->priv->storage = (gpointer)
++                                              tile_storage;
+ 
+   tile_storage->idle_swapper = g_timeout_add_full (G_PRIORITY_LOW,
+-                                              250,
+-                                              tile_storage_idle,
+-                                              tile_storage,
+-                                              NULL);
++                                                   250,
++                                                   tile_storage_idle,
++                                                   tile_storage,
++                                                   NULL);
+ 
+   return tile_storage;
+ }
+diff --git a/gegl/buffer/gegl-tile-storage.h b/gegl/buffer/gegl-tile-storage.h
+index e1de893..97e2368 100644
+--- gegl/buffer/gegl-tile-storage.h
++++ gegl/buffer/gegl-tile-storage.h
+@@ -34,6 +34,8 @@
+ #define GEGL_IS_TILE_STORAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_TILE_STORAGE))
+ #define GEGL_TILE_STORAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_TILE_STORAGE, GeglTileStorageClass))
+ 
++typedef struct _GeglTileStorageClass GeglTileStorageClass;
++
+ struct _GeglTileStorage
+ {
+   GeglTileHandlerChain parent_instance;
+diff --git a/gegl/buffer/gegl-tile.c b/gegl/buffer/gegl-tile.c
+index d89d893..60285fe 100644
+--- gegl/buffer/gegl-tile.c
++++ gegl/buffer/gegl-tile.c
+@@ -298,9 +298,15 @@ gegl_tile_is_stored (GeglTile *tile)
+ void
+ gegl_tile_void (GeglTile *tile)
+ {
+-  tile->stored_rev = tile->rev;
++  gegl_tile_mark_as_stored (tile);
++
++  /* XXX FIXME this causes void_pyramid to do nothing, but is needed
++   * to avoid a deadlock in gegl_tile_handler_cache_void() which calls
++   * gegl_tile_void() while holding the cache mutex
++   */
+   tile->tile_storage = NULL;
+-  if (tile->z==0)
++
++  if (tile->z == 0)
+     gegl_tile_void_pyramid (tile);
+ }
+ 
+diff --git a/gegl/gegl-apply.c b/gegl/gegl-apply.c
+index 0235faa..3cb7f2d 100644
+--- gegl/gegl-apply.c
++++ gegl/gegl-apply.c
+@@ -36,7 +36,7 @@
+ #include "operation/gegl-operation-meta.h"
+ #include "operation/gegl-operation-point-filter.h"
+ 
+-#include "process/gegl-eval-mgr.h"
++#include "process/gegl-eval-manager.h"
+ #include "process/gegl-have-visitor.h"
+ #include "process/gegl-prepare-visitor.h"
+ #include "process/gegl-finish-visitor.h"
+diff --git a/gegl/gegl-chant.h b/gegl/gegl-chant.h
+index 9fbcc9f..7b1c786 100644
+--- gegl/gegl-chant.h
++++ gegl/gegl-chant.h
+@@ -48,8 +48,8 @@ static GType    type_name##_type_id = 0;                                \
+ static void     type_name##_class_chant_intern_init (gpointer klass)    \
+   {                                                                     \
+     gegl_chant_parent_class = g_type_class_peek_parent (klass);         \
+-    type_name##_class_init ((TypeName##Class*) klass);                  \
+     gegl_chant_class_intern_init (klass);                               \
++    type_name##_class_init ((TypeName##Class*) klass);                  \
+   }                                                                     \
+ GType                                                                   \
+ type_name##_get_type (void)                                             \
+@@ -334,6 +334,82 @@ gegl_module_register (GTypeModule *module)
+ }
+ #endif
+ 
++/* enum registration */
++#define gegl_chant_int(name, nick, min, max, def, blurb)
++#define gegl_chant_int_ui(name, nick, min, max, def, ui_min, ui_max, ui_gamma, blurb)
++#define gegl_chant_double(name, nick, min, max, def, blurb)
++#define gegl_chant_double_ui(name, nick, min, max, def, ui_min, ui_max, ui_gamma, blurb)
++#define gegl_chant_boolean(name, nick, def, blurb)
++#define gegl_chant_string(name, nick, def, blurb)
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)
++#define gegl_chant_file_path(name, nick, def, blurb)
++#define gegl_chant_multiline(name, nick, def, blurb)
++#define gegl_chant_object(name,nick,  blurb)
++#define gegl_chant_pointer(name, nick, blurb)
++#define gegl_chant_color(name, nick, def, blurb)
++#define gegl_chant_curve(name, nick, blurb)
++#define gegl_chant_seed(name, nick, blurb)
++#define gegl_chant_path(name, nick, blurb)
++#define gegl_chant_register_enum(enum_name) \
++typedef enum {
++
++#define enum_value(value, nick) \
++  value ,
++
++#define gegl_chant_register_enum_end(enum) \
++} enum ;
++
++#include GEGL_CHANT_C_FILE
++
++
++#undef gegl_chant_register_enum
++#undef enum_value
++#undef gegl_chant_register_enum_end
++
++#define gegl_chant_register_enum(enum_name)       \
++GType enum_name ## _get_type (void) G_GNUC_CONST; \
++GType enum_name ## _get_type (void)               \
++{                                                 \
++  static GType etype = 0;                         \
++  if (etype == 0) {                               \
++    static const GEnumValue values[] = {
++
++#define enum_value(value, nick) \
++      { value, nick, nick },
++
++#define gegl_chant_register_enum_end(enum)                \
++      { 0, NULL, NULL }                                   \
++    };                                                    \
++    etype = g_enum_register_static (#enum, values);       \
++  }                                                       \
++  return etype;                                           \
++}                                                         \
++
++#include GEGL_CHANT_C_FILE
++
++#undef gegl_chant_int
++#undef gegl_chant_int_ui
++#undef gegl_chant_double
++#undef gegl_chant_double_ui
++#undef gegl_chant_boolean
++#undef gegl_chant_string
++#undef gegl_chant_enum
++#undef gegl_chant_file_path
++#undef gegl_chant_multiline
++#undef gegl_chant_object
++#undef gegl_chant_pointer
++#undef gegl_chant_color
++#undef gegl_chant_curve
++#undef gegl_chant_seed
++#undef gegl_chant_path
++#undef gegl_chant_register_enum
++#undef enum_value
++#undef gegl_chant_register_enum_end
++#define gegl_chant_register_enum(enum_name)
++#define enum_value(value, nick)
++#define gegl_chant_register_enum_end(enum)
++
++/* Properties */
+ 
+ struct _GeglChantO
+ {
+@@ -348,13 +424,14 @@ struct _GeglChantO
+ #define gegl_chant_double_ui(name, nick, min, max, def, ui_min, ui_max, ui_gamma, blurb) gdouble   name;
+ #define gegl_chant_boolean(name, nick, def, blurb)                              gboolean           name;
+ #define gegl_chant_string(name, nick, def, blurb)                               gchar             *name;
+-#define gegl_chant_enum(name, nick, enum, type, def, blurb)                     enum               name;
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)                    enum               name;
+ #define gegl_chant_file_path(name, nick, def, blurb)                            gchar             *name;
+ #define gegl_chant_multiline(name, nick, def, blurb)                            gchar             *name;
+ #define gegl_chant_object(name,nick,  blurb)                                    GObject           *name;
+ #define gegl_chant_pointer(name, nick, blurb)                                   gpointer           name;
+ #define gegl_chant_color(name, nick, def, blurb)                                GeglColor         *name;
+ #define gegl_chant_curve(name, nick, blurb)                                     GeglCurve         *name;
++#define gegl_chant_seed(name, nick, blurb)                                      gint               name;
+ #define gegl_chant_path(name, nick, blurb)                                      GeglPath          *name;\
+                                                                                 guint path_changed_handler;
+ 
+@@ -373,6 +450,7 @@ struct _GeglChantO
+ #undef gegl_chant_pointer
+ #undef gegl_chant_color
+ #undef gegl_chant_curve
++#undef gegl_chant_seed
+ #undef gegl_chant_path
+ };
+ 
+@@ -387,13 +465,14 @@ enum
+ #define gegl_chant_double_ui(name, nick, min, max, def, ui_min, ui_max, ui_gamma, blurb) PROP_##name,
+ #define gegl_chant_boolean(name, nick, def, blurb)                              PROP_##name,
+ #define gegl_chant_string(name, nick, def, blurb)                               PROP_##name,
+-#define gegl_chant_enum(name, nick, enum, type, def, blurb)                     PROP_##name,
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)                    PROP_##name,
+ #define gegl_chant_file_path(name, nick, def, blurb)                            PROP_##name,
+ #define gegl_chant_multiline(name, nick, def, blurb)                            PROP_##name,
+ #define gegl_chant_object(name, nick, blurb)                                    PROP_##name,
+ #define gegl_chant_pointer(name, nick, blurb)                                   PROP_##name,
+ #define gegl_chant_color(name, nick, def, blurb)                                PROP_##name,
+ #define gegl_chant_curve(name, nick, blurb)                                     PROP_##name,
++#define gegl_chant_seed(name, nick, blurb)                                      PROP_##name,
+ #define gegl_chant_path(name, nick, blurb)                                      PROP_##name,
+ 
+ #include GEGL_CHANT_C_FILE
+@@ -411,6 +490,7 @@ enum
+ #undef gegl_chant_pointer
+ #undef gegl_chant_color
+ #undef gegl_chant_curve
++#undef gegl_chant_seed
+ #undef gegl_chant_path
+   PROP_LAST
+ };
+@@ -451,7 +531,7 @@ get_property (GObject      *gobject,
+     case PROP_##name:                                         \
+       g_value_set_string (value, properties->name);           \
+       break;
+-#define gegl_chant_enum(name, nick, enum, type, def, blurb)   \
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)  \
+     case PROP_##name:                                         \
+       g_value_set_enum (value, properties->name);             \
+       break;
+@@ -479,6 +559,10 @@ get_property (GObject      *gobject,
+     case PROP_##name:                                         \
+       g_value_set_object (value, properties->name);           \
+       break;
++#define gegl_chant_seed(name, nick, blurb)                    \
++    case PROP_##name:                                         \
++      g_value_set_int (value, properties->name);              \
++      break;
+ #define gegl_chant_path(name, nick, blurb)                    \
+     case PROP_##name:                                         \
+       if (!properties->name)properties->name = gegl_path_new (); /* this feels ugly */\
+@@ -500,6 +584,7 @@ get_property (GObject      *gobject,
+ #undef gegl_chant_pointer
+ #undef gegl_chant_color
+ #undef gegl_chant_curve
++#undef gegl_chant_seed
+ #undef gegl_chant_path
+     default:
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+@@ -546,7 +631,7 @@ set_property (GObject      *gobject,
+         g_free (properties->name);                                    \
+       properties->name = g_strdup (g_value_get_string (value));       \
+       break;
+-#define gegl_chant_enum(name, nick, enum, type, def, blurb)           \
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)          \
+     case PROP_##name:                                                 \
+       properties->name = g_value_get_enum (value);                    \
+       break;
+@@ -584,6 +669,10 @@ set_property (GObject      *gobject,
+          g_object_unref (properties->name);                           \
+       properties->name = g_value_dup_object (value);                  \
+       break;
++#define gegl_chant_seed(name, nick, blurb)                            \
++    case PROP_##name:                                                 \
++      properties->name = g_value_get_int (value);                     \
++    break;
+ #define gegl_chant_path(name, nick, blurb)                            \
+     case PROP_##name:                                                 \
+       if (properties->name != NULL)                                   \
+@@ -616,6 +705,7 @@ set_property (GObject      *gobject,
+ #undef gegl_chant_pointer
+ #undef gegl_chant_color
+ #undef gegl_chant_curve
++#undef gegl_chant_seed
+ #undef gegl_chant_path
+ 
+     default:
+@@ -641,7 +731,7 @@ static void gegl_chant_destroy_notify (gpointer data)
+       g_free (properties->name);                    \
+       properties->name = NULL;                      \
+     }
+-#define gegl_chant_enum(name, nick, enum, type, def, blurb)
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)
+ #define gegl_chant_file_path(name, nick, def, blurb) \
+   if (properties->name)                             \
+     {                                               \
+@@ -673,6 +763,7 @@ static void gegl_chant_destroy_notify (gpointer data)
+       g_object_unref (properties->name);            \
+       properties->name = NULL;                      \
+     }
++#define gegl_chant_seed(name, nick, blurb)
+ #define gegl_chant_path(name, nick, blurb)          \
+   if (properties->name)                             \
+     {                                               \
+@@ -695,6 +786,7 @@ static void gegl_chant_destroy_notify (gpointer data)
+ #undef gegl_chant_pointer
+ #undef gegl_chant_color
+ #undef gegl_chant_curve
++#undef gegl_chant_seed
+ #undef gegl_chant_path
+ 
+   g_slice_free (GeglChantO, properties);
+@@ -720,7 +812,7 @@ gegl_chant_constructor (GType                  type,
+ #define gegl_chant_double_ui(name, nick, min, max, def, ui_min, ui_max, ui_gamma, blurb)
+ #define gegl_chant_boolean(name, nick, def, blurb)
+ #define gegl_chant_string(name, nick, def, blurb)
+-#define gegl_chant_enum(name, nick, enum, type, def, blurb)
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)
+ #define gegl_chant_file_path(name, nick, def, blurb)
+ #define gegl_chant_multiline(name, nick, def, blurb)
+ #define gegl_chant_object(name, nick, blurb)
+@@ -728,6 +820,7 @@ gegl_chant_constructor (GType                  type,
+ #define gegl_chant_color(name, nick, def, blurb)              \
+     if (properties->name == NULL) \
+     {properties->name = gegl_color_new(def?def:"black");}
++#define gegl_chant_seed(name, nick, blurb)
+ #define gegl_chant_path(name, nick, blurb)
+ #define gegl_chant_curve(name, nick, blurb)
+ 
+@@ -746,6 +839,7 @@ gegl_chant_constructor (GType                  type,
+ #undef gegl_chant_pointer
+ #undef gegl_chant_color
+ #undef gegl_chant_curve
++#undef gegl_chant_seed
+ #undef gegl_chant_path
+ 
+   g_object_set_data_full (obj, "chant-data", obj, gegl_chant_destroy_notify);
+@@ -810,10 +904,10 @@ gegl_chant_class_intern_init (gpointer klass)
+                                                         G_PARAM_READWRITE |  \
+                                                         G_PARAM_CONSTRUCT |  \
+                                                         GEGL_PARAM_PAD_INPUT)));
+-#define gegl_chant_enum(name, nick, enum, type, def, blurb)                  \
++#define gegl_chant_enum(name, nick, enum, enum_name, def, blurb)                 \
+   g_object_class_install_property (object_class, PROP_##name,                \
+                                    g_param_spec_enum (#name, nick, blurb,    \
+-                                                      type,                  \
++                                                      enum_name ## _get_type (), \
+                                                       def,                   \
+                                                       (GParamFlags) (        \
+                                                       G_PARAM_READWRITE |    \
+@@ -859,6 +953,13 @@ gegl_chant_class_intern_init (gpointer klass)
+                                                           G_PARAM_READWRITE |\
+                                                           G_PARAM_CONSTRUCT | \
+                                                           GEGL_PARAM_PAD_INPUT)));
++#define gegl_chant_seed(name, nick, blurb)                                   \
++  g_object_class_install_property (object_class, PROP_##name,                \
++                                   gegl_param_spec_seed (#name, nick, blurb, \
++                                                     (GParamFlags) (         \
++                                                     G_PARAM_READWRITE |     \
++                                                     G_PARAM_CONSTRUCT |     \
++                                                     GEGL_PARAM_PAD_INPUT)));
+ #define gegl_chant_path(name, nick, blurb)                                 \
+   g_object_class_install_property (object_class, PROP_##name,                \
+                                    gegl_param_spec_path (#name, nick, blurb,\
+@@ -891,6 +992,7 @@ gegl_chant_class_intern_init (gpointer klass)
+ #undef gegl_chant_pointer
+ #undef gegl_chant_color
+ #undef gegl_chant_curve
++#undef gegl_chant_seed
+ #undef gegl_chant_path
+ }
+ 
+diff --git a/gegl/gegl-config.c b/gegl/gegl-config.c
+index f7e9636..5c156eb 100644
+--- gegl/gegl-config.c
++++ gegl/gegl-config.c
+@@ -15,11 +15,14 @@
+  *
+  * Copyright 2006, 2007 Øyvind Kolås <pippin at gimp.org>
+  */
+-#include <glib.h>
+-#include <glib-object.h>
++
++#include "config.h"
++
+ #include <string.h>
++
++#include <glib-object.h>
+ #include <glib/gprintf.h>
+-#include "config.h"
++
+ #include "gegl.h"
+ #include "gegl-types-internal.h"
+ #include "gegl-config.h"
+@@ -34,14 +37,16 @@ enum
+ {
+   PROP_0,
+   PROP_QUALITY,
+-  PROP_CACHE_SIZE,
++  PROP_CACHE_SIZE, /* deprecated */
++  PROP_TILE_CACHE_SIZE,
+   PROP_CHUNK_SIZE,
+   PROP_SWAP,
+   PROP_BABL_TOLERANCE,
+   PROP_TILE_WIDTH,
+   PROP_TILE_HEIGHT,
+   PROP_THREADS,
+-  PROP_USE_OPENCL
++  PROP_USE_OPENCL,
++  PROP_QUEUE_LIMIT
+ };
+ 
+ static void
+@@ -55,7 +60,11 @@ gegl_config_get_property (GObject    *gobject,
+   switch (property_id)
+     {
+       case PROP_CACHE_SIZE:
+-        g_value_set_int (value, config->cache_size);
++        g_value_set_int (value, config->tile_cache_size);
++        break;
++
++      case PROP_TILE_CACHE_SIZE:
++        g_value_set_uint64 (value, config->tile_cache_size);
+         break;
+ 
+       case PROP_CHUNK_SIZE:
+@@ -90,6 +99,10 @@ gegl_config_get_property (GObject    *gobject,
+         g_value_set_boolean (value, config->use_opencl);
+         break;
+ 
++      case PROP_QUEUE_LIMIT:
++        g_value_set_int (value, config->queue_limit);
++        break;
++
+       default:
+         G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+         break;
+@@ -107,7 +120,10 @@ gegl_config_set_property (GObject      *gobject,
+   switch (property_id)
+     {
+       case PROP_CACHE_SIZE:
+-        config->cache_size = g_value_get_int (value);
++        config->tile_cache_size = g_value_get_int (value);
++        break;
++      case PROP_TILE_CACHE_SIZE:
++        config->tile_cache_size = g_value_get_uint64 (value);
+         break;
+       case PROP_CHUNK_SIZE:
+         config->chunk_size = g_value_get_int (value);
+@@ -123,6 +139,10 @@ gegl_config_set_property (GObject      *gobject,
+         return;
+       case PROP_BABL_TOLERANCE:
+           {
++            /* XXX: this only works the first time, and since it is a
++             * construct property the values overriden from gimp does not take
++             * effect
++             */
+             static gboolean first = TRUE;
+             static gboolean overridden = FALSE;
+ 
+@@ -141,7 +161,7 @@ gegl_config_set_property (GObject      *gobject,
+                 g_setenv ("BABL_TOLERANCE", buf, 0);
+                 /* babl picks up the babl error through the environment, babl
+                  * caches valid conversions though so this needs to be set
+-                 * before any processing is done
++                 * before _any_ processing is done
+                  */
+               }
+           }
+@@ -161,6 +181,9 @@ gegl_config_set_property (GObject      *gobject,
+           gegl_cl_init (NULL);
+ 
+         break;
++      case PROP_QUEUE_LIMIT:
++        config->queue_limit = g_value_get_int (value);
++        break;
+       default:
+         G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+         break;
+@@ -191,63 +214,95 @@ gegl_config_class_init (GeglConfigClass *klass)
+ 
+ 
+   g_object_class_install_property (gobject_class, PROP_TILE_WIDTH,
+-                                   g_param_spec_int ("tile-width", "Tile width", "default tile width for created buffers.",
+-                                                     0, G_MAXINT, 64,
+-                                                     G_PARAM_READWRITE));
++                                   g_param_spec_int ("tile-width",
++                                                     "Tile width",
++                                                     "default tile width for created buffers.",
++                                                     0, G_MAXINT, 128,
++                                                     G_PARAM_READWRITE |
++                                                     G_PARAM_CONSTRUCT));
+ 
+   g_object_class_install_property (gobject_class, PROP_TILE_HEIGHT,
+-                                   g_param_spec_int ("tile-height", "Tile height", "default tile height for created buffers.",
++                                   g_param_spec_int ("tile-height",
++                                                     "Tile height",
++                                                     "default tile height for created buffers.",
+                                                      0, G_MAXINT, 64,
+-                                                     G_PARAM_READWRITE));
++                                                     G_PARAM_READWRITE |
++                                                     G_PARAM_CONSTRUCT));
+ 
++  /* deprecated */
+   g_object_class_install_property (gobject_class, PROP_CACHE_SIZE,
+-                                   g_param_spec_int ("cache-size", "Cache size", "size of cache in bytes",
+-                                                     0, G_MAXINT, 512*1024*1024,
++                                   g_param_spec_int ("cache-size",
++                                                     "Cache size",
++                                                     "deprecated, use tile-cache-size instead",
++                                                     0, G_MAXINT, 512 * 1024 * 1024,
+                                                      G_PARAM_READWRITE));
+ 
++  g_object_class_install_property (gobject_class, PROP_TILE_CACHE_SIZE,
++                                   g_param_spec_uint64 ("tile-cache-size",
++                                                        "Tile Cache size",
++                                                        "size of tile cache in bytes",
++                                                        0, G_MAXUINT64, 512 * 1024 * 1024,
++                                                        G_PARAM_READWRITE |
++                                                        G_PARAM_CONSTRUCT));
+ 
+   g_object_class_install_property (gobject_class, PROP_CHUNK_SIZE,
+-                                   g_param_spec_int ("chunk-size", "Chunk size",
+-                                     "the number of pixels processed simultaneously by GEGL.",
+-                                                     1, G_MAXINT, 256*300,
+-                                                     G_PARAM_READWRITE));
++                                   g_param_spec_int ("chunk-size",
++                                                     "Chunk size",
++                                                     "the number of pixels processed simultaneously by GEGL.",
++                                                     1, G_MAXINT, 512 * 512,
++                                                     G_PARAM_READWRITE |
++                                                     G_PARAM_CONSTRUCT));
+ 
+   g_object_class_install_property (gobject_class, PROP_QUALITY,
+-                                   g_param_spec_double ("quality", "Quality", "quality/speed trade off 1.0 = full quality, 0.0=full speed",
+-                                                     0.0, 1.0, 1.0,
+-                                                     G_PARAM_READWRITE));
++                                   g_param_spec_double ("quality",
++                                                        "Quality",
++                                                        "quality/speed trade off 1.0 = full quality, 0.0 = full speed",
++                                                        0.0, 1.0, 1.0,
++                                                        G_PARAM_READWRITE |
++                                                        G_PARAM_CONSTRUCT));
+ 
+   g_object_class_install_property (gobject_class, PROP_BABL_TOLERANCE,
+-                                   g_param_spec_double ("babl-tolerance", "babl error", "the error tolerance babl operates with",
+-                                                     0.0, 0.2, 0.002,
+-                                                     G_PARAM_READWRITE|
+-                                                     G_PARAM_CONSTRUCT));
++                                   g_param_spec_double ("babl-tolerance",
++                                                        "babl error",
++                                                        "the error tolerance babl operates with",
++                                                        0.0, 0.2, 0.000001,
++                                                        G_PARAM_READWRITE |
++                                                        G_PARAM_CONSTRUCT));
+ 
+   g_object_class_install_property (gobject_class, PROP_SWAP,
+-                                   g_param_spec_string ("swap", "Swap", "where gegl stores it's swap files", NULL,
+-                                                     G_PARAM_READWRITE));
++                                   g_param_spec_string ("swap",
++                                                        "Swap",
++                                                        "where gegl stores it's swap files",
++                                                        NULL,
++                                                        G_PARAM_READWRITE |
++                                                        G_PARAM_CONSTRUCT));
+ 
+   g_object_class_install_property (gobject_class, PROP_THREADS,
+-                                   g_param_spec_int ("threads", "Number of concurrent evaluation threads", "default tile height for created buffers.",
++                                   g_param_spec_int ("threads",
++                                                     "Number of concurrent evaluation threads",
++                                                     "default tile height for created buffers.",
+                                                      0, 16, 1,
+-                                                     G_PARAM_READWRITE));
++                                                     G_PARAM_READWRITE |
++                                                     G_PARAM_CONSTRUCT));
+ 
+   g_object_class_install_property (gobject_class, PROP_USE_OPENCL,
+-                                   g_param_spec_boolean ("use-opencl", "Use OpenCL", "Try to use OpenCL",
+-                                                     TRUE,
+-                                                     G_PARAM_READWRITE));
+-
++                                   g_param_spec_boolean ("use-opencl",
++                                                         "Use OpenCL",
++                                                         "Try to use OpenCL",
++                                                         TRUE,
++                                                         G_PARAM_READWRITE |
++                                                         G_PARAM_CONSTRUCT));
++
++  g_object_class_install_property (gobject_class, PROP_QUEUE_LIMIT,
++                                   g_param_spec_int ("queue-limit",
++                                                     "Queue limit",
++                                                     "Maximum number of entries in the file tile backend's writer queue",
++                                                     2, G_MAXINT, 1000,
++                                                     G_PARAM_READWRITE |
++                                                     G_PARAM_CONSTRUCT));
+ }
+ 
+ static void
+ gegl_config_init (GeglConfig *self)
+ {
+-  self->swap        = NULL;
+-  self->quality     = 1.0;
+-  self->cache_size  = 256 * 1024 * 1024;
+-  self->chunk_size  = 512 * 512;
+-  self->tile_width  = 128;
+-  self->tile_height = 64;
+-  self->threads = 1;
+-  self->use_opencl = TRUE;
+ }
+diff --git a/gegl/gegl-config.h b/gegl/gegl-config.h
+index bc60cdc..4d4c3b4 100644
+--- gegl/gegl-config.h
++++ gegl/gegl-config.h
+@@ -24,12 +24,10 @@
+ 
+ G_BEGIN_DECLS
+ 
+-#define GEGL_TYPE_CONFIG            (gegl_config_get_type ())
+-#define GEGL_CONFIG(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_CONFIG, GeglConfig))
+ #define GEGL_CONFIG_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GEGL_TYPE_CONFIG, GeglConfigClass))
+-#define GEGL_IS_CONFIG(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_CONFIG))
+ #define GEGL_IS_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_CONFIG))
+ #define GEGL_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_CONFIG, GeglConfigClass))
++/* The rest is in gegl-types.h */
+ 
+ typedef struct _GeglConfigClass GeglConfigClass;
+ 
+@@ -38,7 +36,7 @@ struct _GeglConfig
+   GObject  parent_instance;
+ 
+   gchar   *swap;
+-  gint     cache_size;
++  guint64  tile_cache_size;
+   gint     chunk_size; /* The size of elements being processed at once */
+   gdouble  quality;
+   gdouble  babl_tolerance;
+@@ -46,6 +44,7 @@ struct _GeglConfig
+   gint     tile_height;
+   gint     threads;
+   gboolean use_opencl;
++  gint     queue_limit;
+ };
+ 
+ struct _GeglConfigClass
+@@ -53,8 +52,6 @@ struct _GeglConfigClass
+   GObjectClass parent_class;
+ };
+ 
+-GType gegl_config_get_type (void) G_GNUC_CONST;
+-
+ GeglConfig   * gegl_config            (void);
+ 
+ G_END_DECLS
+diff --git a/gegl/gegl-dot.c b/gegl/gegl-dot.c
+index a2bd9d9..2b43ac5 100644
+--- gegl/gegl-dot.c
++++ gegl/gegl-dot.c
+@@ -188,7 +188,7 @@ gegl_dot_add_graph (GString     *string,
+ {
+   GeglNode *graph = node;
+ 
+-  g_string_append_printf (string, "subgraph cluster_%s%p { graph [ label=\"%s %p\" fontsize=\"10\" ranksep=\"0.3\" nodesep=\"0.3\"]; node [ fontsize=\"10\" ];\n", label, node, label, node);
++  g_string_append_printf (string, "subgraph cluster_%p { graph [ label=\"%s %p\" fontsize=\"10\" ranksep=\"0.3\" nodesep=\"0.3\"]; node [ fontsize=\"10\" ];\n", node, label, node);
+ 
+   {
+     GSList *nodes = gegl_node_get_children (graph);
+@@ -350,4 +350,5 @@ gegl_dot_node_to_png (GeglNode    *node,
+   dot_cmd = g_strdup_printf ("dot -o %s -Tpng %s", png_path, dot_filename);
+   if (system (dot_cmd) == -1)
+     g_warning ("Error executing GraphViz dot program");
++  g_free (dot_cmd);
+ }
+diff --git a/gegl/gegl-enums.h b/gegl/gegl-enums.h
+index aeb6346..648a766 100644
+--- gegl/gegl-enums.h
++++ gegl/gegl-enums.h
+@@ -41,35 +41,15 @@ GType gegl_sampler_type_get_type   (void) G_GNUC_CONST;
+ #define GEGL_TYPE_SAMPLER_TYPE (gegl_sampler_type_get_type())
+ 
+ typedef enum {
+-  GEGL_ABYSS_NONE
++  GEGL_ABYSS_NONE,
++  GEGL_ABYSS_CLAMP,
++  GEGL_ABYSS_LOOP,
++  GEGL_ABYSS_BLACK,
++  GEGL_ABYSS_WHITE
+ } GeglAbyssPolicy;
+ GType gegl_abyss_policy_get_type   (void) G_GNUC_CONST;
+ #define GEGL_ABYSS_POLICY_TYPE (gegl_abyss_policy_get_type())
+ 
+-/*
+- * Operation specific enum
+- */
+-
+-typedef enum {
+-  GEGl_RIPPLE_WAVE_TYPE_SINE,
+-  GEGl_RIPPLE_WAVE_TYPE_SAWTOOTH
+-} GeglRippleWaveType;
+-GType gegl_ripple_wave_type_get_type   (void) G_GNUC_CONST;
+-#define GEGL_RIPPLE_WAVE_TYPE (gegl_ripple_wave_type_get_type())
+-
+-typedef enum
+-{
+-  GEGL_WARP_BEHAVIOR_MOVE,      /*< desc="Move pixels"              >*/
+-  GEGL_WARP_BEHAVIOR_GROW,      /*< desc="Grow area"                >*/
+-  GEGL_WARP_BEHAVIOR_SHRINK,    /*< desc="Shrink area"              >*/
+-  GEGL_WARP_BEHAVIOR_SWIRL_CW,  /*< desc="Swirl clockwise"          >*/
+-  GEGL_WARP_BEHAVIOR_SWIRL_CCW, /*< desc="Swirl counter-clockwise"  >*/
+-  GEGL_WARP_BEHAVIOR_ERASE,     /*< desc="Erase warping"            >*/
+-  GEGL_WARP_BEHAVIOR_SMOOTH     /*< desc="Smooth warping"           >*/
+-} GeglWarpBehavior;
+-GType gegl_warp_behavior_get_type (void) G_GNUC_CONST;
+-#define GEGL_TYPE_WARP_BEHAVIOR (gegl_warp_behavior_get_type ())
+-
+ G_END_DECLS
+ 
+ #endif /* __GEGL_ENUMS_H__ */
+diff --git a/gegl/gegl-init.c b/gegl/gegl-init.c
+index 896cca8..aa1f63c 100644
+--- gegl/gegl-init.c
++++ gegl/gegl-init.c
+@@ -154,20 +154,14 @@ static glong         global_time = 0;
+ 
+ static const gchar *makefile (void);
+ 
+-/**
+- * gegl_init:
+- * @argc: a pointer to the number of command line arguments.
+- * @argv: a pointer to the array of command line arguments.
+- *
+- * Call this function before using any other GEGL functions. It will initialize
+- * everything needed to operate GEGL and parses some standard command line
+- * options.  @argc and @argv are adjusted accordingly so your own code will
+- * never see those standard arguments.
+- *
+- * Note that there is an alternative ways to initialize GEGL: if you are
+- * calling g_option_context_parse() with the option group returned by
+- * gegl_get_option_group(), you don't have to call gegl_init().
+- **/
++static void
++gegl_init_i18n (void)
++{
++  setlocale (LC_ALL, "");
++  bindtextdomain (GETTEXT_PACKAGE, GEGL_LOCALEDIR);
++  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
++}
++
+ void
+ gegl_init (gint    *argc,
+            gchar ***argv)
+@@ -177,13 +171,7 @@ gegl_init (gint    *argc,
+   if (config)
+     return;
+ 
+-  /*  If any command-line actions are ever added to GEGL, then the commented
+-   *  out code below should be used.  Until then, we simply call the parse hook
+-   *  directly.
+-   */
+-#if 0
+-  gegl_post_parse_hook (NULL, NULL, NULL, NULL);
+-#else
++  gegl_init_i18n ();
+ 
+   context = g_option_context_new (NULL);
+   g_option_context_set_ignore_unknown_options (context, TRUE);
+@@ -197,28 +185,29 @@ gegl_init (gint    *argc,
+     }
+ 
+   g_option_context_free (context);
+-#endif
+ }
+ 
+-static gchar   *cmd_gegl_swap=NULL;
+-static gchar   *cmd_gegl_cache_size=NULL;
+-static gchar   *cmd_gegl_chunk_size=NULL;
+-static gchar   *cmd_gegl_quality=NULL;
+-static gchar   *cmd_gegl_tile_size=NULL;
+-static gchar   *cmd_babl_tolerance =NULL;
+-static gchar   *cmd_gegl_threads=NULL;
++static gchar    *cmd_gegl_swap        = NULL;
++static gchar    *cmd_gegl_cache_size  = NULL;
++static gchar    *cmd_gegl_chunk_size  = NULL;
++static gchar    *cmd_gegl_quality     = NULL;
++static gchar    *cmd_gegl_tile_size   = NULL;
++static gchar    *cmd_babl_tolerance   = NULL;
++static gchar    *cmd_gegl_threads     = NULL;
++static gboolean *cmd_gegl_opencl      = NULL;
++static gint     *cmd_gegl_queue_limit = NULL;
+ 
+ static const GOptionEntry cmd_entries[]=
+ {
+     {
+      "babl-tolerance", 0, 0,
+      G_OPTION_ARG_STRING, &cmd_babl_tolerance,
+-     N_("babls error tolerance, a value beteen 0.2 and 0.000000001"), "<float>"
++     N_("babls error tolerance, a value between 0.2 and 0.000000001"), "<float>"
+     },
+     {
+      "gegl-swap", 0, 0,
+      G_OPTION_ARG_STRING, &cmd_gegl_swap,
+-     N_("Where GEGL stores it's swap"), "<uri>"
++     N_("Where GEGL stores its swap"), "<uri>"
+     },
+     {
+      "gegl-cache-size", 0, 0,
+@@ -245,19 +234,19 @@ static const GOptionEntry cmd_entries[]=
+      G_OPTION_ARG_STRING, &cmd_gegl_threads,
+      N_("The number of concurrent processing threads to use"), "<threads>"
+     },
++    {
++      "gegl-use-opencl", 0, 0,
++      G_OPTION_ARG_NONE, &cmd_gegl_opencl,
++      N_("Use OpenCL"), NULL
++    },
++    {
++      "gegl-queue-limit", 0, 0,
++      G_OPTION_ARG_INT, &cmd_gegl_queue_limit,
++      N_("Maximum number of entries in the file tile backend's writer queue"), "<count>"
++    },
+     { NULL }
+ };
+ 
+-/**
+- * gegl_get_option_group:
+- *
+- * Returns a #GOptionGroup for the commandline arguments recognized
+- * by GEGL. You should add this group to your #GOptionContext
+- * with g_option_context_add_group(), if you are using
+- * g_option_context_parse() to parse your commandline arguments.
+- *
+- * Returns a #GOptionGroup for the commandline arguments recognized by GEGL.
+- */
+ GOptionGroup *
+ gegl_get_option_group (void)
+ {
+@@ -280,7 +269,7 @@ GeglConfig *gegl_config (void)
+       if (g_getenv ("GEGL_QUALITY"))
+         config->quality = atof(g_getenv("GEGL_QUALITY"));
+       if (g_getenv ("GEGL_CACHE_SIZE"))
+-        config->cache_size = atoi(g_getenv("GEGL_CACHE_SIZE"))* 1024*1024;
++        config->tile_cache_size = atoll(g_getenv("GEGL_CACHE_SIZE"))* 1024*1024;
+       if (g_getenv ("GEGL_CHUNK_SIZE"))
+         config->chunk_size = atoi(g_getenv("GEGL_CHUNK_SIZE"));
+       if (g_getenv ("GEGL_TILE_SIZE"))
+@@ -302,10 +291,13 @@ GeglConfig *gegl_config (void)
+             }
+         }
+ 
+-      if (g_getenv ("GEGL_USE_OPENCL") != NULL && strcmp(g_getenv ("GEGL_USE_OPENCL"), "yes") == 0)
+-        config->use_opencl = TRUE;
+-      else
++      if (g_getenv ("GEGL_USE_OPENCL") != NULL && !g_str_equal(g_getenv ("GEGL_USE_OPENCL"), "yes"))
+         config->use_opencl = FALSE;
++      else
++        config->use_opencl = TRUE;
++
++      if (g_getenv ("GEGL_QUEUE_LIMIT"))
++        config->queue_limit = atoi(g_getenv ("GEGL_QUEUE_LIMIT"));
+ 
+       if (gegl_swap_dir())
+         config->swap = g_strdup(gegl_swap_dir ());
+@@ -360,7 +352,15 @@ void gegl_tile_storage_cache_cleanup (void);
+ void
+ gegl_exit (void)
+ {
+-  glong timing = gegl_ticks ();
++  glong timing;
++
++  if (!config)
++    {
++      g_warning("gegl_exit() called without matching call to gegl_init()");
++      return;
++    }
++
++  timing = gegl_ticks ();
+ 
+   gegl_tile_storage_cache_cleanup ();
+   gegl_tile_cache_destroy ();
+@@ -432,18 +432,11 @@ gegl_exit (void)
+     }
+   g_object_unref (config);
+   config = NULL;
++  global_time = 0;
+ }
+ 
+ static void swap_clean (void);
+ 
+-static void
+-gegl_init_i18n (void)
+-{
+-  setlocale (LC_ALL, "");
+-  bindtextdomain (GETTEXT_PACKAGE, GEGL_LOCALEDIR);
+-  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+-}
+-
+ void
+ gegl_get_version (int *major,
+                   int *minor,
+@@ -475,8 +468,24 @@ gegl_post_parse_hook (GOptionContext *context,
+   g_assert (global_time == 0);
+   global_time = gegl_ticks ();
+   g_type_init ();
++  babl_init ();
+   gegl_instrument ("gegl", "gegl_init", 0);
+ 
++#ifdef GEGL_ENABLE_DEBUG
++  {
++    const char *env_string;
++    env_string = g_getenv ("GEGL_DEBUG");
++    if (env_string != NULL)
++      {
++        gegl_debug_flags =
++          g_parse_debug_string (env_string,
++                                gegl_debug_keys,
++                                G_N_ELEMENTS (gegl_debug_keys));
++        env_string = NULL;
++      }
++  }
++#endif /* GEGL_ENABLE_DEBUG */
++
+   config = (void*)gegl_config ();
+ 
+   if (cmd_gegl_swap)
+@@ -484,7 +493,7 @@ gegl_post_parse_hook (GOptionContext *context,
+   if (cmd_gegl_quality)
+     config->quality = atof (cmd_gegl_quality);
+   if (cmd_gegl_cache_size)
+-    config->cache_size = atoi (cmd_gegl_cache_size)*1024*1024;
++    config->tile_cache_size = atoll (cmd_gegl_cache_size)*1024*1024;
+   if (cmd_gegl_chunk_size)
+     config->chunk_size = atoi (cmd_gegl_chunk_size);
+   if (cmd_gegl_tile_size)
+@@ -499,29 +508,17 @@ gegl_post_parse_hook (GOptionContext *context,
+     config->threads = atoi (cmd_gegl_threads);
+   if (cmd_babl_tolerance)
+     g_object_set (config, "babl-tolerance", atof(cmd_babl_tolerance), NULL);
++  /* don't override the environment variable */
++  if (g_getenv ("GEGL_USE_OPENCL") == NULL && cmd_gegl_opencl)
++    g_object_set (config, "use-opencl", cmd_gegl_opencl, NULL);
++  if (cmd_gegl_queue_limit)
++    g_object_set (config, "queue-limit", cmd_gegl_queue_limit, NULL);
+ 
+-#ifdef GEGL_ENABLE_DEBUG
+-  {
+-    const char *env_string;
+-    env_string = g_getenv ("GEGL_DEBUG");
+-    if (env_string != NULL)
+-      {
+-        gegl_debug_flags =
+-          g_parse_debug_string (env_string,
+-                                gegl_debug_keys,
+-                                G_N_ELEMENTS (gegl_debug_keys));
+-        env_string = NULL;
+-      }
+-  }
+-#endif /* GEGL_ENABLE_DEBUG */
+ 
+   time = gegl_ticks ();
+ 
+-  babl_init ();
+   gegl_instrument ("gegl_init", "babl_init", gegl_ticks () - time);
+ 
+-  gegl_init_i18n ();
+-
+   time = gegl_ticks ();
+   if (!module_db)
+     {
+@@ -594,12 +591,6 @@ gegl_post_parse_hook (GOptionContext *context,
+ 
+   swap_clean ();
+ 
+-  /* Initialize OpenCL if wanted and possible */
+-  if (gegl_config()->use_opencl)
+-    gegl_cl_init (NULL);
+-
+-  GEGL_NOTE (GEGL_DEBUG_OPENCL, "Using OpenCL: %d\n", gegl_config()->use_opencl && gegl_cl_is_accelerated ());
+-
+   return TRUE;
+ }
+ 
+@@ -633,13 +624,6 @@ gegl_arg_no_debug_cb (const char *key,
+ #endif
+ #endif
+ 
+-/*
+- * gegl_get_debug_enabled:
+- *
+- * Check if gegl has debugging turned on.
+- *
+- * Return value: TRUE if debugging is turned on, FALSE otherwise.
+- */
+ gboolean
+ gegl_get_debug_enabled (void)
+ {
+diff --git a/gegl/gegl-init.h b/gegl/gegl-init.h
+index d7c95cc..51ecffc 100644
+--- gegl/gegl-init.h
++++ gegl/gegl-init.h
+@@ -21,12 +21,51 @@
+ 
+ G_BEGIN_DECLS
+ 
+-
++/**
++ * gegl_init:
++ * @argc: a pointer to the number of command line arguments.
++ * @argv: a pointer to the array of command line arguments.
++ *
++ * Call this function before using any other GEGL functions. It will initialize
++ * everything needed to operate GEGL and parses some standard command line
++ * options.  @argc and @argv are adjusted accordingly so your own code will
++ * never see those standard arguments.
++ *
++ * Note that there is an alternative ways to initialize GEGL: if you are
++ * calling g_option_context_parse() with the option group returned by
++ * gegl_get_option_group(), you don't have to call gegl_init().
++ **/
+ void           gegl_init              (gint    *argc,
+                                        gchar ***argv);
++
++/**
++ * gegl_get_option_group:
++ *
++ * Returns a #GOptionGroup for the commandline arguments recognized
++ * by GEGL. You should add this group to your #GOptionContext
++ * with g_option_context_add_group(), if you are using
++ * g_option_context_parse() to parse your commandline arguments.
++ *
++ * Returns a #GOptionGroup for the commandline arguments recognized by GEGL.
++ */
+ GOptionGroup * gegl_get_option_group  (void);
++
++/**
++ * gegl_exit:
++ *
++ * Call this function when you're done using GEGL. It will clean up
++ * caches and write/dump debug information if the correct debug flags
++ * are set.
++ */
+ void           gegl_exit              (void);
+ 
++/**
++ * gegl_get_debug_enabled:
++ *
++ * Check if gegl has debugging turned on.
++ *
++ * Return value: TRUE if debugging is turned on, FALSE otherwise.
++ */
+ gboolean       gegl_get_debug_enabled (void); /* should be moved into config */
+ 
+ void           gegl_get_version          (int *major,
+diff --git a/gegl/gegl-plugin.h b/gegl/gegl-plugin.h
+index c545e73..2eb5282 100644
+--- gegl/gegl-plugin.h
++++ gegl/gegl-plugin.h
+@@ -127,16 +127,17 @@ const gchar   * gegl_extension_handler_get_saver   (const gchar         *extensi
+ typedef struct
+ {
+   GObject       parent_instance;
+-  void (* get) (GeglSampler *self,
+-                gdouble      x,
+-                gdouble      y,
+-                GeglMatrix2 *scale,
+-                void        *output);
++  void (* get) (GeglSampler    *self,
++                gdouble         x,
++                gdouble         y,
++                GeglMatrix2    *scale,
++                void           *output,
++                GeglAbyssPolicy repeat_mode);
+ } SamplerMock;
+ 
+ 
+-#define gegl_sampler_get(sampler,x,y,scale,dest) \
+-  ((SamplerMock*)(sampler))->get((sampler),(x),(y),(scale),(dest))
++#define gegl_sampler_get(sampler,x,y,scale,dest,repeat) \
++  ((SamplerMock*)(sampler))->get((sampler),(x),(y),(scale),(dest),(repeat))
+ 
+ #include <glib-object.h>
+ #include <babl/babl.h>
+diff --git a/gegl/gegl-types-internal.h b/gegl/gegl-types-internal.h
+index 668f868..ca018da 100644
+--- gegl/gegl-types-internal.h
++++ gegl/gegl-types-internal.h
+@@ -24,7 +24,7 @@ G_BEGIN_DECLS
+ 
+ typedef struct _GeglCRVisitor        GeglCRVisitor;
+ typedef struct _GeglDebugRectVisitor GeglDebugRectVisitor;
+-typedef struct _GeglEvalMgr          GeglEvalMgr;
++typedef struct _GeglEvalManager      GeglEvalManager;
+ typedef struct _GeglEvalVisitor      GeglEvalVisitor;
+ typedef struct _GeglFinishVisitor    GeglFinishVisitor;
+ typedef struct _GeglGraph            GeglGraph;
+diff --git a/gegl/gegl-types.h b/gegl/gegl-types.h
+index f3d10b8..f068a14 100644
+--- gegl/gegl-types.h
++++ gegl/gegl-types.h
+@@ -39,7 +39,13 @@ typedef enum
+   GEGL_BLIT_DIRTY    = 1 << 1
+ } GeglBlitFlags;
+ 
++
+ typedef struct _GeglConfig GeglConfig;
++GType gegl_config_get_type (void) G_GNUC_CONST;
++#define GEGL_TYPE_CONFIG            (gegl_config_get_type ())
++#define GEGL_CONFIG(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_CONFIG, GeglConfig))
++#define GEGL_IS_CONFIG(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_CONFIG))
++
+ typedef struct _GeglCurve  GeglCurve;
+ typedef struct _GeglPath   GeglPath;
+ typedef struct _GeglColor  GeglColor;
+diff --git a/gegl/gegl-xml.c b/gegl/gegl-xml.c
+index 90cdecb..a6ae802 100644
+--- gegl/gegl-xml.c
++++ gegl/gegl-xml.c
+@@ -27,11 +27,6 @@
+ #include "gegl.h"
+ #include "gegl-types-internal.h"
+ #include "graph/gegl-node.h"
+-#include "graph/gegl-pad.h"
+-#include "operation/gegl-operation.h"
+-#include "property-types/gegl-color.h"
+-#include "property-types/gegl-curve.h"
+-#include "property-types/gegl-path.h"
+ #include "property-types/gegl-paramspecs.h"
+ #include "gegl-instrument.h"
+ #include "gegl-xml.h"
+@@ -108,12 +103,10 @@ static void param_set (ParseData   *pd,
+   else if (strcmp (param_name, "operation") &&
+            strcmp (param_name, "type"))
+     {
+-      GeglOperation *operation;
+       GParamSpec    *paramspec;
+ set_clone_prop_as_well:
+ 
+-      operation = new->operation;
+-      paramspec = g_object_class_find_property (G_OBJECT_GET_CLASS (operation), param_name);
++      paramspec = gegl_node_find_property (new, param_name);
+ 
+       if (!paramspec)
+         {
+@@ -272,12 +265,16 @@ static void start_element (GMarkupParseContext *context,
+       else
+         {
+         }
++
+       pd->state  = STATE_TREE_NORMAL;
+       pd->parent = g_list_prepend (pd->parent, new);
+ 
+-      gegl_node_get_output_proxy (new, "output"); /* creates the pad if it doesn't exist */
+       if (pd->iter)
+-        gegl_node_connect_from (pd->iter, "input", new, "output");
++	{
++	  gegl_node_get_output_proxy (pd->iter, "output");
++	  gegl_node_connect_from (pd->iter, "input", new, "output");
++	}
++
+       pd->iter = gegl_node_get_output_proxy (new, "output");
+     }
+   else if (!strcmp (element_name, "graph"))
+@@ -392,8 +389,10 @@ static void start_element (GMarkupParseContext *context,
+         }
+       else
+         {
+-          if (pd->iter)
+-            gegl_node_connect_from (pd->iter, "input", new, "output");
++          if (pd->iter && gegl_node_has_pad(new, "output"))
++	    {
++	      gegl_node_connect_from (pd->iter, "input", new, "output");
++	    }
+         }
+       pd->parent = g_list_prepend (pd->parent, new);
+       pd->state  = STATE_TREE_FIRST_CHILD;
+@@ -431,7 +430,7 @@ static void end_element (GMarkupParseContext *context,
+   else if (!strcmp (element_name, "tree") ||
+            !strcmp (element_name, "layers"))
+     {
+-      if (gegl_node_get_pad (pd->iter, "input"))
++      if (gegl_node_get_producer (pd->iter, "input", NULL))
+         {
+           gegl_node_connect_from (pd->iter, "input",
+                                   gegl_node_get_input_proxy (GEGL_NODE (pd->parent->data), "input"),
+@@ -969,15 +968,11 @@ add_stack (SerializeState *ss,
+ 
+       while (iter)
+         {
+-          GeglPad     *input, *aux;
+           const gchar *id = NULL;
+           gchar       *class;
+           gegl_node_get (iter, "operation", &class, NULL);
+ 
+-          input = gegl_node_get_pad (iter, "input");
+-          aux   = gegl_node_get_pad (iter, "aux");
+-
+-          if (gegl_node_get_num_sinks (iter) > 1)
++          if (gegl_node_get_consumers (iter, "output", NULL, NULL) > 1)
+             {
+               const gchar *new_id = g_hash_table_lookup (ss->clones, iter);
+               if (new_id)
+@@ -1007,13 +1002,9 @@ add_stack (SerializeState *ss,
+                 }
+               else
+                 {
+-                  if (aux &&
+-                      gegl_pad_get_connected_to (aux))
++                  GeglNode *source_node = gegl_node_get_producer (iter, "aux", NULL);
++                  if (source_node)
+                     {
+-                      GeglPad  *source_pad;
+-                      GeglNode *source_node;
+-                      source_pad  = gegl_pad_get_connected_to (aux);
+-                      source_node = gegl_pad_get_node (source_pad);
+                       {
+                         GeglNode *graph = g_object_get_data (G_OBJECT (source_node),
+                                                              "graph");
+@@ -1077,26 +1068,19 @@ add_stack (SerializeState *ss,
+                 }
+             }
+           id = NULL;
+-          if (input)
+-            {
+-              GeglPad *source_pad;
+-              source_pad = gegl_pad_get_connected_to (input);
+-              if (source_pad)
+-                {
+-                  GeglNode *source_node = gegl_pad_get_node (source_pad);
+-                  GeglNode *graph       = g_object_get_data (G_OBJECT (source_node),
+-                                                             "graph");
+-                  if (graph)
+-                    source_node = graph;
+-                  iter = source_node;
+-                }
+-              else
+-                iter = NULL;
+-            }
+-          else
+-            {
++          {
++            GeglNode *source_node = gegl_node_get_producer (iter, "input", NULL);
++            if (source_node)
++              {
++                GeglNode *graph       = g_object_get_data (G_OBJECT (source_node),
++                                                           "graph");
++                if (graph)
++                  source_node = graph;
++                iter = source_node;
++              }
++            else
+               iter = NULL;
+-            }
++          }
+ 
+           g_free (class);
+         }
+@@ -1117,7 +1101,8 @@ gegl_node_to_xml (GeglNode    *gegl,
+   ss.clones      = g_hash_table_new (NULL, NULL);
+   ss.terse       = FALSE;
+ 
+-  gegl = gegl_node_get_output_proxy (gegl, "output");
++  if(!(gegl->is_graph || gegl->operation))
++    gegl = gegl_node_get_output_proxy(gegl, "output");
+ 
+   g_string_append (ss.buf, "<?xml version='1.0' encoding='UTF-8'?>\n");
+   g_string_append (ss.buf, "<gegl>\n");
+diff --git a/gegl/gegl-xml.h b/gegl/gegl-xml.h
+index db39f64..af9311b 100644
+--- gegl/gegl-xml.h
++++ gegl/gegl-xml.h
+@@ -19,8 +19,6 @@
+ #ifndef GEGL_XML_H
+ #define GEGL_XML_H
+ 
+-#include "gegl-types-internal.h"
+-
+ gchar    * gegl_node_to_xml        (GeglNode    *gegl,
+                                     const gchar *path_root);
+ GeglNode * gegl_node_new_from_xml  (const gchar *xmldata,
+diff --git a/gegl/gegl.deps.in b/gegl/gegl.deps.in
+new file mode 100644
+index 0000000..e69de29
+diff --git a/gegl/gegl.h b/gegl/gegl.h
+index 4884401..c471972 100644
+--- gegl/gegl.h
++++ gegl/gegl.h
+@@ -396,7 +396,7 @@ void          gegl_node_get_valist       (GeglNode      *node,
+  */
+ 
+ /**
+- * gegl_node_blit:
++ * gegl_node_blit: (skip)
+  * @node: a #GeglNode
+  * @scale: the scale to render at 1.0 is default, other values changes the
+  * width/height of the sampled region.
+@@ -825,6 +825,8 @@ gboolean       gegl_processor_work          (GeglProcessor *processor,
+  * "cache-size" "quality" and "swap", the two first is an integer denoting
+  * number of bytes, the secons a double value between 0 and 1 and the last
+  * the path of the directory to swap to (or "ram" to not use diskbased swap)
++ *
++ * Return value: (transfer none): a #GeglConfig
+  */
+ GeglConfig      * gegl_config (void);
+ 
+diff --git a/gegl/graph/gegl-node.c b/gegl/graph/gegl-node.c
+index bb864b3..f3aa3b6 100644
+--- gegl/graph/gegl-node.c
++++ gegl/graph/gegl-node.c
+@@ -39,7 +39,7 @@
+ #include "operation/gegl-operations.h"
+ #include "operation/gegl-operation-meta.h"
+ 
+-#include "process/gegl-eval-mgr.h"
++#include "process/gegl-eval-manager.h"
+ #include "process/gegl-have-visitor.h"
+ #include "process/gegl-prepare-visitor.h"
+ #include "process/gegl-finish-visitor.h"
+@@ -64,14 +64,14 @@ enum
+ 
+ struct _GeglNodePrivate
+ {
+-  GSList         *source_connections;
+-  GSList         *sink_connections;
+-  GSList         *children;  /*  used for children */
+-  GeglNode       *parent;
+-  gchar          *name;
+-  GeglProcessor  *processor;
+-  GHashTable     *contexts;
+-  GeglEvalMgr    *eval_mgr[GEGL_MAX_THREADS];
++  GSList          *source_connections;
++  GSList          *sink_connections;
++  GSList          *children;  /*  used for children */
++  GeglNode        *parent;
++  gchar           *name;
++  GeglProcessor   *processor;
++  GHashTable      *contexts;
++  GeglEvalManager *eval_manager[GEGL_MAX_THREADS];
+ };
+ 
+ 
+@@ -235,10 +235,10 @@ gegl_node_dispose (GObject *gobject)
+   {
+     gint i;
+     for (i=0; i<GEGL_MAX_THREADS; i++)
+-      if (self->priv->eval_mgr[i])
++      if (self->priv->eval_manager[i])
+         {
+-          g_object_unref (self->priv->eval_mgr[i]);
+-          self->priv->eval_mgr[i] = NULL;
++          g_object_unref (self->priv->eval_manager[i]);
++          self->priv->eval_manager[i] = NULL;
+         }
+   }
+ 
+@@ -540,6 +540,7 @@ gegl_node_invalidated (GeglNode            *node,
+     {
+       if (rect && clear_cache)
+         gegl_buffer_clear (GEGL_BUFFER (node->cache), rect);
++
+       gegl_cache_invalidate (node->cache, rect);
+     }
+   node->valid_have_rect = FALSE;
+@@ -578,6 +579,34 @@ gegl_node_source_invalidated (GeglNode            *source,
+   gegl_node_invalidated (destination, &dirty_rect, FALSE);
+ }
+ 
++static GSList *
++gegl_node_get_depends_on (GeglNode *self);
++
++static gboolean
++gegl_node_has_source (GeglNode *self,
++                      GeglNode *potential_source)
++{
++  GSList *producers, *p;
++  gboolean found = FALSE;
++
++  if (self == potential_source)
++    return TRUE;
++
++  producers = gegl_node_get_depends_on (self);
++  for (p = producers; p; p = p->next)
++    {
++      if (p->data == potential_source)
++        found = TRUE;
++      else
++        found = gegl_node_has_source (p->data, potential_source);
++      if (found)
++        break;
++    }
++  g_slist_free (producers);
++
++  return found;
++}
++
+ gboolean
+ gegl_node_connect_from (GeglNode    *sink,
+                         const gchar *sink_pad_name,
+@@ -594,6 +623,12 @@ gegl_node_connect_from (GeglNode    *sink,
+   g_return_val_if_fail (GEGL_IS_NODE (source), FALSE);
+   g_return_val_if_fail (source_pad_name != NULL, FALSE);
+ 
++  if (gegl_node_has_source (source, sink))
++    {
++      g_warning ("Construction of loop requested, bailing\n");
++      return FALSE;
++    }
++
+   /* For graph nodes we implicitly use the proxy nodes */
+   if (sink->is_graph)
+     {
+@@ -829,16 +864,16 @@ gegl_node_link_many (GeglNode *source,
+   va_end (var_args);
+ }
+ 
+-static void gegl_node_ensure_eval_mgr (GeglNode    *self,
++static void gegl_node_ensure_eval_manager (GeglNode    *self,
+                                        const gchar *pad,
+                                        gint         no)
+ {
+-  if (!self->priv->eval_mgr[no])
+-    self->priv->eval_mgr[no] = gegl_eval_mgr_new (self, pad);
++  if (!self->priv->eval_manager[no])
++    self->priv->eval_manager[no] = gegl_eval_manager_new (self, pad);
+ }
+ 
+-/* Will set the eval_mgr's roi to the supplied roi if defined, otherwise
+- * it will use the node's bounding box. Then the gegl_eval_mgr_apply will
++/* Will set the eval_manager's roi to the supplied roi if defined, otherwise
++ * it will use the node's bounding box. Then the gegl_eval_manager_apply will
+  * be called.
+  */
+ static GeglBuffer *
+@@ -858,13 +893,13 @@ gegl_node_apply_roi (GeglNode            *self,
+ 
+   if (roi)
+     {
+-      self->priv->eval_mgr[tid]->roi = *roi;
++      self->priv->eval_manager[tid]->roi = *roi;
+     }
+   else
+     {
+-      self->priv->eval_mgr[tid]->roi = gegl_node_get_bounding_box (self);
++      self->priv->eval_manager[tid]->roi = gegl_node_get_bounding_box (self);
+     }
+-  buffer = gegl_eval_mgr_apply (self->priv->eval_mgr[tid]);
++  buffer = gegl_eval_manager_apply (self->priv->eval_manager[tid]);
+   return buffer;
+ }
+ 
+@@ -975,7 +1010,7 @@ gegl_node_blit (GeglNode            *self,
+         {
+           data[i] = data[0];
+           data[i].roi = *roi;
+-          gegl_node_ensure_eval_mgr (self, "output", i);
++          gegl_node_ensure_eval_manager (self, "output", i);
+           if (horizontal)
+             {
+               data[i].roi.width = roi->width / threads;
+@@ -1002,8 +1037,7 @@ gegl_node_blit (GeglNode            *self,
+ 
+       if (threads==1)
+         {
+-          for (i=0; i<threads; i++)
+-              spawnrender (&data[i], NULL);
++          spawnrender (&data[0], NULL);
+         }
+       else
+         {
+@@ -1017,19 +1051,19 @@ gegl_node_blit (GeglNode            *self,
+           g_mutex_unlock (mutex);
+         }
+     }
+-#else /* thread free version, could be removed, left behind in case it 
++#else /* thread free version, could be removed, left behind in case it
+          is needed for debugging
+        */
+     {
+       GeglBuffer *buffer;
+ 
+-      gegl_node_ensure_eval_mgr (self, "output", 0);
++      gegl_node_ensure_eval_manager (self, "output", 0);
+       buffer = gegl_node_apply_roi (self, "output", roi, 0);
+       if (buffer && destination_buf)
+         {
+           if (destination_buf)
+             {
+-              gegl_buffer_get (buffer, 1.0, roi, format, destination_buf, rowstride);
++              gegl_buffer_get (buffer, 1.0, roi, format, destination_buf, rowstride, GEGL_REPEAT_MODE_ZERO);
+             }
+ 
+           if (scale != 1.0)
+@@ -1248,6 +1282,7 @@ gegl_node_set_operation_object (GeglNode      *self,
+     GSList   *old_pads        = NULL;
+     GeglNode *input           = NULL;
+     GeglNode *aux             = NULL;
++    GeglNode *aux2            = NULL;
+ 
+     if (self->operation)
+       g_object_unref (self->operation);
+@@ -1270,6 +1305,7 @@ gegl_node_set_operation_object (GeglNode      *self,
+       }
+     input = gegl_node_get_producer (self, "input", NULL);
+     aux   = gegl_node_get_producer (self, "aux", NULL);
++    aux2  = gegl_node_get_producer (self, "aux2", NULL);
+ 
+     gegl_node_disconnect_sources (self);
+     gegl_node_disconnect_sinks (self);
+@@ -1289,6 +1325,8 @@ gegl_node_set_operation_object (GeglNode      *self,
+       gegl_node_connect_from (self, "input", input, "output");
+     if (aux)
+       gegl_node_connect_from (self, "aux", aux, "output");
++    if (aux2)
++      gegl_node_connect_from (self, "aux2", aux2, "output");
+     if (output)
+       gegl_node_connect_to (self, "output", output, output_dest_pad);
+ 
+@@ -1660,25 +1698,25 @@ gegl_node_get_producer (GeglNode *node,
+     return NULL;
+   ret = gegl_pad_get_node (pad);
+ 
+-    if(ret)
+-      {
+-        const gchar *name;
+-        name = gegl_node_get_name (ret);
+-        if (name && !strcmp (name, "proxynop-output"))
+-          {
+-            ret = g_object_get_data (G_OBJECT (ret), "graph");
+-            /* XXX: needs testing whether this returns the correct value
+-             * for non "output" output pads.
+-             */
+-            if (output_pad_name)
+-              *output_pad_name = g_strdup (gegl_pad_get_name (pad));
+-          }
+-        else
+-          {
+-            if (output_pad_name)
+-              *output_pad_name = g_strdup (gegl_pad_get_name (pad));
+-          }
+-      }
++  if(ret)
++    {
++      const gchar *name;
++      name = gegl_node_get_name (ret);
++      if (name && !strcmp (name, "proxynop-output"))
++        {
++          ret = g_object_get_data (G_OBJECT (ret), "graph");
++          /* XXX: needs testing whether this returns the correct value
++           * for non "output" output pads.
++           */
++          if (output_pad_name)
++            *output_pad_name = g_strdup (gegl_pad_get_name (pad));
++        }
++      else
++        {
++          if (output_pad_name)
++            *output_pad_name = g_strdup (gegl_pad_get_name (pad));
++        }
++    }
+   return ret;
+ }
+ 
+@@ -1730,6 +1768,9 @@ gegl_node_get_bounding_box (GeglNode *root)
+   g_object_unref (root);
+   g_free (id);
+ 
++  if (root->cache)
++    gegl_buffer_set_extent (GEGL_BUFFER (root->cache), &root->have_rect);
++
+   root->valid_have_rect = TRUE;
+   return root->have_rect;
+ }
+@@ -1796,10 +1837,10 @@ gegl_node_get_context (GeglNode *self,
+                        gpointer  context_id)
+ {
+   GeglOperationContext *context = NULL;
+-  g_mutex_lock (self->mutex);
++  //g_mutex_lock (self->mutex);
+ 
+   context = g_hash_table_lookup (self->priv->contexts, context_id);
+-  g_mutex_unlock (self->mutex);
++  //g_mutex_unlock (self->mutex);
+   return context;
+ }
+ 
+@@ -1917,9 +1958,13 @@ gegl_node_get_consumers (GeglNode      *node,
+   GeglPad *pad;
+   gchar  **pasp = NULL;
+ 
+-  g_return_val_if_fail (GEGL_IS_NODE (node), 0);
+   g_return_val_if_fail (output_pad != NULL, 0);
+ 
++  if(node->is_graph)
++    node = gegl_node_get_output_proxy(node, "output");
++
++  g_return_val_if_fail (GEGL_IS_NODE (node), 0);
++
+   pad = gegl_node_get_pad (node, output_pad);
+ 
+   if (!pad)
+@@ -1956,10 +2001,21 @@ gegl_node_get_consumers (GeglNode      *node,
+     pasp_pos = (n_connections + 1) * sizeof (void *);
+     for (iter = connections; iter; iter = g_slist_next (iter))
+       {
+-        GeglConnection *connection = iter->data;
+-        GeglPad        *pad        = gegl_connection_get_sink_pad (connection);
+-        GeglNode       *node       = gegl_connection_get_sink_node (connection);
+-        const gchar    *pad_name   = gegl_pad_get_name (pad);
++        GeglConnection  *connection = iter->data;
++        GeglPad                 *pad        = gegl_connection_get_sink_pad (connection);
++        GeglNode        *node       = gegl_connection_get_sink_node (connection);
++        const gchar     *pad_name   = gegl_pad_get_name (pad);
++        const gchar     *name       = gegl_node_get_name(node);
++
++        const gchar* proxy_name = g_strconcat("proxynop-", pad_name, NULL);
++        if(!strcmp(name, proxy_name))
++          {
++            node = g_object_get_data(G_OBJECT(node), "graph");
++            name = gegl_node_get_name(node);
++          }
++        else
++          {
++          }
+ 
+         if (nodes)
+           (*nodes)[i] = node;
+@@ -1984,10 +2040,7 @@ void
+ gegl_node_emit_computed (GeglNode *node,
+                          const GeglRectangle *rect)
+ {
+-  static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
+-  g_static_mutex_lock (&mutex);
+   g_signal_emit (node, gegl_node_signals[COMPUTED], 0, rect, NULL, NULL);
+-  g_static_mutex_unlock (&mutex);
+ }
+ 
+ static void
+@@ -2015,6 +2068,7 @@ gegl_node_get_cache (GeglNode *node)
+       pad = gegl_node_get_pad (node, "output");
+       if (!pad)
+         return NULL;
++
+       format = gegl_pad_get_format (pad);
+       if (!format)
+         {
+@@ -2025,6 +2079,11 @@ gegl_node_get_cache (GeglNode *node)
+                                   "node", node,
+                                   "format", format,
+                                   NULL);
++
++      /* gegl_node_get_bounding_box must be called at least once to compute
++         an initial have_rect for the extent of the cache */
++      gegl_node_get_bounding_box (node);
++
+       g_signal_connect (G_OBJECT (node->cache), "computed",
+                         (GCallback) gegl_node_computed_event,
+                         node);
+diff --git a/gegl/graph/gegl-pad.c b/gegl/graph/gegl-pad.c
+index 1422e25..078bf28 100644
+--- gegl/graph/gegl-pad.c
++++ gegl/graph/gegl-pad.c
+@@ -251,7 +251,7 @@ static void
+ visitable_accept (GeglVisitable *visitable,
+                   GeglVisitor   *visitor)
+ {
+-  gegl_visitor_visit_pad (visitor, GEGL_PAD (visitable));
++  gegl_visitor_visit_pad (visitor, (GeglPad*) (visitable));
+ }
+ 
+ static GSList *
+diff --git a/gegl/graph/gegl-visitable.c b/gegl/graph/gegl-visitable.c
+index e1dcfb7..a0f6924 100644
+--- gegl/graph/gegl-visitable.c
++++ gegl/graph/gegl-visitable.c
+@@ -63,7 +63,7 @@ gegl_visitable_accept (GeglVisitable *interface,
+ {
+   GeglVisitableClass *interface_class;
+ 
+-  g_return_if_fail (GEGL_IS_VISITABLE (interface));
++  //g_return_if_fail (GEGL_IS_VISITABLE (interface));
+ 
+   interface_class = GEGL_VISITABLE_GET_CLASS (interface);
+ 
+diff --git a/gegl/opencl/cl.h b/gegl/opencl/cl.h
+index c68f985..cfae62f 100644
+--- gegl/opencl/cl.h
++++ gegl/opencl/cl.h
+@@ -26,11 +26,7 @@
+ #ifndef __OPENCL_CL_H
+ #define __OPENCL_CL_H
+ 
+-#ifdef __APPLE__
+-#include <OpenCL/cl_platform.h>
+-#else
+ #include "cl_platform.h"
+-#endif
+ 
+ #ifdef __cplusplus
+ extern "C" {
+diff --git a/gegl/opencl/cl_ext.h b/gegl/opencl/cl_ext.h
+index be80e74..c0bdffa 100644
+--- gegl/opencl/cl_ext.h
++++ gegl/opencl/cl_ext.h
+@@ -34,8 +34,8 @@ extern "C" {
+ #endif
+ 
+ #ifdef __APPLE__
+-	#include <OpenCL/cl.h>
+-    #include <AvailabilityMacros.h>
++	#include "cl.h"
++  #include <AvailabilityMacros.h>
+ #else
+ 	#include "cl.h"
+ #endif
+diff --git a/gegl/opencl/cl_gl.h b/gegl/opencl/cl_gl.h
+index ae87c4e..d8eb20d 100644
+--- gegl/opencl/cl_gl.h
++++ gegl/opencl/cl_gl.h
+@@ -33,7 +33,7 @@
+ #define __OPENCL_CL_GL_H
+ 
+ #ifdef __APPLE__
+-#include <OpenCL/cl.h>
++#include "cl.h"
+ #include <OpenGL/CGLDevice.h>
+ #else
+ #include "cl.h"
+diff --git a/gegl/opencl/cl_gl_ext.h b/gegl/opencl/cl_gl_ext.h
+index c8a8293..1e239c3 100644
+--- gegl/opencl/cl_gl_ext.h
++++ gegl/opencl/cl_gl_ext.h
+@@ -33,11 +33,7 @@
+ extern "C" {
+ #endif
+ 
+-#ifdef __APPLE__
+-    #include <OpenCL/cl_gl.h>
+-#else
+-    #include "cl_gl.h"
+-#endif
++#include "cl_gl.h"
+ 
+ /*
+  * For each extension, follow this template
+diff --git a/gegl/opencl/gegl-cl-color-kernel.h b/gegl/opencl/gegl-cl-color-kernel.h
+index 056545b..2350d42 100644
+--- gegl/opencl/gegl-cl-color-kernel.h
++++ gegl/opencl/gegl-cl-color-kernel.h
+@@ -1,6 +1,28 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
++/* This is almost a copy-paste from babl/base color conversion functions
++
++   XXX: This code is very hard to maintain and keep in sync with BABL, we should
++        think in something better
++*/
++
+ static const char* kernel_color_source =
+-"/* This is almost a copy-paste from babl/base conversion functions in RGBA space */      \n"
+-"                                                                                         \n"
+ "/* Alpha threshold used in the reference implementation for                              \n"
+ " * un-pre-multiplication of color data:                                                  \n"
+ " *                                                                                       \n"
+diff --git a/gegl/opencl/gegl-cl-color.c b/gegl/opencl/gegl-cl-color.c
+index 379a1ac..ccd1a46 100644
+--- gegl/opencl/gegl-cl-color.c
++++ gegl/opencl/gegl-cl-color.c
+@@ -1,4 +1,29 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
++
++/* Here we have implemented in OpenCL a subset of color space conversions provided by BABL
++   that are commonly used. For now there is no support for conversions that need a intermediate
++   representation (ex: A->B, B->C, C->D), just among two color spaces.
++*/
++
+ #include "config.h"
++
+ #include "gegl.h"
+ #include "gegl/gegl-debug.h"
+ #include "gegl-cl-color.h"
+@@ -6,7 +31,7 @@
+ 
+ #include "gegl-cl-color-kernel.h"
+ 
+-static gegl_cl_run_data *kernels_color = NULL;
++static GeglClRunData *kernels_color = NULL;
+ 
+ #define CL_FORMAT_N 11
+ 
+@@ -14,49 +39,49 @@ static const Babl *format[CL_FORMAT_N];
+ 
+ enum
+ {
+-CL_RGBAU8_TO_RGBAF        = 0,
+-CL_RGBAF_TO_RGBAU8        = 1,
++  CL_RGBAU8_TO_RGBAF          = 0,
++  CL_RGBAF_TO_RGBAU8          = 1,
+ 
+-CL_RGBAF_TO_RAGABAF       = 2,
+-CL_RAGABAF_TO_RGBAF       = 3,
+-CL_RGBAU8_TO_RAGABAF      = 4,
+-CL_RAGABAF_TO_RGBAU8      = 5,
++  CL_RGBAF_TO_RAGABAF         = 2,
++  CL_RAGABAF_TO_RGBAF         = 3,
++  CL_RGBAU8_TO_RAGABAF        = 4,
++  CL_RAGABAF_TO_RGBAU8        = 5,
+ 
+-CL_RGBAF_TO_RGBA_GAMMA_F  = 6,
+-CL_RGBA_GAMMA_F_TO_RGBAF  = 7,
+-CL_RGBAU8_TO_RGBA_GAMMA_F = 8,
+-CL_RGBA_GAMMA_F_TO_RGBAU8 = 9,
++  CL_RGBAF_TO_RGBA_GAMMA_F    = 6,
++  CL_RGBA_GAMMA_F_TO_RGBAF    = 7,
++  CL_RGBAU8_TO_RGBA_GAMMA_F   = 8,
++  CL_RGBA_GAMMA_F_TO_RGBAU8   = 9,
+ 
+-CL_RGBAF_TO_YCBCRAF       = 10,
+-CL_YCBCRAF_TO_RGBAF       = 11,
+-CL_RGBAU8_TO_YCBCRAF      = 12,
+-CL_YCBCRAF_TO_RGBAU8      = 13,
++  CL_RGBAF_TO_YCBCRAF         = 10,
++  CL_YCBCRAF_TO_RGBAF         = 11,
++  CL_RGBAU8_TO_YCBCRAF        = 12,
++  CL_YCBCRAF_TO_RGBAU8        = 13,
+ 
+-CL_RGBU8_TO_RGBAF         = 14,
+-CL_RGBAF_TO_RGBU8         = 15,
++  CL_RGBU8_TO_RGBAF           = 14,
++  CL_RGBAF_TO_RGBU8           = 15,
+ 
+-CL_YU8_TO_YF              = 16,
++  CL_YU8_TO_YF                = 16,
+ 
+-CL_RGBAF_TO_YAF           = 17,
+-CL_YAF_TO_RGBAF           = 18,
+-CL_RGBAU8_TO_YAF          = 19,
+-CL_YAF_TO_RGBAU8          = 20,
++  CL_RGBAF_TO_YAF             = 17,
++  CL_YAF_TO_RGBAF             = 18,
++  CL_RGBAU8_TO_YAF            = 19,
++  CL_YAF_TO_RGBAU8            = 20,
+ 
+-CL_RGBAF_TO_RGBA_GAMMA_U8 = 21,
+-CL_RGBA_GAMMA_U8_TO_RGBAF = 22,
++  CL_RGBAF_TO_RGBA_GAMMA_U8   = 21,
++  CL_RGBA_GAMMA_U8_TO_RGBAF   = 22,
+ 
+-CL_RGBAF_TO_RGB_GAMMA_U8  = 23,
+-CL_RGB_GAMMA_U8_TO_RGBAF  = 24,
++  CL_RGBAF_TO_RGB_GAMMA_U8    = 23,
++  CL_RGB_GAMMA_U8_TO_RGBAF    = 24,
+ 
+-CL_RGBA_GAMMA_U8_TO_RAGABAF = 25,
+-CL_RAGABAF_TO_RGBA_GAMMA_U8 = 26,
+-CL_RGB_GAMMA_U8_TO_RAGABAF  = 27,
+-CL_RAGABAF_TO_RGB_GAMMA_U8  = 28,
++  CL_RGBA_GAMMA_U8_TO_RAGABAF = 25,
++  CL_RAGABAF_TO_RGBA_GAMMA_U8 = 26,
++  CL_RGB_GAMMA_U8_TO_RAGABAF  = 27,
++  CL_RAGABAF_TO_RGB_GAMMA_U8  = 28,
+ 
+-CL_RGBA_GAMMA_U8_TO_YAF = 29,
+-CL_YAF_TO_RGBA_GAMMA_U8 = 30,
+-CL_RGB_GAMMA_U8_TO_YAF  = 31,
+-CL_YAF_TO_RGB_GAMMA_U8  = 32,
++  CL_RGBA_GAMMA_U8_TO_YAF     = 29,
++  CL_YAF_TO_RGBA_GAMMA_U8     = 30,
++  CL_RGB_GAMMA_U8_TO_YAF      = 31,
++  CL_YAF_TO_RGB_GAMMA_U8      = 32,
+ };
+ 
+ void
+@@ -126,7 +151,8 @@ gegl_cl_color_compile_kernels(void)
+ 
+ 
+ static gint
+-choose_kernel (const Babl *in_format, const Babl *out_format)
++choose_kernel (const Babl *in_format,
++               const Babl *out_format)
+ {
+   gint kernel = -1;
+ 
+@@ -198,7 +224,8 @@ choose_kernel (const Babl *in_format, const Babl *out_format)
+ }
+ 
+ gboolean
+-gegl_cl_color_babl (const Babl *buffer_format, size_t *bytes)
++gegl_cl_color_babl (const Babl *buffer_format,
++                    size_t     *bytes)
+ {
+   int i;
+   gboolean supported_format = FALSE;
+@@ -235,23 +262,27 @@ gegl_cl_color_babl (const Babl *buffer_format, size_t *bytes)
+   return TRUE;
+ }
+ 
+-gegl_cl_color_op
+-gegl_cl_color_supported (const Babl *in_format, const Babl *out_format)
++GeglClColorOp
++gegl_cl_color_supported (const Babl *in_format,
++                         const Babl *out_format)
+ {
+   if (in_format == out_format)
+     return GEGL_CL_COLOR_EQUAL;
+ 
+   if (choose_kernel (in_format, out_format) >= 0)
+     return GEGL_CL_COLOR_CONVERT;
+-  else
+-    return GEGL_CL_COLOR_NOT_SUPPORTED;
++
++  return GEGL_CL_COLOR_NOT_SUPPORTED;
+ }
+ 
+ #define CL_ERROR {GEGL_NOTE (GEGL_DEBUG_OPENCL, "Error in %s:%d@%s - %s\n", __FILE__, __LINE__, __func__, gegl_cl_errstring(errcode)); return FALSE;}
+ 
+ gboolean
+-gegl_cl_color_conv (cl_mem in_tex, cl_mem out_tex, const size_t size,
+-                    const Babl *in_format, const Babl *out_format)
++gegl_cl_color_conv (cl_mem         in_tex,
++                    cl_mem         out_tex,
++                    const size_t   size,
++                    const Babl    *in_format,
++                    const Babl    *out_format)
+ {
+   int errcode;
+ 
+diff --git a/gegl/opencl/gegl-cl-color.h b/gegl/opencl/gegl-cl-color.h
+index d9ca87f..fd0a731 100644
+--- gegl/opencl/gegl-cl-color.h
++++ gegl/opencl/gegl-cl-color.h
+@@ -1,3 +1,21 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #ifndef __GEGL_CL_COLOR_H__
+ #define __GEGL_CL_COLOR_H__
+ 
+@@ -9,15 +27,28 @@ typedef enum
+   GEGL_CL_COLOR_NOT_SUPPORTED = 0,
+   GEGL_CL_COLOR_EQUAL         = 1,
+   GEGL_CL_COLOR_CONVERT       = 2
+-} gegl_cl_color_op;
++} GeglClColorOp;
+ 
+-void gegl_cl_color_compile_kernels(void);
++/** Compile and register OpenCL kernel for color conversion */
++void          gegl_cl_color_compile_kernels(void);
+ 
+-gboolean gegl_cl_color_babl (const Babl *buffer_format, size_t *bytes);
++/** Return TRUE if the Babl format is supported with OpenCL.
++ *  If present, returns the byte per pixel in *bytes
++ */
++gboolean      gegl_cl_color_babl (const Babl *buffer_format,
++                                  size_t     *bytes);
+ 
+-gegl_cl_color_op gegl_cl_color_supported (const Babl *in_format, const Babl *out_format);
++/** Return TRUE if the convertion is OpenCL supported */
++GeglClColorOp gegl_cl_color_supported (const Babl *in_format,
++                                       const Babl *out_format);
+ 
+-gboolean gegl_cl_color_conv (cl_mem in_tex, cl_mem aux_tex, const size_t size,
+-                             const Babl *in_format, const Babl *out_format);
++/** Copy and convert size pixels from in_tex to aux_tex.
++ *  Return TRUE if succesfull.
++ */
++gboolean      gegl_cl_color_conv (cl_mem        in_tex,
++                                  cl_mem        aux_tex,
++                                  const size_t  size,
++                                  const Babl   *in_format,
++                                  const Babl   *out_format);
+ 
+ #endif
+diff --git a/gegl/opencl/gegl-cl-init.c b/gegl/opencl/gegl-cl-init.c
+index ade7d5c..076748b 100644
+--- gegl/opencl/gegl-cl-init.c
++++ gegl/opencl/gegl-cl-init.c
+@@ -1,3 +1,26 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
++/* OpenCL Initialization
++   The API is stubbed out so we detect if OpenCL libraries are available
++   in runtime.
++*/
++
+ #include "config.h"
+ 
+ #define __GEGL_CL_INIT_MAIN__
+@@ -11,6 +34,7 @@
+ #include "gegl-cl-color.h"
+ 
+ #include "gegl/gegl-debug.h"
++#include "gegl-config.h"
+ 
+ const char *gegl_cl_errstring(cl_int err) {
+   static const char* strings[] =
+@@ -85,13 +109,33 @@ const char *gegl_cl_errstring(cl_int err) {
+   return strings[-err];
+ }
+ 
+-static gegl_cl_state cl_state = {FALSE, NULL, NULL, NULL, NULL, FALSE, 0, 0, 0, 0, "", "", "", ""};
++typedef struct
++{
++  gboolean         is_accelerated;
++  cl_context       ctx;
++  cl_platform_id   platform;
++  cl_device_id     device;
++  cl_command_queue cq;
++  cl_bool          image_support;
++  size_t           iter_height;
++  size_t           iter_width;
++  cl_ulong         max_mem_alloc;
++  cl_ulong         local_mem_size;
++
++  char platform_name   [1024];
++  char platform_version[1024];
++  char platform_ext    [1024];
++  char device_name     [1024];
++}
++GeglClState;
++
++static GeglClState cl_state = {FALSE, NULL, NULL, NULL, NULL, FALSE, 0, 0, 0, 0, "", "", "", ""};
+ static GHashTable *cl_program_hash = NULL;
+ 
+ gboolean
+ gegl_cl_is_accelerated (void)
+ {
+-  return cl_state.is_accelerated;
++  return cl_state.is_accelerated && gegl_config()->use_opencl;
+ }
+ 
+ cl_platform_id
+@@ -153,15 +197,14 @@ if ((gegl_##func = (t_##func) GetProcAddress(module, #func)) == NULL)
+ #define CL_LOAD_FUNCTION(func)                                                    \
+ if (!g_module_symbol (module, #func, (gpointer *)& gegl_##func))                  \
+   {                                                                               \
+-    g_set_error (error, 0, 0,                                                     \
+-                 "%s: %s", "libOpenCL.so", g_module_error ());                    \
++    GEGL_NOTE (GEGL_DEBUG_OPENCL, "%s: %s", "libOpenCL.so", g_module_error ());   \
+     if (!g_module_close (module))                                                 \
+       g_warning ("%s: %s", "libOpenCL.so", g_module_error ());                    \
+     return FALSE;                                                                 \
+   }                                                                               \
+ if (gegl_##func == NULL)                                                          \
+   {                                                                               \
+-    g_set_error (error, 0, 0, "symbol gegl_##func is NULL");                      \
++    GEGL_NOTE (GEGL_DEBUG_OPENCL, "symbol gegl_##func is NULL");                  \
+     if (!g_module_close (module))                                                 \
+       g_warning ("%s: %s", "libOpenCL.so", g_module_error ());                    \
+     return FALSE;                                                                 \
+@@ -178,9 +221,15 @@ gegl_cl_init (GError **error)
+     {
+       #ifdef G_OS_WIN32
+         HINSTANCE module;
+-        module = LoadLibrary ("OpenCL.dll");
+       #else
+         GModule *module;
++      #endif
++
++      babl_init();
++
++      #ifdef G_OS_WIN32
++        module = LoadLibrary ("OpenCL.dll");
++      #else
+         module = g_module_open ("libOpenCL.so", G_MODULE_BIND_LAZY);
+       #endif
+ 
+@@ -278,7 +327,9 @@ gegl_cl_init (GError **error)
+         }
+       cl_state.iter_width  /= 2;
+ 
+-      GEGL_NOTE (GEGL_DEBUG_OPENCL, "Iteration size: (%lu, %lu)", cl_state.iter_width, cl_state.iter_height);
++      GEGL_NOTE (GEGL_DEBUG_OPENCL, "Iteration size: (%lu, %lu)",
++                                    (long unsigned int)cl_state.iter_width,
++                                    (long unsigned int)cl_state.iter_height);
+ 
+       if (cl_state.image_support)
+         {
+@@ -305,33 +356,42 @@ gegl_cl_init (GError **error)
+           return FALSE;
+         }
+ 
+-    }
+-
+-  cl_state.is_accelerated = TRUE;
++      cl_state.is_accelerated = TRUE;
+ 
+-  /* XXX: this dict is being leaked */
+-  cl_program_hash = g_hash_table_new (g_str_hash, g_str_equal);
++      /* XXX: this dict is being leaked */
++      cl_program_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ 
+-  if (cl_state.is_accelerated)
+-    gegl_cl_color_compile_kernels();
++      if (cl_state.is_accelerated)
++        gegl_cl_color_compile_kernels();
+ 
+-  GEGL_NOTE (GEGL_DEBUG_OPENCL, "OK");
++      GEGL_NOTE (GEGL_DEBUG_OPENCL, "OK");
++    }
+ 
+   return TRUE;
+ }
+ 
+ #undef CL_LOAD_FUNCTION
+ 
++#define CL_SAFE_CALL(func)                                          \
++func;                                                               \
++if (errcode != CL_SUCCESS)                                          \
++{                                                                   \
++  g_warning("OpenCL error in %s, Line %u in file %s\nError:%s",     \
++            #func, __LINE__, __FILE__, gegl_cl_errstring(errcode)); \
++}
++
+ /* XXX: same program_source with different kernel_name[], context or device
+  *      will retrieve the same key
+  */
+-gegl_cl_run_data *
++GeglClRunData *
+ gegl_cl_compile_and_build (const char *program_source, const char *kernel_name[])
+ {
+   gint errcode;
+-  gegl_cl_run_data *cl_data = NULL;
++  GeglClRunData *cl_data = NULL;
++  if (!gegl_cl_is_accelerated ())
++    return NULL;
+ 
+-  if ((cl_data = (gegl_cl_run_data *)g_hash_table_lookup(cl_program_hash, program_source)) == NULL)
++  if ((cl_data = (GeglClRunData *)g_hash_table_lookup(cl_program_hash, program_source)) == NULL)
+     {
+       size_t length = strlen(program_source);
+ 
+@@ -339,7 +399,7 @@ gegl_cl_compile_and_build (const char *program_source, const char *kernel_name[]
+       guint kernel_n = 0;
+       while (kernel_name[++kernel_n] != NULL);
+ 
+-      cl_data = (gegl_cl_run_data *) g_malloc(sizeof(gegl_cl_run_data)+sizeof(cl_kernel)*kernel_n);
++      cl_data = (GeglClRunData *) g_new(GeglClRunData, 1);
+ 
+       CL_SAFE_CALL( cl_data->program = gegl_clCreateProgramWithSource(gegl_cl_get_context(), 1, &program_source,
+                                                                       &length, &errcode) );
+@@ -371,12 +431,22 @@ gegl_cl_compile_and_build (const char *program_source, const char *kernel_name[]
+           GEGL_NOTE (GEGL_DEBUG_OPENCL, "Compiling successful\n");
+         }
+ 
++      cl_data->kernel = g_new (cl_kernel, kernel_n);
++      cl_data->work_group_size = g_new (size_t, kernel_n);
++
+       for (i=0; i<kernel_n; i++)
+-        CL_SAFE_CALL( cl_data->kernel[i] =
+-                      gegl_clCreateKernel(cl_data->program, kernel_name[i], &errcode) );
++        {
++          CL_SAFE_CALL( cl_data->kernel[i] =
++                        gegl_clCreateKernel(cl_data->program, kernel_name[i], &errcode) );
++
++          CL_SAFE_CALL( errcode = gegl_clGetKernelWorkGroupInfo (cl_data->kernel[i], gegl_cl_get_device(), CL_KERNEL_WORK_GROUP_SIZE,
++                                                                 sizeof(size_t), &cl_data->work_group_size[i], NULL) );
++        }
+ 
+       g_hash_table_insert(cl_program_hash, g_strdup (program_source), (void*)cl_data);
+     }
+ 
+   return cl_data;
+ }
++
++#undef CL_SAFE_CALL
+diff --git a/gegl/opencl/gegl-cl-init.h b/gegl/opencl/gegl-cl-init.h
+index 8445ae8..2a707f4 100644
+--- gegl/opencl/gegl-cl-init.h
++++ gegl/opencl/gegl-cl-init.h
+@@ -1,63 +1,54 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #ifndef __GEGL_CL_INIT_H__
+ #define __GEGL_CL_INIT_H__
+ 
+ #include "gegl-cl-types.h"
+ 
+-#define CL_SAFE_CALL(func)                                          \
+-func;                                                               \
+-if (errcode != CL_SUCCESS)                                          \
+-{                                                                   \
+-  g_warning("OpenCL error in %s, Line %u in file %s\nError:%s",     \
+-            #func, __LINE__, __FILE__, gegl_cl_errstring(errcode)); \
+-}
+-
+-typedef struct
+-  {
+-    gboolean is_accelerated;
+-    cl_context ctx;
+-    cl_platform_id platform;
+-    cl_device_id device;
+-    cl_command_queue cq;
+-    cl_bool image_support;
+-    size_t iter_height;
+-    size_t iter_width;
+-    cl_ulong max_mem_alloc;
+-    cl_ulong local_mem_size;
+-
+-    char platform_name   [1024];
+-    char platform_version[1024];
+-    char platform_ext    [1024];
+-    char device_name     [1024];
+-  }
+-gegl_cl_state;
+-
+-const char *gegl_cl_errstring(cl_int err);
++const char *      gegl_cl_errstring(cl_int err);
+ 
+-gboolean gegl_cl_init (GError **error);
++gboolean          gegl_cl_init (GError **error);
+ 
+-gboolean gegl_cl_is_accelerated (void);
++gboolean          gegl_cl_is_accelerated (void);
+ 
+-cl_platform_id gegl_cl_get_platform (void);
++cl_platform_id    gegl_cl_get_platform (void);
+ 
+-cl_device_id gegl_cl_get_device (void);
++cl_device_id      gegl_cl_get_device (void);
+ 
+-cl_context gegl_cl_get_context (void);
++cl_context        gegl_cl_get_context (void);
+ 
+-cl_command_queue gegl_cl_get_command_queue (void);
++cl_command_queue  gegl_cl_get_command_queue (void);
+ 
+-cl_ulong gegl_cl_get_local_mem_size (void);
++cl_ulong          gegl_cl_get_local_mem_size (void);
+ 
+-size_t gegl_cl_get_iter_width (void);
++size_t            gegl_cl_get_iter_width (void);
+ 
+-size_t gegl_cl_get_iter_height (void);
++size_t            gegl_cl_get_iter_height (void);
+ 
+ typedef struct
+ {
+-  cl_program program;
+-  cl_kernel  kernel[];
+-} gegl_cl_run_data;
++  cl_program  program;
++  cl_kernel  *kernel;
++  size_t     *work_group_size;
++} GeglClRunData;
+ 
+-gegl_cl_run_data *gegl_cl_compile_and_build (const char *program_source,
++GeglClRunData *   gegl_cl_compile_and_build (const char *program_source,
+                                              const char *kernel_name[]);
+ 
+ #define GEGL_CL_CHUNK_SIZE 1024 * 1024
+diff --git a/gegl/opencl/gegl-cl-types.h b/gegl/opencl/gegl-cl-types.h
+index e51fc9a..7617482 100644
+--- gegl/opencl/gegl-cl-types.h
++++ gegl/opencl/gegl-cl-types.h
+@@ -1,3 +1,21 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #ifndef __GEGL_CL_TYPES_H__
+ #define __GEGL_CL_TYPES_H__
+ 
+@@ -10,10 +28,10 @@
+ 
+ struct _GeglClTexture
+ {
+-  cl_mem data;
+-  cl_image_format format;
+-  gint width;
+-  gint height;
++  cl_mem           data;
++  cl_image_format  format;
++  gint             width;
++  gint             height;
+ };
+ 
+ typedef struct _GeglClTexture GeglClTexture;
+diff --git a/gegl/opencl/gegl-cl.h b/gegl/opencl/gegl-cl.h
+index c660967..f7a2641 100644
+--- gegl/opencl/gegl-cl.h
++++ gegl/opencl/gegl-cl.h
+@@ -1,9 +1,26 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Victor Oliveira (victormatheus at gmail.com)
++ */
++
+ #ifndef __GEGL_CL_H__
+ #define __GEGL_CL_H__
+ 
+ #include "gegl-cl-types.h"
+ #include "gegl-cl-init.h"
+ #include "gegl-cl-color.h"
+-#include "glib/gprintf.h"
+ 
+ #endif
+diff --git a/gegl/operation/gegl-operation-point-composer.c b/gegl/operation/gegl-operation-point-composer.c
+index 5740d26..c97fbcf 100644
+--- gegl/operation/gegl-operation-point-composer.c
++++ gegl/operation/gegl-operation-point-composer.c
+@@ -30,6 +30,8 @@
+ #include "graph/gegl-pad.h"
+ #include <string.h>
+ 
++#include "gegl-buffer-private.h"
++
+ static gboolean gegl_operation_point_composer_process
+                               (GeglOperation       *operation,
+                                GeglBuffer          *input,
+@@ -150,12 +152,15 @@ gegl_operation_point_composer_cl_process (GeglOperation       *operation,
+   const Babl *aux_format = gegl_operation_get_format (operation, "aux");
+   const Babl *out_format = gegl_operation_get_format (operation, "output");
+ 
++  GeglOperationClass *operation_class = GEGL_OPERATION_GET_CLASS (operation);
+   GeglOperationPointComposerClass *point_composer_class = GEGL_OPERATION_POINT_COMPOSER_GET_CLASS (operation);
+ 
+   gint j;
+   cl_int cl_err = 0;
+   gboolean err;
+ 
++  gint foo = -1;
++
+   /* non-texturizable format! */
+   if (!gegl_cl_color_babl (in_format,  NULL) ||
+       !gegl_cl_color_babl (aux_format, NULL) ||
+@@ -165,45 +170,52 @@ gegl_operation_point_composer_cl_process (GeglOperation       *operation,
+       return FALSE;
+     }
+ 
++  GEGL_NOTE (GEGL_DEBUG_OPENCL, "GEGL_OPERATION_POINT_COMPOSER: %s", operation_class->name);
++
+   /* Process */
+   {
+     GeglBufferClIterator *i = gegl_buffer_cl_iterator_new (output,   result, out_format, GEGL_CL_BUFFER_WRITE, GEGL_ABYSS_NONE);
+                   gint read = gegl_buffer_cl_iterator_add (i, input, result, in_format,  GEGL_CL_BUFFER_READ, GEGL_ABYSS_NONE);
+     if (aux)
+-      {
+-        gint foo = gegl_buffer_cl_iterator_add (i, aux, result, aux_format,  GEGL_CL_BUFFER_READ, GEGL_ABYSS_NONE);
++      foo = gegl_buffer_cl_iterator_add (i, aux, result, aux_format,  GEGL_CL_BUFFER_READ, GEGL_ABYSS_NONE);
+ 
+-        while (gegl_buffer_cl_iterator_next (i, &err))
++    while (gegl_buffer_cl_iterator_next (i, &err))
++      {
++        if (err) return FALSE;
++        for (j=0; j < i->n; j++)
+           {
+-            if (err) return FALSE;
+-            for (j=0; j < i->n; j++)
++            if (point_composer_class->cl_process)
+               {
+-                cl_err = point_composer_class->cl_process(operation, i->tex[read][j], i->tex[foo][j], i->tex[0][j],
+-                                                          i->size[0][j], &i->roi[0][j], level);
+-                if (cl_err != CL_SUCCESS)
+-                  {
+-                    GEGL_NOTE (GEGL_DEBUG_OPENCL, "Error in %s [GeglOperationPointComposer] Kernel",
+-                               GEGL_OPERATION_CLASS (operation)->name);
+-                    return FALSE;
+-                  }
++                cl_err = point_composer_class->cl_process(operation, i->tex[read][j],
++                                                          (aux)? i->tex[foo][j] : NULL,
++                                                          i->tex[0][j], i->size[0][j], &i->roi[0][j], level);
+               }
+-          }
+-      }
+-    else
+-      {
+-        while (gegl_buffer_cl_iterator_next (i, &err))
+-          {
+-            if (err) return FALSE;
+-            for (j=0; j < i->n; j++)
++            else if (operation_class->cl_data)
++              {
++                gint p = 0;
++                GeglClRunData *cl_data = operation_class->cl_data;
++
++                cl_err = gegl_clSetKernelArg(cl_data->kernel[0], p++, sizeof(cl_mem), (void*)&i->tex[read][j]);
++                cl_err = gegl_clSetKernelArg(cl_data->kernel[0], p++, sizeof(cl_mem), (aux)? (void*)&i->tex[foo][j] : NULL);
++                cl_err = gegl_clSetKernelArg(cl_data->kernel[0], p++, sizeof(cl_mem), (void*)&i->tex[0][j]);
++
++                gegl_operation_cl_set_kernel_args (operation, cl_data->kernel[0], &p, &cl_err);
++
++                cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
++                                                     cl_data->kernel[0], 1,
++                                                     NULL, &i->size[0][j], NULL,
++                                                     0, NULL, NULL);
++              }
++            else
++              {
++                g_warning ("OpenCL support enabled, but no way to execute");
++                return FALSE;
++              }
++
++            if (cl_err != CL_SUCCESS)
+               {
+-                cl_err = point_composer_class->cl_process(operation, i->tex[read][j], NULL, i->tex[0][j],
+-                                                          i->size[0][j], &i->roi[0][j], level);
+-                if (cl_err != CL_SUCCESS)
+-                  {
+-                    GEGL_NOTE (GEGL_DEBUG_OPENCL, "Error in %s [GeglOperationPointComposer] Kernel",
+-                               GEGL_OPERATION_CLASS (operation)->name);
+-                    return FALSE;
+-                  }
++                GEGL_NOTE (GEGL_DEBUG_OPENCL, "Error in GeglOperationPointComposer Kernel: %s", gegl_cl_errstring(cl_err));
++                return FALSE;
+               }
+           }
+       }
+@@ -219,6 +231,7 @@ gegl_operation_point_composer_process (GeglOperation       *operation,
+                                        const GeglRectangle *result,
+                                        gint                 level)
+ {
++  GeglOperationClass *operation_class = GEGL_OPERATION_GET_CLASS (operation);
+   GeglOperationPointComposerClass *point_composer_class = GEGL_OPERATION_POINT_COMPOSER_GET_CLASS (operation);
+   const Babl *in_format  = gegl_operation_get_format (operation, "input");
+   const Babl *aux_format = gegl_operation_get_format (operation, "aux");
+@@ -226,7 +239,7 @@ gegl_operation_point_composer_process (GeglOperation       *operation,
+ 
+   if ((result->width > 0) && (result->height > 0))
+     {
+-      if (gegl_cl_is_accelerated () && point_composer_class->cl_process)
++      if (gegl_cl_is_accelerated () && (operation_class->cl_data || point_composer_class->cl_process))
+         {
+           if (gegl_operation_point_composer_cl_process (operation, input, aux, output, result, level))
+             return TRUE;
+diff --git a/gegl/operation/gegl-operation-point-filter.c b/gegl/operation/gegl-operation-point-filter.c
+index 211563e..8b3a784 100644
+--- gegl/operation/gegl-operation-point-filter.c
++++ gegl/operation/gegl-operation-point-filter.c
+@@ -85,6 +85,7 @@ gegl_operation_point_filter_cl_process (GeglOperation       *operation,
+   const Babl *in_format  = gegl_operation_get_format (operation, "input");
+   const Babl *out_format = gegl_operation_get_format (operation, "output");
+ 
++  GeglOperationClass *operation_class = GEGL_OPERATION_GET_CLASS (operation);
+   GeglOperationPointFilterClass *point_filter_class = GEGL_OPERATION_POINT_FILTER_GET_CLASS (operation);
+ 
+   gint j;
+@@ -99,13 +100,7 @@ gegl_operation_point_filter_cl_process (GeglOperation       *operation,
+       return FALSE;
+     }
+ 
+-  GEGL_NOTE (GEGL_DEBUG_OPENCL, "BABL formats: (%s,%s) (%s,%s)\n \t Tile Size:(%d, %d)\n",
+-             babl_get_name(input->format),
+-             babl_get_name(in_format),
+-             babl_get_name(out_format),
+-             babl_get_name(output->format),
+-             input->tile_storage->tile_width,
+-             input->tile_storage->tile_height);
++  GEGL_NOTE (GEGL_DEBUG_OPENCL, "GEGL_OPERATION_POINT_FILTER: %s", operation_class->name);
+ 
+   /* Process */
+   {
+@@ -116,12 +111,35 @@ gegl_operation_point_filter_cl_process (GeglOperation       *operation,
+         if (err) return FALSE;
+         for (j=0; j < i->n; j++)
+           {
+-            cl_err = point_filter_class->cl_process(operation, i->tex[read][j], i->tex[0][j],
+-                                                    i->size[0][j], &i->roi[0][j], level);
++            if (point_filter_class->cl_process)
++              {
++                cl_err = point_filter_class->cl_process(operation, i->tex[read][j], i->tex[0][j],
++                                                        i->size[0][j], &i->roi[0][j], level);
++              }
++            else if (operation_class->cl_data)
++              {
++                gint p = 0;
++                GeglClRunData *cl_data = operation_class->cl_data;
++
++                cl_err = gegl_clSetKernelArg(cl_data->kernel[0], p++, sizeof(cl_mem), (void*)&i->tex[read][j]);
++                cl_err = gegl_clSetKernelArg(cl_data->kernel[0], p++, sizeof(cl_mem), (void*)&i->tex[  0 ][j]);
++
++                gegl_operation_cl_set_kernel_args (operation, cl_data->kernel[0], &p, &cl_err);
++
++                cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
++                                                     cl_data->kernel[0], 1,
++                                                     NULL, &i->size[0][j], NULL,
++                                                     0, NULL, NULL);
++              }
++            else
++              {
++                g_warning ("OpenCL support enabled, but no way to execute");
++                return FALSE;
++              }
++
+             if (cl_err != CL_SUCCESS)
+               {
+-                GEGL_NOTE (GEGL_DEBUG_OPENCL, "Error in %s [GeglOperationPointFilter] Kernel",
+-                           GEGL_OPERATION_CLASS (operation)->name);
++                GEGL_NOTE (GEGL_DEBUG_OPENCL, "Error in GeglOperationPointFilter Kernel: %s", gegl_cl_errstring(cl_err));
+                 return FALSE;
+               }
+           }
+@@ -141,11 +159,12 @@ gegl_operation_point_filter_process (GeglOperation       *operation,
+   const Babl *out_format = gegl_operation_get_format (operation, "output");
+   GeglOperationPointFilterClass *point_filter_class;
+ 
++  GeglOperationClass *operation_class = GEGL_OPERATION_GET_CLASS (operation);
+   point_filter_class = GEGL_OPERATION_POINT_FILTER_GET_CLASS (operation);
+ 
+   if ((result->width > 0) && (result->height > 0))
+     {
+-      if (gegl_cl_is_accelerated () && point_filter_class->cl_process)
++      if (gegl_cl_is_accelerated () && (operation_class->cl_data || point_filter_class->cl_process))
+         {
+           if (gegl_operation_point_filter_cl_process (operation, input, output, result, level))
+             return TRUE;
+diff --git a/gegl/operation/gegl-operation-sink.c b/gegl/operation/gegl-operation-sink.c
+index 9107d05..c3cca12 100644
+--- gegl/operation/gegl-operation-sink.c
++++ gegl/operation/gegl-operation-sink.c
+@@ -27,7 +27,6 @@
+ #include "gegl-operation-sink.h"
+ #include "graph/gegl-node.h"
+ #include "graph/gegl-pad.h"
+-#include "buffer/gegl-buffer-cl-cache.h"
+ 
+ 
+ enum
+diff --git a/gegl/operation/gegl-operation.c b/gegl/operation/gegl-operation.c
+index dc24e61..12fc7cf 100644
+--- gegl/operation/gegl-operation.c
++++ gegl/operation/gegl-operation.c
+@@ -88,10 +88,10 @@ gegl_operation_class_init (GeglOperationClass *klass)
+   klass->attach                    = attach;
+   klass->prepare                   = NULL;
+   klass->no_cache                  = FALSE;
+-  klass->opencl_support            = FALSE;
+   klass->get_bounding_box          = get_bounding_box;
+   klass->get_invalidated_by_change = get_invalidated_by_change;
+   klass->get_required_for_output   = get_required_for_output;
++  klass->cl_data                   = NULL;
+ }
+ 
+ static void
+@@ -283,6 +283,27 @@ gegl_operation_prepare (GeglOperation *self)
+ 
+   klass = GEGL_OPERATION_GET_CLASS (self);
+ 
++  /* build OpenCL kernel */
++  if (!klass->cl_data)
++  {
++    const gchar *cl_source = gegl_operation_class_get_key (klass, "cl-source");
++    if (cl_source)
++      {
++        char *name = strdup (klass->name);
++        const char *kernel_name[] = {name, NULL};
++        char *k;
++        for (k=name; *k; k++)
++          switch (*k)
++            {
++              case ' ': case ':': case '-':
++                *k = '_';
++                break;
++            }
++        klass->cl_data = gegl_cl_compile_and_build (cl_source, kernel_name);
++        free (name);
++      }
++  }
++
+   if (klass->prepare)
+     klass->prepare (self);
+ }
+@@ -494,6 +515,100 @@ gegl_operation_invalidate (GeglOperation       *operation,
+   gegl_node_invalidated (node, roi, TRUE);
+ }
+ 
++gboolean
++gegl_operation_cl_set_kernel_args (GeglOperation *operation,
++                                   cl_kernel      kernel,
++                                   gint          *p,
++                                   cl_int        *err)
++{
++  GParamSpec **self;
++  GParamSpec **parent;
++  guint n_self;
++  guint n_parent;
++  gint prop_no;
++
++  self = g_object_class_list_properties (
++            G_OBJECT_CLASS (g_type_class_ref (G_OBJECT_CLASS_TYPE (GEGL_OPERATION_GET_CLASS(operation)))),
++            &n_self);
++
++  parent = g_object_class_list_properties (
++            G_OBJECT_CLASS (g_type_class_ref (GEGL_TYPE_OPERATION)),
++            &n_parent);
++
++  for (prop_no=0;prop_no<n_self;prop_no++)
++    {
++      gint parent_no;
++      gboolean found=FALSE;
++      for (parent_no=0;parent_no<n_parent;parent_no++)
++        if (self[prop_no]==parent[parent_no])
++          found=TRUE;
++      /* only print properties if we are an addition compared to
++       * GeglOperation
++       */
++
++      /* Removing pads */
++      if (!strcmp(g_param_spec_get_name (self[prop_no]), "input") ||
++          !strcmp(g_param_spec_get_name (self[prop_no]), "output") ||
++          !strcmp(g_param_spec_get_name (self[prop_no]), "aux"))
++        continue;
++
++      if (!found)
++        {
++          if (g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (self[prop_no]), G_TYPE_DOUBLE))
++            {
++              gdouble value;
++              cl_float v;
++
++              g_object_get (G_OBJECT (operation), g_param_spec_get_name (self[prop_no]), &value, NULL);
++
++              v = value;
++              *err = gegl_clSetKernelArg(kernel, (*p)++, sizeof(cl_float), (void*)&v);
++            }
++          else if (g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (self[prop_no]), G_TYPE_FLOAT))
++            {
++              gfloat value;
++              cl_float v;
++
++              g_object_get (G_OBJECT (operation), g_param_spec_get_name (self[prop_no]), &value, NULL);
++
++              v = value;
++              *err = gegl_clSetKernelArg(kernel, (*p)++, sizeof(cl_float), (void*)&v);
++            }
++          else if (g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (self[prop_no]), G_TYPE_INT))
++            {
++              gint value;
++              cl_int v;
++
++              g_object_get (G_OBJECT (operation), g_param_spec_get_name (self[prop_no]), &value, NULL);
++
++              v = value;
++              *err = gegl_clSetKernelArg(kernel, (*p)++, sizeof(cl_int), (void*)&v);
++            }
++          else if (g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (self[prop_no]), G_TYPE_BOOLEAN))
++            {
++              gboolean value;
++              cl_bool v;
++
++              g_object_get (G_OBJECT (operation), g_param_spec_get_name (self[prop_no]), &value, NULL);
++
++              v = value;
++              *err = gegl_clSetKernelArg(kernel, (*p)++, sizeof(cl_bool), (void*)&v);
++            }
++          else
++            {
++              g_error ("Unsupported OpenCL kernel argument");
++              return FALSE;
++            }
++        }
++    }
++
++  if (self)
++    g_free (self);
++  if (parent)
++    g_free (parent);
++
++  return TRUE;
++}
+ 
+ gchar **
+ gegl_operation_list_keys (const gchar *operation_name,
+diff --git a/gegl/operation/gegl-operation.h b/gegl/operation/gegl-operation.h
+index 0679500..fc7abfe 100644
+--- gegl/operation/gegl-operation.h
++++ gegl/operation/gegl-operation.h
+@@ -25,6 +25,7 @@
+ 
+ 
+ #include "gegl-buffer.h"
++#include "opencl/gegl-cl.h"
+ 
+ G_BEGIN_DECLS
+ 
+@@ -139,7 +140,10 @@ struct _GeglOperationClass
+   GeglNode*     (*detect)                    (GeglOperation       *operation,
+                                               gint                 x,
+                                               gint                 y);
+-  gpointer      pad[10];
++
++  GeglClRunData *cl_data;
++
++  gpointer      pad[9];
+ };
+ 
+ 
+@@ -246,6 +250,11 @@ void     gegl_operation_invalidate       (GeglOperation       *operation,
+                                           const GeglRectangle *roi,
+                                           gboolean             clear_cache);
+ 
++gboolean gegl_operation_cl_set_kernel_args (GeglOperation *operation,
++                                            cl_kernel      kernel,
++                                            gint          *p,
++                                            cl_int        *err);
++
+ /* internal utility functions used by gegl, these should not be used
+  * externally */
+ gboolean gegl_operation_calc_need_rects      (GeglOperation       *operation,
+diff --git a/gegl/process/Makefile.am b/gegl/process/Makefile.am
+index 0f1a11c..8825366 100644
+--- gegl/process/Makefile.am
++++ gegl/process/Makefile.am
+@@ -19,7 +19,7 @@ noinst_LTLIBRARIES = libprocess.la
+ libprocess_la_SOURCES = \
+ 	gegl-need-visitor.c		\
+ 	gegl-debug-rect-visitor.c	\
+-	gegl-eval-mgr.c			\
++	gegl-eval-manager.c		\
+ 	gegl-eval-visitor.c		\
+ 	gegl-finish-visitor.c		\
+ 	gegl-have-visitor.c		\
+@@ -28,7 +28,7 @@ libprocess_la_SOURCES = \
+ 	\
+ 	gegl-need-visitor.h		\
+ 	gegl-debug-rect-visitor.h	\
+-	gegl-eval-mgr.h			\
++	gegl-eval-manager.h		\
+ 	gegl-eval-visitor.h		\
+ 	gegl-finish-visitor.h		\
+ 	gegl-have-visitor.h		\
+@@ -36,4 +36,3 @@ libprocess_la_SOURCES = \
+ 	gegl-processor.h
+ 
+ #libprocess_la_SOURCES = $(lib_process_sources) $(libprocess_public_HEADERS)
+-
+diff --git a/gegl/process/gegl-eval-manager.c b/gegl/process/gegl-eval-manager.c
+new file mode 100644
+index 0000000..bf9d82a
+--- /dev/null
++++ gegl/process/gegl-eval-manager.c
+@@ -0,0 +1,263 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2003 Calvin Williamson
++ *           2006 Øyvind Kolås
++ */
++
++#include "config.h"
++
++#include <glib-object.h>
++
++#include "gegl.h"
++#include "gegl-types-internal.h"
++#include "gegl-eval-manager.h"
++#include "gegl-eval-visitor.h"
++#include "gegl-debug-rect-visitor.h"
++#include "gegl-need-visitor.h"
++#include "gegl-have-visitor.h"
++#include "gegl-instrument.h"
++#include "graph/gegl-node.h"
++#include "gegl-prepare-visitor.h"
++#include "gegl-finish-visitor.h"
++#include "graph/gegl-pad.h"
++#include "graph/gegl-visitable.h"
++#include "operation/gegl-operation.h"
++#include <stdlib.h>
++
++
++static void gegl_eval_manager_class_init (GeglEvalManagerClass *klass);
++static void gegl_eval_manager_init (GeglEvalManager *self);
++static void gegl_eval_manager_finalize (GObject *self_object);
++
++G_DEFINE_TYPE (GeglEvalManager, gegl_eval_manager, G_TYPE_OBJECT)
++
++static void
++gegl_eval_manager_class_init (GeglEvalManagerClass *klass)
++{
++  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++
++  gobject_class->finalize = gegl_eval_manager_finalize;
++}
++
++static void
++gegl_eval_manager_init (GeglEvalManager *self)
++{
++  GeglRectangle roi = { 0, 0, -1, -1 };
++  gpointer     context_id = self;
++
++  self->roi = roi;
++  self->prepare_visitor = g_object_new (GEGL_TYPE_PREPARE_VISITOR, "id", context_id, NULL);
++  self->have_visitor = g_object_new (GEGL_TYPE_HAVE_VISITOR, "id", context_id, NULL);
++  self->eval_visitor = g_object_new (GEGL_TYPE_EVAL_VISITOR, "id", context_id, NULL);
++  self->need_visitor = g_object_new (GEGL_TYPE_NEED_VISITOR, "id", context_id, NULL);
++  self->finish_visitor = g_object_new (GEGL_TYPE_FINISH_VISITOR, "id", context_id, NULL);
++  self->state = UNINITIALIZED;
++}
++
++static void
++gegl_eval_manager_finalize (GObject *self_object)
++{
++  GeglEvalManager *self = GEGL_EVAL_MANAGER (self_object);
++#if 0
++  GeglNode    *root;
++  GeglPad     *pad;
++  root=self->node;
++  pad = gegl_node_get_pad (root, self->pad_name);
++  /* Use the redirect output NOP of a graph instead of a graph if a traversal
++   * is attempted directly on a graph */
++  if (pad && pad->node != self->node)
++    root = pad->node;
++  else
++    root = self->node;
++
++  gegl_visitor_reset (self->finish_visitor);
++  gegl_visitor_dfs_traverse (self->finish_visitor, GEGL_VISITABLE (root));
++#endif
++
++  g_object_unref (self->prepare_visitor);
++  g_object_unref (self->have_visitor);
++  g_object_unref (self->eval_visitor);
++  g_object_unref (self->need_visitor);
++  g_object_unref (self->finish_visitor);
++  g_free (self->pad_name);
++
++  G_OBJECT_CLASS (gegl_eval_manager_parent_class)->finalize (self_object);
++}
++
++static gboolean
++gegl_eval_manager_change_notification (GObject             *gobject,
++                                       const GeglRectangle *rect,
++                                       gpointer             user_data)
++{
++  GeglEvalManager *manager = GEGL_EVAL_MANAGER (user_data);
++
++  if (manager->node != NULL)
++    {
++      gpointer              context_id = manager;
++      GeglOperationContext *context    = gegl_node_get_context (manager->node,
++                                                                context_id);
++      if (context != NULL)
++        {
++          /* If the node is changed we can't use the cache any longer */
++          context->cached = FALSE;
++        }
++    }
++
++  if (manager->state != UNINITIALIZED)
++    {
++      manager->state = NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL;
++    }
++
++  return FALSE;
++}
++
++
++GeglBuffer *
++gegl_eval_manager_apply (GeglEvalManager *self)
++{
++  GeglNode    *root;
++  GeglBuffer  *object;
++  GeglPad     *pad;
++  glong        time       = gegl_ticks ();
++  gpointer     context_id = self;
++
++  g_assert (GEGL_IS_EVAL_MANAGER (self));
++
++  gegl_instrument ("gegl", "process", 0);
++
++  root=self->node;
++  pad = gegl_node_get_pad (root, self->pad_name);
++  /* Use the redirect output NOP of a graph instead of a graph if a traversal
++   * is attempted directly on a graph */
++  if (pad && pad->node != self->node)
++    root = pad->node;
++  else
++    root = self->node;
++  g_assert (root);
++
++  g_object_ref (root);
++
++  /* do the necessary set-up work (all using depth first traversal) */
++  switch (self->state)
++    {
++      case UNINITIALIZED:
++        /* Set up the node's context and "needed rectangle"*/
++        gegl_visitor_reset (self->prepare_visitor);
++        gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
++        /* No idea why there is a second call */
++        gegl_visitor_reset (self->prepare_visitor);
++        gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
++      case NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL:
++        /* sets up the node's rect (bounding box) */
++        gegl_visitor_reset (self->have_visitor);
++        gegl_visitor_dfs_traverse (self->have_visitor, GEGL_VISITABLE (root));
++      case NEED_CONTEXT_SETUP_TRAVERSAL:
++
++        gegl_visitor_reset (self->prepare_visitor);
++        gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
++        self->state = NEED_CONTEXT_SETUP_TRAVERSAL;
++     }
++
++  /* set up the root node */
++  if (self->roi.width == -1 &&
++      self->roi.height == -1)
++    {
++      self->roi = root->have_rect;
++    }
++
++  gegl_node_set_need_rect (root, context_id, &self->roi);
++
++  /* set up the context's rectangle (breadth first traversal) */
++  gegl_visitor_reset (self->need_visitor);
++
++  /* should the need rect be moved into the context, making this
++   * part of gegl re-entrable without locking?.. or does that
++   * hamper other useful API that depends on the need_rect to be
++   * in the nodes?
++   */
++  gegl_visitor_bfs_traverse (self->need_visitor, GEGL_VISITABLE (root));
++
++#if 0
++  if (g_getenv ("GEGL_DEBUG_RECTS") != NULL)
++    {
++      GeglVisitor *debug_rect_visitor;
++
++      g_warning ("---------------------");
++      debug_rect_visitor = g_object_new (GEGL_TYPE_DEBUG_RECT_VISITOR, "id", context_id, NULL);
++      gegl_visitor_dfs_traverse (debug_rect_visitor, GEGL_VISITABLE (root));
++      g_object_unref (debug_rect_visitor);
++    }
++#endif
++
++  /* now let's do the real work */
++  gegl_visitor_reset (self->eval_visitor);
++  if (pad)
++    {
++      gegl_visitor_dfs_traverse (self->eval_visitor, GEGL_VISITABLE (pad));
++    }
++  else
++    { /* pull on the input of our sink if no pad of the given pad-name
++         was available, we take this as an indication that we're in fact
++         doing processing on a sink (and the ROI inidcates the data to
++         be written, note that GEGL might subdivide this roi
++         in its processing.
++       */
++      GeglPad *pad = gegl_node_get_pad (root, "input");
++      gegl_visitor_dfs_traverse (self->eval_visitor, GEGL_VISITABLE (pad));
++    }
++
++  if (pad)
++    {
++      /* extract returned object before running finish visitor */
++      GValue value = { 0, };
++      g_value_init (&value, G_TYPE_OBJECT);
++      gegl_operation_context_get_property (gegl_node_get_context (root, context_id),
++                                      "output", &value);
++      object = g_value_get_object (&value);
++      g_object_ref (object);/* salvage buffer from finalization */
++      g_value_unset (&value);
++    }
++
++  /* do the clean up */
++  gegl_visitor_reset (self->finish_visitor);
++  gegl_visitor_dfs_traverse (self->finish_visitor, GEGL_VISITABLE (root));
++
++  g_object_unref (root);
++  time = gegl_ticks () - time;
++  gegl_instrument ("gegl", "process", time);
++
++  if (!pad || !G_IS_OBJECT (object))
++    {
++      return NULL;
++    }
++  return object;
++}
++
++GeglEvalManager * gegl_eval_manager_new     (GeglNode    *node,
++                                             const gchar *pad_name)
++{
++  GeglEvalManager *self = g_object_new (GEGL_TYPE_EVAL_MANAGER, NULL);
++  g_assert (GEGL_IS_NODE (node));
++  self->node = node;
++  if (pad_name)
++    self->pad_name = g_strdup (pad_name);
++  else
++    self->pad_name = g_strdup ("output");
++  /*g_signal_connect (G_OBJECT (self->node->operation), "notify", G_CALLBACK (gegl_eval_manager_change_notification), self);*/
++  g_signal_connect (G_OBJECT (self->node), "invalidated", G_CALLBACK (gegl_eval_manager_change_notification), self);
++  g_signal_connect (G_OBJECT (self->node), "notify", G_CALLBACK (gegl_eval_manager_change_notification), self);
++  return self;
++}
+diff --git a/gegl/process/gegl-eval-manager.h b/gegl/process/gegl-eval-manager.h
+new file mode 100644
+index 0000000..bd7263c
+--- /dev/null
++++ gegl/process/gegl-eval-manager.h
+@@ -0,0 +1,89 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2003 Calvin Williamson
++ */
++
++#ifndef __GEGL_EVAL_MANAGER_H__
++#define __GEGL_EVAL_MANAGER_H__
++
++#include "gegl-types-internal.h"
++#include "buffer/gegl-buffer-types.h"
++
++G_BEGIN_DECLS
++
++
++typedef enum
++{
++  UNINITIALIZED,
++
++  /* means we need to redo an extra prepare and have_rect
++   * traversal
++   */
++  NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL,
++
++  /* means we need a prepare traversal to set up the contexts on the
++   * nodes
++   */
++  NEED_CONTEXT_SETUP_TRAVERSAL
++} GeglEvalManagerStates;
++
++
++#define GEGL_TYPE_EVAL_MANAGER            (gegl_eval_manager_get_type ())
++#define GEGL_EVAL_MANAGER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_EVAL_MANAGER, GeglEvalManager))
++#define GEGL_EVAL_MANAGER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GEGL_TYPE_EVAL_MANAGER, GeglEvalManagerClass))
++#define GEGL_IS_EVAL_MANAGER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_EVAL_MANAGER))
++#define GEGL_IS_EVAL_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_EVAL_MANAGER))
++#define GEGL_EVAL_MANAGER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_EVAL_MANAGER, GeglEvalManagerClass))
++
++
++typedef struct _GeglEvalManagerClass GeglEvalManagerClass;
++
++struct _GeglEvalManager
++{
++  GObject    parent_instance;
++  GeglNode  *node;
++  gchar     *pad_name;
++  GeglRectangle roi;
++
++  /* whether we can fire off rendering requests straight
++   * away or we have to re-prepare etc of the graph
++   */
++  GeglEvalManagerStates state;
++
++  /* we keep these objects around, they are too expensive to throw away */
++  GeglVisitor *prepare_visitor;
++  GeglVisitor *need_visitor;
++  GeglVisitor *eval_visitor;
++  GeglVisitor *have_visitor;
++  GeglVisitor *finish_visitor;
++
++};
++
++struct _GeglEvalManagerClass
++{
++  GObjectClass  parent_class;
++};
++
++
++GType             gegl_eval_manager_get_type (void) G_GNUC_CONST;
++
++GeglBuffer *      gegl_eval_manager_apply    (GeglEvalManager *self);
++GeglEvalManager * gegl_eval_manager_new      (GeglNode        *node,
++                                              const gchar     *pad_name);
++
++G_END_DECLS
++
++#endif /* __GEGL_EVAL_MANAGER_H__ */
+diff --git a/gegl/process/gegl-eval-mgr.c b/gegl/process/gegl-eval-mgr.c
+deleted file mode 100644
+index 27da126..0000000
+--- gegl/process/gegl-eval-mgr.c
++++ /dev/null
+@@ -1,263 +0,0 @@
+-/* This file is part of GEGL
+- *
+- * GEGL is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
+- *
+- * GEGL 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
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+- *
+- * Copyright 2003 Calvin Williamson
+- *           2006 Øyvind Kolås
+- */
+-
+-#include "config.h"
+-
+-#include <glib-object.h>
+-
+-#include "gegl.h"
+-#include "gegl-types-internal.h"
+-#include "gegl-eval-mgr.h"
+-#include "gegl-eval-visitor.h"
+-#include "gegl-debug-rect-visitor.h"
+-#include "gegl-need-visitor.h"
+-#include "gegl-have-visitor.h"
+-#include "gegl-instrument.h"
+-#include "graph/gegl-node.h"
+-#include "gegl-prepare-visitor.h"
+-#include "gegl-finish-visitor.h"
+-#include "graph/gegl-pad.h"
+-#include "graph/gegl-visitable.h"
+-#include "operation/gegl-operation.h"
+-#include <stdlib.h>
+-
+-
+-static void gegl_eval_mgr_class_init (GeglEvalMgrClass *klass);
+-static void gegl_eval_mgr_init (GeglEvalMgr *self);
+-static void gegl_eval_mgr_finalize (GObject *self_object);
+-
+-G_DEFINE_TYPE (GeglEvalMgr, gegl_eval_mgr, G_TYPE_OBJECT)
+-
+-static void
+-gegl_eval_mgr_class_init (GeglEvalMgrClass *klass)
+-{
+-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+-
+-  gobject_class->finalize = gegl_eval_mgr_finalize;
+-}
+-
+-static void
+-gegl_eval_mgr_init (GeglEvalMgr *self)
+-{
+-  GeglRectangle roi = { 0, 0, -1, -1 };
+-  gpointer     context_id = self;
+-
+-  self->roi = roi;
+-  self->prepare_visitor = g_object_new (GEGL_TYPE_PREPARE_VISITOR, "id", context_id, NULL);
+-  self->have_visitor = g_object_new (GEGL_TYPE_HAVE_VISITOR, "id", context_id, NULL);
+-  self->eval_visitor = g_object_new (GEGL_TYPE_EVAL_VISITOR, "id", context_id, NULL);
+-  self->need_visitor = g_object_new (GEGL_TYPE_NEED_VISITOR, "id", context_id, NULL);
+-  self->finish_visitor = g_object_new (GEGL_TYPE_FINISH_VISITOR, "id", context_id, NULL);
+-  self->state = UNINITIALIZED;
+-}
+-
+-static void
+-gegl_eval_mgr_finalize (GObject *self_object)
+-{
+-  GeglEvalMgr *self = GEGL_EVAL_MGR (self_object);
+-#if 0
+-  GeglNode    *root;
+-  GeglPad     *pad;
+-  root=self->node;
+-  pad = gegl_node_get_pad (root, self->pad_name);
+-  /* Use the redirect output NOP of a graph instead of a graph if a traversal
+-   * is attempted directly on a graph */
+-  if (pad && pad->node != self->node)
+-    root = pad->node;
+-  else
+-    root = self->node;
+-
+-  gegl_visitor_reset (self->finish_visitor);
+-  gegl_visitor_dfs_traverse (self->finish_visitor, GEGL_VISITABLE (root));
+-#endif
+-
+-  g_object_unref (self->prepare_visitor);
+-  g_object_unref (self->have_visitor);
+-  g_object_unref (self->eval_visitor);
+-  g_object_unref (self->need_visitor);
+-  g_object_unref (self->finish_visitor);
+-  g_free (self->pad_name);
+-
+-  G_OBJECT_CLASS (gegl_eval_mgr_parent_class)->finalize (self_object);
+-}
+-
+-static gboolean
+-gegl_eval_mgr_change_notification (GObject             *gobject,
+-                                   const GeglRectangle *rect,
+-                                   gpointer             user_data)
+-{
+-  GeglEvalMgr *mgr = GEGL_EVAL_MGR (user_data);
+-
+-  if (mgr->node != NULL)
+-    {
+-      gpointer              context_id = mgr;
+-      GeglOperationContext *context    = gegl_node_get_context (mgr->node,
+-                                                                context_id);
+-      if (context != NULL)
+-        {
+-          /* If the node is changed we can't use the cache any longer */
+-          context->cached = FALSE;
+-        }
+-    }
+-
+-  if (mgr->state != UNINITIALIZED)
+-    {
+-      mgr->state = NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL;
+-    }
+-
+-  return FALSE;
+-}
+-
+-
+-GeglBuffer *
+-gegl_eval_mgr_apply (GeglEvalMgr *self)
+-{
+-  GeglNode    *root;
+-  GeglBuffer  *object;
+-  GeglPad     *pad;
+-  glong        time       = gegl_ticks ();
+-  gpointer     context_id = self;
+-
+-  g_assert (GEGL_IS_EVAL_MGR (self));
+-
+-  gegl_instrument ("gegl", "process", 0);
+-
+-  root=self->node;
+-  pad = gegl_node_get_pad (root, self->pad_name);
+-  /* Use the redirect output NOP of a graph instead of a graph if a traversal
+-   * is attempted directly on a graph */
+-  if (pad && pad->node != self->node)
+-    root = pad->node;
+-  else
+-    root = self->node;
+-  g_assert (root);
+-
+-  g_object_ref (root);
+-
+-  /* do the necessary set-up work (all using depth first traversal) */
+-  switch (self->state)
+-    {
+-      case UNINITIALIZED:
+-        /* Set up the node's context and "needed rectangle"*/
+-        gegl_visitor_reset (self->prepare_visitor);
+-        gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
+-        /* No idea why there is a second call */
+-        gegl_visitor_reset (self->prepare_visitor);
+-        gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
+-      case NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL:
+-        /* sets up the node's rect (bounding box) */
+-        gegl_visitor_reset (self->have_visitor);
+-        gegl_visitor_dfs_traverse (self->have_visitor, GEGL_VISITABLE (root));
+-      case NEED_CONTEXT_SETUP_TRAVERSAL:
+-
+-        gegl_visitor_reset (self->prepare_visitor);
+-        gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
+-        self->state = NEED_CONTEXT_SETUP_TRAVERSAL;
+-     }
+-
+-  /* set up the root node */
+-  if (self->roi.width == -1 &&
+-      self->roi.height == -1)
+-    {
+-      self->roi = root->have_rect;
+-    }
+-
+-  gegl_node_set_need_rect (root, context_id, &self->roi);
+-
+-  /* set up the context's rectangle (breadth first traversal) */
+-  gegl_visitor_reset (self->need_visitor);
+-
+-  /* should the need rect be moved into the context, making this
+-   * part of gegl re-entrable without locking?.. or does that
+-   * hamper other useful API that depends on the need_rect to be
+-   * in the nodes?
+-   */
+-  gegl_visitor_bfs_traverse (self->need_visitor, GEGL_VISITABLE (root));
+-
+-#if 0
+-  if (g_getenv ("GEGL_DEBUG_RECTS") != NULL)
+-    {
+-      GeglVisitor *debug_rect_visitor;
+-
+-      g_warning ("---------------------");
+-      debug_rect_visitor = g_object_new (GEGL_TYPE_DEBUG_RECT_VISITOR, "id", context_id, NULL);
+-      gegl_visitor_dfs_traverse (debug_rect_visitor, GEGL_VISITABLE (root));
+-      g_object_unref (debug_rect_visitor);
+-    }
+-#endif
+-
+-  /* now let's do the real work */
+-  gegl_visitor_reset (self->eval_visitor);
+-  if (pad)
+-    {
+-      gegl_visitor_dfs_traverse (self->eval_visitor, GEGL_VISITABLE (pad));
+-    }
+-  else
+-    { /* pull on the input of our sink if no pad of the given pad-name
+-         was available, we take this as an indication that we're in fact
+-         doing processing on a sink (and the ROI inidcates the data to
+-         be written, note that GEGL might subdivide this roi
+-         in its processing.
+-       */
+-      GeglPad *pad = gegl_node_get_pad (root, "input");
+-      gegl_visitor_dfs_traverse (self->eval_visitor, GEGL_VISITABLE (pad));
+-    }
+-
+-  if (pad)
+-    {
+-      /* extract returned object before running finish visitor */
+-      GValue value = { 0, };
+-      g_value_init (&value, G_TYPE_OBJECT);
+-      gegl_operation_context_get_property (gegl_node_get_context (root, context_id),
+-                                      "output", &value);
+-      object = g_value_get_object (&value);
+-      g_object_ref (object);/* salvage buffer from finalization */
+-      g_value_unset (&value);
+-    }
+-
+-  /* do the clean up */
+-  gegl_visitor_reset (self->finish_visitor);
+-  gegl_visitor_dfs_traverse (self->finish_visitor, GEGL_VISITABLE (root));
+-
+-  g_object_unref (root);
+-  time = gegl_ticks () - time;
+-  gegl_instrument ("gegl", "process", time);
+-
+-  if (!pad || !G_IS_OBJECT (object))
+-    {
+-      return NULL;
+-    }
+-  return object;
+-}
+-
+-GeglEvalMgr * gegl_eval_mgr_new     (GeglNode *node,
+-                                     const gchar *pad_name)
+-{
+-  GeglEvalMgr *self = g_object_new (GEGL_TYPE_EVAL_MGR, NULL);
+-  g_assert (GEGL_IS_NODE (node));
+-  self->node = node;
+-  if (pad_name)
+-    self->pad_name = g_strdup (pad_name);
+-  else
+-    self->pad_name = g_strdup ("output");
+-  /*g_signal_connect (G_OBJECT (self->node->operation), "notify", G_CALLBACK (gegl_eval_mgr_change_notification), self);*/
+-  g_signal_connect (G_OBJECT (self->node), "invalidated", G_CALLBACK (gegl_eval_mgr_change_notification), self);
+-  g_signal_connect (G_OBJECT (self->node), "notify", G_CALLBACK (gegl_eval_mgr_change_notification), self);
+-  return self;
+-}
+diff --git a/gegl/process/gegl-eval-mgr.h b/gegl/process/gegl-eval-mgr.h
+deleted file mode 100644
+index 13cb9b4..0000000
+--- gegl/process/gegl-eval-mgr.h
++++ /dev/null
+@@ -1,89 +0,0 @@
+-/* This file is part of GEGL
+- *
+- * GEGL is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
+- *
+- * GEGL 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
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+- *
+- * Copyright 2003 Calvin Williamson
+- */
+-
+-#ifndef __GEGL_EVAL_MGR_H__
+-#define __GEGL_EVAL_MGR_H__
+-
+-#include "gegl-types-internal.h"
+-#include "buffer/gegl-buffer-types.h"
+-
+-G_BEGIN_DECLS
+-
+-
+-typedef enum
+-{
+-  UNINITIALIZED,
+-
+-  /* means we need to redo an extra prepare and have_rect
+-   * traversal
+-   */
+-  NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL,
+-
+-  /* means we need a prepare traversal to set up the contexts on the
+-   * nodes
+-   */
+-  NEED_CONTEXT_SETUP_TRAVERSAL
+-} GeglEvalMgrStates;
+-
+-
+-#define GEGL_TYPE_EVAL_MGR            (gegl_eval_mgr_get_type ())
+-#define GEGL_EVAL_MGR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_EVAL_MGR, GeglEvalMgr))
+-#define GEGL_EVAL_MGR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GEGL_TYPE_EVAL_MGR, GeglEvalMgrClass))
+-#define GEGL_IS_EVAL_MGR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_EVAL_MGR))
+-#define GEGL_IS_EVAL_MGR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_EVAL_MGR))
+-#define GEGL_EVAL_MGR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_EVAL_MGR, GeglEvalMgrClass))
+-
+-
+-typedef struct _GeglEvalMgrClass GeglEvalMgrClass;
+-
+-struct _GeglEvalMgr
+-{
+-  GObject    parent_instance;
+-  GeglNode  *node;
+-  gchar     *pad_name;
+-  GeglRectangle roi;
+-
+-  /* whether we can fire off rendering requests straight
+-   * away or we have to re-prepare etc of the graph
+-   */
+-  GeglEvalMgrStates state;
+-
+-  /* we keep these objects around, they are too expensive to throw away */
+-  GeglVisitor *prepare_visitor;
+-  GeglVisitor *need_visitor;
+-  GeglVisitor *eval_visitor;
+-  GeglVisitor *have_visitor;
+-  GeglVisitor *finish_visitor;
+-
+-};
+-
+-struct _GeglEvalMgrClass
+-{
+-  GObjectClass  parent_class;
+-};
+-
+-
+-GType        gegl_eval_mgr_get_type (void) G_GNUC_CONST;
+-
+-GeglBuffer * gegl_eval_mgr_apply    (GeglEvalMgr *self);
+-GeglEvalMgr * gegl_eval_mgr_new     (GeglNode *node,
+-                                     const gchar *pad_name);
+-
+-G_END_DECLS
+-
+-#endif /* __GEGL_EVAL_MGR_H__ */
+diff --git a/gegl/process/gegl-processor.c b/gegl/process/gegl-processor.c
+index 44702aa..d4d1356 100644
+--- gegl/process/gegl-processor.c
++++ gegl/process/gegl-processor.c
+@@ -749,27 +749,34 @@ gegl_processor_work (GeglProcessor *processor,
+   gboolean   more_work = FALSE;
+   GeglCache *cache     = gegl_node_get_cache (processor->input);
+ 
+-  if (gegl_cl_is_accelerated () && gegl_config()->use_opencl
+-      && processor->chunk_size != GEGL_CL_CHUNK_SIZE)
++  if (gegl_config()->use_opencl)
+     {
+-      GeglVisitor *visitor = g_object_new (GEGL_TYPE_VISITOR, NULL);
+-      GSList *iterator = NULL;
+-      GSList *visits_list = NULL;
+-      gegl_visitor_reset (visitor);
+-      gegl_visitor_dfs_traverse (visitor, GEGL_VISITABLE (processor->node));
+-      visits_list = gegl_visitor_get_visits_list (visitor);
+-
+-      for (iterator = visits_list; iterator; iterator = iterator->next)
++      /* Initialize OpenCL if wanted and possible */
++      gegl_cl_init (NULL);
++
++      if (gegl_cl_is_accelerated ()
++          && processor->chunk_size != GEGL_CL_CHUNK_SIZE)
+         {
+-          GeglNode *node = (GeglNode*) iterator->data;
+-          if (GEGL_OPERATION_GET_CLASS(node->operation)->opencl_support)
++          GeglVisitor *visitor = g_object_new (GEGL_TYPE_VISITOR, NULL);
++          GSList *iterator = NULL;
++          GSList *visits_list = NULL;
++          gegl_visitor_reset (visitor);
++          gegl_visitor_dfs_traverse (visitor, GEGL_VISITABLE (processor->node));
++          visits_list = gegl_visitor_get_visits_list (visitor);
++
++          for (iterator = visits_list; iterator; iterator = iterator->next)
+             {
+-              processor->chunk_size = GEGL_CL_CHUNK_SIZE;
+-              break;
++              GeglNode *node = (GeglNode*) iterator->data;
++              if (GEGL_OPERATION_GET_CLASS(node->operation)->cl_data
++                  || GEGL_OPERATION_GET_CLASS(node->operation)->opencl_support)
++                {
++                  processor->chunk_size = GEGL_CL_CHUNK_SIZE;
++                  break;
++                }
+             }
+-        }
+ 
+-      g_object_unref (visitor);
++          g_object_unref (visitor);
++        }
+     }
+ 
+   more_work = gegl_processor_render (processor, &processor->rectangle, progress);
+diff --git a/gegl/property-types/gegl-paramspecs.c b/gegl/property-types/gegl-paramspecs.c
+index 23e016c..d276043 100644
+--- gegl/property-types/gegl-paramspecs.c
++++ gegl/property-types/gegl-paramspecs.c
+@@ -82,7 +82,7 @@ gegl_param_spec_double (const gchar *name,
+ {
+   GeglParamSpecDouble *pspec;
+   GParamSpecDouble *dspec;
+-  
++
+   pspec = g_param_spec_internal (GEGL_TYPE_PARAM_DOUBLE,
+                                  name, nick, blurb, flags);
+   dspec = G_PARAM_SPEC_DOUBLE (pspec);
+@@ -153,7 +153,7 @@ gegl_param_spec_int (const gchar *name,
+ {
+   GeglParamSpecInt *pspec;
+   GParamSpecInt *ispec;
+-  
++
+ 
+   pspec = g_param_spec_internal (GEGL_TYPE_PARAM_INT,
+                                  name, nick, blurb, flags);
+@@ -618,3 +618,71 @@ gegl_param_spec_enum_exclude_value (GeglParamSpecEnum *espec,
+   espec->excluded_values = g_slist_prepend (espec->excluded_values,
+                                             GINT_TO_POINTER (value));
+ }
++
++/*
++ * GEGL_TYPE_PARAM_SEED
++ */
++
++static void       gegl_param_seed_class_init (GParamSpecClass *klass);
++static void       gegl_param_seed_init       (GParamSpec      *pspec);
++
++GType
++gegl_param_seed_get_type (void)
++{
++  static GType type = 0;
++
++  if (!type)
++    {
++      const GTypeInfo info =
++      {
++        sizeof (GParamSpecClass),
++        NULL, NULL,
++        (GClassInitFunc) gegl_param_seed_class_init,
++        NULL, NULL,
++        sizeof (GeglParamSpecSeed),
++        0,
++        (GInstanceInitFunc) gegl_param_seed_init
++      };
++      type = g_type_register_static (G_TYPE_PARAM_INT,
++                                     "GeglParamseed", &info, 0);
++    }
++  return type;
++}
++
++static void
++gegl_param_seed_class_init (GParamSpecClass *klass)
++{
++  klass->value_type     = G_TYPE_INT;
++}
++
++static void
++gegl_param_seed_init (GParamSpec *pspec)
++{
++  GeglParamSpecSeed *gdpspec = GEGL_PARAM_SPEC_SEED (pspec);
++
++  gdpspec->ui_minimum = 0;
++  gdpspec->ui_maximum = G_MAXINT;
++}
++
++GParamSpec *
++gegl_param_spec_seed (const gchar *name,
++                      const gchar *nick,
++                      const gchar *blurb,
++                      GParamFlags  flags)
++{
++  GeglParamSpecSeed *pspec;
++  GParamSpecInt *ispec;
++
++
++  pspec = g_param_spec_internal (GEGL_TYPE_PARAM_SEED,
++                                 name, nick, blurb, flags);
++  ispec = G_PARAM_SPEC_INT (pspec);
++
++  ispec->minimum = 0;
++  ispec->maximum = G_MAXINT;
++  ispec->default_value = g_random_int_range(0, G_MAXINT);
++  pspec->ui_minimum = 0;
++  pspec->ui_maximum = G_MAXINT;
++
++  return G_PARAM_SPEC (pspec);
++}
+diff --git a/gegl/property-types/gegl-paramspecs.h b/gegl/property-types/gegl-paramspecs.h
+index 57a0705..636c486 100644
+--- gegl/property-types/gegl-paramspecs.h
++++ gegl/property-types/gegl-paramspecs.h
+@@ -35,7 +35,7 @@ G_BEGIN_DECLS
+ typedef struct _GeglParamSpecString GeglParamSpecString;
+ typedef struct _GeglParamSpecDouble GeglParamSpecDouble;
+ typedef struct _GeglParamSpecInt    GeglParamSpecInt;
+-
++typedef struct _GeglParamSpecSeed   GeglParamSpecSeed;
+ 
+ 
+ 
+@@ -222,5 +222,28 @@ void   gegl_param_spec_enum_exclude_value (GeglParamSpecEnum *espec,
+ 
+ 
+ 
++/*
++ * GEGL_TYPE_PARAM_SEED
++ */
++
++#define GEGL_TYPE_PARAM_SEED           (gegl_param_seed_get_type ())
++#define GEGL_PARAM_SPEC_SEED(pspec)    (G_TYPE_CHECK_INSTANCE_CAST ((pspec), GEGL_TYPE_PARAM_SEED, GeglParamSpecSeed))
++#define GEGL_IS_PARAM_SPEC_SEED(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), GEGL_TYPE_PARAM_SEED))
++
++struct _GeglParamSpecSeed
++{
++  GParamSpecInt parent_instance;
++
++  gint          ui_minimum;
++  gint          ui_maximum;
++};
++
++GType        gegl_param_seed_get_type (void) G_GNUC_CONST;
++
++GParamSpec * gegl_param_spec_seed (const gchar *name,
++                                   const gchar *nick,
++                                   const gchar *blurb,
++                                   GParamFlags  flags);
++
+ G_END_DECLS
+ #endif  /*  __GEGL_PARAM_SPECS_H__  */
+diff --git a/operations/Makefile-common.am b/operations/Makefile-common.am
+index ab59841..184bed6 100644
+--- operations/Makefile-common.am
++++ operations/Makefile-common.am
+@@ -1,8 +1,9 @@
+ if PLATFORM_WIN32
+ no_undefined = -no-undefined
+-libgegl = $(top_builddir)/gegl/libgegl-$(GEGL_API_VERSION).la $(BABL_LIBS)
+ endif
+ 
++libgegl = $(top_builddir)/gegl/libgegl-$(GEGL_API_VERSION).la $(BABL_LIBS)
++
+ op_libs = $(DEP_LIBS) $(libgegl) $(OPENCL_LIBS)
+ 
+ GEGLHEADERS     = $(wildcard $(top_srcdir)/gegl/*.h)\
+diff --git a/operations/common/bilateral-filter.c b/operations/common/bilateral-filter.c
+index 43d3ba7..a959b6a 100644
+--- operations/common/bilateral-filter.c
++++ operations/common/bilateral-filter.c
+@@ -109,7 +109,7 @@ static const char* kernel_source =
+ "    out[gidx + gidy * dst_width] = accumulated / count;               \n"
+ "}                                                                     \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_bilateral_filter (cl_mem                in_tex,
+@@ -199,7 +199,7 @@ process (GeglOperation       *operation,
+ 
+   if (o->blur_radius < 1.0)
+     {
+-      output = g_object_ref (input);
++      gegl_buffer_copy (input, result, output, result);
+     }
+   else
+     {
+diff --git a/operations/common/box-blur.c b/operations/common/box-blur.c
+index 975ed1b..4bd23ab 100644
+--- operations/common/box-blur.c
++++ operations/common/box-blur.c
+@@ -242,10 +242,11 @@ static const char* kernel_source =
+ "                                                                                                   \n"
+ "  mean = (float4)(0.0f);                                                                           \n"
+ "                                                                                                   \n"
+-"  for (i=-radius; i <= radius; i++)                                                                \n"
+-"   {                                                                                               \n"
+-"     mean += in[in_index + i];                                                                     \n"
+-"   }                                                                                               \n"
++"  if (get_global_id(1) < width)                                                                    \n"
++"    for (i=-radius; i <= radius; i++)                                                              \n"
++"      {                                                                                            \n"
++"        mean += in[in_index + i];                                                                  \n"
++"      }                                                                                            \n"
+ "                                                                                                   \n"
+ "  aux[aux_index] = mean / (2 * radius + 1);                                                        \n"
+ "}                                                                                                  \n"
+@@ -254,23 +255,25 @@ static const char* kernel_source =
+ "                               __global       float4     *out,                                     \n"
+ "                               int width, int radius)                                              \n"
+ "{                                                                                                  \n"
+-"  const int aux_index = (radius + get_global_id(0)) * width + get_global_id (1);                   \n"
+ "                                                                                                   \n"
+ "  const int out_index = get_global_id(0) * width + get_global_id (1);                              \n"
+ "  int i;                                                                                           \n"
+ "  float4 mean;                                                                                     \n"
+ "                                                                                                   \n"
+ "  mean = (float4)(0.0f);                                                                           \n"
++"  int aux_index = get_global_id(0) * width + get_global_id (1);                                    \n"
+ "                                                                                                   \n"
+-"  for (i=-radius; i <= radius; i++)                                                                \n"
+-"   {                                                                                               \n"
+-"     mean += aux[aux_index + i * width];                                                           \n"
+-"   }                                                                                               \n"
++"  if(get_global_id(1) < width)                                                                     \n"
++"    for (i=-radius; i <= radius; i++)                                                              \n"
++"      {                                                                                            \n"
++"        mean += aux[aux_index];                                                                    \n"
++"        aux_index += width;                                                                        \n"
++"      }                                                                                            \n"
+ "                                                                                                   \n"
+ "  out[out_index] = mean / (2 * radius + 1);                                                        \n"
+ "}                                                                                                  \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_box_blur (cl_mem                in_tex,
+@@ -282,6 +285,7 @@ cl_box_blur (cl_mem                in_tex,
+ {
+   cl_int cl_err = 0;
+   size_t global_ws_hor[2], global_ws_ver[2];
++  size_t local_ws_hor[2], local_ws_ver[2];
+ 
+   if (!cl_data)
+     {
+@@ -291,11 +295,15 @@ cl_box_blur (cl_mem                in_tex,
+ 
+   if (!cl_data) return 1;
+ 
++  local_ws_hor[0] = 1;
++  local_ws_hor[1] = 256;
+   global_ws_hor[0] = roi->height + 2 * radius;
+-  global_ws_hor[1] = roi->width;
++  global_ws_hor[1] = ((roi->width + local_ws_hor[1] -1)/local_ws_hor[1]) * local_ws_hor[1];
+ 
++  local_ws_ver[0] = 1;
++  local_ws_ver[1] = 256;
+   global_ws_ver[0] = roi->height;
+-  global_ws_ver[1] = roi->width;
++  global_ws_ver[1] = ((roi->width + local_ws_ver[1] -1)/local_ws_ver[1]) * local_ws_ver[1];
+ 
+   cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),   (void*)&in_tex);
+   cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_mem),   (void*)&aux_tex);
+@@ -305,7 +313,7 @@ cl_box_blur (cl_mem                in_tex,
+ 
+   cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+                                         cl_data->kernel[0], 2,
+-                                        NULL, global_ws_hor, NULL,
++                                        NULL, global_ws_hor, local_ws_hor,
+                                         0, NULL, NULL);
+   if (cl_err != CL_SUCCESS) return cl_err;
+ 
+@@ -319,7 +327,7 @@ cl_box_blur (cl_mem                in_tex,
+ 
+   cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+                                         cl_data->kernel[1], 2,
+-                                        NULL, global_ws_ver, NULL,
++                                        NULL, global_ws_ver, local_ws_ver,
+                                         0, NULL, NULL);
+   if (cl_err != CL_SUCCESS) return cl_err;
+ 
+diff --git a/operations/common/brightness-contrast.c b/operations/common/brightness-contrast.c
+index 1081e82..3acf092 100644
+--- operations/common/brightness-contrast.c
++++ operations/common/brightness-contrast.c
+@@ -105,66 +105,19 @@ process (GeglOperation       *op,
+   return TRUE;
+ }
+ 
+-#include "opencl/gegl-cl.h"
+-
+-static const char* kernel_source =
+-"__kernel void kernel_bc(__global const float4     *in,         \n"
+-"                        __global       float4     *out,        \n"
+-"                        float brightness,                      \n"
+-"                        float contrast)                        \n"
+-"{                                                              \n"
+-"  int gid = get_global_id(0);                                  \n"
+-"  float4 in_v  = in[gid];                                      \n"
+-"  float4 out_v;                                                \n"
+-"  out_v.xyz = (in_v.xyz - 0.5f) * contrast + brightness + 0.5f;\n"
+-"  out_v.w   =  in_v.w;                                         \n"
+-"  out[gid]  =  out_v;                                          \n"
+-"}                                                              \n";
+-
+-static gegl_cl_run_data *cl_data = NULL;
+-
+-/* OpenCL processing function */
+-static cl_int
+-cl_process (GeglOperation       *op,
+-            cl_mem               in_tex,
+-            cl_mem               out_tex,
+-            size_t               global_worksize,
+-            const GeglRectangle *roi,
+-            int                  level)
+-{
+-  /* Retrieve a pointer to GeglChantO structure which contains all the
+-   * chanted properties
+-   */
+-
+-  GeglChantO *o = GEGL_CHANT_PROPERTIES (op);
+-
+-  gfloat brightness = o->brightness;
+-  gfloat contrast   = o->contrast;
+-
+-  cl_int cl_err = 0;
+-
+-  if (!cl_data)
+-    {
+-      const char *kernel_name[] = {"kernel_bc", NULL};
+-      cl_data = gegl_cl_compile_and_build (kernel_source, kernel_name);
+-    }
+-
+-  if (!cl_data) return 1;
+-
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),   (void*)&in_tex);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_mem),   (void*)&out_tex);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 2, sizeof(cl_float), (void*)&brightness);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 3, sizeof(cl_float), (void*)&contrast);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                        cl_data->kernel[0], 1,
+-                                        NULL, &global_worksize, NULL,
+-                                        0, NULL, NULL);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  return cl_err;
+-}
++static const gchar* kernel_source =
++"__kernel void gegl_brightness_contrast(__global const float4     *in,  \n"
++"                                       __global       float4     *out, \n"
++"                                       float contrast,                 \n"
++"                                       float brightness)               \n"
++"{                                                                      \n"
++"  int gid = get_global_id(0);                                          \n"
++"  float4 in_v  = in[gid];                                              \n"
++"  float4 out_v;                                                        \n"
++"  out_v.xyz = (in_v.xyz - 0.5f) * contrast + brightness + 0.5f;        \n"
++"  out_v.w   =  in_v.w;                                                 \n"
++"  out[gid]  =  out_v;                                                  \n"
++"}                                                                      \n";
+ 
+ /*
+  * The class init function sets up information needed for this operations class
+@@ -175,6 +128,20 @@ gegl_chant_class_init (GeglChantClass *klass)
+ {
+   GeglOperationClass            *operation_class;
+   GeglOperationPointFilterClass *point_filter_class;
++  gchar                         *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:brightness-contrast'>"
++    "  <params>"
++    "    <param name='contrast'>1.8</param>"
++    "    <param name='brightness'>0.25</param>"
++    "  </params>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   operation_class    = GEGL_OPERATION_CLASS (klass);
+   point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
+@@ -185,17 +152,13 @@ gegl_chant_class_init (GeglChantClass *klass)
+    * of our superclasses deal with the handling on their level of abstraction)
+    */
+   point_filter_class->process = process;
+-  point_filter_class->cl_process = cl_process;
+-
+-  /* specify the name this operation is found under in the GUI/when
+-   * programming/in XML
+-   */
+-  operation_class->opencl_support = TRUE;
+ 
+   gegl_operation_class_set_keys (operation_class,
+       "name",       "gegl:brightness-contrast",
+-      "categories", "color", 
++      "categories", "color",
+       "description", _("Changes the light level and contrast."),
++      "cl-source"  , kernel_source,
++      "reference-composition", composition,
+       NULL);
+ }
+ 
+diff --git a/operations/common/buffer-source.c b/operations/common/buffer-source.c
+index a2d2d21..4d414c1 100644
+--- operations/common/buffer-source.c
++++ operations/common/buffer-source.c
+@@ -31,6 +31,26 @@ gegl_chant_object(buffer, _("Input buffer"),
+ #define GEGL_CHANT_C_FILE       "buffer-source.c"
+ 
+ #include "gegl-chant.h"
++#include <gegl.h>
++#include "graph/gegl-node.h"
++
++typedef struct
++{
++  gulong buffer_changed_handler;
++} Priv;
++
++static Priv *
++get_priv (GeglChantO *o)
++{
++  Priv *priv = (Priv*)o->chant_data;
++  if (priv == NULL) {
++    priv = g_new0 (Priv, 1);
++    o->chant_data = (void*) priv;
++
++    priv->buffer_changed_handler = 0;
++  }
++  return priv;
++}
+ 
+ static void buffer_changed (GeglBuffer          *buffer,
+                             const GeglRectangle *rect,
+@@ -54,6 +74,39 @@ get_bounding_box (GeglOperation *operation)
+   return result;
+ }
+ 
++static void
++my_set_property (GObject  *gobject,
++                          guint         property_id,
++                          const GValue *value,
++                          GParamSpec   *pspec)
++{
++  GeglOperation *operation = GEGL_OPERATION (gobject);
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++  Priv *p = get_priv(o);
++  GObject *buffer = NULL;
++
++  switch (property_id)
++  {
++    case PROP_buffer:
++      if (o->buffer) {
++        // Invariant: valid buffer should always have valid signal handler
++        g_assert(p->buffer_changed_handler > 0);
++        g_signal_handler_disconnect (o->buffer, p->buffer_changed_handler);
++      }
++      buffer = G_OBJECT (g_value_get_object (value));
++      if (buffer) {
++        p->buffer_changed_handler = g_signal_connect (buffer, "changed", G_CALLBACK(buffer_changed), operation);
++      }
++      break;
++    default:
++      break;
++  }
++
++  /* The set_property provided by the chant system does the
++   * storing and reffing/unreffing of the input properties */
++  set_property(gobject, property_id, value, pspec);
++}
++
+ static gboolean
+ process (GeglOperation        *operation,
+          GeglOperationContext *context,
+@@ -65,12 +118,6 @@ process (GeglOperation        *operation,
+ 
+   if (o->buffer)
+     {
+-      if (!o->chant_data)
+-        {
+-          o->chant_data = (void*)0xf00;
+-          g_signal_connect (o->buffer, "changed",
+-                            G_CALLBACK(buffer_changed), operation);
+-        }
+       g_object_ref (o->buffer); /* Add an extra reference, since
+ 				     * gegl_operation_set_data is
+ 				     * stealing one.
+@@ -79,6 +126,10 @@ process (GeglOperation        *operation,
+       /* override core behaviour, by resetting the buffer in the operation_context */
+       gegl_operation_context_take_object (context, "output",
+                                           G_OBJECT (o->buffer));
++      /* mark that this buffer should not be used for in-place
++       * processing.
++       */
++      gegl_object_set_has_forked (o->buffer);
+     }
+   return TRUE;
+ }
+@@ -87,13 +138,22 @@ static void
+ dispose (GObject *object)
+ {
+   GeglChantO *o = GEGL_CHANT_PROPERTIES (object);
++  Priv *p = get_priv(o);
+ 
+   if (o->buffer)
+     {
++      // Invariant: valid buffer should always have valid signal handler
++      g_assert(p->buffer_changed_handler > 0);
++      g_signal_handler_disconnect (o->buffer, p->buffer_changed_handler);
+       g_object_unref (o->buffer);
+       o->buffer = NULL;
+     }
+ 
++  if (p) {
++    g_free(p);
++    o->chant_data = NULL;
++  }
++
+   G_OBJECT_CLASS (gegl_chant_parent_class)->dispose (object);
+ }
+ 
+@@ -108,6 +168,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+   operation_class->process = process;
+   operation_class->get_bounding_box = get_bounding_box;
+ 
++  G_OBJECT_CLASS (klass)->set_property = my_set_property;
+   G_OBJECT_CLASS (klass)->dispose = dispose;
+ 
+   gegl_operation_class_set_keys (operation_class,
+@@ -120,3 +181,4 @@ gegl_chant_class_init (GeglChantClass *klass)
+ }
+ 
+ #endif
++
+diff --git a/operations/common/c2g.c b/operations/common/c2g.c
+index 52962ce..c28d0a5 100644
+--- operations/common/c2g.c
++++ operations/common/c2g.c
+@@ -315,7 +315,7 @@ static const char* kernel_source =
+ "}                                                                     \n"
+ "                                                                      \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_c2g (cl_mem                in_tex,
+@@ -491,8 +491,8 @@ gegl_chant_class_init (GeglChantClass *klass)
+       "categories",  "enhance",
+       "description", 
+      _("Color to grayscale conversion, uses envelopes formed from spatial "
+-       " color differences to perform color-feature preserving grayscale "
+-       " spatial contrast enhancement"),
++       "color differences to perform color-feature preserving grayscale "
++       "spatial contrast enhancement"),
+      NULL);
+ }
+ 
+diff --git a/operations/common/cartoon.c b/operations/common/cartoon.c
+new file mode 100644
+index 0000000..393bd7a
+--- /dev/null
++++ operations/common/cartoon.c
+@@ -0,0 +1,380 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1997 Spencer Kimball
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_double (mask_radius, _("Mask radius"),   0.0, 50.0, 7.0, _("Mask radius"))
++
++gegl_chant_double (pct_black, _("Percent black"),   0.0, 1.0, 0.2, _("Percent black"))
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "cartoon.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++#define THRESHOLD 1.0
++
++typedef struct {
++  gdouble      prev_mask_radius;
++  gdouble      prev_pct_black;
++  gdouble      prev_ramp;
++} Ramps;
++
++static void
++grey_blur_buffer (GeglBuffer  *input,
++                  gdouble      mask_radius,
++                  GeglBuffer **dest1,
++                  GeglBuffer **dest2)
++{
++  GeglNode *gegl, *image, *write1, *write2, *grey, *blur1, *blur2;
++  gdouble radius, std_dev1, std_dev2;
++
++  gegl = gegl_node_new ();
++  image = gegl_node_new_child (gegl,
++                "operation", "gegl:buffer-source",
++                "buffer", input,
++                NULL);
++  grey = gegl_node_new_child (gegl,
++                "operation", "gegl:grey",
++                NULL);
++
++  radius   = 1.0;
++  radius   = fabs (radius) + 1.0;
++  std_dev1 = sqrt (-(radius * radius) / (2 * log (1.0 / 255.0)));
++
++  radius   = fabs (mask_radius) + 1.0;
++  std_dev2 = sqrt (-(radius * radius) / (2 * log (1.0 / 255.0)));
++
++  blur1 =  gegl_node_new_child (gegl,
++                "operation", "gegl:gaussian-blur",
++                "std_dev_x", std_dev1,
++                "std_dev_y", std_dev1,
++                NULL);
++  blur2 =  gegl_node_new_child (gegl,
++                "operation", "gegl:gaussian-blur",
++                "std_dev_x", std_dev2,
++                "std_dev_y", std_dev2,
++                NULL);
++
++  write1 = gegl_node_new_child(gegl,
++                "operation", "gegl:buffer-sink",
++                "buffer", dest1, NULL);
++
++  write2 = gegl_node_new_child(gegl,
++                "operation", "gegl:buffer-sink",
++                "buffer", dest2, NULL);
++
++  gegl_node_link_many (image, grey, blur1, write1, NULL);
++  gegl_node_process (write1);
++
++  gegl_node_link_many (grey, blur2, write2, NULL);
++  gegl_node_process (write2);
++
++  g_object_unref (gegl);
++}
++
++static gdouble
++compute_ramp (GeglBuffer    *input,
++              GeglOperation *operation,
++              gdouble        pct_black)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++
++  GeglRectangle *whole_region;
++  gint    n_pixels;
++  gint    hist[100];
++  gdouble diff;
++  gint    count;
++  gfloat pixel1, pixel2;
++  gint x;
++  gint y;
++  gint i;
++  gint sum;
++  GeglSampler *sampler1;
++  GeglSampler *sampler2;
++  GeglBuffer *dest1, *dest2;
++
++  whole_region = gegl_operation_source_get_bounding_box (operation, "input");
++  grey_blur_buffer (input, o->mask_radius, &dest1, &dest2);
++
++  sampler1 = gegl_buffer_sampler_new (dest1,
++                                      babl_format ("Y' float"),
++                                      GEGL_SAMPLER_LINEAR);
++
++  sampler2 = gegl_buffer_sampler_new (dest2,
++                                      babl_format ("Y' float"),
++                                      GEGL_SAMPLER_LINEAR);
++
++  n_pixels = whole_region->width * whole_region->height;
++  memset (hist, 0, sizeof (int) * 100);
++  count = 0;
++  x = whole_region->x;
++  y = whole_region->y;
++
++  while (n_pixels--)
++    {
++      gegl_sampler_get (sampler1,
++                        x,
++                        y,
++                        NULL,
++                        &pixel1,
++                        GEGL_ABYSS_NONE);
++
++      gegl_sampler_get (sampler2,
++                        x,
++                        y,
++                        NULL,
++                        &pixel2,
++                        GEGL_ABYSS_NONE);
++
++      if (pixel2 != 0)
++      {
++        diff = (gdouble) pixel1 / (gdouble) pixel2;
++
++        if (diff < 1.0)
++        {
++          hist[(int) (diff * 100)] += 1;
++          count += 1;
++        }
++      }
++
++      x++;
++      if (x >= whole_region->x + whole_region->width)
++        {
++          x = whole_region->x;
++          y++;
++        }
++    }
++
++  g_object_unref (sampler1);
++  g_object_unref (sampler2);
++  g_object_unref (dest1);
++  g_object_unref (dest2);
++
++  if (pct_black == 0.0 || count == 0)
++    return 1.0;
++
++  sum = 0;
++  for (i = 0; i < 100; i++)
++  {
++    sum += hist[i];
++    if (((gdouble) sum / (gdouble) count) > pct_black)
++      return (1.0 - (gdouble) i / 100.0);
++  }
++
++  return 0.0;
++
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++
++  gegl_operation_set_format (operation, "input",
++                             babl_format ("Y'CbCrA float"));
++  gegl_operation_set_format (operation, "output",
++                             babl_format ("Y'CbCrA float"));
++
++ if(o->chant_data)
++    {
++      Ramps* ramps = (Ramps*) o->chant_data;
++
++      /* hack so that thresholds are only calculated once */
++      if(ramps->prev_mask_radius != o->mask_radius ||
++      ramps->prev_pct_black    != o->pct_black)
++      {
++        g_slice_free (Ramps, o->chant_data);
++        o->chant_data = NULL;
++      }
++    }
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++
++  GeglBuffer  *dest1;
++  GeglBuffer  *dest2;
++  GeglSampler *sampler1;
++  GeglSampler *sampler2;
++
++  Ramps* ramps;
++
++  gint n_pixels;
++  gfloat pixel1, pixel2;
++  gfloat *out_pixel;
++  gint x;
++  gint y;
++
++
++  gdouble diff;
++  Ramps *get_ramps;
++  gdouble ramp;
++  gdouble mult = 0.0;
++
++  gfloat *dst_buf;
++  GeglRectangle *whole_region;
++
++  static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
++
++  dst_buf = g_slice_alloc (result->width * result->height * 4 * sizeof(gfloat));
++
++  gegl_buffer_get (input, result, 1.0, babl_format ("Y'CbCrA float"), dst_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++
++  g_static_mutex_lock (&mutex);
++  if(o->chant_data == NULL)
++    {
++      whole_region = gegl_operation_source_get_bounding_box (operation, "input");
++      gegl_buffer_set_extent (input, whole_region);
++      o->chant_data = g_slice_new (Ramps);
++      ramps = (Ramps*) o->chant_data;
++      ramps->prev_ramp = compute_ramp (input,operation,o->pct_black);
++      ramps->prev_mask_radius = o->mask_radius;
++      ramps->prev_pct_black   = o->pct_black;
++    }
++  g_static_mutex_unlock (&mutex);
++
++  gegl_buffer_set_extent (input, result);
++  grey_blur_buffer (input, o->mask_radius, &dest1, &dest2);
++
++  sampler1 = gegl_buffer_sampler_new (dest1,
++                                      babl_format ("Y' float"),
++                                      GEGL_SAMPLER_LINEAR);
++
++  sampler2 = gegl_buffer_sampler_new (dest2,
++                                      babl_format ("Y' float"),
++                                      GEGL_SAMPLER_LINEAR);
++
++  x = result->x;
++  y = result->y;
++  n_pixels = result->width * result->height;
++
++  out_pixel = dst_buf;
++  get_ramps = (Ramps*) o->chant_data;
++  ramp = get_ramps->prev_ramp;
++
++  while (n_pixels--)
++    {
++      gegl_sampler_get (sampler1,
++                        x,
++                        y,
++                        NULL,
++                        &pixel1,
++                        GEGL_ABYSS_NONE);
++
++      gegl_sampler_get (sampler2,
++                        x,
++                        y,
++                        NULL,
++                        &pixel2,
++                        GEGL_ABYSS_NONE);
++
++      if (pixel2 != 0)
++      {
++        diff = (gdouble) pixel1 / (gdouble) pixel2;
++        if (diff < THRESHOLD)
++        {
++          if (GEGL_FLOAT_EQUAL(ramp,0.0))
++            mult = 0.0;
++          else
++            mult = (ramp - MIN (ramp, (THRESHOLD - diff))) / ramp;
++        }
++        else
++          mult = 1.0;
++      }
++
++      *out_pixel = CLAMP(pixel1 * mult, 0.0, 1.0);
++
++      out_pixel += 4;
++
++      x++;
++      if (x >= result->x + result->width)
++      {
++        x = result->x;
++        y++;
++      }
++    }
++
++
++  gegl_buffer_set (output, result, 0, babl_format ("Y'CbCrA float"), dst_buf, GEGL_AUTO_ROWSTRIDE);
++  g_slice_free1 (result->width * result->height * 4 * sizeof(gfloat), dst_buf);
++
++  g_object_unref (sampler1);
++  g_object_unref (sampler2);
++  g_object_unref (dest1);
++  g_object_unref (dest2);
++
++  whole_region = gegl_operation_source_get_bounding_box (operation, "input");
++  gegl_buffer_set_extent (input, whole_region);
++  return  TRUE;
++}
++
++static void
++finalize (GObject *object)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (object);
++
++  if (o->chant_data)
++    {
++      g_slice_free (Ramps, o->chant_data);
++      o->chant_data = NULL;
++    }
++
++  G_OBJECT_CLASS (gegl_chant_parent_class)->finalize (object);
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GObjectClass             *object_class;
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++
++  object_class    = G_OBJECT_CLASS (klass);
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  object_class->finalize = finalize;
++  operation_class->prepare = prepare;
++  filter_class->process    = process;
++
++  gegl_operation_class_set_keys (operation_class,
++                "categories" , "artistic",
++                "name"       , "gegl:cartoon",
++                "description", _("Cartoon effect"),
++                NULL);
++}
++
++#endif
+diff --git a/operations/common/color-reduction.c b/operations/common/color-reduction.c
+new file mode 100644
+index 0000000..6ff09b7
+--- /dev/null
++++ operations/common/color-reduction.c
+@@ -0,0 +1,585 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2008 Hans Petter Jansson <hpj at copyleft.no>
++ *           2012 Øyvind Kolås <pippin at gimp.org>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_register_enum (gegl_dither_strategy)
++  enum_value (GEGL_DITHER_NONE,   "None")
++  enum_value (GEGL_DITHER_RANDOM, "Random")
++  enum_value (GEGL_DITHER_RESILIENT, "Resilient")
++  enum_value (GEGL_DITHER_RANDOM_COVARIANT, "Random Covariant")
++  enum_value (GEGL_DITHER_BAYER,  "Bayer")
++  enum_value (GEGL_DITHER_FLOYD_STEINBERG, "Floyd-Steinberg")
++gegl_chant_register_enum_end (GeglDitherStrategy)
++
++gegl_chant_int (red_bits,   _("Red bits"),   1, 16, 8, _("Number of bits for red channel"))
++gegl_chant_int (green_bits, _("Green bits"), 1, 16, 8, _("Number of bits for green channel"))
++gegl_chant_int (blue_bits,  _("Blue bits"),  1, 16, 8, _("Number of bits for blue channel"))
++gegl_chant_int (alpha_bits, _("Alpha bits"), 1, 16, 8, _("Number of bits for alpha channel"))
++
++gegl_chant_enum (dither_strategy, _("Dithering Strategy"), GeglDitherStrategy,
++                 gegl_dither_strategy, GEGL_DITHER_RESILIENT, _("The dithering strategy to use"))
++
++#else
++
++#define GEGL_CHANT_TYPE_FILTER
++#define GEGL_CHANT_C_FILE       "color-reduction.c"
++
++#include "gegl-chant.h"
++
++static void
++prepare (GeglOperation *operation)
++{
++  gegl_operation_set_format (operation, "input", babl_format ("R'G'B'A u16"));
++  gegl_operation_set_format (operation, "output", babl_format ("R'G'B'A u16"));
++}
++
++static void
++generate_channel_masks (guint *channel_bits, guint *channel_mask)
++{
++  gint i;
++
++  for (i = 0; i < 4; i++)
++    channel_mask [i] = ~((1 << (16 - channel_bits [i])) - 1);
++}
++
++static guint
++quantize_value (guint value, guint n_bits, guint mask)
++{
++  gint i;
++
++  value &= mask;
++
++  for (i = n_bits; i < 16; i += n_bits)
++    value |= value >> i;
++
++  return value;
++}
++
++static gint
++fast_random_int (void)
++{
++  #define PRIME1 2713
++  #define PRIME2 1913
++  static gboolean inited = 0;
++  static int rand1[PRIME1];
++  static int rand2[PRIME2];
++  static int r1, r2;
++  int ret;
++  if (G_UNLIKELY (!inited))
++    {
++       for (r1 = 0; r1 < PRIME1; r1++)
++         rand1[r1] = g_random_int ();
++       for (r2 = 0; r2 < PRIME2; r2++)
++         rand2[r2] = g_random_int ();
++       inited = TRUE;
++    }
++  ret = ((rand1[(r1++) % PRIME1] + rand2[(r2++) % PRIME2]));
++  ret &= ((1 << 17)-1);
++  ret -= 65536;
++  return ret;
++}
++
++
++static void
++process_floyd_steinberg (GeglBuffer *input,
++                         GeglBuffer *output,
++                         const GeglRectangle *result,
++                         guint *channel_bits)
++{
++  GeglRectangle        line_rect;
++  guint16             *line_buf;
++  gdouble             *error_buf [2];
++  guint                channel_mask [4];
++  gint                 y;
++
++  line_rect.x      = result->x;
++  line_rect.y      = result->y;
++  line_rect.width  = result->width;
++  line_rect.height = 1;
++
++  line_buf      = g_new  (guint16, line_rect.width * 4);
++  error_buf [0] = g_new0 (gdouble, line_rect.width * 4);
++  error_buf [1] = g_new0 (gdouble, line_rect.width * 4);
++
++  generate_channel_masks (channel_bits, channel_mask);
++
++  for (y = 0; y < result->height; y++)
++  {
++    gdouble  *error_buf_swap;
++    gint      step;
++    gint      start_x;
++    gint      end_x;
++    gint      x;
++
++    /* Serpentine scanning; reverse direction every row */
++
++    if (y & 1)
++    {
++      start_x = result->width - 1;
++      end_x   = -1;
++      step    = -1;
++    }
++    else
++    {
++      start_x = 0;
++      end_x   = result->width;
++      step    = 1;
++    }
++
++    /* Pull input row */
++
++    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("R'G'B'A u16"), line_buf,
++                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++    /* Process the row */
++
++    for (x = start_x; x != end_x; x += step)
++    {
++      guint16  *pixel = &line_buf [x * 4];
++      guint     ch;
++
++      for (ch = 0; ch < 4; ch++)
++      {
++        gdouble value;
++        gdouble value_clamped;
++        gdouble quantized;
++        gdouble qerror;
++
++        value         = pixel [ch] + error_buf [0] [x * 4 + ch];
++        value_clamped = CLAMP (value, 0.0, 65535.0);
++        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
++        qerror        = value - quantized;
++
++        pixel [ch] = (guint16) quantized;
++
++        /* Distribute the error */
++
++        error_buf [1] [x * 4 + ch] += qerror * 5.0 / 16.0;  /* Down */
++
++        if (x + step >= 0 && x + step < result->width)
++        {
++          error_buf [0] [(x + step) * 4 + ch] += qerror * 6.0 / 16.0;  /* Ahead */
++          error_buf [1] [(x + step) * 4 + ch] += qerror * 1.0 / 16.0;  /* Down, ahead */
++        }
++
++        if (x - step >= 0 && x - step < result->width)
++        {
++          error_buf [1] [(x - step) * 4 + ch] += qerror * 3.0 / 16.0;  /* Down, behind */
++        }
++      }
++    }
++
++    /* Swap error accumulation rows */
++
++    error_buf_swap = error_buf [0];
++    error_buf [0]  = error_buf [1];
++    error_buf [1]  = error_buf_swap;
++
++    /* Clear error buffer for next-plus-one line */
++
++    memset (error_buf [1], 0, line_rect.width * 4 * sizeof (gdouble));
++
++    /* Push output row */
++
++    gegl_buffer_set (output, &line_rect, 0, babl_format ("R'G'B'A u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
++    line_rect.y++;
++  }
++
++  g_free (line_buf);
++  g_free (error_buf [0]);
++  g_free (error_buf [1]);
++}
++
++static const gdouble bayer_matrix_8x8 [] =
++{
++   1, 49, 13, 61,  4, 52, 16, 64,
++  33, 17, 45, 29, 36, 20, 48, 32,
++   9, 57,  5, 53, 12, 60,  8, 56,
++  41, 25, 37, 21, 44, 28, 40, 24,
++   3, 51, 15, 63,  2, 50, 14, 62,
++  35, 19, 47, 31, 34, 18, 46, 30,
++  11, 59,  7, 55, 10, 58,  6, 54,
++  43, 27, 39, 23, 42, 26, 38, 22
++};
++
++static void
++process_bayer (GeglBuffer *input,
++               GeglBuffer *output,
++               const GeglRectangle *result,
++               guint *channel_bits)
++{
++  GeglRectangle        line_rect;
++  guint16             *line_buf;
++  guint                channel_mask [4];
++  guint                y;
++
++  line_rect.x = result->x;
++  line_rect.y = result->y;
++  line_rect.width = result->width;
++  line_rect.height = 1;
++
++  line_buf = g_new (guint16, line_rect.width * 4);
++
++  generate_channel_masks (channel_bits, channel_mask);
++
++  for (y = 0; y < result->height; y++)
++  {
++    guint x;
++
++    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("R'G'B'A u16"), line_buf,
++                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++    for (x = 0; x < result->width; x++)
++    {
++      guint16 *pixel = &line_buf [x * 4];
++      guint    ch;
++
++      for (ch = 0; ch < 4; ch++)
++      {
++        gdouble value;
++        gdouble value_clamped;
++        gdouble quantized;
++
++        value         = pixel [ch] + ((bayer_matrix_8x8 [(y % 8) * 8 + (x % 8)] - 32) * 65536.0 / 65.0) / (1 << (channel_bits [ch] - 1));
++        value_clamped = CLAMP (value, 0.0, 65535.0);
++        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
++
++        pixel [ch] = (guint16) quantized;
++      }
++    }
++
++    gegl_buffer_set (output, &line_rect, 0, babl_format ("R'G'B'A u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
++    line_rect.y++;
++  }
++
++  g_free (line_buf);
++}
++
++static void
++process_random_covariant (GeglBuffer *input,
++                          GeglBuffer *output,
++                          const GeglRectangle *result,
++                          guint *channel_bits)
++{
++  GeglRectangle        line_rect;
++  guint16             *line_buf;
++  guint                channel_mask [4];
++  guint                y;
++
++  line_rect.x = result->x;
++  line_rect.y = result->y;
++  line_rect.width = result->width;
++  line_rect.height = 1;
++
++  line_buf = g_new (guint16, line_rect.width * 4);
++
++  generate_channel_masks (channel_bits, channel_mask);
++
++  for (y = 0; y < result->height; y++)
++  {
++    guint x;
++
++    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("R'G'B'A u16"), line_buf,
++                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++    for (x = 0; x < result->width; x++)
++    {
++      guint16 *pixel = &line_buf [x * 4];
++      guint    ch;
++      gint     r = fast_random_int ();
++
++      for (ch = 0; ch < 4; ch++)
++      {
++        gdouble value;
++        gdouble value_clamped;
++        gdouble quantized;
++
++        value         = pixel [ch] + (r / (1 << channel_bits [ch]));
++        value_clamped = CLAMP (value, 0.0, 65535.0);
++        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
++
++        pixel [ch] = (guint16) quantized;
++      }
++    }
++
++    gegl_buffer_set (output, &line_rect, 0, babl_format ("R'G'B'A u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
++    line_rect.y++;
++  }
++
++  g_free (line_buf);
++}
++
++static void
++process_random (GeglBuffer *input,
++                GeglBuffer *output,
++                const GeglRectangle *result,
++                guint *channel_bits)
++{
++  GeglRectangle        line_rect;
++  guint16             *line_buf;
++  guint                channel_mask [4];
++  guint                y;
++
++  line_rect.x = result->x;
++  line_rect.y = result->y;
++  line_rect.width = result->width;
++  line_rect.height = 1;
++
++  line_buf = g_new (guint16, line_rect.width * 4);
++
++  generate_channel_masks (channel_bits, channel_mask);
++
++  for (y = 0; y < result->height; y++)
++  {
++    guint x;
++
++    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("R'G'B'A u16"), line_buf,
++                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++    for (x = 0; x < result->width; x++)
++    {
++      guint16 *pixel = &line_buf [x * 4];
++      guint    ch;
++
++      for (ch = 0; ch < 4; ch++)
++      {
++        gdouble value;
++        gdouble value_clamped;
++        gdouble quantized;
++
++        value         = pixel [ch] + (fast_random_int () / (1 << channel_bits [ch]));
++        value_clamped = CLAMP (value, 0.0, 65535.0);
++        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
++
++        pixel [ch] = (guint16) quantized;
++      }
++    }
++
++    gegl_buffer_set (output, &line_rect, 0, babl_format ("R'G'B'A u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
++    line_rect.y++;
++  }
++
++  g_free (line_buf);
++}
++
++static void
++process_resilient (GeglBuffer *input,
++                   GeglBuffer *output,
++                   const GeglRectangle *result,
++                   guint *channel_bits)
++{
++  GeglRectangle        line_rect;
++  guint16             *line_buf;
++  guint                channel_mask [4];
++  guint                y;
++
++  line_rect.x = result->x;
++  line_rect.y = result->y;
++  line_rect.width = result->width;
++  line_rect.height = 1;
++
++  line_buf = g_new (guint16, line_rect.width * 4);
++
++  generate_channel_masks (channel_bits, channel_mask);
++
++  for (y = 0; y < result->height; y++)
++  {
++    guint x;
++
++    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("R'G'B'A u16"), line_buf,
++                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++    for (x = 0; x < result->width; x++)
++    {
++      guint16 *pixel = &line_buf [x * 4];
++      guint    ch;
++
++      for (ch = 0; ch < 4; ch++)
++      {
++        gdouble value;
++        gdouble value_clamped;
++        gdouble quantized;
++
++        value         = pixel [ch] + 
++        (1.0/(((pixel[ch]+6*65535)/65535.0))/8 + 1.2) *(fast_random_int () / (1 << channel_bits [ch]));
++
++        value_clamped = CLAMP (value, 0.0, 65535.0);
++        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
++
++        pixel [ch] = (guint16) quantized;
++      }
++    }
++
++    gegl_buffer_set (output, &line_rect, 0, babl_format ("R'G'B'A u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
++    line_rect.y++;
++  }
++
++  g_free (line_buf);
++}
++
++static void
++process_no_dither (GeglBuffer *input,
++                   GeglBuffer *output,
++                   const GeglRectangle *result,
++                   guint *channel_bits)
++{
++  GeglRectangle        line_rect;
++  guint16             *line_buf;
++  guint                channel_mask [4];
++  guint                y;
++
++  line_rect.x = result->x;
++  line_rect.y = result->y;
++  line_rect.width = result->width;
++  line_rect.height = 1;
++
++  line_buf = g_new (guint16, line_rect.width * 4);
++
++  generate_channel_masks (channel_bits, channel_mask);
++
++  for (y = 0; y < result->height; y++)
++  {
++    guint x;
++
++    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("R'G'B'A u16"), line_buf,
++                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++    for (x = 0; x < result->width; x++)
++    {
++      guint16 *pixel = &line_buf [x * 4];
++      guint    ch;
++
++      for (ch = 0; ch < 4; ch++)
++      {
++        pixel [ch] = quantize_value (pixel [ch], channel_bits [ch], channel_mask [ch]);
++      }
++    }
++
++    gegl_buffer_set (output, &line_rect, 0, babl_format ("R'G'B'A u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
++    line_rect.y++;
++  }
++
++  g_free (line_buf);
++}
++
++static GeglRectangle
++get_required_for_output (GeglOperation        *self,
++                         const gchar         *input_pad,
++                         const GeglRectangle *roi)
++{
++  return *gegl_operation_source_get_bounding_box (self, "input");
++}
++
++static GeglRectangle
++get_cached_region (GeglOperation       *self,
++                   const GeglRectangle *roi)
++{
++  return *gegl_operation_source_get_bounding_box (self, "input");
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++  guint       channel_bits [4];
++
++  channel_bits [0] = o->red_bits;
++  channel_bits [1] = o->green_bits;
++  channel_bits [2] = o->blue_bits;
++  channel_bits [3] = o->alpha_bits;
++
++  switch (o->dither_strategy)
++    {
++      case GEGL_DITHER_NONE:
++        process_no_dither (input, output, result, channel_bits);
++        break;
++      case GEGL_DITHER_RANDOM:
++        process_random (input, output, result, channel_bits);
++        break;
++      case GEGL_DITHER_RESILIENT:
++        process_resilient (input, output, result, channel_bits);
++        break;
++      case GEGL_DITHER_RANDOM_COVARIANT:
++        process_random_covariant (input, output, result,
++                                  channel_bits);
++        break;
++      case GEGL_DITHER_FLOYD_STEINBERG:
++        process_floyd_steinberg (input, output, result,
++                                 channel_bits);
++        break;
++      case GEGL_DITHER_BAYER:
++        process_bayer (input, output, result, channel_bits);
++        break;
++      default:
++        process_no_dither (input, output, result, channel_bits);
++    }
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++  gchar                    *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:color-reduction'>"
++    "  <params>"
++    "    <param name='red-bits'>2</param>"
++    "    <param name='green-bits'>2</param>"
++    "    <param name='blue-bits'>2</param>"
++    "    <param name='alpha-bits'>2</param>"
++    "    <param name='dither-strategy'>Floyd-Steinberg</param>"
++    "  </params>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
++
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  operation_class->get_required_for_output = get_required_for_output;
++  operation_class->get_cached_region = get_cached_region;
++  filter_class->process = process;
++
++  gegl_operation_class_set_keys (operation_class,
++    "name"        , "gegl:color-reduction",
++    "categories"  , "misc",
++    "description" ,
++            _("Reduces the number of bits per channel (colors and alpha), with optional dithering"),
++    "reference-composition", composition,
++            NULL);
++}
++
++#endif
+diff --git a/operations/common/color-temperature.c b/operations/common/color-temperature.c
+index 69f4ea6..0e2e729 100644
+--- operations/common/color-temperature.c
++++ operations/common/color-temperature.c
+@@ -188,7 +188,7 @@ static const char* kernel_source =
+ "  out[gid]  =  out_v;                                          \n"
+ "}                                                              \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ /* OpenCL processing function */
+ static cl_int
+@@ -245,6 +245,19 @@ gegl_chant_class_init (GeglChantClass *klass)
+   GObjectClass                  *object_class;
+   GeglOperationClass            *operation_class;
+   GeglOperationPointFilterClass *point_filter_class;
++  gchar                         *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:color-temperature'>"
++    "  <params>"
++    "    <param name='intended-temperature'>12000</param>"
++    "  </params>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   object_class       = G_OBJECT_CLASS (klass);
+   operation_class    = GEGL_OPERATION_CLASS (klass);
+@@ -265,6 +278,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "categories" , "color",
+     "description",
+           _("Allows changing the color temperature of an image."),
++    "reference-composition", composition,
+     NULL);
+ }
+ 
+diff --git a/operations/common/color-to-alpha.c b/operations/common/color-to-alpha.c
+index dbbf656..d0dcd67 100644
+--- operations/common/color-to-alpha.c
++++ operations/common/color-to-alpha.c
+@@ -17,6 +17,7 @@
+  *  with algorithm by clahey
+  * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+  * Copyright (C) 2011 Robert Sasu <sasu.robert at gmail.com>
++ * Copyright (C) 2012 Øyvind Kolås <pippin at gimp.org>
+  */
+ 
+ #include "config.h"
+@@ -24,12 +25,12 @@
+ 
+ #ifdef GEGL_CHANT_PROPERTIES
+ 
+-gegl_chant_color (color, _("Color"), "black",
+-                  _("The color to render (defaults to 'black')"))
++gegl_chant_color (color, _("Color"), "white",
++                  _("The color to render (defaults to 'white')"))
+ 
+ #else
+ 
+-#define GEGL_CHANT_TYPE_FILTER
++#define GEGL_CHANT_TYPE_POINT_FILTER
+ #define GEGL_CHANT_C_FILE       "color-to-alpha.c"
+ 
+ #include "gegl-chant.h"
+@@ -39,9 +40,9 @@ gegl_chant_color (color, _("Color"), "black",
+ static void prepare (GeglOperation *operation)
+ {
+   gegl_operation_set_format (operation, "input",
+-                             babl_format ("RGBA float"));
++                             babl_format ("R'G'B'A double"));
+   gegl_operation_set_format (operation, "output",
+-                             babl_format ("RGBA float"));
++                             babl_format ("R'G'B'A double"));
+ }
+ 
+ /*
+@@ -78,88 +79,114 @@ static void prepare (GeglOperation *operation)
+ */
+ 
+ static void
+-color_to_alpha (gfloat     *color,
+-                gfloat     *src,
+-                gint        offset)
++color_to_alpha (const gdouble *color,
++                const gdouble *src,
++                gdouble       *dst)
+ {
+   gint i;
+-  gfloat temp[4];
++  gdouble alpha[4];
+ 
+-  temp[3] = src[offset + 3];
++  for (i=0; i<4; i++)
++    dst[i] = src[i];
++
++  alpha[3] = dst[3];
+ 
+   for (i=0; i<3; i++)
+     {
+-      if (color[i] < 1.e-4f)
+-        temp[i] = src[offset+i];
+-      else if (src[offset+i] > color[i])
+-        temp[i] = (src[offset+i] - color[i]) / (1.0f - color[i]);
+-      else if (src[offset+i] < color[i])
+-        temp[i] = (color[i] - src[offset+i]) / color[i];
++      if (color[i] < 0.0001)
++        alpha[i] = dst[i];
++      else if (dst[i] > color[i])
++        alpha[i] = (dst[i] - color[i]) / (1.0f - color[i]);
++      else if (dst[i] < color[i])
++        alpha[i] = (color[i] - dst[i]) / (color[i]);
+       else
+-        temp[i] = 0.0f;
++        alpha[i] = 0.0f;
+     }
+ 
+-  if (temp[0] > temp[1])
++  if (alpha[0] > alpha[1])
+     {
+-      if (temp[0] > temp[2])
+-        src[offset+3] = temp[0];
++      if (alpha[0] > alpha[2])
++        dst[3] = alpha[0];
+       else
+-        src[offset+3] = temp[2];
++        dst[3] = alpha[2];
++    }
++  else if (alpha[1] > alpha[2])
++    {
++      dst[3] = alpha[1];
+     }
+-  else if (temp[1] > temp[2])
+-    src[offset+3] = temp[1];
+   else
+-    src[offset+3] = temp[2];
++    {
++      dst[3] = alpha[2];
++    }
+ 
+-  if (src[offset+3] < 1.e-4f)
++  if (dst[3] < 0.0001)
+     return;
+ 
+   for (i=0; i<3; i++)
+-    src[offset+i] = (src[offset+i] - color[i]) / src[offset+3] + color[i];
++    dst[i] = (dst[i] - color[i]) / dst[3] + color[i];
+ 
+-  src[offset+3] *= temp[3];
++  dst[3] *= alpha[3];
+ }
+ 
+ 
+ 
+ static gboolean
+ process (GeglOperation       *operation,
+-         GeglBuffer          *input,
+-         GeglBuffer          *output,
+-         const GeglRectangle *result,
++         void                *in_buf,
++         void                *out_buf,
++         glong                n_pixels,
++         const GeglRectangle *roi,
+          gint                 level)
+ {
+   GeglChantO *o      = GEGL_CHANT_PROPERTIES (operation);
+-  const Babl *format = babl_format ("RGBA float");
+-  gfloat     *src_buf, color[4];
++  const Babl *format = babl_format ("R'G'B'A double");
++  gdouble      color[4];
+   gint        x;
+ 
+-  src_buf = g_new0 (gfloat, result->width * result->height * 4);
+-
+-  gegl_buffer_get (input, result, 1.0, format, src_buf,
+-                   GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  gdouble *in_buff = in_buf;
++  gdouble *out_buff = out_buf;
+ 
+-  gegl_color_get_pixel (o->color, babl_format ("RGBA float"), color);
++  gegl_color_get_pixel (o->color, format, color);
+ 
+-  for (x = 0; x < result->width * result->height; x++)
+-    color_to_alpha (color, src_buf, 4 * x);
+-
+-  gegl_buffer_set (output, result, 0, format, src_buf, GEGL_AUTO_ROWSTRIDE);
+-
+-  g_free (src_buf);
++  for (x = 0; x < n_pixels; x++)
++    {
++      color_to_alpha (color, in_buff, out_buff);
++      in_buff  += 4;
++      out_buff += 4;
++    }
+ 
+   return TRUE;
+ }
+ 
+-
+ static void
+ gegl_chant_class_init (GeglChantClass *klass)
+ {
+-  GeglOperationClass       *operation_class;
+-  GeglOperationFilterClass *filter_class;
++  GeglOperationClass            *operation_class;
++  GeglOperationPointFilterClass *filter_class;
++  gchar                         *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='svg:dst-over'>"
++    "  <node operation='gegl:crop'>"
++    "    <params>"
++    "      <param name='width'>200.0</param>"
++    "      <param name='height'>200.0</param>"
++    "    </params>"
++    "  </node>"
++    "  <node operation='gegl:checkerboard'>"
++    "    <params><param name='color1'>rgb(0.5, 0.5, 0.5)</param></params>"
++    "  </node>"
++    "</node>"
++    "<node operation='gegl:color-to-alpha'>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   operation_class = GEGL_OPERATION_CLASS (klass);
+-  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++  filter_class    = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
+ 
+   filter_class->process    = process;
+   operation_class->prepare = prepare;
+@@ -168,6 +195,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "name"       , "gegl:color-to-alpha",
+     "categories" , "color",
+     "description", _("Performs color-to-alpha on the image."),
++    "reference-composition", composition,
+     NULL);
+ }
+ 
+diff --git a/operations/common/display.c b/operations/common/display.c
+index 706fd6f..85e88a4 100644
+--- operations/common/display.c
++++ operations/common/display.c
+@@ -59,8 +59,8 @@ set_display_handler (GeglOperation *operation)
+   GeglChantO  *o    = GEGL_CHANT_PROPERTIES (operation);
+   GeglChant   *self = GEGL_CHANT (operation);
+   const gchar *known_handlers[] = {"gegl-gtk3:display", 
+-				 "gegl-gtk2:display",
+-                                 "gegl:sdl-display"};
++                                   "gegl-gtk2:display",
++                                   "gegl:sdl-display"};
+   char *handler = NULL;
+   gchar **operations = NULL;
+   guint   n_operations;
+@@ -102,8 +102,8 @@ attach (GeglOperation *operation)
+ 
+   self->input   = gegl_node_get_input_proxy (operation->node, "input");
+   self->display = gegl_node_new_child (operation->node,
+-                                      "operation", "gegl:nop",
+-                                      NULL);
++                                       "operation", "gegl:nop",
++                                       NULL);
+   gegl_node_link (self->input, self->display);
+ 
+   set_display_handler (operation);
+@@ -121,7 +121,7 @@ process (GeglOperation        *operation,
+   GeglChant   *self = GEGL_CHANT (operation);
+ 
+   return gegl_operation_process (self->display->operation, 
+-				 context, output_pad, roi, level);
++                                 context, output_pad, roi, level);
+ }
+ 
+ static void
+@@ -139,7 +139,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "name"        , "gegl:display",
+     "categories"  , "meta:display",
+     "description" ,
+-          _("Display the input buffer in a window."),
++    _("Display the input buffer in a window."),
+     NULL);
+ }
+ #endif
+diff --git a/operations/common/dot.c b/operations/common/dot.c
+new file mode 100644
+index 0000000..0d9df4d
+--- /dev/null
++++ operations/common/dot.c
+@@ -0,0 +1,195 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2006 Øyvind Kolås <pippin at gimp.org>
++ * Copyright 2012 Michael Muré <batolettre at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++#include <math.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_int_ui (size, _("Block Width"),  1, 123456, 16, 1, 1024, 1.5,
++   _("Size of each block in pixels"))
++gegl_chant_double(ratio, _("Dot size ratio"), 0.0, 1.0, 1.0,
++                  _("Size ratio of a dot inside each block"))
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "dot.c"
++
++#include "gegl-chant.h"
++
++#define CELL_X(px, cell_width)  ((px) / (cell_width))
++#define CELL_Y(py, cell_height)  ((py) / (cell_height))
++
++
++static void prepare (GeglOperation *operation)
++{
++  GeglChantO              *o;
++  GeglOperationAreaFilter *op_area;
++
++  op_area = GEGL_OPERATION_AREA_FILTER (operation);
++  o       = GEGL_CHANT_PROPERTIES (operation);
++
++  op_area->left   =
++  op_area->right  =
++  op_area->top    =
++  op_area->bottom = o->size;
++
++  gegl_operation_set_format (operation, "input",
++                             babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output",
++                             babl_format ("RGBA float"));
++}
++
++static void
++calc_block_colors (gfloat* block_colors,
++                   const gfloat* input,
++                   const GeglRectangle* roi,
++                   gint size)
++{
++  gint cx0 = CELL_X(roi->x, size);
++  gint cy0 = CELL_Y(roi->y, size);
++  gint cx1 = CELL_X(roi->x + roi->width - 1, size);
++  gint cy1 = CELL_Y(roi->y + roi->height - 1, size);
++
++  gint cx;
++  gint cy;
++  gfloat weight = 1.0f / (size * size);
++  gint line_width = roi->width + 2*size;
++  /* loop over the blocks within the region of interest */
++  for (cy=cy0; cy<=cy1; ++cy)
++    {
++      for (cx=cx0; cx<=cx1; ++cx)
++        {
++          gint px = (cx * size) - roi->x + size;
++          gint py = (cy * size) - roi->y + size;
++
++          /* calculate the average color for this block */
++          gint j,i,c;
++          gfloat col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
++          for (j=py; j<py+size; ++j)
++            {
++              for (i=px; i<px+size; ++i)
++                {
++                  for (c=0; c<4; ++c)
++                    col[c] += input[(j*line_width + i)*4 + c];
++                }
++            }
++          for (c=0; c<4; ++c)
++            block_colors[c] = weight * col[c];
++          block_colors += 4;
++        }
++    }
++}
++
++static void
++dot (gfloat* buf,
++     const GeglRectangle* roi,
++     GeglChantO *o)
++{
++  gint cx0 = CELL_X(roi->x, o->size);
++  gint cy0 = CELL_Y(roi->y, o->size);
++  gint block_count_x = CELL_X(roi->x + roi->width - 1, o->size) - cx0 + 1;
++  gint block_count_y = CELL_Y(roi->y + roi->height - 1, o->size) - cy0 + 1;
++  gfloat* block_colors = g_new0 (gfloat, block_count_x * block_count_y * 4);
++  gint x;
++  gint y;
++  gint c;
++  gfloat radius2 = (o->size * o->ratio / 2.0);
++  radius2 *= radius2;
++
++/* calculate the average color of all the blocks */
++  calc_block_colors(block_colors, buf, roi, o->size);
++
++  /* set each pixel to the average color of the block it belongs to */
++  for (y=0; y<roi->height; ++y)
++    {
++      gint cy = CELL_Y(y + roi->y, o->size) - cy0;
++      for (x=0; x<roi->width; ++x)
++        {
++          gint cx = CELL_X(x + roi->x, o->size) - cx0;
++          gfloat cellx = x + roi->x - (cx0 + cx) * o->size - o->size / 2.0;
++          gfloat celly = y + roi->y - (cy0 + cy) * o->size - o->size / 2.0;
++          
++          if (cellx * cellx + celly * celly > radius2)
++            for (c=0; c<4; ++c)
++              *buf++ = 0;
++          else
++            for (c=0; c<4; ++c)
++              *buf++ = block_colors[(cy*block_count_x + cx)*4 + c];
++        }
++    }
++
++  g_free (block_colors);
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *roi,
++         gint                 level)
++{
++  GeglRectangle src_rect;
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++  GeglOperationAreaFilter *op_area;
++  gfloat* buf;
++
++  op_area = GEGL_OPERATION_AREA_FILTER (operation);
++  src_rect = *roi;
++  src_rect.x -= op_area->left;
++  src_rect.y -= op_area->top;
++  src_rect.width += op_area->left + op_area->right;
++  src_rect.height += op_area->top + op_area->bottom;
++
++  buf = g_new0 (gfloat, src_rect.width * src_rect.height * 4);
++
++  gegl_buffer_get (input, &src_rect, 1.0, babl_format ("RGBA float"), buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  dot(buf, roi, o);
++  gegl_buffer_set (output, roi, 0, babl_format ("RGBA float"), buf, GEGL_AUTO_ROWSTRIDE);
++
++  g_free (buf);
++
++  return  TRUE;
++}
++
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  filter_class->process    = process;
++  operation_class->prepare = prepare;
++
++  gegl_operation_class_set_keys (operation_class,
++    "categories" , "render",
++    "name"       , "gegl:dot",
++    "description",
++         _("Simplify image into an array of solid-colored dots"),
++    NULL);
++}
++
++#endif
+diff --git a/operations/common/dropshadow.c b/operations/common/dropshadow.c
+index a9785cb..893e1b6 100644
+--- operations/common/dropshadow.c
++++ operations/common/dropshadow.c
+@@ -22,7 +22,7 @@
+ 
+ #ifdef GEGL_CHANT_PROPERTIES
+ 
+-gegl_chant_double (opacity, _("Opacity"), -2.0, 2.0, 0.5, _("Opacity"))
++gegl_chant_double (opacity, _("Opacity"), 0, 1.0, 0.5, _("Opacity"))
+ gegl_chant_double_ui (x, _("X"), -G_MAXDOUBLE, G_MAXDOUBLE, 20.0, -20.0, 20.0, 1.0,
+                    _("Horizontal shadow offset"))
+ gegl_chant_double_ui (y, _("Y"), -G_MAXDOUBLE, G_MAXDOUBLE, 20.0, -20.0, 20.0, 1.0,
+diff --git a/operations/common/edge-laplace.c b/operations/common/edge-laplace.c
+index 1f8efdf..a77fb36 100644
+--- operations/common/edge-laplace.c
++++ operations/common/edge-laplace.c
+@@ -419,7 +419,7 @@ static const char* kernel_source =
+ "        (value[0], value[1], value[2], value[3]);                     \n"
+ "}                                                                     \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_edge_laplace (cl_mem                in_tex,
+diff --git a/operations/common/edge-sobel.c b/operations/common/edge-sobel.c
+index 2807ba6..274f31f 100644
+--- operations/common/edge-sobel.c
++++ operations/common/edge-sobel.c
+@@ -134,7 +134,7 @@ static const char* kernel_source =
+ "    out[gidx + gidy * dst_width] = gradient;                          \n"
+ "}                                                                     \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_edge_sobel (cl_mem              in_tex,
+diff --git a/operations/common/exp-combine.c b/operations/common/exp-combine.c
+index 3e603a6..bef697e 100644
+--- operations/common/exp-combine.c
++++ operations/common/exp-combine.c
+@@ -29,7 +29,7 @@ gegl_chant_int   (steps, _("Discretization Bits"),
+                   _("Log2 of source's discretization steps"))
+ gegl_chant_double (sigma, _("Weight Sigma"),
+                   0.0f, 32.0f, 8.0f,
+-                  _("Weight distrubtion sigma controlling response contributions"))
++                  _("Weight distribution sigma controlling response contributions"))
+ 
+ #else
+ 
+@@ -229,7 +229,7 @@ gegl_expcombine_weights_gauss (gfloat *weights,
+           continue;
+         }
+ 
+-      /* gkrawczyk: that's not really a gaussian, but equation is
++      /* gkrawczyk: that's not really a Gaussian, but equation is
+        * taken from Robertson02 paper.
+        */
+       weight = exp ( -sigma                 *
+diff --git a/operations/common/gaussian-blur.c b/operations/common/gaussian-blur.c
+index 8bdc50b..875d7c8 100644
+--- operations/common/gaussian-blur.c
++++ operations/common/gaussian-blur.c
+@@ -472,7 +472,7 @@ static const char* kernel_source =
+ "        src_buf, src_offset, 1, cmatrix, matrix_length);          \n"
+ "}                                                                 \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_gaussian_blur (cl_mem                in_tex,
+diff --git a/operations/common/image-compare.c b/operations/common/image-compare.c
+new file mode 100644
+index 0000000..67a6c13
+--- /dev/null
++++ operations/common/image-compare.c
+@@ -0,0 +1,183 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2010 Øyvind Kolås <pippin at gimp.org>
++ *           2012 Ville Sokk <ville.sokk at gmail.com>
++ */
++
++#include "config.h"
++#include <math.h>
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_int (wrong_pixels, _("Wrong pixels"), G_MININT, G_MAXINT, 0, _("Number of differing pixels."))
++gegl_chant_double (max_diff, _("Maximum difference"), -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, _("Maximum difference between two pixels."))
++gegl_chant_double (avg_diff_wrong, _("Average difference (wrong)"), -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, _("Average difference between wrong pixels."))
++gegl_chant_double (avg_diff_total, _("Average difference (total)"), -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, _("Average difference between all pixels."))
++
++#else
++
++#define GEGL_CHANT_TYPE_COMPOSER
++#define GEGL_CHANT_C_FILE       "image-compare.c"
++
++#include "gegl-chant.h"
++
++
++static void
++prepare (GeglOperation *self)
++{
++  gegl_operation_set_format (self, "input", babl_format ("CIE Lab float"));
++  gegl_operation_set_format (self, "aux", babl_format ("CIE Lab float"));
++  gegl_operation_set_format (self, "output", babl_format ("R'G'B' u8"));
++}
++
++static GeglRectangle
++get_required_for_output (GeglOperation       *operation,
++                         const gchar         *input_pad,
++                         const GeglRectangle *region)
++{
++  GeglRectangle result = *gegl_operation_source_get_bounding_box (operation, "input");
++
++  return result;
++}
++
++#define SQR(x) ((x) * (x))
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *aux,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO  *props        = GEGL_CHANT_PROPERTIES (operation);
++  gdouble      max_diff     = 0.0;
++  gdouble      diffsum      = 0.0;
++  gint         wrong_pixels = 0;
++  const Babl*  cielab       = babl_format ("CIE Lab float");
++  const Babl*  srgb         = babl_format ("R'G'B' u8");
++  gint         pixels, i;
++  gfloat      *in_buf, *aux_buf, *a, *b;
++  guchar      *out_buf, *out;
++
++  if (aux == NULL)
++    return TRUE;
++
++  in_buf = g_malloc (result->height * result->width * babl_format_get_bytes_per_pixel (cielab));
++  aux_buf = g_malloc (result->height * result->width * babl_format_get_bytes_per_pixel (cielab));
++  out_buf = g_malloc (result->height * result->width * babl_format_get_bytes_per_pixel (srgb));
++
++  gegl_buffer_get (input, result, 1.0, cielab, in_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  gegl_buffer_get (aux, result, 1.0, cielab, aux_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  a   = in_buf;
++  b   = aux_buf;
++  out = out_buf;
++
++  pixels = result->width * result->height;
++
++  for (i = 0; i < pixels; i++)
++    {
++      gdouble diff = sqrt (SQR(a[0] - b[0])+
++                           SQR(a[1] - b[1])+
++                           SQR(a[2] - b[2]));
++      if (diff >= 0.01)
++        {
++          wrong_pixels++;
++          diffsum += diff;
++          if (diff > max_diff)
++            max_diff = diff;
++          out[0] = (diff / 100.0 * 255);
++          out[1] = 0;
++          out[2] = a[0] / 100.0 * 255;
++        }
++      else
++        {
++          out[0] = a[0] / 100.0 * 255;
++          out[1] = a[0] / 100.0 * 255;
++          out[2] = a[0] / 100.0 * 255;
++        }
++      a   += 3;
++      b   += 3;
++      out += 3;
++    }
++
++  a   = in_buf;
++  b   = aux_buf;
++  out = out_buf;
++
++  if (wrong_pixels)
++    for (i = 0; i < pixels; i++)
++      {
++        gdouble diff = sqrt (SQR(a[0] - b[0])+
++                             SQR(a[1] - b[1])+
++                             SQR(a[2] - b[2]));
++
++        if (diff >= 0.01)
++          {
++            out[0] = (100 - a[0]) / 100.0 * 64 + 32;
++            out[1] = (diff / max_diff * 255);
++            out[2] = 0;
++          }
++        else
++          {
++            out[0] = a[0] / 100.0 * 255;
++            out[1] = a[0] / 100.0 * 255;
++            out[2] = a[0] / 100.0 * 255;
++          }
++        a   += 3;
++        b   += 3;
++        out += 3;
++      }
++
++  gegl_buffer_set (output, result, 1.0, srgb, out_buf, GEGL_AUTO_ROWSTRIDE);
++
++  g_free (in_buf);
++  g_free (aux_buf);
++  g_free (out_buf);
++
++  props->wrong_pixels   = wrong_pixels;
++  props->max_diff       = max_diff;
++  props->avg_diff_wrong = diffsum / wrong_pixels;
++  props->avg_diff_total = diffsum / pixels;
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass         *operation_class;
++  GeglOperationComposerClass *composer_class;
++
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  composer_class  = GEGL_OPERATION_COMPOSER_CLASS (klass);
++
++  operation_class->prepare                 = prepare;
++  operation_class->get_required_for_output = get_required_for_output;
++  composer_class->process                  = process;
++
++  gegl_operation_class_set_keys (operation_class,
++                                 "name"       , "gegl:image-compare",
++                                 "categories" , "programming",
++                                 "description", _("Compares if input and aux buffers are "
++                                                  "different. Results are saved in the "
++                                                  "properties."),
++                                 NULL);
++}
++
++#endif
+diff --git a/operations/common/invert.c b/operations/common/invert.c
+index 4b62697..cd49db4 100644
+--- operations/common/invert.c
++++ operations/common/invert.c
+@@ -40,32 +40,25 @@ process (GeglOperation       *op,
+          const GeglRectangle *roi,
+          gint                 level)
+ {
+-  glong   i;
+   gfloat *in  = in_buf;
+   gfloat *out = out_buf;
+ 
+-  for (i=0; i<samples; i++)
++  while (samples--)
+     {
+-      int  j;
+-      for (j=0; j<3; j++)
+-        {
+-          gfloat c;
+-          c = in[j];
+-          c = 1.0 - c;
+-          out[j] = c;
+-        }
+-      out[3]=in[3];
++      out[0] = 1.0 - in[0];
++      out[1] = 1.0 - in[1];
++      out[2] = 1.0 - in[2];
++      out[3] = in[3];
++
+       in += 4;
+       out+= 4;
+     }
+   return TRUE;
+ }
+ 
+-#include "opencl/gegl-cl.h"
+-
+ static const char* kernel_source =
+-"__kernel void kernel_inv(__global const float4     *in,        \n"
+-"                         __global       float4     *out)       \n"
++"__kernel void gegl_invert (__global const float4     *in,      \n"
++"                           __global       float4     *out)     \n"
+ "{                                                              \n"
+ "  int gid = get_global_id(0);                                  \n"
+ "  float4 in_v  = in[gid];                                      \n"
+@@ -75,41 +68,6 @@ static const char* kernel_source =
+ "  out[gid]  =  out_v;                                          \n"
+ "}                                                              \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
+-
+-/* OpenCL processing function */
+-static cl_int
+-cl_process (GeglOperation       *op,
+-            cl_mem               in_tex,
+-            cl_mem               out_tex,
+-            size_t               global_worksize,
+-            const GeglRectangle *roi,
+-            int                  level)
+-{
+-  cl_int cl_err = 0;
+-
+-  if (!cl_data)
+-    {
+-      const char *kernel_name[] = {"kernel_inv", NULL};
+-      cl_data = gegl_cl_compile_and_build (kernel_source, kernel_name);
+-    }
+-
+-  if (!cl_data) return 1;
+-
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),   (void*)&in_tex);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_mem),   (void*)&out_tex);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                        cl_data->kernel[0], 1,
+-                                        NULL, &global_worksize, NULL,
+-                                        0, NULL, NULL);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  return cl_err;
+-
+-}
+-
+ static void
+ gegl_chant_class_init (GeglChantClass *klass)
+ {
+@@ -120,9 +78,6 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
+ 
+   point_filter_class->process = process;
+-  point_filter_class->cl_process = cl_process;
+-
+-  operation_class->opencl_support = TRUE;
+ 
+   gegl_operation_class_set_keys (operation_class,
+     "name"       , "gegl:invert",
+@@ -130,7 +85,8 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "description",
+        _("Inverts the components (except alpha), the result is the "
+          "corresponding \"negative\" image."),
+-       NULL);
++    "cl-source"  , kernel_source,
++    NULL);
+ }
+ 
+ #endif
+diff --git a/operations/common/lens-distortion.c b/operations/common/lens-distortion.c
+index 27e8e66..56ebb4d 100644
+--- operations/common/lens-distortion.c
++++ operations/common/lens-distortion.c
+@@ -306,6 +306,23 @@ gegl_chant_class_init (GeglChantClass *klass)
+ {
+   GeglOperationClass       *operation_class;
+   GeglOperationFilterClass *filter_class;
++  gchar                    *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:lens-distortion'>"
++    "  <params>"
++    "    <param name='main'>100</param>"
++    "    <param name='zoom'>20</param>"
++    "    <param name='edge'>100</param>"
++    "    <param name='x-shift'>20</param>"
++    "    <param name='y-shift'>20</param>"
++    "  </params>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   operation_class = GEGL_OPERATION_CLASS (klass);
+   filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
+@@ -319,6 +336,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "name"       , "gegl:lens-distortion",
+     "categories" , "blur",
+     "description", _("Copies image performing lens distortion correction."),
++    "reference-composition", composition,
+     NULL);
+ }
+ 
+diff --git a/operations/common/levels.c b/operations/common/levels.c
+index 7edb318..2c3f9f0 100644
+--- operations/common/levels.c
++++ operations/common/levels.c
+@@ -102,7 +102,7 @@ static const char* kernel_source =
+ "  out[gid]  =  out_v;                                           \n"
+ "}                                                               \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ /* OpenCL processing function */
+ static cl_int
+@@ -167,6 +167,22 @@ gegl_chant_class_init (GeglChantClass *klass)
+ {
+   GeglOperationClass            *operation_class;
+   GeglOperationPointFilterClass *point_filter_class;
++  gchar                         *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:levels'>"
++    "  <params>"
++    "    <param name='in-low'>0.54</param>"
++    "    <param name='in-high'>0.60</param>"
++    "    <param name='out-low'>0.57</param>"
++    "    <param name='out-high'>0.68</param>"
++    "  </params>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   operation_class    = GEGL_OPERATION_CLASS (klass);
+   point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
+@@ -180,6 +196,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "name"       , "gegl:levels",
+     "categories" , "color",
+     "description", _("Remaps the intensity range of the image"),
++    "reference-composition", composition,
+     NULL);
+ }
+ 
+diff --git a/operations/common/load.c b/operations/common/load.c
+index 022c67d..83240bd 100644
+--- operations/common/load.c
++++ operations/common/load.c
+@@ -178,7 +178,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "categories" , "meta:input",
+     "description",
+           _("Multipurpose file loader, that uses other native handlers, and "
+-            "fallback conversion using image magick's convert."),
++            "fallback conversion using Image Magick's convert."),
+     NULL);
+ 
+ }
+diff --git a/operations/common/mantiuk06.c b/operations/common/mantiuk06.c
+index 02dfd29..f8a0bef 100644
+--- operations/common/mantiuk06.c
++++ operations/common/mantiuk06.c
+@@ -33,7 +33,7 @@ gegl_chant_double (contrast, _("Contrast"),
+                   _("The amount of contrast compression"))
+ gegl_chant_double (saturation, _("Saturation"),
+                   0.0, 2.0, 0.8,
+-                  _("Global colour saturation factor"))
++                  _("Global color saturation factor"))
+ gegl_chant_double (detail, _("Detail"),
+                   1.0, 99.0, 1.0,
+                   _("Level of emphasis on image gradient details"))
+diff --git a/operations/common/map-absolute.c b/operations/common/map-absolute.c
+index 6d90c6a..d3866d6 100644
+--- operations/common/map-absolute.c
++++ operations/common/map-absolute.c
+@@ -19,8 +19,8 @@
+ 
+ #ifdef GEGL_CHANT_PROPERTIES
+ 
+-gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, GEGL_TYPE_SAMPLER_TYPE,
+-                 GEGL_SAMPLER_CUBIC, _("Sampler used internaly"))
++gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, gegl_sampler_type,
++                 GEGL_SAMPLER_CUBIC, _("Sampler used internally"))
+ 
+ #else
+ 
+@@ -101,7 +101,7 @@ process (GeglOperation       *operation,
+                 }
+               else
+                 {
+-                  gegl_sampler_get (sampler, coords[0], coords[1], NULL, out);
++                  gegl_sampler_get (sampler, coords[0], coords[1], NULL, out, GEGL_ABYSS_NONE);
+                 }
+ 
+               coords += 2;
+diff --git a/operations/common/map-relative.c b/operations/common/map-relative.c
+index 3a4eb24..415becb 100644
+--- operations/common/map-relative.c
++++ operations/common/map-relative.c
+@@ -23,8 +23,8 @@
+ gegl_chant_double (scaling, _("Scaling"), 0.0, 5000.0, 1.0,
+        _("scaling factor of displacement, indicates how large spatial"
+          " displacement a relative mapping value of 1.0 corresponds to."))
+-gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, GEGL_TYPE_SAMPLER_TYPE,
+-                 GEGL_SAMPLER_CUBIC, _("Sampler used internaly"))
++gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, gegl_sampler_type,
++                 GEGL_SAMPLER_CUBIC, _("Sampler used internally"))
+ 
+ #else
+ 
+@@ -109,7 +109,8 @@ process (GeglOperation       *operation,
+                 {
+                   gegl_sampler_get (sampler, x+coords[0] * scaling,
+                                              y+coords[1] * scaling,
+-                                             NULL, out);
++                                             NULL, out,
++                                             GEGL_ABYSS_NONE);
+                 }
+ 
+               coords += 2;
+@@ -142,6 +143,22 @@ gegl_chant_class_init (GeglChantClass *klass)
+ {
+   GeglOperationClass         *operation_class;
+   GeglOperationComposerClass *composer_class;
++  gchar                      *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:map-relative'>"
++    "  <params>"
++    "    <param name='scaling'>100</param>"
++    "  </params>"
++    "  <node operation='gegl:load'>"
++    "    <params><param name='path'>standard-aux.png</param></params>"
++    "  </node>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   operation_class = GEGL_OPERATION_CLASS (klass);
+   composer_class  = GEGL_OPERATION_COMPOSER_CLASS (klass);
+@@ -154,6 +171,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "name"       , "gegl:map-relative",
+     "categories" , "transform",
+     "description", _("sample input with an auxiliary buffer that contain relative source coordinates"),
++    "reference-composition", composition,
+     NULL);
+ }
+ #endif
+diff --git a/operations/common/mono-mixer.c b/operations/common/mono-mixer.c
+index 75e29ec..53a68ea 100644
+--- operations/common/mono-mixer.c
++++ operations/common/mono-mixer.c
+@@ -32,7 +32,7 @@ gegl_chant_double_ui (blue,  _("Blue"),  -10.0, 10.0, 0.25, -1.0, 1.0, 1.0,
+ 
+ #else
+ 
+-#define GEGL_CHANT_TYPE_FILTER
++#define GEGL_CHANT_TYPE_POINT_FILTER
+ #define GEGL_CHANT_C_FILE      "mono-mixer.c"
+ 
+ #include "gegl-chant.h"
+@@ -40,166 +40,69 @@ gegl_chant_double_ui (blue,  _("Blue"),  -10.0, 10.0, 0.25, -1.0, 1.0, 1.0,
+ static void prepare (GeglOperation *operation)
+ {
+   /* set the babl format this operation prefers to work on */
+-  gegl_operation_set_format (operation, "input", babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "input",  babl_format ("RGBA float"));
+   gegl_operation_set_format (operation, "output", babl_format ("YA float"));
+ }
+ 
+-#include "opencl/gegl-cl.h"
+-#include "buffer/gegl-buffer-cl-iterator.h"
+-
+-static const char* kernel_source =
+-"__kernel void Mono_mixer_cl(__global const float4 *src_buf,              \n"
+-"                            float4                 color,                \n"
+-"                            __global float2       *dst_buf)              \n"
+-"{                                                                        \n"
+-"  int gid = get_global_id(0);                                            \n"
+-"  float4 tmp = src_buf[gid] * color;                                     \n"
+-"  dst_buf[gid].x = tmp.x + tmp.y + tmp.z;                                \n"
+-"  dst_buf[gid].y = tmp.w;                                                \n"
+-"}                                                                        \n";
+-
+-static gegl_cl_run_data * cl_data = NULL;
+-
+-static cl_int
+-cl_mono_mixer(cl_mem                in_tex,
+-              cl_mem                out_tex,
+-              size_t                global_worksize,
+-              const GeglRectangle  *roi,
+-              gfloat                red,
+-              gfloat                green,
+-              gfloat                blue)
+-{
+-  cl_int cl_err = 0;
+-  if (!cl_data)
+-  {
+-    const char *kernel_name[] = {"Mono_mixer_cl", NULL};
+-    cl_data = gegl_cl_compile_and_build(kernel_source, kernel_name);
+-  }
+-  if (!cl_data) return 0;
+-
+-  {
+-  cl_float4 color;
+-  color.s[0] = red;
+-  color.s[1] = green;
+-  color.s[2] = blue;
+-  color.s[3] = 1.0f;
+-
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),    (void*)&in_tex);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_float4), (void*)&color);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 2, sizeof(cl_mem),    (void*)&out_tex);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue(), cl_data->kernel[0],
+-                                       1, NULL,
+-                                       &global_worksize, NULL,
+-                                       0, NULL, NULL);
+-  }
+-
+-  return cl_err;
+-}
+-
+ static gboolean
+-cl_process (GeglOperation       *operation,
+-            GeglBuffer          *input,
+-            GeglBuffer          *output,
+-            const GeglRectangle *result)
+-{
+-  const Babl *in_format  = gegl_operation_get_format (operation, "input");
+-  const Babl *out_format = gegl_operation_get_format (operation, "output");
+-  gint err;
+-  gint j;
+-  cl_int cl_err;
+-
+-  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
+-
+-  GeglBufferClIterator *i = gegl_buffer_cl_iterator_new (output,   result, out_format, GEGL_CL_BUFFER_WRITE, GEGL_ABYSS_NONE);
+-  gint read = gegl_buffer_cl_iterator_add (i, input, result, in_format,  GEGL_CL_BUFFER_READ, GEGL_ABYSS_NONE);
+-  while (gegl_buffer_cl_iterator_next (i, &err))
+-  {
+-    if (err) return FALSE;
+-    for (j=0; j < i->n; j++)
+-    {
+-      cl_err = cl_mono_mixer(i->tex[read][j], i->tex[0][j], i->size[0][j], &i->roi[0][j], o->red ,o->green , o->blue);
+-
+-      if (cl_err != CL_SUCCESS)
+-      {
+-        g_warning("[OpenCL] Error in gegl:mono-mixer: %s", gegl_cl_errstring(cl_err));
+-        return FALSE;
+-      }
+-    }
+-  }
+-  return TRUE;
+-}
+-
+-
+-static gboolean
+-process (GeglOperation       *operation,
+-         GeglBuffer          *input,
+-         GeglBuffer          *output,
+-         const GeglRectangle *result,
++process (GeglOperation       *op,
++         void                *in_buf,
++         void                *out_buf,
++         glong                n_pixels,
++         const GeglRectangle *roi,
+          gint                 level)
+ {
+-  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (op);
+   gfloat      red   = o->red;
+   gfloat      green = o->green;
+   gfloat      blue  = o->blue;
+-  gfloat     *in_buf;
+-  gfloat     *out_buf;
+-
+-  if (gegl_cl_is_accelerated ())
+-    if (cl_process (operation, input, output, result))
+-      return TRUE;
+-
+- if ((result->width > 0) && (result->height > 0))
+- {
+-     gint num_pixels = result->width * result->height;
+-     gint i;
+-     gfloat *in_pixel, *out_pixel;
+-
+-     in_buf = g_new (gfloat, 4 * num_pixels);
+-     out_buf = g_new (gfloat, 2 * num_pixels);
+-
+-     gegl_buffer_get (input, result, 1.0, babl_format ("RGBA float"), in_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  gfloat     * GEGL_ALIGNED in_pixel;
++  gfloat     * GEGL_ALIGNED out_pixel;
++  glong       i;
+ 
+-     in_pixel = in_buf;
+-     out_pixel = out_buf;
+-     for (i = 0; i < num_pixels; ++i)
+-     {
+-         out_pixel[0] = in_pixel[0] * red + in_pixel[1] * green + in_pixel[2] * blue;
+-         out_pixel[1] = in_pixel[3];
++  in_pixel   = in_buf;
++  out_pixel  = out_buf;
+ 
+-         in_pixel += 4;
+-         out_pixel += 2;
+-     }
+-
+-     gegl_buffer_set (output, result, 0, babl_format ("YA float"), out_buf,
+-                      GEGL_AUTO_ROWSTRIDE);
+-
+-     g_free (in_buf);
+-     g_free (out_buf);
+- }
+-
+- return TRUE;
++  for (i=0; i<n_pixels; i++)
++    {
++      out_pixel[0] = in_pixel[0] * red + in_pixel[1] * green + in_pixel[2] * blue;
++      out_pixel[1] = in_pixel[3];
++      in_pixel  += 4;
++      out_pixel += 2;
++    }
++  return TRUE;
+ }
+ 
++static const char* kernel_source =
++"__kernel void gegl_mono_mixer (__global const float4 *src_buf,           \n"
++"                               __global       float2 *dst_buf,           \n"
++"                               float                  red,               \n"
++"                               float                  green,             \n"
++"                               float                  blue)              \n"
++"{                                                                        \n"
++"  int gid = get_global_id(0);                                            \n"
++"  float4 in_v = src_buf[gid];                                            \n"
++"  dst_buf[gid].x = in_v.x * red + in_v.y * green + in_v.z * blue;        \n"
++"  dst_buf[gid].y = in_v.w;                                               \n"
++"}                                                                        \n";
++
+ static void
+ gegl_chant_class_init (GeglChantClass *klass)
+ {
+-  GeglOperationClass       *operation_class;
+-  GeglOperationFilterClass *filter_class;
++  GeglOperationClass            *operation_class;
++  GeglOperationPointFilterClass *point_filter_class;
+ 
+-  operation_class = GEGL_OPERATION_CLASS (klass);
+-  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++  operation_class    = GEGL_OPERATION_CLASS (klass);
++  point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
+ 
+-  filter_class->process = process;
+   operation_class->prepare = prepare;
+-
+-  operation_class->opencl_support = TRUE;
++  point_filter_class->process = process;
+ 
+   gegl_operation_class_set_keys (operation_class,
+     "name"       , "gegl:mono-mixer",
+     "categories" , "color",
+     "description", _("Monochrome channel mixer"),
++    "cl-source"  , kernel_source,
+     NULL);
+ }
+ 
+diff --git a/operations/common/motion-blur.c b/operations/common/motion-blur.c
+index bb7dc60..0bee191 100644
+--- operations/common/motion-blur.c
++++ operations/common/motion-blur.c
+@@ -135,7 +135,7 @@ static const char* kernel_source =
+ "        sum / num_steps;                                              \n"
+ "}                                                                     \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_motion_blur (cl_mem                in_tex,
+diff --git a/operations/common/noise-cielch.c b/operations/common/noise-cielch.c
+new file mode 100644
+index 0000000..7416211
+--- /dev/null
++++ operations/common/noise-cielch.c
+@@ -0,0 +1,164 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ *
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_int (holdness, _("Holdness"),   1, 8, 2, _("Holdness"))
++
++gegl_chant_double (lightness_distance, _("Lightness"), 0.0, 100.0, 40.0, _("Lightness"))
++
++gegl_chant_double (chroma_distance,    _("Chroma"),    0.0, 100.0, 40.0, _("Chroma"))
++
++gegl_chant_double (hue_distance,       _("Hue"),       0.0, 180.0,  3.0, _("Hue"))
++
++#else
++
++#define GEGL_CHANT_TYPE_POINT_FILTER
++#define GEGL_CHANT_C_FILE       "noise-cielch.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++static gdouble
++randomize_value (gdouble     now,
++                 gdouble     min,
++                 gdouble     max,
++                 gboolean    wraps_around,
++                 gdouble     rand_max,
++                 gint        holdness)
++{
++  gint    flag, i;
++  gdouble rand_val, new_val, steps;
++
++  steps = max - min + 0.5;
++  rand_val = g_random_double ();
++
++  for (i = 1; i < holdness; i++)
++  {
++    double tmp = g_random_double ();
++    if (tmp < rand_val)
++      rand_val = tmp;
++  }
++
++  flag = (g_random_double () < 0.5) ? -1 : 1;
++  new_val = now + flag * fmod (rand_max * rand_val, steps);
++
++  if (new_val < min)
++  {
++    if (wraps_around)
++      new_val += steps;
++    else
++      new_val = min;
++  }
++
++  if (max < new_val)
++  {
++    if (wraps_around)
++      new_val -= steps;
++    else
++      new_val = max;
++  }
++
++  return new_val;
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  gegl_operation_set_format (operation, "input" , babl_format ("CIE LCH(ab) alpha double"));
++  gegl_operation_set_format (operation, "output", babl_format ("CIE LCH(ab) alpha double"));
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         void                *in_buf,
++         void                *out_buf,
++         glong                n_pixels,
++         const GeglRectangle *roi,
++         gint                 level)
++{
++  GeglChantO *o  = GEGL_CHANT_PROPERTIES (operation);
++
++  gint i;
++
++  gdouble   * GEGL_ALIGNED in_pixel;
++  gdouble   * GEGL_ALIGNED out_pixel;
++
++  gdouble    lightness, chroma, hue, alpha;
++
++  in_pixel      = in_buf;
++  out_pixel     = out_buf;
++
++  for (i = 0; i < n_pixels; i++)
++  {
++    lightness = in_pixel[0];
++    chroma    = in_pixel[1];
++    hue       = in_pixel[2];
++    alpha     = in_pixel[3];
++
++    if ((o->hue_distance > 0) && (chroma > 0))
++      hue = randomize_value (hue, 0.0, 359.0, TRUE, o->hue_distance, o->holdness);
++
++    if (o->chroma_distance > 0) {
++      if (chroma == 0)
++        hue = g_random_double_range (0.0, 360.0);
++      chroma = randomize_value (chroma, 0.0, 100.0, FALSE, o->chroma_distance, o->holdness);
++    }
++
++    if (o->lightness_distance > 0)
++      lightness = randomize_value (lightness, 0.0, 100.0, FALSE, o->lightness_distance, o->holdness);
++
++    out_pixel[0] = lightness;
++    out_pixel[1] = chroma;
++    out_pixel[2] = hue;
++    out_pixel[3] = alpha;
++
++    in_pixel  += 4;
++    out_pixel += 4;
++
++  }
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass            *operation_class;
++  GeglOperationPointFilterClass *point_filter_class;
++
++  operation_class    = GEGL_OPERATION_CLASS (klass);
++  point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  point_filter_class->process = process;
++
++  gegl_operation_class_set_keys (operation_class,
++      "name",       "gegl:noise-CIE_lch",
++      "categories", "noise",
++      "description", _("Randomize lightness, chroma and hue independently"),
++      NULL);
++}
++
++#endif
+diff --git a/operations/common/noise-hsv.c b/operations/common/noise-hsv.c
+new file mode 100644
+index 0000000..2b71d20
+--- /dev/null
++++ operations/common/noise-hsv.c
+@@ -0,0 +1,168 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1995 Spencer Kimball and Peter Mattis
++ * Copyright 1996 Torsten Martinsen
++ * Copyright 2000 Tim Copperfield <timecop at japan.co.jp>
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_int (holdness, _("Holdness"),   1, 8, 2, _("Holdness"))
++
++gegl_chant_double (hue_distance, _("Hue"),   0.0, 180.0, 3.0, _("Hue"))
++
++gegl_chant_double (saturation_distance, _("Saturation"),   0.0, 1.0, 0.04, _("Saturation"))
++
++gegl_chant_double (value_distance, _("Value"),   0.0, 1.0, 0.04, _("Value"))
++
++#else
++
++#define GEGL_CHANT_TYPE_POINT_FILTER
++#define GEGL_CHANT_C_FILE       "noise-hsv.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++static gfloat
++randomize_value (gfloat     now,
++                 gfloat     min,
++                 gfloat     max,
++                 gboolean   wraps_around,
++                 gfloat     rand_max,
++                 gint       holdness)
++{
++  gint    flag, i;
++  gdouble rand_val, new_val, steps;
++
++  steps = max - min + 0.5;
++  rand_val = g_random_double ();
++
++  for (i = 1; i < holdness; i++)
++  {
++    double tmp = g_random_double ();
++    if (tmp < rand_val)
++      rand_val = tmp;
++  }
++
++  flag = (g_random_double () < 0.5) ? -1 : 1;
++  new_val = now + flag * fmod (rand_max * rand_val, steps);
++
++  if (new_val < min)
++  {
++    if (wraps_around)
++      new_val += steps;
++    else
++      new_val = min;
++  }
++
++  if (max < new_val)
++  {
++    if (wraps_around)
++      new_val -= steps;
++    else
++      new_val = max;
++  }
++
++  return new_val;
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  gegl_operation_set_format (operation, "input", babl_format ("HSVA float"));
++  gegl_operation_set_format (operation, "output", babl_format ("HSVA float"));
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         void                *in_buf,
++         void                *out_buf,
++         glong                n_pixels,
++         const GeglRectangle *roi,
++         gint                 level)
++{
++  GeglChantO *o  = GEGL_CHANT_PROPERTIES (operation);
++
++  gint i;
++
++  gfloat   * GEGL_ALIGNED in_pixel;
++  gfloat   * GEGL_ALIGNED out_pixel;
++
++  gfloat    hue, saturation, value, alpha;
++
++  in_pixel      = in_buf;
++  out_pixel     = out_buf;
++
++  for (i = 0; i < n_pixels; i++)
++  {
++    hue        = in_pixel[0];
++    saturation = in_pixel[1];
++    value      = in_pixel[2];
++    alpha      = in_pixel[3];
++
++    /* there is no need for scattering hue of desaturated pixels here */
++    if ((o->hue_distance > 0) && (saturation > 0))
++      hue = randomize_value (hue, 0.0, 359.0, TRUE, o->hue_distance, o->holdness);
++
++    /* desaturated pixels get random hue before increasing saturation */
++    if (o->saturation_distance > 0) {
++      if (saturation == 0)
++        hue = g_random_double_range (0.0, 360.0);
++      saturation = randomize_value (saturation, 0.0, 1.0, FALSE, o->saturation_distance, o->holdness);
++    }
++
++    if (o->value_distance > 0)
++      value = randomize_value (value, 0.0, 1.0, FALSE, o->value_distance, o->holdness);
++
++    out_pixel[0] = hue;
++    out_pixel[1] = saturation;
++    out_pixel[2] = value;
++    out_pixel[3] = alpha;
++
++    in_pixel  += 4;
++    out_pixel += 4;
++
++  }
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass            *operation_class;
++  GeglOperationPointFilterClass *point_filter_class;
++
++  operation_class    = GEGL_OPERATION_CLASS (klass);
++  point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  point_filter_class->process = process;
++
++  gegl_operation_class_set_keys (operation_class,
++      "name",       "gegl:noise-hsv",
++      "categories", "noise",
++      "description", _("Randomize hue, saturation and value independently"),
++      NULL);
++}
++
++#endif
+diff --git a/operations/common/noise-hurl.c b/operations/common/noise-hurl.c
+new file mode 100644
+index 0000000..e3b65d2
+--- /dev/null
++++ operations/common/noise-hurl.c
+@@ -0,0 +1,139 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1997 Miles O'Neal <meo at rru.com>  http://www.rru.com/~meo/
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++/*
++ *  HURL Operation
++ *      We just assign a random value at the current pixel
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_seed (seed, _("Seed"), _("Random seed"))
++
++gegl_chant_double (pct_random, _("Randomization (%)"),   0.0, 100.0, 3.0, _("Randomization"))
++
++gegl_chant_int (repeat, _("Repeat"),   1, 100, 1, _("Repeat"))
++
++
++#else
++
++#define GEGL_CHANT_TYPE_POINT_FILTER
++#define GEGL_CHANT_C_FILE       "noise-hurl.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++static void
++prepare (GeglOperation *operation)
++{
++  gegl_operation_set_format (operation, "input" , babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         void                *in_buf,
++         void                *out_buf,
++         glong                n_pixels,
++         const GeglRectangle *roi,
++         gint                 level)
++{
++  GeglChantO *o  = GEGL_CHANT_PROPERTIES (operation);
++
++  gint i, cnt;
++
++  GRand    *gr;
++
++  gfloat   * GEGL_ALIGNED in_pixel;
++  gfloat   * GEGL_ALIGNED out_pixel;
++
++  gfloat red, green, blue, alpha;
++  gfloat *out_pix;
++
++  in_pixel      = in_buf;
++  out_pixel     = out_buf;
++
++
++  gr = g_rand_new_with_seed (o->seed);
++
++  out_pix = out_pixel;
++
++  for (i = 0; i < n_pixels*4; i++)
++  {
++    *out_pix = *in_pixel;
++    out_pix += 1;
++    in_pixel += 1;
++  }
++
++
++  for (cnt = 1; cnt <= o->repeat; cnt++)
++  {
++    out_pix = out_pixel;
++
++    for (i = 0; i < n_pixels; i++)
++    {
++      red   = out_pix[0];
++      green = out_pix[1];
++      blue  = out_pix[2];
++      alpha = out_pix[3];
++
++      if (g_rand_double_range (gr, 0.0, 100.0) <= o->pct_random)
++      {
++        red   = g_rand_double_range (gr, 0.0, 1.0);
++        green = g_rand_double_range (gr, 0.0, 1.0);
++        blue  = g_rand_double_range (gr, 0.0, 1.0);
++      }
++
++      out_pix[0] = red;
++      out_pix[1] = green;
++      out_pix[2] = blue;
++      out_pix[3] = alpha;
++
++      out_pix += 4;
++    }
++ }
++  return TRUE;
++
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass            *operation_class;
++  GeglOperationPointFilterClass *point_filter_class;
++
++  operation_class    = GEGL_OPERATION_CLASS (klass);
++  point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  point_filter_class->process = process;
++
++  gegl_operation_class_set_keys (operation_class,
++      "name",       "gegl:noise-hurl",
++      "categories", "noise",
++      "description", _("Completely randomize a fraction of pixels"),
++      NULL);
++}
++
++#endif
+diff --git a/operations/common/noise-pick.c b/operations/common/noise-pick.c
+new file mode 100644
+index 0000000..09db191
+--- /dev/null
++++ operations/common/noise-pick.c
+@@ -0,0 +1,196 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1997 Miles O'Neal <meo at rru.com>  http://www.rru.com/~meo/
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++/*
++ *  PICK Operation
++ *     We pick a pixel at random from the neighborhood of the current pixel.
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_seed (seed, _("Seed"), _("Random seed"))
++
++gegl_chant_double (pct_random, _("Randomization (%)"),   0.0, 100.0, 3.0, _("Randomization"))
++
++gegl_chant_int (repeat, _("Repeat"),   1, 100, 1, _("Repeat"))
++
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "noise-pick.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++static void
++prepare (GeglOperation *operation)
++{
++  GeglOperationAreaFilter *op_area;
++  op_area = GEGL_OPERATION_AREA_FILTER (operation);
++
++  op_area->left   =
++    op_area->right  =
++    op_area->top    =
++    op_area->bottom = 1;
++
++  gegl_operation_set_format (operation, "input" , babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
++
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o                    = GEGL_CHANT_PROPERTIES (operation);
++  GeglOperationAreaFilter *op_area = GEGL_OPERATION_AREA_FILTER (operation);
++
++  GeglBuffer *tmp;
++
++  gfloat *src_buf;
++  gfloat *dst_buf;
++  gfloat *out_pixel, *in_pixel;
++  gint n_pixels = result->width * result->height;
++  gint width  = result->width;
++  GeglRectangle src_rect;
++  GRand    *gr;
++  gint k, b, i;
++  gint total_pixels;
++
++  gr = g_rand_new_with_seed (o->seed);
++
++  tmp = gegl_buffer_new(result, babl_format ("RGBA float"));
++
++  src_rect.x      = result->x - op_area->left;
++  src_rect.width  = result->width + op_area->left + op_area->right;
++  src_rect.y      = result->y - op_area->top;
++  src_rect.height = result->height + op_area->top + op_area->bottom;
++
++  total_pixels = src_rect.height * src_rect.width;
++
++  src_buf = g_slice_alloc (4 * total_pixels * sizeof (gfloat));
++  dst_buf = g_slice_alloc (4 * n_pixels * sizeof (gfloat));
++
++
++  gegl_buffer_copy(input, NULL, tmp, NULL);
++
++  for (i = 0; i < o->repeat; i++)
++  {
++    n_pixels = result->width * result->height;
++
++    gegl_buffer_get (tmp, &src_rect, 1.0, babl_format ("RGBA float"), src_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_CLAMP);
++
++    in_pixel  = src_buf + (src_rect.width + 1) * 4;
++    out_pixel = dst_buf;
++
++    while (n_pixels--)
++      {
++        if (g_rand_double_range (gr, 0.0, 100.0) <= o->pct_random)
++        {
++          k = g_rand_int_range (gr, 0, 9);
++          for (b = 0; b < 4; b++)
++          {
++            switch (k )
++            {
++              case 0:
++                out_pixel[b] = in_pixel[b - src_rect.width*4 - 4];
++                break;
++              case 1:
++                out_pixel[b] = in_pixel[b - src_rect.width*4];
++                break;
++              case 2:
++                out_pixel[b] = in_pixel[b - src_rect.width*4 + 4];
++                break;
++              case 3:
++                out_pixel[b] = in_pixel[b - 4];
++                break;
++              case 4:
++                out_pixel[b] = in_pixel[b];
++                break;
++              case 5:
++                out_pixel[b] = in_pixel[b + 4];
++                break;
++              case 6:
++                out_pixel[b] = in_pixel[b + src_rect.width*4 - 4];
++                break;
++              case 7:
++                out_pixel[b] = in_pixel[b + src_rect.width*4];
++                break;
++              case 8:
++                out_pixel[b] = in_pixel[b + src_rect.width*4 + 4];
++                break;
++            }
++          }
++        }
++        else
++        {
++          for (b = 0; b < 4; b++)
++          {
++            out_pixel[b] = in_pixel[b];
++          }
++        }
++
++        if (n_pixels % width == 0)
++          in_pixel += 12;
++        else
++          in_pixel  += 4;
++        out_pixel += 4;
++      }
++
++    gegl_buffer_set (tmp, result, 0, babl_format ("RGBA float"), dst_buf, GEGL_AUTO_ROWSTRIDE);
++
++  }
++
++  gegl_buffer_copy(tmp, NULL, output, NULL);
++
++  g_slice_free1 (4 * total_pixels * sizeof (gfloat), src_buf);
++  g_slice_free1 (4 * n_pixels * sizeof (gfloat), dst_buf);
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  filter_class->process = process;
++
++  gegl_operation_class_set_keys (operation_class,
++      "name",       "gegl:noise-pick",
++      "categories", "noise",
++      "description", _("Randomly interchange some pixels with neighbors"),
++      NULL);
++}
++
++#endif
+diff --git a/operations/common/noise-reduction.c b/operations/common/noise-reduction.c
+index 21a963f..31dd143 100644
+--- operations/common/noise-reduction.c
++++ operations/common/noise-reduction.c
+@@ -231,7 +231,7 @@ static const char* kernel_source =
+ "    out[gidy * width + gidx] = in[gidy * in_width + gidx];                        \n"
+ "}                                                                                 \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_noise_reduction (cl_mem                in_tex,
+diff --git a/operations/common/noise-rgb.c b/operations/common/noise-rgb.c
+new file mode 100644
+index 0000000..be679fa
+--- /dev/null
++++ operations/common/noise-rgb.c
+@@ -0,0 +1,168 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1995 Spencer Kimball and Peter Mattis
++ * Copyright 1996 Torsten Martinsen
++ * Copyright 2000 Tim Copperfield <timecop at japan.co.jp>
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_boolean (correlated, _("Correlated noise"), FALSE, _("Correlated noise"))
++
++gegl_chant_boolean (independent, _("Independent RGB"), TRUE, _("Independent RGB"))
++
++gegl_chant_double (red, _("Red"),   0.0, 1.0, 0.20, _("Red"))
++
++gegl_chant_double (green, _("Green"),   0.0, 1.0, 0.20, _("Green"))
++
++gegl_chant_double (blue, _("Blue"),   0.0, 1.0, 0.20, _("Blue"))
++
++gegl_chant_double (alpha, _("Alpha"),   0.0, 1.0, 0.00, _("Alpha"))
++
++#else
++
++#define GEGL_CHANT_TYPE_POINT_FILTER
++#define GEGL_CHANT_C_FILE       "noise-rgb.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++/*
++ * Return a Gaussian (aka normal) distributed random variable.
++ *
++ * Adapted from gauss.c included in GNU scientific library.
++ *
++ * Ratio method (Kinderman-Monahan); see Knuth v2, 3rd ed, p130
++ * K+M, ACM Trans Math Software 3 (1977) 257-260.
++*/
++static gdouble
++gauss (GRand *gr)
++{
++  gdouble u, v, x;
++
++  do
++  {
++    v = g_rand_double (gr);
++
++    do
++      u = g_rand_double (gr);
++    while (u == 0);
++
++    /* Const 1.715... = sqrt(8/e) */
++    x = 1.71552776992141359295 * (v - 0.5) / u;
++  }
++  while (x * x > -4.0 * log (u));
++
++  return x;
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  gegl_operation_set_format (operation, "input", babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         void                *in_buf,
++         void                *out_buf,
++         glong                n_pixels,
++         const GeglRectangle *roi,
++         gint                 level)
++{
++  GeglChantO *o  = GEGL_CHANT_PROPERTIES (operation);
++
++  GRand    *noise_gr;
++  gdouble  noise_coeff = 0.0;
++  gint     b, i;
++  gdouble  noise[4];
++  gfloat   tmp;
++  gfloat   * GEGL_ALIGNED in_pixel;
++  gfloat   * GEGL_ALIGNED out_pixel;
++
++  noise_gr = g_rand_new ();
++
++  in_pixel   = in_buf;
++  out_pixel  = out_buf;
++
++  noise[0] = o->red;
++  noise[1] = o->green;
++  noise[2] = o->blue;
++  noise[3] = o->alpha;
++
++  for (i=0; i<n_pixels; i++)
++  {
++    for (b = 0; b < 4; b++)
++    {
++      if (b == 0 || o->independent || b == 3 )
++         noise_coeff = noise[b] * gauss (noise_gr) * 0.5;
++
++      if (noise[b] > 0.0)
++      {
++        if (o->correlated)
++        {
++          tmp = (in_pixel[b] + (in_pixel[b] * (noise_coeff / 0.5)) );
++        }
++        else
++        {
++          tmp = (in_pixel[b] + noise_coeff );
++        }
++
++        out_pixel[b] = CLAMP(tmp, 0.0, 1.0);
++      }
++      else
++      {
++        out_pixel[b] = in_pixel[b];
++      }
++    }
++
++    in_pixel  += 4;
++    out_pixel += 4;
++
++  }
++
++  g_rand_free (noise_gr);
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass            *operation_class;
++  GeglOperationPointFilterClass *point_filter_class;
++
++  operation_class    = GEGL_OPERATION_CLASS (klass);
++  point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  point_filter_class->process = process;
++
++  gegl_operation_class_set_keys (operation_class,
++      "name",       "gegl:noise-rgb",
++      "categories", "noise",
++      "description", _("Distort colors by random amounts."),
++      NULL);
++}
++
++#endif
+diff --git a/operations/common/noise-slur.c b/operations/common/noise-slur.c
+new file mode 100644
+index 0000000..2d7aede
+--- /dev/null
++++ operations/common/noise-slur.c
+@@ -0,0 +1,182 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1997 Miles O'Neal <meo at rru.com>  http://www.rru.com/~meo/
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++/*
++ *  SLUR Operation
++ *  We replace the current pixel by:
++ *      80% chance it's from directly above,
++ *      10% from above left,
++ *      10% from above right.
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_seed (seed, _("Seed"), _("Random seed"))
++
++gegl_chant_double (pct_random, _("Randomization (%)"),   0.0, 100.0, 3.0, _("Randomization"))
++
++gegl_chant_int (repeat, _("Repeat"),   1, 100, 1, _("Repeat"))
++
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "noise-slur.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++static void prepare (GeglOperation *operation)
++{
++  GeglOperationAreaFilter *op_area;
++  op_area = GEGL_OPERATION_AREA_FILTER (operation);
++
++  op_area->left   =
++    op_area->right  =
++    op_area->top    =
++    op_area->bottom = 1;
++
++  gegl_operation_set_format (operation, "input" , babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
++
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o                    = GEGL_CHANT_PROPERTIES (operation);
++  GeglOperationAreaFilter *op_area = GEGL_OPERATION_AREA_FILTER (operation);
++
++  GeglBuffer *tmp;
++
++  gfloat *src_buf;
++  gfloat *dst_buf;
++  gfloat *out_pixel, *in_pixel;
++  gint n_pixels = result->width * result->height;
++  gint width  = result->width;
++  gint height = result->height;
++  GeglRectangle src_rect;
++  GRand    *gr;
++  gint k, b, i;
++  gint total_pixels;
++
++  gr = g_rand_new_with_seed (o->seed);
++
++  tmp = gegl_buffer_new(result, babl_format ("RGBA float"));
++
++  src_rect.x      = result->x - op_area->left;
++  src_rect.width  = result->width + op_area->left + op_area->right;
++  src_rect.y      = result->y - op_area->top;
++  src_rect.height = result->height + op_area->top + op_area->bottom;
++
++  total_pixels = src_rect.height * src_rect.width;
++
++  src_buf = g_slice_alloc (4 * total_pixels * sizeof (gfloat));
++  dst_buf = g_slice_alloc (4 * n_pixels * sizeof (gfloat));
++
++
++  gegl_buffer_copy(input, NULL, tmp, NULL);
++
++  for (i = 0; i < o->repeat; i++)
++  {
++    n_pixels = result->width * result->height;
++
++    gegl_buffer_get (tmp, &src_rect, 1.0, babl_format ("RGBA float"), src_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_CLAMP);
++
++    in_pixel  = src_buf + (src_rect.width + 1) * 4;
++    out_pixel = dst_buf;
++
++    while (n_pixels--)
++      {
++        if (g_rand_double_range (gr, 0.0, 100.0) <= o->pct_random)
++        {
++          k = g_rand_int_range (gr, 0, 10);
++
++          for (b = 0; b < 4; b++)
++          {
++            switch (k )
++            {
++              case 0:
++                out_pixel[b] = in_pixel[b - src_rect.width*4 - 4];
++                break;
++              case 9:
++                  out_pixel[b] = in_pixel[b - src_rect.width*4 + 4];
++                break;
++              default:
++                  out_pixel[b] = in_pixel[b - src_rect.width*4];
++                break;
++            }
++          }
++        }
++        else
++        {
++          for (b = 0; b < 4; b++)
++          {
++            out_pixel[b] = in_pixel[b];
++          }
++        }
++
++        if (n_pixels % width == 0)
++          in_pixel += 12;
++        else
++          in_pixel  += 4;
++        out_pixel += 4;
++      }
++
++    gegl_buffer_set (tmp, result, 0, babl_format ("RGBA float"), dst_buf, GEGL_AUTO_ROWSTRIDE);
++
++  }
++
++   gegl_buffer_copy(tmp, NULL, output, NULL);
++
++  g_slice_free1 (4 * total_pixels * sizeof (gfloat), src_buf);
++  g_slice_free1 (4 * n_pixels * sizeof (gfloat), dst_buf);
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  filter_class->process = process;
++
++  gegl_operation_class_set_keys (operation_class,
++      "name",       "gegl:noise-slur",
++      "categories", "noise",
++      "description", _("Randomly slide some pixels downward (similar to melting)"),
++      NULL);
++}
++
++#endif
+diff --git a/operations/common/oilify.c b/operations/common/oilify.c
+new file mode 100644
+index 0000000..e5cac3c
+--- /dev/null
++++ operations/common/oilify.c
+@@ -0,0 +1,312 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1995 Spencer Kimball and Peter Mattis
++ * Copyright 1996 Torsten Martinsen
++ * Copyright 2007 Daniel Richard G.
++ * Copyright 2011 Hans Lo <hansshulo at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_int (mask_radius, _("Mask Radius"), 1, 25, 4,
++                _("Radius of circle around pixel"))
++
++gegl_chant_double (exponent, _("Exponent"), 1.0, 20.0, 8.0,
++                   _("Exponent"))
++
++gegl_chant_boolean (use_inten, _("Intensity Mode"), TRUE,
++                    _("Use pixel luminance values"))
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "oilify.c"
++
++#include "gegl-chant.h"
++#include <math.h>
++
++#define NUM_INTENSITIES       256
++
++/* Get the pixel from x, y offset from the center pixel src_pix */
++static void
++get_pixel (gint    x,
++           gint    y,
++           gint    buf_width,
++           gfloat *src_begin,
++           gfloat *dst)
++{
++  gint b;
++  gfloat* src = src_begin + 4*(x + buf_width*y);
++  for (b = 0; b < 4; b++)
++    {
++      dst[b] = src[b];
++    }
++}
++
++static void
++get_pixel_inten (gint    x,
++                 gint    y,
++                 gint    buf_width,
++                 gfloat *inten_begin,
++                 gfloat *dst)
++{
++  *dst = *(inten_begin + (x + buf_width*y));
++}
++
++static void
++oilify_pixel (gint           x,
++              gint           y,
++              GeglRectangle *whole_rect,
++              gboolean       use_inten,
++              gdouble        radius,
++              gdouble        exponent,
++              gint           buf_width,
++              gfloat        *src_buf,
++              gfloat        *inten_buf,
++              gfloat        *dst_pixel)
++{
++  gint   hist[4][NUM_INTENSITIES];
++  gfloat cumulative_rgb[4][NUM_INTENSITIES];
++  gint   hist_inten[NUM_INTENSITIES];
++  gfloat mult_inten[NUM_INTENSITIES];
++  gfloat temp_pixel[4];
++  gfloat temp_inten_pixel;
++  gint   ceil_radius = ceil (radius);
++  gdouble radius_sq = radius*radius;
++  gint i, j, b;
++  gint hist_max[4];
++  gint inten_max;
++  gint intensity;
++  gfloat sum;
++  gfloat ratio;
++  gfloat weight;
++  gfloat color;
++  gfloat result;
++  gfloat div;
++  for (i = 0; i < NUM_INTENSITIES; i++)
++    {
++      hist_inten[i] = 0;
++      for (b = 0; b < 4; b++)
++        {
++          hist[b][i] = 0;
++          cumulative_rgb[b][i] = 0.0;
++        }
++    }
++
++  /* calculate histograms */
++  for (i = -ceil_radius; i <= ceil_radius; i++)
++    {
++      for (j = -ceil_radius; j <= ceil_radius; j++)
++        {
++          if (i*i + j*j <= radius_sq)
++            {
++              get_pixel (x + i,
++                         y + j,
++                         buf_width,
++                         src_buf,
++                         temp_pixel);
++
++              if (use_inten)
++                {
++                  get_pixel_inten (x + i,
++                                   y + j,
++                                   buf_width,
++                                   inten_buf,
++                                   &temp_inten_pixel);
++                  intensity = temp_inten_pixel * NUM_INTENSITIES;
++                  hist_inten[intensity]++;
++                  for (b = 0; b < 4; b++)
++                    {
++                      cumulative_rgb[b][intensity] += temp_pixel[b];
++                    }
++                }
++              else
++                {
++                  for (b = 0; b < 4; b++)
++                    {
++                      intensity = temp_pixel[b] * NUM_INTENSITIES;
++                      hist[b][intensity]++;
++                    }
++                }
++            }
++        }
++    }
++
++  inten_max = 1;
++
++  /* calculated maximums */
++  for (i = 0; i < NUM_INTENSITIES; i++) {
++    inten_max = MAX (inten_max, hist_inten[i]);
++  }
++
++  for (b = 0; b < 4; b++)
++    {
++      hist_max[b] = 1;
++      for (i = 0; i < NUM_INTENSITIES; i++) {
++        hist_max[b] = MAX (hist_max[b], hist[b][i]);
++      }
++    }
++
++  /* calculate weight and use it to set the pixel */
++  div = 0.0;
++  for (i = 0; i < NUM_INTENSITIES; i++)
++    {
++      if (use_inten && hist_inten[i] > 0)
++        {
++          ratio = (gfloat) hist_inten[i] / (gfloat) inten_max;
++          weight = pow (ratio, exponent);
++          mult_inten[i] = weight / (gfloat) hist_inten[i];
++          div += weight;
++        }
++    }
++  for (b = 0; b < 4; b++)
++    {
++      sum = 0.0;
++      color = 0.0;
++      if (use_inten)
++        {
++          for (i = 0; i < NUM_INTENSITIES; i++)
++            {
++              if (hist_inten[i] > 0)
++                color += mult_inten[i] * cumulative_rgb[b][i];
++            }
++          dst_pixel[b] = color/div;
++        }
++      else
++        {
++          div = 0.0;
++          for (i = 0; i < NUM_INTENSITIES; i++)
++            {
++              ratio = (gfloat) hist[b][i] / (gfloat) hist_max[b];
++              weight = pow (ratio, exponent);
++              sum += weight * (gfloat) i;
++              div += weight;
++            }
++          result = sum / (gfloat) NUM_INTENSITIES;
++          dst_pixel[b] = result/div;
++        }
++    }
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  GeglChantO              *o;
++  GeglOperationAreaFilter *op_area;
++
++  op_area = GEGL_OPERATION_AREA_FILTER (operation);
++  o       = GEGL_CHANT_PROPERTIES (operation);
++
++  op_area->left   =
++    op_area->right  =
++    op_area->top    =
++    op_area->bottom = o->mask_radius;
++
++  gegl_operation_set_format (operation, "input",
++                             babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output",
++                             babl_format ("RGBA float"));
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o                    = GEGL_CHANT_PROPERTIES (operation);
++  GeglOperationAreaFilter *op_area = GEGL_OPERATION_AREA_FILTER (operation);
++
++  GeglRectangle* whole_rect;
++  gint x = o->mask_radius; /* initial x                   */
++  gint y = o->mask_radius; /*           and y coordinates */
++  gfloat *src_buf;
++  gfloat *dst_buf;
++  gfloat *inten_buf;
++  gfloat *out_pixel;
++  gint n_pixels = result->width * result->height;
++  GeglRectangle src_rect;
++  gint total_pixels;
++
++  whole_rect = gegl_operation_source_get_bounding_box (operation, "input");
++
++  src_rect.x      = result->x - op_area->left;
++  src_rect.width  = result->width + op_area->left + op_area->right;
++  src_rect.y      = result->y - op_area->top;
++  src_rect.height = result->height + op_area->top + op_area->bottom;
++
++  total_pixels = src_rect.width * src_rect.height;
++
++  src_buf = g_slice_alloc (4 * total_pixels * sizeof (gfloat));
++  dst_buf = g_slice_alloc (4 * total_pixels * sizeof (gfloat));
++  inten_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++
++  gegl_buffer_get (input, &src_rect, 1.0, babl_format ("RGBA float"),
++                   src_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  gegl_buffer_get (input, &src_rect, 1.0, babl_format ("Y float"),
++                   inten_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  out_pixel = dst_buf;
++  while (n_pixels--)
++    {
++      oilify_pixel (x, y, whole_rect, o->use_inten, o->mask_radius, o->exponent,
++                   src_rect.width, src_buf, inten_buf, out_pixel);
++
++      out_pixel += 4;
++
++      /* update x and y coordinates */
++      x++;
++      if (x >= result->width + o->mask_radius)
++        {
++          x=o->mask_radius;
++          y++;
++        }
++    }
++
++  gegl_buffer_set (output, result, 0,
++                   babl_format ("RGBA float"),
++                   dst_buf, GEGL_AUTO_ROWSTRIDE);
++  g_slice_free1 (4 * total_pixels * sizeof (gfloat), src_buf);
++  g_slice_free1 (4 * total_pixels * sizeof (gfloat), dst_buf);
++  g_slice_free1 (total_pixels * sizeof (gfloat), inten_buf);
++
++  return  TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  filter_class->process    = process;
++  operation_class->prepare = prepare;
++
++  gegl_operation_class_set_keys (operation_class,
++                                 "categories" , "artistic",
++                                 "name"       , "gegl:oilify",
++                                 "description", _("Emulate an oil painting"),
++                                 NULL);
++}
++#endif
+diff --git a/operations/common/opacity.c b/operations/common/opacity.c
+index 3b1fee6..76a9508 100644
+--- operations/common/opacity.c
++++ operations/common/opacity.c
+@@ -89,89 +89,20 @@ process (GeglOperation       *op,
+   return TRUE;
+ }
+ 
+-#include "opencl/gegl-cl.h"
+-
+ static const char* kernel_source =
+-"__kernel void kernel_op_3 (__global const float4     *in,      \n"
+-"                           __global const float      *aux,     \n"
+-"                           __global       float4     *out,     \n"
+-"                           float value)                        \n"
++"__kernel void gegl_opacity (__global const float4     *in,     \n"
++"                            __global const float      *aux,    \n"
++"                            __global       float4     *out,    \n"
++"                            float value)                       \n"
+ "{                                                              \n"
+ "  int gid = get_global_id(0);                                  \n"
+ "  float4 in_v  = in [gid];                                     \n"
+-"  float  aux_v = aux[gid];                                     \n"
++"  float  aux_v = (aux)? aux[gid] : 1.0f;                       \n"
+ "  float4 out_v;                                                \n"
+ "  out_v = in_v * aux_v * value;                                \n"
+ "  out[gid]  =  out_v;                                          \n"
+-"}                                                              \n"
+-
+-"__kernel void kernel_op_2 (__global const float4     *in,      \n"
+-"                           __global       float4     *out,     \n"
+-"                           float value)                        \n"
+-"{                                                              \n"
+-"  int gid = get_global_id(0);                                  \n"
+-"  float4 in_v  = in [gid];                                     \n"
+-"  float4 out_v;                                                \n"
+-"  out_v = in_v * value;                                        \n"
+-"  out[gid]  =  out_v;                                          \n"
+ "}                                                              \n";
+ 
+-
+-static gegl_cl_run_data *cl_data = NULL;
+-
+-/* OpenCL processing function */
+-static cl_int
+-cl_process (GeglOperation       *op,
+-            cl_mem               in_tex,
+-            cl_mem               aux_tex,
+-            cl_mem               out_tex,
+-            size_t               global_worksize,
+-            const GeglRectangle *roi,
+-            gint                 level)
+-{
+-  gfloat value = GEGL_CHANT_PROPERTIES (op)->value;
+-
+-  cl_int cl_err = 0;
+-
+-  if (!cl_data)
+-    {
+-      const char *kernel_name[] = {"kernel_op_3", "kernel_op_2", NULL};
+-      cl_data = gegl_cl_compile_and_build (kernel_source, kernel_name);
+-    }
+-
+-  if (!cl_data) return 1;
+-
+-  if (aux_tex)
+-    {
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),   (void*)&in_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_mem),   (void*)&aux_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 2, sizeof(cl_mem),   (void*)&out_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 3, sizeof(cl_float), (void*)&value);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-
+-      cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                            cl_data->kernel[0], 1,
+-                                            NULL, &global_worksize, NULL,
+-                                            0, NULL, NULL);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-    }
+-  else
+-    {
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[1], 0, sizeof(cl_mem),   (void*)&in_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[1], 1, sizeof(cl_mem),   (void*)&out_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[1], 2, sizeof(cl_float), (void*)&value);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-
+-      cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                            cl_data->kernel[1], 1,
+-                                            NULL, &global_worksize, NULL,
+-                                            0, NULL, NULL);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-    }
+-
+-  return cl_err;
+-}
+-
+ /* Fast path when opacity is a no-op
+  */
+ static gboolean operation_process (GeglOperation        *operation,
+@@ -214,9 +145,6 @@ gegl_chant_class_init (GeglChantClass *klass)
+   operation_class->prepare = prepare;
+   operation_class->process = operation_process;
+   point_composer_class->process = process;
+-  point_composer_class->cl_process = cl_process;
+-
+-  operation_class->opencl_support = TRUE;
+ 
+   gegl_operation_class_set_keys (operation_class,
+     "name"       , "gegl:opacity",
+@@ -224,6 +152,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "description",
+           _("Weights the opacity of the input both the value of the aux"
+             " input and the global value property."),
++    "cl-source"  , kernel_source,
+     NULL);
+ }
+ 
+diff --git a/operations/common/over.c b/operations/common/over.c
+index 1f68058..7cbe0dd 100644
+--- operations/common/over.c
++++ operations/common/over.c
+@@ -70,12 +70,10 @@ process (GeglOperation       *op,
+   return TRUE;
+ }
+ 
+-#include "opencl/gegl-cl.h"
+-
+ static const char* kernel_source =
+-"__kernel void kernel_over(__global const float4     *in,       \n"
+-"                          __global const float4     *aux,      \n"
+-"                          __global       float4     *out)      \n"
++"__kernel void svg_src_over (__global const float4 *in,         \n"
++"                            __global const float4 *aux,        \n"
++"                            __global       float4 *out)        \n"
+ "{                                                              \n"
+ "  int gid = get_global_id(0);                                  \n"
+ "  float4 in_v  = in [gid];                                     \n"
+@@ -86,48 +84,6 @@ static const char* kernel_source =
+ "  out[gid]  = out_v;                                           \n"
+ "}                                                              \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
+-
+-static cl_int
+-cl_process (GeglOperation       *op,
+-            cl_mem               in_tex,
+-            cl_mem               aux_tex,
+-            cl_mem               out_tex,
+-            size_t               global_worksize,
+-            const GeglRectangle *roi,
+-            gint                 level)
+-{
+-  /* Retrieve a pointer to GeglChantO structure which contains all the
+-   * chanted properties
+-   */
+-
+-  cl_int cl_err = 0;
+-
+-  if (aux_tex == NULL)
+-    return 0;
+-
+-  if (!cl_data)
+-    {
+-      const char *kernel_name[] = {"kernel_over", NULL};
+-      cl_data = gegl_cl_compile_and_build (kernel_source, kernel_name);
+-    }
+-
+-  if (!cl_data) return 1;
+-
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),   (void*)&in_tex);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_mem),   (void*)&aux_tex);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 2, sizeof(cl_mem),   (void*)&out_tex);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                        cl_data->kernel[0], 1,
+-                                        NULL, &global_worksize, NULL,
+-                                        0, NULL, NULL);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  return cl_err;
+-}
+-
+ /* Fast paths */
+ static gboolean operation_process (GeglOperation        *operation,
+                                    GeglOperationContext *context,
+@@ -187,9 +143,6 @@ gegl_chant_class_init (GeglChantClass *klass)
+   operation_class->process = operation_process;
+ 
+   point_composer_class->process = process;
+-  point_composer_class->cl_process = cl_process;
+-
+-  operation_class->opencl_support = TRUE;
+ 
+   operation_class->compat_name = "gegl:over";
+ 
+@@ -198,6 +151,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "categories" , "compositors:porter-duff",
+     "description",
+           _("Porter Duff operation over (d = cA + cB * (1 - aA))"),
++    "cl-source"  , kernel_source,
+     NULL);
+ }
+ 
+diff --git a/operations/common/photocopy.c b/operations/common/photocopy.c
+new file mode 100644
+index 0000000..6c9ede9
+--- /dev/null
++++ operations/common/photocopy.c
+@@ -0,0 +1,398 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1997 Spencer Kimball
++ * Copyright 2011 Hans Lo <hansshulo at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_double (mask_radius, _("Mask Radius"), 0.0, 50.0, 10.0,
++                   _("Mask Radius"))
++
++gegl_chant_double (sharpness, _("Sharpness"), 0.0, 1.0, 0.5,
++                   _("Sharpness"))
++
++gegl_chant_double (black, _("Percent Black"), 0.0, 1.0, 0.2,
++                   _("Percent Black"))
++
++gegl_chant_double (white, _("Percent White"), 0.0, 1.0, 0.2,
++                   _("Percent White"))
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "photocopy.c"
++
++#include "gegl-chant.h"
++#include <math.h>
++
++#define THRESHOLD 0.75
++
++typedef struct {
++  gdouble      black;
++  gdouble      white;
++  gdouble      prev_mask_radius;
++  gdouble      prev_sharpness;
++  gdouble      prev_black;
++  gdouble      prev_white;
++} Ramps;
++
++static void
++grey_blur_buffer (GeglBuffer  *input,
++                  gdouble      sharpness,
++                  gdouble      mask_radius,
++                  GeglBuffer **dest1,
++                  GeglBuffer **dest2)
++{
++  GeglNode *gegl, *image, *write1, *write2, *blur1, *blur2;
++  gdouble radius, std_dev1, std_dev2;
++
++  gegl = gegl_node_new ();
++  image = gegl_node_new_child (gegl,
++                               "operation", "gegl:buffer-source",
++                               "buffer", input,
++                               NULL);
++
++  radius   = MAX (1.0, 10 * (1.0 - sharpness));
++  radius   = fabs (radius) + 1.0;
++  std_dev1 = sqrt (-(radius * radius) / (2 * log (1.0 / 255.0)));
++
++  radius   = fabs (mask_radius) + 1.0;
++  std_dev2 = sqrt (-(radius * radius) / (2 * log (1.0 / 255.0)));
++
++  blur1 =  gegl_node_new_child (gegl,
++                                "operation", "gegl:gaussian-blur",
++                                "std_dev_x", std_dev1,
++                                "std_dev_y", std_dev1,
++                                NULL);
++  blur2 =  gegl_node_new_child (gegl,
++                                "operation", "gegl:gaussian-blur",
++                                "std_dev_x", std_dev2,
++                                "std_dev_y", std_dev2,
++                                NULL);
++
++  write1 = gegl_node_new_child (gegl,
++                                "operation", "gegl:buffer-sink",
++                                "buffer", dest1, NULL);
++
++  write2 = gegl_node_new_child (gegl,
++                                "operation", "gegl:buffer-sink",
++                                "buffer", dest2, NULL);
++
++  gegl_node_link_many (image, blur1, write1, NULL);
++  gegl_node_process (write1);
++
++  gegl_node_link_many (image,blur2, write2, NULL);
++  gegl_node_process (write2);
++
++  g_object_unref (gegl);
++}
++
++static gdouble
++calculate_threshold (gint    *hist,
++                     gdouble  pct,
++                     gint     count,
++                     gint     under_threshold)
++{
++  gint    sum;
++  gint    i;
++
++  if (pct == 0.0 || count == 0)
++    return (under_threshold ? 1.0 : 0.0);
++
++  sum = 0;
++  for (i = 0; i < 2000; i++)
++    {
++      sum += hist[i];
++      if (((gdouble) sum / (gdouble) count) > pct)
++        {
++          if (under_threshold)
++            return (THRESHOLD - (gdouble) i / 1000.0);
++          else
++            return ((gdouble) i / 1000.0 - THRESHOLD);
++        }
++    }
++
++  return (under_threshold ? 0.0 : 1.0);
++}
++
++static void
++compute_ramp (GeglBuffer    *input,
++              GeglOperation *operation,
++              gdouble        pct_black,
++              gdouble        pct_white,
++              gint           under_threshold,
++              gdouble       *threshold_black,
++              gdouble       *threshold_white)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++
++  GeglRectangle *whole_region;
++  gint    n_pixels;
++  gint    hist1[2000];
++  gint    hist2[2000];
++  gdouble diff;
++  gint    count;
++  GeglBuffer *dest1, *dest2;
++
++  gfloat *src1_buf;
++  gfloat *src2_buf;
++  gfloat *dst_buf;
++
++  gint total_pixels;
++
++  gfloat* ptr1;
++  gfloat* ptr2;
++
++  whole_region = gegl_operation_source_get_bounding_box (operation, "input");
++  grey_blur_buffer (input, o->sharpness, o->mask_radius, &dest1, &dest2);
++
++  total_pixels = whole_region->width * whole_region->height;
++  src1_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++  src2_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++  dst_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++
++  gegl_buffer_get (dest1, whole_region, 1.0, babl_format ("Y float"),
++                   src1_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  gegl_buffer_get (dest2, whole_region, 1.0, babl_format ("Y float"),
++                   src2_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  n_pixels = whole_region->width * whole_region->height;
++
++  memset (hist1, 0, sizeof (int) * 2000);
++  memset (hist2, 0, sizeof (int) * 2000);
++  count = 0;
++  ptr1 = src1_buf;
++  ptr2 = src2_buf;
++  while (n_pixels--)
++    {
++      diff = *ptr1 / *ptr2;
++      ptr1++;
++      ptr2++;
++      if (under_threshold)
++        {
++          if (diff < THRESHOLD)
++            {
++              hist2[(int) (diff * 1000)] ++;
++              count ++;
++            }
++        }
++      else
++        {
++          if (diff >= THRESHOLD && diff < 2.0)
++            {
++              hist1[(int) (diff * 1000)] ++;
++              count ++;
++            }
++        }
++
++    }
++
++  g_object_unref (dest1);
++  g_object_unref (dest2);
++
++  g_slice_free1 (total_pixels * sizeof (gfloat), src1_buf);
++  g_slice_free1 (total_pixels * sizeof (gfloat), src2_buf);
++  g_slice_free1 (total_pixels * sizeof (gfloat), dst_buf);
++
++  *threshold_black = calculate_threshold (hist1, pct_black, count, 0);
++  *threshold_white = calculate_threshold (hist2, pct_white, count, 1);
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++
++  gegl_operation_set_format (operation, "input",
++                             babl_format ("Y float"));
++  gegl_operation_set_format (operation, "output",
++                             babl_format ("Y float"));
++  if (o->chant_data)
++    {
++      Ramps* ramps = (Ramps*) o->chant_data;
++
++      /* hack so that thresholds are only calculated once */
++      if (ramps->prev_mask_radius != o->mask_radius ||
++          ramps->prev_sharpness   != o->sharpness   ||
++          ramps->prev_black       != o->black       ||
++          ramps->prev_white       != o->white)
++        {
++          g_slice_free (Ramps, o->chant_data);
++          o->chant_data = NULL;
++        }
++    }
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++
++  GeglBuffer *dest1;
++  GeglBuffer *dest2;
++
++  Ramps* ramps;
++
++  gint n_pixels;
++  gfloat *out_pixel;
++  gint total_pixels;
++
++  gdouble diff;
++  Ramps *get_ramps;
++  gdouble ramp_down;
++  gdouble ramp_up;
++  gdouble mult;
++
++  gfloat *src1_buf;
++  gfloat *src2_buf;
++  gfloat *dst_buf;
++
++  gfloat* ptr1;
++  gfloat* ptr2;
++
++  static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
++
++  total_pixels = result->width * result->height;
++  dst_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++
++  g_static_mutex_lock (&mutex);
++  if (o->chant_data == NULL)
++    {
++      o->chant_data = g_slice_new (Ramps);
++      ramps = (Ramps*) o->chant_data;
++      compute_ramp (input,
++                    operation,
++                    o->black,
++                    o->white,1,
++                    &ramps->black,
++                    &ramps->white);
++      ramps->prev_mask_radius = o->mask_radius;
++      ramps->prev_sharpness   = o->sharpness;
++      ramps->prev_black       = o->black;
++      ramps->prev_white       = o->white;
++    }
++  g_static_mutex_unlock (&mutex);
++
++  grey_blur_buffer (input, o->sharpness, o->mask_radius, &dest1, &dest2);
++
++  total_pixels = result->width * result->height;
++  src1_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++  src2_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++  dst_buf = g_slice_alloc (total_pixels * sizeof (gfloat));
++
++  gegl_buffer_get (dest1, result, 1.0, babl_format ("Y float"),
++                   src1_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  gegl_buffer_get (dest2, result, 1.0, babl_format ("Y float"),
++                   src2_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  g_object_unref (dest1);
++  g_object_unref (dest2);
++
++  out_pixel = dst_buf;
++  n_pixels = result->width * result->height;
++
++  get_ramps = (Ramps*) o->chant_data;
++  ramp_down = get_ramps->black;
++  ramp_up = get_ramps->white;
++
++  ptr1 = src1_buf;
++  ptr2 = src2_buf;
++
++  while (n_pixels--)
++    {
++      diff = *ptr1 / *ptr2;
++      if (diff < THRESHOLD)
++        {
++          if (ramp_down == 0.0)
++            *out_pixel = 0.0;
++          else
++            {
++              mult = (ramp_down - MIN (ramp_down,
++                                       (THRESHOLD - diff))) / ramp_down;
++              *out_pixel = *ptr1 * mult;
++            }
++        }
++      else
++        {
++          if (ramp_up == 0.0)
++            mult = 1.0;
++          else
++            mult = MIN (ramp_up,
++                        (diff - THRESHOLD)) / ramp_up;
++
++          *out_pixel = mult + *ptr1 - mult * *ptr1;
++        }
++      ptr1++;
++      ptr2++;
++      out_pixel ++;
++    }
++
++  gegl_buffer_set (output,
++                   result,
++                   0,
++                   babl_format ("Y float"),
++                   dst_buf, GEGL_AUTO_ROWSTRIDE);
++
++  g_slice_free1 (total_pixels * sizeof (gfloat), src1_buf);
++  g_slice_free1 (total_pixels * sizeof (gfloat), src2_buf);
++  g_slice_free1 (total_pixels * sizeof (gfloat), dst_buf);
++
++  return  TRUE;
++}
++
++static void
++finalize (GObject *object)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (object);
++
++  if (o->chant_data)
++    {
++      g_slice_free (Ramps, o->chant_data);
++      o->chant_data = NULL;
++    }
++
++  G_OBJECT_CLASS (gegl_chant_parent_class)->finalize (object);
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GObjectClass               *object_class;
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  object_class    = G_OBJECT_CLASS (klass);
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  object_class->finalize = finalize;
++  operation_class->prepare = prepare;
++  filter_class->process    = process;
++
++  gegl_operation_class_set_keys (operation_class,
++                                 "categories" , "artistic",
++                                 "name"       , "gegl:photocopy",
++                                 "description", _("Photocopy effect"),
++                                 NULL);
++}
++#endif
+diff --git a/operations/common/pixelize.c b/operations/common/pixelize.c
+index 8dcb042..c10bca6 100644
+--- operations/common/pixelize.c
++++ operations/common/pixelize.c
+@@ -185,7 +185,7 @@ static const char* kernel_source =
+ "    out[gidx + gidy * src_width] = in[cx + cy * block_count_x];       \n"
+ "}                                                                     \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_pixelise (cl_mem                in_tex,
+diff --git a/operations/common/reinhard05.c b/operations/common/reinhard05.c
+index bb3fcf0..db284b7 100644
+--- operations/common/reinhard05.c
++++ operations/common/reinhard05.c
+@@ -29,10 +29,10 @@ gegl_chant_double (brightness, _("Brightness"),
+                   _("Overall brightness of the image"))
+ gegl_chant_double (chromatic, _("Chromatic Adaptation"),
+                   0.0, 1.0, 0.0,
+-                  _("Adapation to colour variation across the image"))
++                  _("Adaptation to color variation across the image"))
+ gegl_chant_double (light, _("Light Adaptation"),
+                   0.0, 1.0, 1.0,
+-                  _("Adapation to light variation across the image"))
++                  _("Adaptation to light variation across the image"))
+ 
+ 
+ #else
+@@ -272,7 +272,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+   "categories" , "tonemapping",
+   "description",
+         _("Adapt an image, which may have a high dynamic range, for "
+-	  "presentation using a low dynamic range. This is an efficient "
++          "presentation using a low dynamic range. This is an efficient "
+           "global operator derived from simple physiological observations, "
+           "producing luminance within the range 0.0-1.0"),
+         NULL);
+diff --git a/operations/common/ripple.c b/operations/common/ripple.c
+index 30d6d53..0279395 100644
+--- operations/common/ripple.c
++++ operations/common/ripple.c
+@@ -36,12 +36,20 @@ gegl_chant_double (phi, _("Phase shift"), -1.0, 1.0, 0.0,
+ gegl_chant_double (angle, _("Angle"), -180.0, 180.0, 0.0,
+                    _("Angle in degree"))
+ 
+-gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, GEGL_TYPE_SAMPLER_TYPE,
++gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, gegl_sampler_type,
+                  GEGL_SAMPLER_CUBIC, _("Sampler used internally"))
+ 
+-gegl_chant_enum (wave_type, _("Wave type"), GeglRippleWaveType, GEGL_RIPPLE_WAVE_TYPE,
++gegl_chant_register_enum (gegl_ripple_wave_type)
++  enum_value (GEGl_RIPPLE_WAVE_TYPE_SINE,      "Sine")
++  enum_value (GEGl_RIPPLE_WAVE_TYPE_SAWTOOTH,  "Sawtooth")
++gegl_chant_register_enum_end (GeglRippleWaveType)
++
++gegl_chant_enum (wave_type, _("Wave type"), GeglRippleWaveType, gegl_ripple_wave_type,
+                  GEGl_RIPPLE_WAVE_TYPE_SINE, _("Type of wave"))
+ 
++gegl_chant_boolean (tileable, _("Tileable"), FALSE,
++                    _("Retain tilebility"))
++
+ #else
+ 
+ #define GEGL_CHANT_TYPE_AREA_FILTER
+@@ -93,6 +101,8 @@ process (GeglOperation       *operation,
+ 
+   gint n_pixels = result->width * result->height;
+ 
++  GeglAbyssPolicy abyss = o->tileable ? GEGL_ABYSS_LOOP : GEGL_ABYSS_NONE;
++
+   while (n_pixels--)
+     {
+       gdouble shift;
+@@ -124,7 +134,8 @@ process (GeglOperation       *operation,
+                         coordsx,
+                         coordsy,
+                         NULL,
+-                        out_pixel);
++                        out_pixel,
++                        abyss);
+ 
+       out_pixel += 4;
+ 
+diff --git a/operations/common/save.c b/operations/common/save.c
+index 7990305..2fda2f2 100644
+--- operations/common/save.c
++++ operations/common/save.c
+@@ -116,7 +116,7 @@ gegl_save_attach (GeglOperation *operation)
+                                       NULL);
+ 
+   /* Set some debug names for the child nodes */
+-  nodename = gegl_node_get_debug_name (operation->node);
++  /*  nodename = gegl_node_get_debug_name (operation->node);
+   g_assert (nodename);
+ 
+   childname = g_strconcat (nodename, "-save", NULL);
+@@ -125,7 +125,7 @@ gegl_save_attach (GeglOperation *operation)
+ 
+   childname = g_strconcat (nodename, "-input", NULL);
+   gegl_node_set_name (self->input, childname);
+-  g_free (childname);
++  g_free (childname);*/
+ 
+   /* Link the saving node and attempt to set an appropriate save operation,
+    * might as well at least try to do this before prepare.
+diff --git a/operations/common/shift.c b/operations/common/shift.c
+new file mode 100644
+index 0000000..7bf3e2d
+--- /dev/null
++++ operations/common/shift.c
+@@ -0,0 +1,235 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1997 Brian Degenhardt <bdegenha at ucsd.edu>
++ * Copyright 1997 Federico Mena Quinter <quartic at polloux.fciencias.unam.mx>
++ * Copyright 2012 Hans Lo <hansshulo at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_int (shift, _("Shift"), 1, 200, 5,
++                   _("Maximum amount to shift"))
++
++gegl_chant_seed (seed, _("Seed"), _("Random seed"))
++
++gegl_chant_register_enum (gegl_shift_direction)
++  enum_value (GEGL_SHIFT_DIRECTION_HORIZONTAL, "Horizontal")
++  enum_value (GEGL_SHIFT_DIRECTION_VERTICAL, "Vertical")
++gegl_chant_register_enum_end (GeglShiftDirection)
++
++gegl_chant_enum (direction, _("Direction"), GeglShiftDirection, gegl_shift_direction,
++                 GEGL_SHIFT_DIRECTION_HORIZONTAL, _("Shift direction"))
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "shift.c"
++
++#include "gegl-chant.h"
++
++static void
++prepare (GeglOperation *operation)
++{
++  GeglChantO              *o;
++  GeglOperationAreaFilter *op_area;
++
++  op_area = GEGL_OPERATION_AREA_FILTER (operation);
++  o       = GEGL_CHANT_PROPERTIES (operation);
++
++  if (o->chant_data)
++    {
++      g_array_free (o->chant_data, TRUE);
++      o->chant_data = NULL;
++    }
++
++  if (o->direction == GEGL_SHIFT_DIRECTION_HORIZONTAL)
++    {
++      op_area->left   = o->shift;
++      op_area->right  = o->shift;
++      op_area->top    = 0;
++      op_area->bottom = 0;
++    }
++  else if (o->direction == GEGL_SHIFT_DIRECTION_VERTICAL)
++    {
++      op_area->top    = o->shift;
++      op_area->bottom = o->shift;
++      op_area->left   = 0;
++      op_area->right  = 0;
++    }
++
++  gegl_operation_set_format (operation, "input",
++                             babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output",
++                             babl_format ("RGBA float"));
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o                    = GEGL_CHANT_PROPERTIES (operation);
++  GeglOperationAreaFilter *op_area = GEGL_OPERATION_AREA_FILTER (operation);
++
++  gfloat *src_buf;
++  gfloat *dst_buf;
++  GeglRectangle src_rect;
++
++  gint x = 0; /* initial x                   */
++  gint y = 0; /*           and y coordinates */
++
++  gfloat *in_pixel;
++  gfloat *out_pixel;
++
++  gint n_pixels = result->width * result->height;
++  gint i;
++  gint shift;
++  gint s = o->shift;
++
++  GArray *offsets;
++
++  static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
++  GeglRectangle *boundary;
++
++  GRand *gr;
++
++  gint array_size = 0;
++  gint r;
++
++  /* calculate offsets once */
++  g_static_mutex_lock (&mutex);
++  if (!o->chant_data)
++   {
++      boundary = gegl_operation_source_get_bounding_box (operation, "input");
++
++      if (boundary)
++        {
++          gr = g_rand_new ();
++          g_rand_set_seed (gr, o->seed);
++
++          offsets = g_array_new (FALSE, FALSE, sizeof (gint));
++
++          if (o->direction == GEGL_SHIFT_DIRECTION_HORIZONTAL)
++            {
++              array_size = boundary->height;
++            }
++          else if (o->direction == GEGL_SHIFT_DIRECTION_VERTICAL)
++            {
++              array_size = boundary->width;
++            }
++
++          for (i = 0; i < array_size; i++)
++            {
++              r = g_rand_int_range (gr, -s, s);
++              g_array_append_val (offsets, r);
++            }
++          o->chant_data = offsets;
++        }
++    }
++  g_static_mutex_unlock (&mutex);
++  offsets = (GArray*) o->chant_data;
++
++  src_rect.x      = result->x - op_area->left;
++  src_rect.width  = result->width + op_area->left + op_area->right;
++  src_rect.y      = result->y - op_area->top;
++  src_rect.height = result->height + op_area->top + op_area->bottom;
++
++  src_buf = g_slice_alloc (src_rect.width * src_rect.height * 4 * sizeof (gfloat));
++  dst_buf = g_slice_alloc (result->width * result->height * 4 * sizeof (gfloat));
++
++  in_pixel = src_buf;
++  out_pixel = dst_buf;
++
++  gegl_buffer_get (input, &src_rect, 1.0, babl_format ("RGBA float"),
++                   src_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  while (n_pixels--)
++    {
++      /* select the desired input pixel */
++      if (o->direction == GEGL_SHIFT_DIRECTION_HORIZONTAL)
++        {
++          shift = g_array_index (offsets, gint, result->y + y);
++          in_pixel = src_buf + 4*(src_rect.width * y + s + x + shift);
++        }
++      else if (o->direction == GEGL_SHIFT_DIRECTION_VERTICAL)
++        {
++          shift = g_array_index (offsets, gint, result->x + x);
++          in_pixel = src_buf + 4*(src_rect.width * (y + s + shift) + x);
++        }
++
++      /* copy pixel */
++      for (i = 0; i < 4; i++)
++        {
++          *out_pixel = *in_pixel;
++          in_pixel ++;
++          out_pixel ++;
++        }
++      x++;
++      if (x == result->width)
++        {
++          x = 0;
++          y++;
++        }
++    }
++
++  gegl_buffer_set (output, result, 0, babl_format ("RGBA float"), dst_buf, GEGL_AUTO_ROWSTRIDE);
++  g_slice_free1 (src_rect.width * src_rect.height * 4 * sizeof (gfloat), src_buf);
++  g_slice_free1 (result->width * result->height * 4 * sizeof (gfloat), dst_buf);
++  return  TRUE;
++}
++
++static void
++finalize (GObject *object)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (object);
++
++  if (o->chant_data)
++    {
++      g_array_free (o->chant_data, TRUE);
++      o->chant_data = NULL;
++    }
++
++  G_OBJECT_CLASS (gegl_chant_parent_class)->finalize (object);
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GObjectClass             *object_class;
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  object_class    = G_OBJECT_CLASS (klass);
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  object_class->finalize = finalize;
++  filter_class->process    = process;
++  operation_class->prepare = prepare;
++
++  gegl_operation_class_set_keys (operation_class,
++    "categories" , "distort",
++    "name"       , "gegl:shift",
++    "description", _("Shift by a random number of pixels"),
++    NULL);
++}
++
++#endif
+diff --git a/operations/common/snn-mean.c b/operations/common/snn-mean.c
+index 8440f6b..2f95401 100644
+--- operations/common/snn-mean.c
++++ operations/common/snn-mean.c
+@@ -340,7 +340,7 @@ static const char* kernel_source =
+ "}                                                                     \n";
+ 
+ 
+-static gegl_cl_run_data *cl_data = NULL;
++static GeglClRunData *cl_data = NULL;
+ 
+ static cl_int
+ cl_snn_mean (cl_mem                in_tex,
+diff --git a/operations/common/softglow.c b/operations/common/softglow.c
+new file mode 100644
+index 0000000..6c5ab01
+--- /dev/null
++++ operations/common/softglow.c
+@@ -0,0 +1,228 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 1997 Spencer Kimball
++ * Copyright 2012 Maxime Nicco <maxime.nicco at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_double (glow_radius, _("Glow radius"),   1.0, 50.0, 10.0, _("Glow radius"))
++
++gegl_chant_double (brightness, _("Brightness"),   0.0, 1.0, 0.75, _("Brightness"))
++
++gegl_chant_double (sharpness, _("Sharpness"),   0.0, 1.0, 0.85, _("Sharpness"))
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "softglow.c"
++
++#include "gegl-chant.h"
++#include <stdio.h>
++#include <math.h>
++#include <stdlib.h>
++
++#define SIGMOIDAL_BASE   2
++#define SIGMOIDAL_RANGE  20
++
++static void
++grey_blur_buffer (GeglBuffer  *input,
++                  gdouble      glow_radius,
++                  GeglBuffer **dest)
++{
++  GeglNode *gegl, *image, *write, *blur;
++  gdouble radius, std_dev;
++
++  gegl = gegl_node_new ();
++  image = gegl_node_new_child (gegl,
++                "operation", "gegl:buffer-source",
++                "buffer", input,
++                NULL);
++
++  radius   = fabs (glow_radius) + 1.0;
++  std_dev = sqrt (-(radius * radius) / (2 * log (1.0 / 255.0)));
++
++  blur =  gegl_node_new_child (gegl,
++                "operation", "gegl:gaussian-blur",
++                "std_dev_x", std_dev,
++                "std_dev_y", std_dev,
++                NULL);
++
++  write = gegl_node_new_child (gegl,
++                "operation", "gegl:buffer-sink",
++                "buffer", dest, NULL);
++
++  gegl_node_link_many (image, blur, write, NULL);
++  gegl_node_process (write);
++
++  g_object_unref (gegl);
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  gegl_operation_set_format (operation, "input",
++                             babl_format ("Y'CbCrA float"));
++  gegl_operation_set_format (operation, "output",
++                             babl_format ("RGBA float"));
++
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
++
++  GeglBuffer *dest, *dest_tmp;
++  GeglSampler *sampler;
++
++  gint n_pixels;
++  gfloat pixel;
++  gfloat *out_pixel;
++  gint x;
++  gint y;
++  gint b;
++
++  gfloat tmp;
++  gdouble val;
++
++  gfloat *dst_buf, *dst_tmp, *dst_convert;
++  GeglRectangle *whole_region;
++  gfloat *dst_tmp_ptr, *input_ptr;
++
++  const Babl *rgba            = babl_format ("RGBA float");
++  const Babl *ycbcra          = babl_format ("Y'CbCrA float");
++
++  whole_region = gegl_operation_source_get_bounding_box (operation, "input");
++
++  dst_buf = g_slice_alloc (result->width * result->height * 4 * sizeof(gfloat));
++  dst_tmp = g_slice_alloc (result->width * result->height * sizeof(gfloat));
++  dst_convert = g_slice_alloc (result->width * result->height * 4 * sizeof(gfloat));
++  dest_tmp = gegl_buffer_new (whole_region, babl_format ("Y' float"));
++
++  gegl_buffer_get (input,
++                   result,
++                   1.0,
++                   babl_format ("Y'CbCrA float"),
++                   dst_buf,
++                   GEGL_AUTO_ROWSTRIDE,
++                   GEGL_ABYSS_NONE);
++
++  x = result->x;
++  y = result->y;
++  n_pixels = result->width * result->height;
++  dst_tmp_ptr = dst_tmp;
++  input_ptr = dst_buf;
++
++  while (n_pixels--)
++  {
++    /* compute sigmoidal transfer */
++    val = *input_ptr;
++    val = 1.0 / (1.0 + exp (-(SIGMOIDAL_BASE + (o->sharpness * SIGMOIDAL_RANGE)) * (val - 0.5)));
++    val = val * o->brightness;
++    *dst_tmp_ptr = CLAMP (val, 0.0, 1.0);
++
++    dst_tmp_ptr +=1;
++    input_ptr   +=4;
++  }
++
++  gegl_buffer_set_extent (dest_tmp, whole_region);
++  gegl_buffer_set (dest_tmp, whole_region, 0, babl_format ("Y' float"), dst_tmp, GEGL_AUTO_ROWSTRIDE);
++  grey_blur_buffer (dest_tmp, o->glow_radius, &dest);
++
++  sampler = gegl_buffer_sampler_new (dest,
++                    babl_format ("Y' float"),
++                    GEGL_SAMPLER_LINEAR);
++
++  x = result->x;
++  y = result->y;
++  n_pixels = result->width * result->height;
++
++  babl_process (babl_fish (ycbcra ,rgba), dst_buf, dst_convert, n_pixels);
++
++  out_pixel = dst_convert;
++
++  while (n_pixels--)
++    {
++      gegl_sampler_get (sampler,
++                        x,
++                        y,
++                        NULL,
++                        &pixel,
++                        GEGL_ABYSS_NONE);
++
++      for (b = 0; b < 3; b++)
++      {
++        tmp = (1.0 - out_pixel[b]) * (1.0 - pixel) ;
++        out_pixel[b] = CLAMP(1.0 - tmp, 0.0, 1.0);
++      }
++
++      out_pixel += 4;
++
++      x++;
++      if (x>=result->x + result->width)
++        {
++          x=result->x;
++          y++;
++        }
++    }
++
++  gegl_buffer_set (output,
++                   result,
++                   0,
++                   babl_format ("RGBA float"),
++                   dst_convert,
++                   GEGL_AUTO_ROWSTRIDE);
++
++  g_slice_free1 (result->width * result->height * 4 * sizeof(gfloat), dst_buf);
++  g_slice_free1 (result->width * result->height * sizeof(gfloat), dst_tmp);
++  g_slice_free1 (result->width * result->height * sizeof(gfloat), dst_convert);
++
++  g_object_unref (sampler);
++  g_object_unref (dest);
++
++  whole_region = gegl_operation_source_get_bounding_box (operation, "input");
++  gegl_buffer_set_extent (input, whole_region);
++  return  TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  operation_class->prepare = prepare;
++  filter_class->process    = process;
++
++  gegl_operation_class_set_keys (operation_class,
++                "categories" , "artistic",
++                "name"       , "gegl:softglow",
++                "description", _("Softglow effect"),
++                NULL);
++}
++
++#endif
+diff --git a/operations/common/threshold.c b/operations/common/threshold.c
+index 6b15b03..74b18f2 100644
+--- operations/common/threshold.c
++++ operations/common/threshold.c
+@@ -34,8 +34,8 @@ gegl_chant_double_ui (value, _("Threshold"), -10.0, 10.0, 0.5, 0.0, 1.0, 1.0,
+ 
+ static void prepare (GeglOperation *operation)
+ {
+-  gegl_operation_set_format (operation, "input", babl_format ("YA float"));
+-  gegl_operation_set_format (operation, "aux", babl_format ("Y float"));
++  gegl_operation_set_format (operation, "input",  babl_format ("YA float"));
++  gegl_operation_set_format (operation, "aux",    babl_format ("Y float"));
+   gegl_operation_set_format (operation, "output", babl_format ("YA float"));
+ }
+ 
+@@ -89,88 +89,21 @@ process (GeglOperation       *op,
+   return TRUE;
+ }
+ 
+-#include "opencl/gegl-cl.h"
+-
+ static const char* kernel_source =
+-"__kernel void kernel_thr_3 (__global const float2     *in,     \n"
+-"                            __global const float      *aux,    \n"
+-"                            __global       float2     *out)    \n"
++"__kernel void gegl_threshold (__global const float2     *in,   \n"
++"                              __global const float      *aux,  \n"
++"                              __global       float2     *out,  \n"
++"                             float value)                      \n"
+ "{                                                              \n"
+ "  int gid = get_global_id(0);                                  \n"
+ "  float2 in_v  = in [gid];                                     \n"
+-"  float  aux_v = aux[gid];                                     \n"
++"  float  aux_v = (aux)? aux[gid] : value;                      \n"
+ "  float2 out_v;                                                \n"
+ "  out_v.x = (in_v.x > aux_v)? 1.0f : 0.0f;                     \n"
+ "  out_v.y = in_v.y;                                            \n"
+ "  out[gid]  =  out_v;                                          \n"
+-"}                                                              \n"
+-
+-"__kernel void kernel_thr_2 (__global const float2     *in,     \n"
+-"                            __global       float2     *out,    \n"
+-"                            float value)                       \n"
+-"{                                                              \n"
+-"  int gid = get_global_id(0);                                  \n"
+-"  float2 in_v  = in [gid];                                     \n"
+-"  float2 out_v;                                                \n"
+-"  out_v.x = (in_v.x > value)? 1.0f : 0.0f;                     \n"
+-"  out_v.y = in_v.y;                                            \n"
+-"  out[gid]  =  out_v;                                          \n"
+ "}                                                              \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
+-
+-/* OpenCL processing function */
+-static cl_int
+-cl_process (GeglOperation       *op,
+-            cl_mem               in_tex,
+-            cl_mem               aux_tex,
+-            cl_mem               out_tex,
+-            size_t               global_worksize,
+-            const GeglRectangle *roi,
+-            gint                 level)
+-{
+-  gfloat value = GEGL_CHANT_PROPERTIES (op)->value;
+-
+-  cl_int cl_err = 0;
+-
+-  if (!cl_data)
+-    {
+-      const char *kernel_name[] = {"kernel_thr_3", "kernel_thr_2", NULL};
+-      cl_data = gegl_cl_compile_and_build (kernel_source, kernel_name);
+-    }
+-
+-  if (!cl_data) return 1;
+-
+-  if (aux_tex)
+-    {
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),   (void*)&in_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_mem),   (void*)&aux_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 2, sizeof(cl_mem),   (void*)&out_tex);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-
+-      cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                            cl_data->kernel[0], 1,
+-                                            NULL, &global_worksize, NULL,
+-                                            0, NULL, NULL);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-    }
+-  else
+-    {
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[1], 0, sizeof(cl_mem),   (void*)&in_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[1], 1, sizeof(cl_mem),   (void*)&out_tex);
+-      cl_err |= gegl_clSetKernelArg(cl_data->kernel[1], 2, sizeof(cl_float), (void*)&value);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-
+-      cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                            cl_data->kernel[1], 1,
+-                                            NULL, &global_worksize, NULL,
+-                                            0, NULL, NULL);
+-      if (cl_err != CL_SUCCESS) return cl_err;
+-    }
+-
+-  return cl_err;
+-}
+-
+ static void
+ gegl_chant_class_init (GeglChantClass *klass)
+ {
+@@ -181,18 +114,16 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
+-  point_composer_class->cl_process = cl_process;
+   operation_class->prepare = prepare;
+ 
+-  operation_class->opencl_support = TRUE;
+-
+   gegl_operation_class_set_keys (operation_class,
+     "name"       , "gegl:threshold",
+     "categories" , "color",
+     "description",
+           _("Thresholds the image to white/black based on either the global value "
+             "set in the value property, or per pixel from the aux input."),
+-          NULL);
++    "cl-source"  , kernel_source,
++    NULL);
+ }
+ 
+ #endif
+diff --git a/operations/common/tile.c b/operations/common/tile.c
+new file mode 100644
+index 0000000..7f21a3b
+--- /dev/null
++++ operations/common/tile.c
+@@ -0,0 +1,125 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Ville Sokk <ville.sokk at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifndef GEGL_CHANT_PROPERTIES
++
++#define GEGL_CHANT_TYPE_FILTER
++#define GEGL_CHANT_C_FILE "tile.c"
++
++#include "gegl-chant.h"
++
++static void
++prepare (GeglOperation *operation)
++{
++  gegl_operation_set_format (operation, "input", babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
++}
++
++static GeglRectangle
++get_bounding_box (GeglOperation *operation)
++{
++  return gegl_rectangle_infinite_plane ();
++}
++
++static GeglRectangle
++get_required_for_output (GeglOperation       *operation,
++                         const gchar         *input_pad,
++                         const GeglRectangle *roi)
++{
++  GeglRectangle *rect = gegl_operation_source_get_bounding_box (operation, input_pad);
++
++  if (rect)
++    {
++      return *rect;
++    }
++  else
++    {
++      GeglRectangle empty = {0,};
++      return empty;
++    }
++}
++
++static GeglRectangle
++get_invalidated_by_change (GeglOperation       *operation,
++                           const gchar         *input_pad,
++                           const GeglRectangle *input_roi)
++{
++  return gegl_rectangle_infinite_plane ();
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  gfloat *buf = g_new (gfloat, result->width * result->height * 4);
++
++  gegl_buffer_get (input, result, 1.0, babl_format ("RGBA float"), buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_LOOP);
++
++  gegl_buffer_set (output, result, 0.0, babl_format ("RGBA float"), buf, GEGL_AUTO_ROWSTRIDE);
++
++  g_free (buf);
++
++  return TRUE;
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++  gchar                    *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:crop'>"
++    "  <params>"
++    "    <param name='width'>200.0</param>"
++    "    <param name='height'>200.0</param>"
++    "  </params>"
++    "</node>"
++    "<node operation='gegl:tile'>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-aux.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
++
++  operation_class  = GEGL_OPERATION_CLASS (klass);
++  filter_class     = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  filter_class->process                      = process;
++  operation_class->prepare                   = prepare;
++  operation_class->get_bounding_box          = get_bounding_box;
++  operation_class->get_required_for_output   = get_required_for_output;
++  operation_class->get_invalidated_by_change = get_invalidated_by_change;
++
++  gegl_operation_class_set_keys (operation_class,
++                                 "name", "gegl:tile",
++                                 "categories", "misc",
++                                 "description",
++                                 _("Infinitely repeats the input image."),
++                                 "reference-composition", composition,
++                                 NULL);
++}
++#endif
+diff --git a/operations/common/value-invert.c b/operations/common/value-invert.c
+index b9b4be5..2403582 100644
+--- operations/common/value-invert.c
++++ operations/common/value-invert.c
+@@ -129,11 +129,9 @@ process (GeglOperation       *op,
+   return TRUE;
+ }
+ 
+-#include "opencl/gegl-cl.h"
+-
+ static const char* kernel_source =
+-"__kernel void kernel_vinv(__global const float4     *in,           \n"
+-"                          __global       float4     *out)          \n"
++"__kernel void gegl_value_invert (__global const float4     *in,    \n"
++"                                 __global       float4     *out)   \n"
+ "{                                                                  \n"
+ "  int gid = get_global_id(0);                                      \n"
+ "  float4 in_v  = in[gid];                                          \n"
+@@ -173,43 +171,6 @@ static const char* kernel_source =
+ "  out[gid]  =  out_v;                                              \n"
+ "}                                                                  \n";
+ 
+-static gegl_cl_run_data *cl_data = NULL;
+-
+-/* OpenCL processing function */
+-static cl_int
+-cl_process (GeglOperation       *op,
+-            cl_mem               in_tex,
+-            cl_mem               out_tex,
+-            size_t               global_worksize,
+-            const GeglRectangle *roi,
+-            int                  level)
+-{
+-
+-  cl_int cl_err = 0;
+-
+-  if (!cl_data)
+-    {
+-      const char *kernel_name[] = {"kernel_vinv", NULL};
+-      cl_data = gegl_cl_compile_and_build (kernel_source, kernel_name);
+-    }
+-
+-  if (!cl_data) return 1;
+-
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 0, sizeof(cl_mem),   (void*)&in_tex);
+-  cl_err |= gegl_clSetKernelArg(cl_data->kernel[0], 1, sizeof(cl_mem),   (void*)&out_tex);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  cl_err = gegl_clEnqueueNDRangeKernel(gegl_cl_get_command_queue (),
+-                                        cl_data->kernel[0], 1,
+-                                        NULL, &global_worksize, NULL,
+-                                        0, NULL, NULL);
+-  if (cl_err != CL_SUCCESS) return cl_err;
+-
+-  return cl_err;
+-}
+-
+-
+-
+ static void
+ gegl_chant_class_init (GeglChantClass *klass)
+ {
+@@ -221,9 +182,6 @@ gegl_chant_class_init (GeglChantClass *klass)
+ 
+   point_filter_class->process = process;
+   operation_class->prepare = prepare;
+-  point_filter_class->cl_process = cl_process;
+-
+-  operation_class->opencl_support = TRUE;
+ 
+   gegl_operation_class_set_keys (operation_class,
+     "name"       , "gegl:value-invert",
+@@ -231,7 +189,8 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "description",
+         _("Inverts just the value component, the result is the corresponding "
+           "`inverted' image."),
+-        NULL);
++    "cl-source"  , kernel_source,
++    NULL);
+ }
+ 
+ #endif
+diff --git a/operations/common/vignette.c b/operations/common/vignette.c
+index da78293..59e711d 100644
+--- operations/common/vignette.c
++++ operations/common/vignette.c
+@@ -21,7 +21,7 @@
+ 
+ 
+ #ifdef GEGL_CHANT_PROPERTIES
+-gegl_chant_int    (shape,    _("Shape"),  0, 2, 0, _("Shape to use: 0=circle 1=diamond 2=square"))
++gegl_chant_int    (shape,    _("Shape"),  0, 2, 0, _("Shape to use: 0=circle 1=square 2=diamond"))
+ gegl_chant_color (color,     _("Color"), "black", _("Defaults to 'black', you can use transparency here to erase portions of an image"))
+ gegl_chant_double (radius,   _("Radius"),  0.0, 3.0, 1.5, _("How far out vignetting goes as portion of half image diagonal"))
+ gegl_chant_double (softness,  _("Softness"),  0.0, 1.0, 0.8, _("Softness"))
+@@ -146,7 +146,7 @@ static const char* kernel_source =
+ "  out[gid] = in[gid]*(1.0f-strength) + color * strength;        \n"
+ "}                                                               \n";
+ 
+-static gegl_cl_run_data * cl_data = NULL;
++static GeglClRunData * cl_data = NULL;
+ 
+ static cl_int
+ cl_process (GeglOperation       *operation,
+diff --git a/operations/common/waves.c b/operations/common/waves.c
+index 895aea1..d9cd691 100644
+--- operations/common/waves.c
++++ operations/common/waves.c
+@@ -38,9 +38,11 @@ gegl_chant_double (period, _("Period"), 0.0, 1000.0, 200.0,
+ gegl_chant_double (phi, _("Phase shift"), -1.0, 1.0, 0.0,
+                    _("Phase shift"))
+ 
+-gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, GEGL_TYPE_SAMPLER_TYPE,
++gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, gegl_sampler_type,
+                  GEGL_SAMPLER_CUBIC, _("Sampler used internally"))
+ 
++gegl_chant_boolean (clamp, _("Clamp deformation"), FALSE,
++                    _("Limit deformation in the image area."))
+ 
+ #else
+ 
+@@ -92,6 +94,8 @@ process (GeglOperation       *operation,
+ 
+   gint n_pixels = result->width * result->height;
+ 
++  GeglAbyssPolicy abyss = o->clamp ? GEGL_ABYSS_CLAMP : GEGL_ABYSS_NONE;
++
+   while (n_pixels--)
+     {
+       gdouble coordsx = 0.0;
+@@ -124,7 +128,8 @@ process (GeglOperation       *operation,
+                         coordsx,
+                         coordsy,
+                         NULL,
+-                        out_pixel);
++                        out_pixel,
++                        abyss);
+ 
+       out_pixel += 4;
+ 
+diff --git a/operations/common/wind.c b/operations/common/wind.c
+new file mode 100644
+index 0000000..c465499
+--- /dev/null
++++ operations/common/wind.c
+@@ -0,0 +1,370 @@
++/* This file is an image processing operation for GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright Nigel Wetten
++ * Copyright 2000 Tim Copperfield <timecop at japan.co.jp>
++ * Copyright 2011 Hans Lo <hansshulo at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_double (threshold, _("Threshold"), 0.0, 100.0, 10.0,
++                   _("Higher values restrict the effect to fewer "
++                     "areas of the image"))
++
++gegl_chant_int (strength, _("Strength"), 1, 1000, 40,
++                _("Higher values increase the magnitude of the effect"))
++
++gegl_chant_seed (seed, _("Seed"), _("Random seed"))
++
++#else
++
++#define GEGL_CHANT_TYPE_AREA_FILTER
++#define GEGL_CHANT_C_FILE       "wind.c"
++
++#include "gegl-chant.h"
++#include <stdlib.h>
++
++typedef struct
++{
++  gint x;
++  gint y;
++} pair;
++
++static guint     tuple_hash  (gconstpointer v);
++static gboolean  tuple_equal (gconstpointer v1,
++                              gconstpointer v2);
++static void      get_pixel   (gint    x,
++                              gint    y,
++                              gint    buf_width,
++                              gfloat *src_begin,
++                              gfloat *dst);
++
++static guint
++tuple_hash (gconstpointer v)
++{
++  const pair *data = v;
++  return (g_int_hash (&data->x) ^ g_int_hash (&data->y));
++}
++
++static gboolean
++tuple_equal (gconstpointer v1,
++             gconstpointer v2)
++{
++  const pair *data1 = v1;
++  const pair *data2 = v2;
++  return (g_int_equal (&data1->x, &data2->x) &&
++          g_int_equal (&data1->y, &data2->y));
++}
++
++static void
++get_pixel (gint    x,
++           gint    y,
++           gint    buf_width,
++           gfloat *src_begin,
++           gfloat *dst)
++{
++  gint b;
++  gfloat* src = src_begin + 4*(x + buf_width*y);
++  for (b = 0; b < 4; b++)
++    {
++      dst[b] = src[b];
++    }
++}
++
++static void
++get_derivative (gfloat   *pixel1,
++                gfloat   *pixel2,
++                gfloat   *derivative)
++{
++  gint i;
++  for (i = 0; i < 4; i++)
++    derivative[i] = pixel1[i] - pixel2[i];
++}
++
++static gboolean
++threshold_exceeded (gfloat  *pixel1,
++                    gfloat  *pixel2,
++                    gfloat   threshold)
++{
++  gfloat derivative[4];
++  gint i;
++  gfloat sum;
++
++  get_derivative (pixel1, pixel2, derivative);
++
++  sum = 0.0;
++  for (i = 0; i < 4; i++)
++    sum += derivative[i];
++  return ((sum / 4.0) > (threshold/100.0));
++}
++
++static void
++calculate_bleed (GHashTable    *h,
++                 gfloat        *data,
++                 gfloat         threshold,
++                 gfloat         max_length,
++                 GeglRectangle *rect,
++                 gint           seed)
++{
++  gint x, y;
++  GRand *gr = g_rand_new_with_seed (seed);
++  for (y = 0; y < rect->height; y++)
++    {
++      for (x = 0; x < rect->width - 3; x++)
++        {
++          gfloat pixel1[4];
++          gfloat pixel2[4];
++          get_pixel (x, y, rect->width, data, pixel1);
++          get_pixel (x + 3, y, rect->width, data, pixel2);
++          if (threshold_exceeded (pixel1,
++                                  pixel2,
++                                  threshold))
++            {
++              pair *k = g_new (pair, 1);
++              gint *v = g_new (gint, 1);
++              gint bleed_length = 1 + (gint)(g_rand_double (gr) * max_length);
++
++              k->x = x;
++              k->y = y;
++
++              *v = bleed_length;
++              g_hash_table_insert (h, k, v);
++            }
++        }
++    }
++  g_rand_free (gr);
++}
++
++static void
++prepare (GeglOperation *operation)
++{
++  GeglChantO              *o;
++  GeglOperationAreaFilter *op_area;
++
++  op_area = GEGL_OPERATION_AREA_FILTER (operation);
++  o       = GEGL_CHANT_PROPERTIES (operation);
++
++  if (o->chant_data)
++    {
++      g_hash_table_destroy (o->chant_data);
++      o->chant_data = NULL;
++    }
++
++  op_area->left   = o->strength;
++  op_area->right  = o->strength;
++  op_area->top    = o->strength;
++  op_area->bottom = o->strength;
++
++  gegl_operation_set_format (operation, "input",
++                             babl_format ("RGBA float"));
++  gegl_operation_set_format (operation, "output",
++                             babl_format ("RGBA float"));
++}
++
++static gboolean
++process (GeglOperation       *operation,
++         GeglBuffer          *input,
++         GeglBuffer          *output,
++         const GeglRectangle *result,
++         gint                 level)
++{
++  GeglChantO *o                    = GEGL_CHANT_PROPERTIES (operation);
++  GeglOperationAreaFilter *op_area = GEGL_OPERATION_AREA_FILTER (operation);
++
++  gfloat *src_buf;
++  gfloat *dst_buf;
++
++  gint n_pixels = result->width * result->height;
++  GeglRectangle src_rect;
++
++  gfloat *current_pix;
++  gfloat *target_pix;
++  gfloat *dst_pix;
++
++  gint x, y;
++  gint total_src_pixels;
++  gint total_dst_pixels;
++
++  gint bleed_max;
++  gint bleed_index;
++  gfloat blend_coefficient;
++
++  GHashTable *bleed_table;
++
++  static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
++
++  g_static_mutex_lock (&mutex);
++  if (!o->chant_data)
++    {
++      GeglRectangle *whole_rect = gegl_operation_source_get_bounding_box (operation, "input");
++      gfloat *data = (gfloat*) gegl_buffer_linear_open (input, NULL, NULL, babl_format ("RGBA float"));
++
++      bleed_table = g_hash_table_new_full (tuple_hash, tuple_equal, g_free, g_free);
++      calculate_bleed (bleed_table, data, o->threshold, (gfloat) o->strength, whole_rect, o->seed);
++      o->chant_data = bleed_table;
++      gegl_buffer_linear_close (input, data);
++    }
++  g_static_mutex_unlock (&mutex);
++
++  bleed_table = (GHashTable*) o->chant_data;
++
++  src_rect.x      = result->x - op_area->left;
++  src_rect.width  = result->width + op_area->left + op_area->right;
++  src_rect.y      = result->y - op_area->top;
++  src_rect.height = result->height + op_area->top + op_area->bottom;
++
++  total_src_pixels = src_rect.width * src_rect.height;
++  total_dst_pixels = result->width * result->height;
++
++  src_buf = g_slice_alloc (4 * total_src_pixels * sizeof (gfloat));
++  dst_buf = g_slice_alloc (4 * total_dst_pixels * sizeof (gfloat));
++
++  gegl_buffer_get (input,
++                   &src_rect,
++                   1.0,
++                   babl_format ("RGBA float"),
++                   src_buf,
++                   GEGL_AUTO_ROWSTRIDE,
++                   GEGL_ABYSS_NONE);
++
++  current_pix = src_buf + 4*(o->strength + src_rect.width * o->strength);
++  dst_pix = dst_buf;
++  x = 0;
++  y = 0;
++  n_pixels = result->width * result->height;
++  bleed_max = 0;
++  bleed_index = 0;
++  while (n_pixels--)
++    {
++      gint i;
++      pair key = {x + result->x, y + result->y};
++      gint *bleed = g_hash_table_lookup (bleed_table, &key);
++
++      if (x == 0) {
++        for (i = 0; i < o->strength; i++)
++          {
++            pair key = {result->x - i, y + result->y};
++            gint *bleed = g_hash_table_lookup (bleed_table, &key);
++            if (bleed) {
++              bleed_max = *bleed;
++              bleed_index = *bleed - i;
++              break;
++            }
++          }
++      }
++
++      for (i = 0; i < 4; i++)
++        dst_pix[i] = current_pix[i];
++
++      if (bleed)
++        {
++          gfloat blend_color[4];
++          gfloat blend_amount[4];
++          gfloat *blend_pix;
++
++          bleed_max = *bleed;
++          bleed_index = *bleed;
++          target_pix = current_pix;
++          blend_pix = current_pix - 12;
++          for (i = 0; i < 4; i++)
++            {
++              blend_amount[i] = target_pix[i] - blend_pix[i];
++              blend_color[i] = blend_pix[i] + blend_amount[i];
++              dst_pix[i] = (2.0 * blend_color[i] + dst_pix[i])/3.0;
++            }
++        }
++      else if (bleed_index > 0)
++        {
++          gfloat blend_color[4];
++          gfloat blend_amount[4];
++          gfloat *blend_pix;
++          bleed_index--;
++          blend_coefficient = 1.0 - ((gfloat) bleed_index)/(gfloat) bleed_max;
++          blend_pix = current_pix - 4 * (bleed_max - bleed_index) - 12;
++          target_pix = current_pix;
++          for (i = 0; i < 4; i++)
++            {
++              blend_amount[i] = target_pix[i] - blend_pix[i];
++              blend_color[i] = blend_pix[i] + blend_amount[i] * blend_coefficient;
++              dst_pix[i] = (2.0 * blend_color[i] + dst_pix[i])/3.0;
++            }
++        }
++
++      x++;
++      current_pix += 4;
++      dst_pix += 4;
++      if (x >= result->width)
++        {
++          bleed_max = 0;
++          bleed_index = 0;
++          x = 0;
++          y++;
++          current_pix += 8 * o->strength;
++        }
++    }
++  gegl_buffer_set (output,
++                   result,
++                   1,
++                   babl_format ("RGBA float"),
++                   dst_buf,
++                   GEGL_AUTO_ROWSTRIDE);
++
++  g_slice_free1 (4 * total_src_pixels * sizeof (gfloat), src_buf);
++  g_slice_free1 (4 * total_dst_pixels * sizeof (gfloat), dst_buf);
++
++  return TRUE;
++}
++
++
++static void
++finalize (GObject *object)
++{
++  GeglChantO *o = GEGL_CHANT_PROPERTIES (object);
++
++  if (o->chant_data)
++    {
++      g_hash_table_destroy (o->chant_data);
++      o->chant_data = NULL;
++    }
++
++  G_OBJECT_CLASS (gegl_chant_parent_class)->finalize (object);
++}
++
++static void
++gegl_chant_class_init (GeglChantClass *klass)
++{
++  GObjectClass             *object_class;
++  GeglOperationClass       *operation_class;
++  GeglOperationFilterClass *filter_class;
++
++  object_class    = G_OBJECT_CLASS (klass);
++  operation_class = GEGL_OPERATION_CLASS (klass);
++  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
++
++  object_class->finalize   = finalize;
++  filter_class->process    = process;
++  operation_class->prepare = prepare;
++
++  gegl_operation_class_set_keys (operation_class,
++                                 "categories" , "distort",
++                                 "name"       , "gegl:wind",
++                                 "description", _("Wind-like bleed effect"),
++                                 NULL);
++}
++#endif
+diff --git a/operations/common/write-buffer.c b/operations/common/write-buffer.c
+index 89a5ade..95790c2 100644
+--- operations/common/write-buffer.c
++++ operations/common/write-buffer.c
+@@ -25,6 +25,9 @@
+ gegl_chant_object (buffer, _("Buffer location"),
+                    _("Write to an existing GeglBuffer"))
+ 
++gegl_chant_boolean (flush, _("Flush buffer"), TRUE,
++                    _("Flush buffer after writing"))
++
+ #else
+ 
+ #define GEGL_CHANT_TYPE_SINK
+@@ -53,7 +56,7 @@ process (GeglOperation       *operation,
+         {
+           size_t size;
+           gboolean err;
+-          cl_int cl_err;
++          cl_int cl_err = 0;
+           gint j;
+ 
+           GeglBufferClIterator *i = gegl_buffer_cl_iterator_new (output,   result, output->soft_format, GEGL_CL_BUFFER_WRITE, GEGL_ABYSS_NONE);
+@@ -86,7 +89,9 @@ process (GeglOperation       *operation,
+       else
+         gegl_buffer_copy (input, result, output, result);
+ 
+-      gegl_buffer_flush (output);
++      if (o->flush)
++        gegl_buffer_flush (output);
++
+       gegl_node_emit_computed (operation->node, result);
+     }
+ 
+diff --git a/operations/core/clone.c b/operations/core/clone.c
+index 6243c33..c9718cc 100644
+--- operations/core/clone.c
++++ operations/core/clone.c
+@@ -35,8 +35,6 @@ gegl_chant_string (ref, _("Reference"), "ID",
+ #include <math.h>
+ #include <string.h>
+ 
+-#include "buffer/gegl-buffer-cl-cache.h"
+-
+ static GeglNode *
+ detect (GeglOperation *operation,
+         gint           x,
+diff --git a/operations/core/crop.c b/operations/core/crop.c
+index 35b5992..a8d2f94 100644
+--- operations/core/crop.c
++++ operations/core/crop.c
+@@ -34,7 +34,6 @@ gegl_chant_double (height, _("Height"), -G_MAXFLOAT, G_MAXFLOAT, 10.0, _("Height
+ 
+ #include "gegl-chant.h"
+ #include "graph/gegl-node.h"
+-#include "buffer/gegl-buffer-cl-cache.h"
+ #include <math.h>
+ 
+ static GeglNode *
+@@ -164,6 +163,22 @@ static void
+ gegl_chant_class_init (GeglChantClass *klass)
+ {
+   GeglOperationClass *operation_class;
++  gchar              *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:crop'>"
++    "  <params>"
++    "    <param name='x'>50</param>"
++    "    <param name='y'>80</param>"
++    "    <param name='width'>70</param>"
++    "    <param name='height'>60</param>"
++    "  </params>"
++    "</node>"
++    "<node operation='gegl:load'>"
++    "  <params>"
++    "    <param name='path'>standard-input.png</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   operation_class = GEGL_OPERATION_CLASS (klass);
+ 
+@@ -177,6 +192,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+       "name",        "gegl:crop",
+       "categories",  "core",
+       "description", _("Crop a buffer"),
++      "reference-composition", composition,
+       NULL);
+ 
+   operation_class->no_cache = TRUE;
+diff --git a/operations/external/jpg-load.c b/operations/external/jpg-load.c
+index e61ea54..a1e47d8 100644
+--- operations/external/jpg-load.c
++++ operations/external/jpg-load.c
+@@ -152,8 +152,8 @@ gegl_jpg_load_get_bounding_box (GeglOperation *operation)
+   if (status)
+     {
+       /*g_warning ("calc have rect of %s failed", o->path);*/
+-      result.width  = 10;
+-      result.height  = 10;
++      result.width  = 0;
++      result.height  = 0;
+     }
+   else
+     {
+diff --git a/operations/external/path.c b/operations/external/path.c
+index c8ed820..bad2d41 100644
+--- operations/external/path.c
++++ operations/external/path.c
+@@ -39,7 +39,7 @@ gegl_chant_double (stroke_hardness, _("Hardness"),   0.0, 1.0, 0.6,
+                              _("Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"))
+ 
+ gegl_chant_string (fill_rule,_("Fill rule"), "nonzero",
+-                             _("How to determine what to fill (nonzero|evenodd"))
++                             _("How to determine what to fill (nonzero|evenodd)"))
+ 
+ gegl_chant_string (transform,_("Transform"), "",
+                              _("SVG style description of transform"))
+@@ -256,7 +256,7 @@ gegl_path_stamp (GeglBuffer *buffer,
+     }
+   g_assert (s.buf);
+ 
+-  gegl_buffer_get_unlocked (buffer, 1.0, &roi, s.format, s.buf, 0);
++  gegl_buffer_get_unlocked (buffer, 1.0, &roi, s.format, s.buf, 0, GEGL_ABYSS_NONE);
+ 
+   {
+     gint u, v;
+diff --git a/operations/external/png-load.c b/operations/external/png-load.c
+index 89fc9a6..0505934 100644
+--- operations/external/png-load.c
++++ operations/external/png-load.c
+@@ -378,8 +378,8 @@ get_bounding_box (GeglOperation *operation)
+ 
+   if (status)
+     {
+-      width=10;
+-      height=10;
++      width = 0;
++      height = 0;
+     }
+ 
+   gegl_operation_set_format (operation, "output", format);
+diff --git a/operations/external/ppm-load.c b/operations/external/ppm-load.c
+index efe6d56..e22521c 100644
+--- operations/external/ppm-load.c
++++ operations/external/ppm-load.c
+@@ -36,6 +36,7 @@ gegl_chant_file_path (path, _("File"), "", _("Path of file to load."))
+ #include "gegl-chant.h"
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <errno.h>
+ 
+ typedef enum {
+   PIXMAP_ASCII  = 51,
+@@ -44,8 +45,8 @@ typedef enum {
+ 
+ typedef struct {
+ 	map_type   type;
+-	gint       width;
+-	gint       height;
++	glong      width;
++	glong      height;
+         gsize      numsamples; /* width * height * channels */
+         gsize      bpc;        /* bytes per channel */
+ 	guchar    *data;
+@@ -61,7 +62,7 @@ ppm_load_read_header(FILE       *fp,
+     gchar  header[MAX_CHARS_IN_ROW];
+     gint   maxval;
+ 
+-    /* Check the PPM file Type P2 or P5 */
++    /* Check the PPM file Type P3 or P6 */
+     fgets (header,MAX_CHARS_IN_ROW,fp);
+ 
+     if (header[0] != ASCII_P ||
+@@ -82,12 +83,33 @@ ppm_load_read_header(FILE       *fp,
+       }
+ 
+     /* Get Width and Height */
+-    img->width  = strtol (header,&ptr,0);
+-    img->height = atoi (ptr);
+-    img->numsamples = img->width * img->height * CHANNEL_COUNT;
++    errno = 0;
++    img->width  = strtol (header,&ptr,10);
++    if (errno)
++      {
++        g_warning ("Error reading width: %s", strerror(errno));
++        return FALSE;
++      }
++    else if (img->width < 0)
++      {
++        g_warning ("Error: width is negative");
++        return FALSE;
++      }
++
++    img->height = strtol (ptr,&ptr,10);
++    if (errno)
++      {
++        g_warning ("Error reading height: %s", strerror(errno));
++        return FALSE;
++      }
++    else if (img->width < 0)
++      {
++        g_warning ("Error: height is negative");
++        return FALSE;
++      }
+ 
+     fgets (header,MAX_CHARS_IN_ROW,fp);
+-    maxval = strtol (header,&ptr,0);
++    maxval = strtol (header,&ptr,10);
+ 
+     if ((maxval != 255) && (maxval != 65535))
+       {
+@@ -109,6 +131,16 @@ ppm_load_read_header(FILE       *fp,
+       g_warning ("%s: Programmer stupidity error", G_STRLOC);
+     }
+ 
++    /* Later on, img->numsamples is multiplied with img->bpc to allocate
++     * memory. Ensure it doesn't overflow. */
++    if (!img->width || !img->height ||
++        G_MAXSIZE / img->width / img->height / CHANNEL_COUNT < img->bpc)
++      {
++        g_warning ("Illegal width/height: %ld/%ld", img->width, img->height);
++        return FALSE;
++      }
++    img->numsamples = img->width * img->height * CHANNEL_COUNT;
++
+     return TRUE;
+ }
+ 
+@@ -229,12 +261,24 @@ process (GeglOperation       *operation,
+   if (!ppm_load_read_header (fp, &img))
+     goto out;
+ 
+-  rect.height = img.height;
+-  rect.width = img.width;
+-
+   /* Allocating Array Size */
++
++  /* Should use g_try_malloc(), but this causes crashes elsewhere because the
++   * error signalled by returning FALSE isn't properly acted upon. Therefore
++   * g_malloc() is used here which aborts if the requested memory size can't be
++   * allocated causing a controlled crash. */
+   img.data = (guchar*) g_malloc (img.numsamples * img.bpc);
+ 
++  /* No-op without g_try_malloc(), see above. */
++  if (! img.data)
++    {
++      g_warning ("Couldn't allocate %" G_GSIZE_FORMAT " bytes, giving up.", ((gsize)img.numsamples * img.bpc));
++      goto out;
++    }
++
++  rect.height = img.height;
++  rect.width = img.width;
++
+   switch (img.bpc)
+     {
+     case 1:
+diff --git a/operations/external/svg-load.c b/operations/external/svg-load.c
+index cfb4142..11b41a6 100644
+--- operations/external/svg-load.c
++++ operations/external/svg-load.c
+@@ -74,8 +74,6 @@ gegl_buffer_import_svg (GeglBuffer  *gegl_buffer,
+     surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, *ret_width, *ret_height);
+     cr = cairo_create (surface);
+ 
+-    rsvg_init();
+-
+ /*
+ FIXME: The routine 'rsvg_pixbuf_from_file_at_size' is deprecated. Set up a
+ cairo matrix and use rsvg_handle_new_from_file() + rsvg_handle_render_cairo()
+@@ -99,8 +97,6 @@ instead.
+       gegl_buffer_set (gegl_buffer, &rect, 0, babl_format ("R'G'B'A u8"), pixeldata, GEGL_AUTO_ROWSTRIDE);
+     }
+ 
+-    rsvg_term();
+-
+     cairo_destroy (cr);
+     cairo_surface_destroy (surface);
+ 
+@@ -138,7 +134,6 @@ query_svg (const gchar *path,
+   GError           *pError = NULL;
+   SvgLoadVals       vals;
+ 
+-  rsvg_init ();
+   handle = rsvg_handle_new_from_file (path, &pError);
+   if (handle == NULL)
+       return FALSE;
+@@ -151,8 +146,7 @@ query_svg (const gchar *path,
+ 
+   rsvg_handle_get_dimensions (handle, &dimension_data);
+ 
+-  rsvg_handle_free (handle);
+-  rsvg_term ();
++  g_object_unref (handle);
+ 
+   *width  = dimension_data.width;
+   *height = dimension_data.height;
+diff --git a/operations/external/vector-fill.c b/operations/external/vector-fill.c
+index 71a8311..bd238fc 100644
+--- operations/external/vector-fill.c
++++ operations/external/vector-fill.c
+@@ -31,7 +31,7 @@ gegl_chant_double (opacity,  _("Opacity"),  -2.0, 2.0, 1.0,
+                              _("The fill opacity to use."))
+ 
+ gegl_chant_string (fill_rule,_("Fill rule."), "nonzero",
+-                             _("how to determine what to fill (nonzero|evenodd"))
++                             _("how to determine what to fill (nonzero|evenodd)"))
+ 
+ gegl_chant_string (transform,_("Transform"), "",
+                              _("svg style description of transform."))
+@@ -243,6 +243,16 @@ gegl_chant_class_init (GeglChantClass *klass)
+ {
+   GeglOperationClass       *operation_class;
+   GeglOperationFilterClass *filter_class;
++  gchar                    *composition = "<?xml version='1.0' encoding='UTF-8'?>"
++    "<gegl>"
++    "<node operation='gegl:fill-path'>"
++    "  <params>"
++    "    <param name='d'>M30,4 C12,13 0,30 0,50 C0,78 23,100 50,100 C71,100 88,88 96,71"
++    "                    L56,71 C42,71 30,59 30,45 L30,4 z</param>"
++    "    <param name='color'>rgb(0.0, 0.6, 1.0)</param>"
++    "  </params>"
++    "</node>"
++    "</gegl>";
+ 
+   operation_class = GEGL_OPERATION_CLASS (klass);
+   filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
+@@ -256,6 +266,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+     "name"       , "gegl:fill-path",
+     "categories" , "render",
+     "description", _("Renders a filled region"),
++    "reference-composition", composition,
+     NULL);
+ }
+ 
+diff --git a/operations/generated/color-burn.c b/operations/generated/color-burn.c
+index 3cc174d..0dabf02 100644
+--- operations/generated/color-burn.c
++++ operations/generated/color-burn.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -108,13 +155,14 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:color-burn";
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:color-burn",
+   "description" ,
+-        _("SVG blend operation color-burn (<tt>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</tt>)"),
++        _("SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/color-dodge.c b/operations/generated/color-dodge.c
+index 655392f..18d1f16 100644
+--- operations/generated/color-dodge.c
++++ operations/generated/color-dodge.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -108,13 +155,14 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:color-dodge";
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:color-dodge",
+   "description" ,
+-        _("SVG blend operation color-dodge (<tt>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"),
++        _("SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/darken.c b/operations/generated/darken.c
+index 4568982..0335ff3 100644
+--- operations/generated/darken.c
++++ operations/generated/darken.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -105,14 +152,15 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:darken";
+-  
++
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:darken",
+   "description" ,
+-        _("SVG blend operation darken (<tt>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"),
++        _("SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/difference.c b/operations/generated/difference.c
+index 3c17a42..26217c6 100644
+--- operations/generated/difference.c
++++ operations/generated/difference.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -105,14 +152,15 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:difference";
+-  
++
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:difference",
+   "description" ,
+-        _("SVG blend operation difference (<tt>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</tt>)"),
++        _("SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/exclusion.c b/operations/generated/exclusion.c
+index 5fec960..4dc154f 100644
+--- operations/generated/exclusion.c
++++ operations/generated/exclusion.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -105,14 +152,15 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:exclusion";
+-  
++
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:exclusion",
+   "description" ,
+-        _("SVG blend operation exclusion (<tt>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</tt>)"),
++        _("SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/hard-light.c b/operations/generated/hard-light.c
+index da4f595..bcf5019 100644
+--- operations/generated/hard-light.c
++++ operations/generated/hard-light.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -108,13 +155,14 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:hard-light";
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:hard-light",
+   "description" ,
+-        _("SVG blend operation hard-light (<tt>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"),
++        _("SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/lighten.c b/operations/generated/lighten.c
+index 9720dee..4da6c48 100644
+--- operations/generated/lighten.c
++++ operations/generated/lighten.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -105,14 +152,15 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:lighten";
+-  
++
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:lighten",
+   "description" ,
+-        _("SVG blend operation lighten (<tt>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"),
++        _("SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/overlay.c b/operations/generated/overlay.c
+index 6407f54..f3d1fd6 100644
+--- operations/generated/overlay.c
++++ operations/generated/overlay.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -108,13 +155,14 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:overlay";
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:overlay",
+   "description" ,
+-        _("SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"),
++        _("SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/plus.c b/operations/generated/plus.c
+index 9850acf..7fb9e35 100644
+--- operations/generated/plus.c
++++ operations/generated/plus.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -105,6 +152,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:plus";
+@@ -112,7 +160,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+   gegl_operation_class_set_keys (operation_class,
+     "name"        , "svg:plus",
+     "description" ,
+-    _("SVG blend operation plus (<tt>d = cA + cB</tt>)"),
++    _("SVG blend operation plus (<code>d = cA + cB</code>)"),
+     NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/screen.c b/operations/generated/screen.c
+index 5d6b2f0..6201ffe 100644
+--- operations/generated/screen.c
++++ operations/generated/screen.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -66,8 +113,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -105,14 +152,15 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   operation_class->compat_name = "gegl:screen";
+-  
++
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "svg:screen",
+   "description" ,
+-        _("SVG blend operation screen (<tt>d = cA + cB - cA * cB</tt>)"),
++        _("SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/soft-light.c b/operations/generated/soft-light.c
+index d25e9e0..a8442c1 100644
+--- operations/generated/soft-light.c
++++ operations/generated/soft-light.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -53,6 +53,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -67,8 +114,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -111,12 +158,13 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
+   gegl_operation_class_set_keys (operation_class,
+   "name"        , "gegl:soft-light",
+   "description" ,
+-        _("SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"),
++        _("SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"),
+         NULL);
+   gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+diff --git a/operations/generated/svg-12-blend.rb b/operations/generated/svg-12-blend.rb
+index 66e074c..013b4e8 100755
+--- operations/generated/svg-12-blend.rb
++++ operations/generated/svg-12-blend.rb
+@@ -1,7 +1,8 @@
+ #!/usr/bin/env ruby
++# -*- coding: utf-8 -*-
+ 
+ copyright = '
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -91,6 +92,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -105,8 +153,8 @@ process (GeglOperation       *op,
+   gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ '
+ 
+ file_tail1 = '
+@@ -123,6 +171,7 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ '
+ 
+@@ -137,7 +186,9 @@ a.each do
+ 
+     name     = item[0] + ''
+     name.gsub!(/_/, '-')
+-    filename = name + '.c'
++    # hack to avoid a conflict with multiply op generated by math.rb
++    compat_name = (name == 'multiply' ? 'svg-' : '') + name
++    filename = compat_name + '.c'
+ 
+     puts "generating #{filename}"
+     file = File.open(filename, 'w')
+@@ -181,12 +232,12 @@ a.each do
+ "
+   file.write file_tail1
+   file.write "
+-  operation_class->compat_name = \"gegl:#{name}\";
+-  
++  operation_class->compat_name = \"gegl:#{compat_name}\";
++
+   gegl_operation_class_set_keys (operation_class,
+   \"name\"        , \"svg:#{name}\",
+   \"description\" ,
+-        _(\"SVG blend operation #{name} (<tt>d = #{formula1}</tt>)\"),
++        _(\"SVG blend operation #{name} (<code>d = #{formula1}</code>)\"),
+         NULL);
+ "
+   file.write file_tail2
+@@ -251,7 +302,7 @@ b.each do
+   gegl_operation_class_set_keys (operation_class,
+   \"name\"        , \"svg:#{name}\",
+   \"description\" ,
+-        _(\"SVG blend operation #{name} (<tt>if #{cond1}: d = #{formula1} otherwise: d = #{formula2}</tt>)\"),
++        _(\"SVG blend operation #{name} (<code>if #{cond1}: d = #{formula1} otherwise: d = #{formula2}</code>)\"),
+         NULL);
+ "
+   file.write file_tail2
+@@ -320,7 +371,7 @@ c.each do
+   gegl_operation_class_set_keys (operation_class,
+   \"name\"        , \"gegl:#{name}\",
+   \"description\" ,
+-        _(\"SVG blend operation #{name} (<tt>if #{cond1}: d = #{formula1}; if #{cond2}: d = #{formula2}; otherwise: d = #{formula3}</tt>)\"),
++        _(\"SVG blend operation #{name} (<code>if #{cond1}: d = #{formula1}; if #{cond2}: d = #{formula2}; otherwise: d = #{formula3}</code>)\"),
+         NULL);
+ "
+   file.write file_tail2
+@@ -382,7 +433,7 @@ d.each do
+   gegl_operation_class_set_keys (operation_class,
+     \"name\"        , \"svg:#{name}\",
+     \"description\" ,
+-    _(\"SVG blend operation #{name} (<tt>d = #{formula1}</tt>)\"),
++    _(\"SVG blend operation #{name} (<code>d = #{formula1}</code>)\"),
+     NULL);
+ "
+   file.write file_tail2
+diff --git a/operations/generated/svg-multiply.c b/operations/generated/svg-multiply.c
+index 2c1385c..d19d135 100644
+--- operations/generated/svg-multiply.c
++++ operations/generated/svg-multiply.c
+@@ -1,5 +1,5 @@
+ 
+-/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!! 
++/* !!!! AUTOGENERATED FILE generated by svg-12-blend.rb !!!!!
+  *
+  * This file is an image processing operation for GEGL
+  *
+@@ -17,7 +17,7 @@
+  * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+  *
+  *  Copyright 2006, 2007 Øyvind Kolås <pippin at gimp.org>
+- *            2007 John Marshall  
++ *            2007 John Marshall
+  *
+  * SVG rendering modes; see:
+  *     http://www.w3.org/TR/SVG12/rendering.html
+@@ -52,6 +52,53 @@ static void prepare (GeglOperation *operation)
+   gegl_operation_set_format (operation, "output", format);
+ }
+ 
++/* Fast paths */
++static gboolean operation_process (GeglOperation        *operation,
++                                   GeglOperationContext *context,
++                                   const gchar          *output_prop,
++                                   const GeglRectangle  *result,
++                                   gint                  level)
++{
++  GeglOperationClass  *operation_class;
++  gpointer input, aux;
++  operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class);
++
++  /* get the raw values this does not increase the reference count */
++  input = gegl_operation_context_get_object (context, "input");
++  aux = gegl_operation_context_get_object (context, "aux");
++
++  /* pass the input/aux buffers directly through if they are alone*/
++  {
++    const GeglRectangle *in_extent = NULL;
++    const GeglRectangle *aux_extent = NULL;
++
++    if (input)
++      in_extent = gegl_buffer_get_abyss (input);
++
++    if ((!input ||
++        (aux && !gegl_rectangle_intersect (NULL, in_extent, result))))
++      {
++         gegl_operation_context_take_object (context, "output",
++                                             g_object_ref (aux));
++         return TRUE;
++      }
++    if (aux)
++      aux_extent = gegl_buffer_get_abyss (aux);
++
++    if (!aux ||
++        (input && !gegl_rectangle_intersect (NULL, aux_extent, result)))
++      {
++        gegl_operation_context_take_object (context, "output",
++                                            g_object_ref (input));
++        return TRUE;
++      }
++  }
++  /* chain up, which will create the needed buffers for our actual
++   * process function
++   */
++  return operation_class->process (operation, context, output_prop, result, level);
++}
++
+ static gboolean
+ process (GeglOperation       *op,
+          void                *in_buf,
+@@ -59,15 +106,15 @@ process (GeglOperation       *op,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi,
+-         int                  level)
++         gint                 level)
+ {
+-  gfloat *in = in_buf;
+-  gfloat *aux = aux_buf;
+-  gfloat *out = out_buf;
++  gfloat * GEGL_ALIGNED in = in_buf;
++  gfloat * GEGL_ALIGNED aux = aux_buf;
++  gfloat * GEGL_ALIGNED out = out_buf;
+   gint    i;
+ 
+-  if (aux==NULL)
+-    return TRUE;
++  if(aux == NULL)
++     return TRUE;
+ 
+   for (i = 0; i < n_pixels; i++)
+     {
+@@ -105,14 +152,17 @@ gegl_chant_class_init (GeglChantClass *klass)
+   point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+ 
+   point_composer_class->process = process;
++  operation_class->process = operation_process;
+   operation_class->prepare = prepare;
+ 
++  operation_class->compat_name = "gegl:svg-multiply";
++
+   gegl_operation_class_set_keys (operation_class,
+-  "name"       , "gegl:svg-multiply",
+-  "categories" , "compositors:svgfilter",
+-  "description",
+-        _("SVG blend operation svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</tt>)"),
+-  NULL);
++  "name"        , "svg:multiply",
++  "description" ,
++        _("SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</code>)"),
++        NULL);
++  gegl_operation_class_set_key (operation_class, "categories", "compositors:svgfilter");
+ }
+ 
+ #endif
+diff --git a/operations/transform/Makefile.am b/operations/transform/Makefile.am
+index 218f30c..90012d7 100644
+--- operations/transform/Makefile.am
++++ operations/transform/Makefile.am
+@@ -14,6 +14,8 @@ transformops_la_SOURCES = \
+ 	reflect.c	\
+ 	rotate.c	\
+ 	scale.c		\
++	scale-ratio.c \
++	scale-size.c \
+ 	shear.c		\
+ 	transform.c	\
+ 	translate.c	\
+diff --git a/operations/transform/chant.h b/operations/transform/chant.h
+index cafef34..8e52328 100644
+--- operations/transform/chant.h
++++ operations/transform/chant.h
+@@ -15,8 +15,8 @@
+ 
+ #define GEGL_CHANT_PARENT_TypeName      OpTransform
+ #define GEGL_CHANT_PARENT_TypeNameClass OpTransformClass
+-#define GEGL_CHANT_PARENT_TYPE          TYPE_OP_AFFINE
+-#define GEGL_CHANT_PARENT_CLASS         OP_AFFINE_CLASS
++#define GEGL_CHANT_PARENT_TYPE          TYPE_OP_TRANSFORM
++#define GEGL_CHANT_PARENT_CLASS         OP_TRANSFORM_CLASS
+ 
+ typedef struct Generated        GeglChantOperation;
+ typedef struct GeneratedClass   ChantClass;
+@@ -24,26 +24,16 @@ typedef struct GeneratedClass   ChantClass;
+ struct Generated
+ {
+   GEGL_CHANT_PARENT_TypeName  parent_instance;
+-#define gegl_chant_int(name, min, max, def, blurb)     gint     name;
+ #define gegl_chant_double(name, min, max, def, blurb)  gdouble  name;
+-#define gegl_chant_float(name, min, max, def, blurb)   gfloat   name;
+-#define gegl_chant_boolean(name, def, blurb)           gboolean name;
+ #define gegl_chant_string(name, def, blurb)            gchar   *name;
+-#define gegl_chant_object(name, blurb)                 GObject *name;
+-#define gegl_chant_pointer(name, blurb)                gpointer name;
+ 
+ #include GEGL_CHANT_SELF
+ 
+ /****************************************************************************/
+ 
+ /* undefining the chant macros before all subsequent inclusions */
+-#undef gegl_chant_int
+ #undef gegl_chant_double
+-#undef gegl_chant_float
+-#undef gegl_chant_boolean
+ #undef gegl_chant_string
+-#undef gegl_chant_object
+-#undef gegl_chant_pointer
+ 
+ /****************************************************************************/
+ };
+@@ -89,7 +79,7 @@ type_name##_get_type (void) \
+           NULL    /* value_table */ \
+         }; \
+       g_define_type_id = \
+-        gegl_module_register_type (affine_module_get_module (), TYPE_PARENT,\
++        gegl_module_register_type (transform_module_get_module (), TYPE_PARENT,\
+                                    "GeglOpPlugIn-" #type_name,\
+                                    &g_define_type_info, 0);\
+       { CODE ; }\
+@@ -104,23 +94,13 @@ M_DEFINE_TYPE (GEGL_CHANT_NAME, GEGL_CHANT_PARENT_TYPE)
+ enum
+ {
+   PROP_0,
+-#define gegl_chant_int(name, min, max, def, blurb)     PROP_##name,
+ #define gegl_chant_double(name, min, max, def, blurb)  PROP_##name,
+-#define gegl_chant_float(name, min, max, def, blurb)   PROP_##name,
+-#define gegl_chant_boolean(name, def, blurb)           PROP_##name,
+ #define gegl_chant_string(name, def, blurb)            PROP_##name,
+-#define gegl_chant_object(name, blurb)                 PROP_##name,
+-#define gegl_chant_pointer(name, blurb)                PROP_##name,
+ 
+ #include GEGL_CHANT_SELF
+ 
+-#undef gegl_chant_int
+ #undef gegl_chant_double
+-#undef gegl_chant_float
+-#undef gegl_chant_boolean
+ #undef gegl_chant_string
+-#undef gegl_chant_object
+-#undef gegl_chant_pointer
+   PROP_LAST
+ };
+ 
+@@ -134,30 +114,15 @@ get_property (GObject      *gobject,
+ 
+   switch (property_id)
+   {
+-#define gegl_chant_int(name, min, max, def, blurb)\
+-    case PROP_##name: g_value_set_int (value, self->name);break;
+ #define gegl_chant_double(name, min, max, def, blurb)\
+     case PROP_##name: g_value_set_double (value, self->name);break;
+-#define gegl_chant_float(name, min, max, def, blurb)\
+-    case PROP_##name: g_value_set_float (value, self->name);break;
+-#define gegl_chant_boolean(name, def, blurb)\
+-    case PROP_##name: g_value_set_boolean (value, self->name);break;
+ #define gegl_chant_string(name, def, blurb)\
+     case PROP_##name: g_value_set_string (value, self->name);break;
+-#define gegl_chant_object(name, blurb)\
+-    case PROP_##name: g_value_set_object (value, self->name);break;
+-#define gegl_chant_pointer(name, blurb)\
+-    case PROP_##name: g_value_set_pointer (value, self->name);break;
+ 
+ #include GEGL_CHANT_SELF
+ 
+-#undef gegl_chant_int
+ #undef gegl_chant_double
+-#undef gegl_chant_float
+-#undef gegl_chant_boolean
+ #undef gegl_chant_string
+-#undef gegl_chant_object
+-#undef gegl_chant_pointer
+     default:
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+       break;
+@@ -175,48 +140,21 @@ set_property (GObject      *gobject,
+ 
+   switch (property_id)
+   {
+-#define gegl_chant_int(name, min, max, def, blurb)\
+-    case PROP_##name:\
+-      self->name = g_value_get_int (value);\
+-      break;
+ #define gegl_chant_double(name, min, max, def, blurb)\
+     case PROP_##name:\
+       self->name = g_value_get_double (value);\
+       break;
+-#define gegl_chant_float(name, min, max, def, blurb)\
+-    case PROP_##name:\
+-      self->name = g_value_get_float (value);\
+-      break;
+-#define gegl_chant_boolean(name, def, blurb)\
+-    case PROP_##name:\
+-      self->name = g_value_get_boolean (value);\
+-      break;
+ #define gegl_chant_string(name, def, blurb)\
+     case PROP_##name:\
+       if (self->name)\
+         g_free (self->name);\
+       self->name = g_strdup (g_value_get_string (value));\
+       break;
+-#define gegl_chant_object(name, blurb)\
+-    case PROP_##name:\
+-      if (self->name != NULL) \
+-         g_object_unref (self->name);\
+-      self->name = g_value_get_object (value);\
+-      break;
+-#define gegl_chant_pointer(name, blurb)\
+-    case PROP_##name:\
+-      self->name = g_value_get_pointer (value);\
+-      break;
+ 
+ #include GEGL_CHANT_SELF
+ 
+-#undef gegl_chant_int
+ #undef gegl_chant_double
+-#undef gegl_chant_float
+-#undef gegl_chant_boolean
+ #undef gegl_chant_string
+-#undef gegl_chant_object
+-#undef gegl_chant_pointer
+ 
+     default:
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec);
+@@ -229,31 +167,8 @@ static void gegl_chant_init (GeglChantOperation *self)
+ {
+ }
+ 
+-#ifdef GEGL_CHANT_INIT
+-static void init (GeglChantOperation *self);
+-
+-static GObject *
+-gegl_chant_constructor (GType                  type,
+-                   guint                  n_construct_properties,
+-                   GObjectConstructParam *construct_properties)
+-{
+-  GObject *obj;
+-
+-  obj = G_OBJECT_CLASS (gegl_chant_parent_class)->constructor (
+-            type, n_construct_properties, construct_properties);
+-
+-  init (GEGL_CHANT_OPERATION (obj));
+-
+-  return obj;
+-}
+-#endif
+-
+-#ifdef GEGL_CHANT_CLASS_INIT
+-static void class_init (GeglOperationClass *operation_class);
+-#endif
+-
+-static void create_matrix (OpTransform    *affine,
+-                           GeglMatrix3 *matrix);
++static void create_matrix (OpTransform  *transform,
++                           GeglMatrix3  *matrix);
+ 
+ static void
+ gegl_chant_class_init (ChantClass * klass)
+@@ -269,31 +184,15 @@ gegl_chant_class_init (ChantClass * klass)
+ 
+   parent_class->create_matrix = create_matrix;
+ 
+-#ifdef GEGL_CHANT_INIT
+-  object_class->constructor  = gegl_chant_constructor;
+-#endif
+-#ifdef GEGL_CHANT_CLASS_INIT
+-  class_init (operation_class);
+-#endif
+-
+-#if 1
+ #define M_GEGL_CHANT_SET_NAME_EXTENDED(nam) \
+   operation_class->name=g_strdup("gegl:"#nam);
+ #define M_GEGL_CHANT_SET_NAME(name)   M_GEGL_CHANT_SET_NAME_EXTENDED(name)
+   M_GEGL_CHANT_SET_NAME (GEGL_CHANT_NAME);
+-#endif
+ 
+ #ifdef GEGL_CHANT_DESCRIPTION
+   gegl_operation_class_set_key (operation_class, "description", GEGL_CHANT_DESCRIPTION);
+ #endif
+ 
+-#define gegl_chant_int(name, min, max, def, blurb)  \
+-  g_object_class_install_property (object_class, PROP_##name,\
+-                                   g_param_spec_int (#name, #name, blurb,\
+-                                                     min, max, def,\
+-                                                     G_PARAM_READWRITE |\
+-                                                     G_PARAM_CONSTRUCT |\
+-                                                     GEGL_PARAM_PAD_INPUT));
+ #define gegl_chant_double(name, min, max, def, blurb)  \
+   g_object_class_install_property (object_class, PROP_##name,\
+                                    g_param_spec_double (#name, #name, blurb,\
+@@ -301,20 +200,6 @@ gegl_chant_class_init (ChantClass * klass)
+                                                         G_PARAM_READWRITE |\
+                                                         G_PARAM_CONSTRUCT |\
+                                                         GEGL_PARAM_PAD_INPUT));
+-#define gegl_chant_float(name, min, max, def, blurb)  \
+-  g_object_class_install_property (object_class, PROP_##name,\
+-                                   g_param_spec_float (#name, #name, blurb,\
+-                                                        min, max, def,\
+-                                                        G_PARAM_READWRITE |\
+-                                                        G_PARAM_CONSTRUCT |\
+-                                                        GEGL_PARAM_PAD_INPUT));
+-#define gegl_chant_boolean(name, def, blurb)  \
+-  g_object_class_install_property (object_class, PROP_##name,\
+-                                   g_param_spec_boolean (#name, #name, blurb,\
+-                                                         def,\
+-                                                         G_PARAM_READWRITE |\
+-                                                         G_PARAM_CONSTRUCT |\
+-                                                         GEGL_PARAM_PAD_INPUT));
+ #define gegl_chant_string(name, def, blurb)  \
+   g_object_class_install_property (object_class, PROP_##name,\
+                                    g_param_spec_string (#name, #name, blurb,\
+@@ -322,28 +207,10 @@ gegl_chant_class_init (ChantClass * klass)
+                                                         G_PARAM_READWRITE |\
+                                                         G_PARAM_CONSTRUCT |\
+                                                         GEGL_PARAM_PAD_INPUT));
+-#define gegl_chant_object(name, blurb)  \
+-  g_object_class_install_property (object_class, PROP_##name,\
+-                                   g_param_spec_object (#name, #name, blurb,\
+-                                                        G_TYPE_OBJECT,\
+-                                                        G_PARAM_READWRITE |\
+-                                                        G_PARAM_CONSTRUCT |\
+-                                                        GEGL_PARAM_PAD_INPUT));
+-#define gegl_chant_pointer(name, blurb)  \
+-  g_object_class_install_property (object_class, PROP_##name,\
+-                                   g_param_spec_pointer (#name, #name, blurb,\
+-                                                        G_PARAM_READWRITE |\
+-                                                        G_PARAM_CONSTRUCT |\
+-                                                        GEGL_PARAM_PAD_INPUT));
+ #include GEGL_CHANT_SELF
+ 
+-#undef gegl_chant_int
+ #undef gegl_chant_double
+-#undef gegl_chant_float
+-#undef gegl_chant_boolean
+ #undef gegl_chant_string
+-#undef gegl_chant_object
+-#undef gegl_chant_pointer
+ }
+ 
+ /****************************************************************************/
+diff --git a/operations/transform/module.c b/operations/transform/module.c
+index 4ebf301..34976ac 100644
+--- operations/transform/module.c
++++ operations/transform/module.c
+@@ -21,16 +21,16 @@
+ #include "module.h"
+ #include "transform-core.h"
+ 
+-static GTypeModule          *affine_module;
++static GTypeModule          *transform_module;
+ static const GeglModuleInfo  modinfo =
+ {
+   GEGL_MODULE_ABI_VERSION
+ };
+ 
+ G_MODULE_EXPORT GTypeModule *
+-affine_module_get_module (void)
++transform_module_get_module (void)
+ {
+-  return affine_module;
++  return transform_module;
+ }
+ 
+ G_MODULE_EXPORT const GeglModuleInfo *
+@@ -39,22 +39,26 @@ gegl_module_query (GTypeModule *module)
+   return &modinfo;
+ }
+ 
+-GType rotate_get_type    (void);
+-GType scale_get_type     (void);
+-GType shear_get_type     (void);
+-GType translate_get_type (void);
+-GType reflect_get_type (void);
++GType rotate_get_type      (void);
++GType scale_get_type       (void);
++GType scaleratio_get_type  (void);
++GType scalesize_get_type   (void);
++GType shear_get_type       (void);
++GType translate_get_type   (void);
++GType reflect_get_type     (void);
+ GType transform_get_type   (void);
+ 
+ G_MODULE_EXPORT gboolean
+ gegl_module_register (GTypeModule *module)
+ {
+   GType dummy;
+-  affine_module = module;
++  transform_module = module;
+ 
+-  dummy = op_affine_get_type ();
++  dummy = op_transform_get_type ();
+   dummy = rotate_get_type ();
+   dummy = scale_get_type ();
++  dummy = scaleratio_get_type ();
++  dummy = scalesize_get_type ();
+   dummy = shear_get_type ();
+   dummy = translate_get_type ();
+   dummy = reflect_get_type ();
+diff --git a/operations/transform/module.h b/operations/transform/module.h
+index a29819f..797d827 100644
+--- operations/transform/module.h
++++ operations/transform/module.h
+@@ -1,12 +1,12 @@
+-#ifndef __AFFINE_MODULE_H__
+-#define __AFFINE_MODULE_H__
++#ifndef __TRANSFORM_MODULE_H__
++#define __TRANSFORM_MODULE_H__
+ 
+ G_BEGIN_DECLS
+ 
+ #include <glib-object.h>
+ #include <gegl-plugin.h>
+ 
+-G_MODULE_EXPORT GTypeModule          * affine_module_get_module (void);
++G_MODULE_EXPORT GTypeModule          * transform_module_get_module (void);
+ G_MODULE_EXPORT const GeglModuleInfo * gegl_module_query        (GTypeModule *module);
+ G_MODULE_EXPORT gboolean               gegl_module_register     (GTypeModule *module);
+ 
+diff --git a/operations/transform/scale-ratio.c b/operations/transform/scale-ratio.c
+new file mode 100644
+index 0000000..28d82d5
+--- /dev/null
++++ operations/transform/scale-ratio.c
+@@ -0,0 +1,49 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2006 Philip Lafleur
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_double (x, -G_MAXDOUBLE, G_MAXDOUBLE, 1.0,
++                   _("Horizontal scale factor"))
++gegl_chant_double (y, -G_MAXDOUBLE, G_MAXDOUBLE, 1.0,
++                   _("Vertical scale factor"))
++
++#else
++
++#define GEGL_CHANT_NAME scaleratio
++#define GEGL_CHANT_DESCRIPTION _("Scales the buffer according to a ratio.")
++#define GEGL_CHANT_SELF "scale-ratio.c"
++#include "chant.h"
++
++#include <math.h>
++
++static void
++create_matrix (OpTransform *op,
++               GeglMatrix3 *matrix)
++{
++  GeglChantOperation *chant = GEGL_CHANT_OPERATION (op);
++
++  matrix->coeff [0][0] = chant->x;
++  matrix->coeff [1][1] = chant->y;
++}
++
++#endif
+diff --git a/operations/transform/scale-size.c b/operations/transform/scale-size.c
+new file mode 100644
+index 0000000..a0395bd
+--- /dev/null
++++ operations/transform/scale-size.c
+@@ -0,0 +1,59 @@
++/* This file is part of GEGL
++ *
++ * GEGL is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * GEGL 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
++ *
++ * Copyright 2012 Michael Muré <batolettre at gmail.com>
++ */
++
++#include "config.h"
++#include <glib/gi18n-lib.h>
++
++
++#ifdef GEGL_CHANT_PROPERTIES
++
++gegl_chant_double (x, -G_MAXDOUBLE, G_MAXDOUBLE, 100.0,
++                   _("Horizontal size"))
++gegl_chant_double (y, -G_MAXDOUBLE, G_MAXDOUBLE, 100.0,
++                   _("Vertical size"))
++
++#else
++
++#define GEGL_CHANT_NAME scalesize
++#define GEGL_CHANT_DESCRIPTION _("Scales the buffer according to a size.")
++#define GEGL_CHANT_SELF "scale-size.c"
++#include "chant.h"
++
++#include <math.h>
++
++static void
++create_matrix (OpTransform *op,
++               GeglMatrix3 *matrix)
++{
++  GeglChantOperation *chant = GEGL_CHANT_OPERATION (op);
++  GeglOperation *operation  = GEGL_OPERATION (op);
++  GeglRectangle  in_rect = {0,0,0,0};
++
++  if (gegl_operation_source_get_bounding_box (operation, "input"))
++    in_rect = *gegl_operation_source_get_bounding_box (operation, "input");
++
++  if(in_rect.width < 1)
++    in_rect.width = 1;
++  if(in_rect.height < 1)
++    in_rect.height = 1;
++
++  matrix->coeff [0][0] = chant->x / (gdouble) in_rect.width;
++  matrix->coeff [1][1] = chant->y / (gdouble) in_rect.height;
++}
++
++#endif
+diff --git a/operations/transform/scale.c b/operations/transform/scale.c
+index acfe787..4aa064d 100644
+--- operations/transform/scale.c
++++ operations/transform/scale.c
+@@ -19,6 +19,9 @@
+ #include "config.h"
+ #include <glib/gi18n-lib.h>
+ 
++/*  This operation is deprecated and is to be removed with the next version of GEGL.
++ *  Use the scaleratio operation instead.
++ */
+ 
+ #ifdef GEGL_CHANT_PROPERTIES
+ 
+diff --git a/operations/transform/transform-core.c b/operations/transform/transform-core.c
+index ff927f4..c821e96 100644
+--- operations/transform/transform-core.c
++++ operations/transform/transform-core.c
+@@ -19,7 +19,9 @@
+  *           2010 Debarshi Ray
+  *           2011 Mikael Magnusson
+  *           2011 Massimo Valentini
++ *           2011 Adam Turcotte
+  *           2012 Kevin Cozens
++ *           2012 Nicolas Robidoux
+  */
+ 
+ /* TODO: only calculate pixels inside transformed polygon */
+@@ -41,8 +43,6 @@
+ #include "transform-core.h"
+ #include "module.h"
+ 
+-#include "buffer/gegl-buffer-cl-cache.h"
+-
+ enum
+ {
+   PROP_ORIGIN_X = 1,
+@@ -52,70 +52,70 @@ enum
+   PROP_LANCZOS_WIDTH
+ };
+ 
+-static void          gegl_affine_finalize                  (GObject              *object);
+-static void          gegl_affine_get_property              (GObject              *object,
+-                                                            guint                 prop_id,
+-                                                            GValue               *value,
+-                                                            GParamSpec           *pspec);
+-static void          gegl_affine_set_property              (GObject              *object,
+-                                                            guint                 prop_id,
+-                                                            const GValue         *value,
+-                                                            GParamSpec           *pspec);
+-static void          gegl_affine_bounding_box              (gdouble              *points,
+-                                                            gint                  num_points,
+-                                                            GeglRectangle        *output);
+-static gboolean      gegl_affine_is_intermediate_node      (OpTransform             *affine);
+-static gboolean      gegl_affine_is_composite_node         (OpTransform             *affine);
+-static void          gegl_affine_get_source_matrix         (OpTransform             *affine,
+-                                                            GeglMatrix3          *output);
+-static GeglRectangle gegl_affine_get_bounding_box          (GeglOperation        *op);
+-static GeglRectangle gegl_affine_get_invalidated_by_change (GeglOperation        *operation,
+-                                                            const gchar          *input_pad,
+-                                                            const GeglRectangle  *input_region);
+-static GeglRectangle gegl_affine_get_required_for_output   (GeglOperation        *self,
+-                                                            const gchar          *input_pad,
+-                                                            const GeglRectangle  *region);
+-static gboolean      gegl_affine_process                   (GeglOperation        *operation,
+-                                                            GeglOperationContext *context,
+-                                                            const gchar          *output_prop,
+-                                                            const GeglRectangle  *result,
+-                                                            gint                  level);
+-static GeglNode    * gegl_affine_detect                    (GeglOperation        *operation,
+-                                                            gint                  x,
+-                                                            gint                  y);
++static void          gegl_transform_finalize                  (GObject              *object);
++static void          gegl_transform_get_property              (GObject              *object,
++                                                               guint                 prop_id,
++                                                               GValue               *value,
++                                                               GParamSpec           *pspec);
++static void          gegl_transform_set_property              (GObject              *object,
++                                                               guint                 prop_id,
++                                                               const GValue         *value,
++                                                               GParamSpec           *pspec);
++static void          gegl_transform_bounding_box              (gdouble              *points,
++                                                               gint                  num_points,
++                                                               GeglRectangle        *output);
++static gboolean      gegl_transform_is_intermediate_node      (OpTransform          *transform);
++static gboolean      gegl_transform_is_composite_node         (OpTransform          *transform);
++static void          gegl_transform_get_source_matrix         (OpTransform          *transform,
++                                                               GeglMatrix3          *output);
++static GeglRectangle gegl_transform_get_bounding_box          (GeglOperation        *op);
++static GeglRectangle gegl_transform_get_invalidated_by_change (GeglOperation        *operation,
++                                                               const gchar          *input_pad,
++                                                               const GeglRectangle  *input_region);
++static GeglRectangle gegl_transform_get_required_for_output   (GeglOperation        *self,
++                                                               const gchar          *input_pad,
++                                                               const GeglRectangle  *region);
++static gboolean      gegl_transform_process                   (GeglOperation        *operation,
++                                                               GeglOperationContext *context,
++                                                               const gchar          *output_prop,
++                                                               const GeglRectangle  *result,
++                                                               gint                  level);
++static GeglNode    * gegl_transform_detect                    (GeglOperation        *operation,
++                                                               gint                  x,
++                                                               gint                  y);
+ 
+ static gboolean      gegl_matrix3_is_affine                        (GeglMatrix3 *matrix);
+-static gboolean      gegl_affine_matrix3_allow_fast_translate      (GeglMatrix3 *matrix);
+-static gboolean      gegl_affine_matrix3_allow_fast_reflect_x      (GeglMatrix3 *matrix);
+-static gboolean      gegl_affine_matrix3_allow_fast_reflect_y      (GeglMatrix3 *matrix);
+-
+-static void          gegl_affine_fast_reflect_x            (GeglBuffer           *dest,
+-                                                            GeglBuffer           *src,
+-                                                            const GeglRectangle  *dest_rect,
+-                                                            const GeglRectangle  *src_rect,
+-                                                            gint                  level);
+-static void          gegl_affine_fast_reflect_y            (GeglBuffer           *dest,
+-                                                            GeglBuffer           *src,
+-                                                            const GeglRectangle  *dest_rect,
+-                                                            const GeglRectangle  *src_rect,
+-                                                            gint                  level);
++static gboolean      gegl_transform_matrix3_allow_fast_translate      (GeglMatrix3 *matrix);
++static gboolean      gegl_transform_matrix3_allow_fast_reflect_x      (GeglMatrix3 *matrix);
++static gboolean      gegl_transform_matrix3_allow_fast_reflect_y      (GeglMatrix3 *matrix);
++
++static void          gegl_transform_fast_reflect_x            (GeglBuffer           *dest,
++                                                               GeglBuffer           *src,
++                                                               const GeglRectangle  *dest_rect,
++                                                               const GeglRectangle  *src_rect,
++                                                               gint                  level);
++static void          gegl_transform_fast_reflect_y            (GeglBuffer           *dest,
++                                                               GeglBuffer           *src,
++                                                               const GeglRectangle  *dest_rect,
++                                                               const GeglRectangle  *src_rect,
++                                                               gint                  level);
+ 
+ 
+ /* ************************* */
+ 
+-static void     op_affine_init          (OpTransform      *self);
+-static void     op_affine_class_init    (OpTransformClass *klass);
+-static gpointer op_affine_parent_class = NULL;
++static void     op_transform_init          (OpTransform      *self);
++static void     op_transform_class_init    (OpTransformClass *klass);
++static gpointer op_transform_parent_class = NULL;
+ 
+ static void
+-op_affine_class_intern_init (gpointer klass)
++op_transform_class_intern_init (gpointer klass)
+ {
+-  op_affine_parent_class = g_type_class_peek_parent (klass);
+-  op_affine_class_init ((OpTransformClass *) klass);
++  op_transform_parent_class = g_type_class_peek_parent (klass);
++  op_transform_class_init ((OpTransformClass *) klass);
+ }
+ 
+ GType
+-op_affine_get_type (void)
++op_transform_get_type (void)
+ {
+   static GType g_define_type_id = 0;
+   if (G_UNLIKELY (g_define_type_id == 0))
+@@ -125,19 +125,19 @@ op_affine_get_type (void)
+           sizeof (OpTransformClass),
+           (GBaseInitFunc) NULL,
+           (GBaseFinalizeFunc) NULL,
+-          (GClassInitFunc) op_affine_class_intern_init,
++          (GClassInitFunc) op_transform_class_intern_init,
+           (GClassFinalizeFunc) NULL,
+           NULL,   /* class_data */
+           sizeof (OpTransform),
+           0,      /* n_preallocs */
+-          (GInstanceInitFunc) op_affine_init,
++          (GInstanceInitFunc) op_transform_init,
+           NULL    /* value_table */
+         };
+ 
+       g_define_type_id =
+-        gegl_module_register_type (affine_module_get_module (),
++        gegl_module_register_type (transform_module_get_module (),
+                                    GEGL_TYPE_OPERATION_FILTER,
+-                                   "GeglOpPlugIn-affine",
++                                   "GeglOpPlugIn-transform-core",
+                                    &g_define_type_info, 0);
+     }
+   return g_define_type_id;
+@@ -166,7 +166,7 @@ op_affine_sampler_init (OpTransform *self)
+ #endif
+ 
+ static void
+-gegl_affine_prepare (GeglOperation *operation)
++gegl_transform_prepare (GeglOperation *operation)
+ {
+   const Babl *format = babl_format ("RaGaBaA float");
+   gegl_operation_set_format (operation, "input", format);
+@@ -174,21 +174,22 @@ gegl_affine_prepare (GeglOperation *operation)
+ }
+ 
+ static void
+-op_affine_class_init (OpTransformClass *klass)
++op_transform_class_init (OpTransformClass *klass)
+ {
+   GObjectClass         *gobject_class = G_OBJECT_CLASS (klass);
+   GeglOperationClass   *op_class      = GEGL_OPERATION_CLASS (klass);
+ 
+-  gobject_class->set_property         = gegl_affine_set_property;
+-  gobject_class->get_property         = gegl_affine_get_property;
+-  gobject_class->finalize             = gegl_affine_finalize;
+-
+-  op_class->get_invalidated_by_change = gegl_affine_get_invalidated_by_change;
+-  op_class->get_bounding_box          = gegl_affine_get_bounding_box;
+-  op_class->get_required_for_output   = gegl_affine_get_required_for_output;
+-  op_class->detect                    = gegl_affine_detect;
+-  op_class->process                   = gegl_affine_process;
+-  op_class->prepare                   = gegl_affine_prepare;
++  gobject_class->set_property         = gegl_transform_set_property;
++  gobject_class->get_property         = gegl_transform_get_property;
++  gobject_class->finalize             = gegl_transform_finalize;
++
++  op_class->get_invalidated_by_change =
++    gegl_transform_get_invalidated_by_change;
++  op_class->get_bounding_box          = gegl_transform_get_bounding_box;
++  op_class->get_required_for_output   = gegl_transform_get_required_for_output;
++  op_class->detect                    = gegl_transform_detect;
++  op_class->process                   = gegl_transform_process;
++  op_class->prepare                   = gegl_transform_prepare;
+   op_class->no_cache                  = TRUE;
+ 
+   klass->create_matrix = NULL;
+@@ -235,24 +236,24 @@ op_affine_class_init (OpTransformClass *klass)
+ }
+ 
+ static void
+-gegl_affine_finalize (GObject *object)
++gegl_transform_finalize (GObject *object)
+ {
+-  g_free (OP_AFFINE (object)->filter);
+-  G_OBJECT_CLASS (op_affine_parent_class)->finalize (object);
++  g_free (OP_TRANSFORM (object)->filter);
++  G_OBJECT_CLASS (op_transform_parent_class)->finalize (object);
+ }
+ 
+ static void
+-op_affine_init (OpTransform *self)
++op_transform_init (OpTransform *self)
+ {
+ }
+ 
+ static void
+-gegl_affine_get_property (GObject    *object,
+-                          guint       prop_id,
+-                          GValue     *value,
+-                          GParamSpec *pspec)
++gegl_transform_get_property (GObject    *object,
++                             guint       prop_id,
++                             GValue     *value,
++                             GParamSpec *pspec)
+ {
+-  OpTransform *self = OP_AFFINE (object);
++  OpTransform *self = OP_TRANSFORM (object);
+ 
+   switch (prop_id)
+     {
+@@ -278,12 +279,12 @@ gegl_affine_get_property (GObject    *object,
+ }
+ 
+ static void
+-gegl_affine_set_property (GObject      *object,
+-                          guint         prop_id,
+-                          const GValue *value,
+-                          GParamSpec   *pspec)
++gegl_transform_set_property (GObject      *object,
++                             guint         prop_id,
++                             const GValue *value,
++                             GParamSpec   *pspec)
+ {
+-  OpTransform *self = OP_AFFINE (object);
++  OpTransform *self = OP_TRANSFORM (object);
+ 
+   switch (prop_id)
+     {
+@@ -310,37 +311,37 @@ gegl_affine_set_property (GObject      *object,
+ }
+ 
+ static void
+-gegl_affine_create_matrix (OpTransform    *affine,
+-                           GeglMatrix3 *matrix)
++gegl_transform_create_matrix (OpTransform  *transform,
++                              GeglMatrix3  *matrix)
+ {
+   gegl_matrix3_identity (matrix);
+ 
+-  if (OP_AFFINE_GET_CLASS (affine))
+-    OP_AFFINE_GET_CLASS (affine)->create_matrix (affine, matrix);
++  if (OP_TRANSFORM_GET_CLASS (transform))
++    OP_TRANSFORM_GET_CLASS (transform)->create_matrix (transform, matrix);
+ }
+ 
+ static void
+-gegl_affine_create_composite_matrix (OpTransform    *affine,
+-                                     GeglMatrix3 *matrix)
++gegl_transform_create_composite_matrix (OpTransform    *transform,
++                                        GeglMatrix3 *matrix)
+ {
+-  gegl_affine_create_matrix (affine, matrix);
++  gegl_transform_create_matrix (transform, matrix);
+ 
+-  if (affine->origin_x || affine->origin_y)
+-    gegl_matrix3_originate (matrix, affine->origin_x, affine->origin_y);
++  if (transform->origin_x || transform->origin_y)
++    gegl_matrix3_originate (matrix, transform->origin_x, transform->origin_y);
+ 
+-  if (gegl_affine_is_composite_node (affine))
++  if (gegl_transform_is_composite_node (transform))
+     {
+       GeglMatrix3 source;
+ 
+-      gegl_affine_get_source_matrix (affine, &source);
++      gegl_transform_get_source_matrix (transform, &source);
+       gegl_matrix3_multiply (matrix, &source, matrix);
+     }
+ }
+ 
+ static void
+-gegl_affine_bounding_box (gdouble       *points,
+-                          gint           num_points,
+-                          GeglRectangle *output)
++gegl_transform_bounding_box (gdouble       *points,
++                             gint           num_points,
++                             GeglRectangle *output)
+ {
+   gint    i;
+   gdouble min_x,
+@@ -377,10 +378,10 @@ gegl_affine_bounding_box (gdouble       *points,
+ }
+ 
+ static gboolean
+-gegl_affine_is_intermediate_node (OpTransform *affine)
++gegl_transform_is_intermediate_node (OpTransform *transform)
+ {
+   GSList        *connections;
+-  GeglOperation *op = GEGL_OPERATION (affine);
++  GeglOperation *op = GEGL_OPERATION (transform);
+ 
+   connections = gegl_pad_get_connections (gegl_node_get_pad (op->node,
+                                                              "output"));
+@@ -393,8 +394,8 @@ gegl_affine_is_intermediate_node (OpTransform *affine)
+ 
+       sink = gegl_connection_get_sink_node (connections->data)->operation;
+ 
+-      if (! IS_OP_AFFINE (sink) ||
+-          strcmp (affine->filter, OP_AFFINE (sink)->filter))
++      if (! IS_OP_TRANSFORM (sink) ||
++          strcmp (transform->filter, OP_TRANSFORM (sink)->filter))
+         return FALSE;
+     }
+   while ((connections = g_slist_next (connections)));
+@@ -403,10 +404,10 @@ gegl_affine_is_intermediate_node (OpTransform *affine)
+ }
+ 
+ static gboolean
+-gegl_affine_is_composite_node (OpTransform *affine)
++gegl_transform_is_composite_node (OpTransform *transform)
+ {
+   GSList        *connections;
+-  GeglOperation *op = GEGL_OPERATION (affine);
++  GeglOperation *op = GEGL_OPERATION (transform);
+   GeglOperation *source;
+ 
+   connections = gegl_pad_get_connections (gegl_node_get_pad (op->node,
+@@ -416,16 +417,16 @@ gegl_affine_is_composite_node (OpTransform *affine)
+ 
+   source = gegl_connection_get_source_node (connections->data)->operation;
+ 
+-  return (IS_OP_AFFINE (source) &&
+-          ! strcmp (affine->filter, OP_AFFINE (source)->filter));
++  return (IS_OP_TRANSFORM (source) &&
++          ! strcmp (transform->filter, OP_TRANSFORM (source)->filter));
+ }
+ 
+ static void
+-gegl_affine_get_source_matrix (OpTransform    *affine,
+-                               GeglMatrix3 *output)
++gegl_transform_get_source_matrix (OpTransform    *transform,
++                                  GeglMatrix3 *output)
+ {
+   GSList        *connections;
+-  GeglOperation *op = GEGL_OPERATION (affine);
++  GeglOperation *op = GEGL_OPERATION (transform);
+   GeglOperation *source;
+ 
+   connections = gegl_pad_get_connections (gegl_node_get_pad (op->node,
+@@ -433,16 +434,16 @@ gegl_affine_get_source_matrix (OpTransform    *affine,
+   g_assert (connections);
+ 
+   source = gegl_connection_get_source_node (connections->data)->operation;
+-  g_assert (IS_OP_AFFINE (source));
++  g_assert (IS_OP_TRANSFORM (source));
+ 
+-  gegl_affine_create_composite_matrix (OP_AFFINE (source), output);
+-  /*gegl_matrix3_copy (output, OP_AFFINE (source)->matrix);*/
++  gegl_transform_create_composite_matrix (OP_TRANSFORM (source), output);
++  /*gegl_matrix3_copy (output, OP_TRANSFORM (source)->matrix);*/
+ }
+ 
+ static GeglRectangle
+-gegl_affine_get_bounding_box (GeglOperation *op)
++gegl_transform_get_bounding_box (GeglOperation *op)
+ {
+-  OpTransform      *affine  = OP_AFFINE (op);
++  OpTransform      *transform  = OP_TRANSFORM (op);
+   GeglMatrix3    matrix;
+   GeglRectangle  in_rect = {0,0,0,0},
+                  have_rect;
+@@ -453,22 +454,22 @@ gegl_affine_get_bounding_box (GeglOperation *op)
+   GeglSampler   *sampler;
+ 
+   sampler = gegl_buffer_sampler_new (NULL, babl_format("RaGaBaA float"),
+-      gegl_sampler_type_from_string (affine->filter));
++      gegl_sampler_type_from_string (transform->filter));
+   context_rect = *gegl_sampler_get_context_rect (sampler);
+   g_object_unref (sampler);
+ 
+   if (gegl_operation_source_get_bounding_box (op, "input"))
+     in_rect = *gegl_operation_source_get_bounding_box (op, "input");
+ 
+-  gegl_affine_create_composite_matrix (affine, &matrix);
++  gegl_transform_create_composite_matrix (transform, &matrix);
+ 
+-  if (gegl_affine_is_intermediate_node (affine) ||
++  if (gegl_transform_is_intermediate_node (transform) ||
+       gegl_matrix3_is_identity (&matrix))
+     {
+       return in_rect;
+     }
+ 
+-  if (!gegl_affine_matrix3_allow_fast_translate (&matrix))
++  if (!gegl_transform_matrix3_allow_fast_translate (&matrix))
+     {
+       in_rect.x      += context_rect.x;
+       in_rect.y      += context_rect.y;
+@@ -492,22 +493,23 @@ gegl_affine_get_bounding_box (GeglOperation *op)
+     gegl_matrix3_transform_point (&matrix,
+                              have_points + i, have_points + i + 1);
+ 
+-  gegl_affine_bounding_box (have_points, 4, &have_rect);
++  gegl_transform_bounding_box (have_points, 4, &have_rect);
+   return have_rect;
+ }
+ 
+ static GeglNode *
+-gegl_affine_detect (GeglOperation *operation,
+-                    gint           x,
+-                    gint           y)
++gegl_transform_detect (GeglOperation *operation,
++                       gint           x,
++                       gint           y)
+ {
+-  OpTransform    *affine      = OP_AFFINE (operation);
+-  GeglNode    *source_node = gegl_operation_get_source_node (operation, "input");
++  OpTransform *transform = OP_TRANSFORM (operation);
++  GeglNode    *source_node =
++    gegl_operation_get_source_node (operation, "input");
+   GeglMatrix3  inverse;
+   gdouble      need_points [2];
+   gint         i;
+ 
+-  if (gegl_affine_is_intermediate_node (affine) ||
++  if (gegl_transform_is_intermediate_node (transform) ||
+       gegl_matrix3_is_identity (&inverse))
+     {
+       return gegl_operation_detect (source_node->operation, x, y);
+@@ -516,23 +518,23 @@ gegl_affine_detect (GeglOperation *operation,
+   need_points [0] = x;
+   need_points [1] = y;
+ 
+-  gegl_affine_create_matrix (affine, &inverse);
++  gegl_transform_create_matrix (transform, &inverse);
+   gegl_matrix3_invert (&inverse);
+ 
+   for (i = 0; i < 2; i += 2)
+     gegl_matrix3_transform_point (&inverse,
+-                             need_points + i, need_points + i + 1);
++                                  need_points + i, need_points + i + 1);
+ 
+   return gegl_operation_detect (source_node->operation,
+                                 need_points[0], need_points[1]);
+ }
+ 
+ static GeglRectangle
+-gegl_affine_get_required_for_output (GeglOperation       *op,
+-                                     const gchar         *input_pad,
+-                                     const GeglRectangle *region)
++gegl_transform_get_required_for_output (GeglOperation       *op,
++                                        const gchar         *input_pad,
++                                        const GeglRectangle *region)
+ {
+-  OpTransform      *affine = OP_AFFINE (op);
++  OpTransform   *transform = OP_TRANSFORM (op);
+   GeglMatrix3    inverse;
+   GeglRectangle  requested_rect,
+                  need_rect;
+@@ -543,14 +545,14 @@ gegl_affine_get_required_for_output (GeglOperation       *op,
+ 
+   requested_rect = *region;
+   sampler = gegl_buffer_sampler_new (NULL, babl_format("RaGaBaA float"),
+-      gegl_sampler_type_from_string (affine->filter));
++      gegl_sampler_type_from_string (transform->filter));
+   context_rect = *gegl_sampler_get_context_rect (sampler);
+   g_object_unref (sampler);
+ 
+-  gegl_affine_create_composite_matrix (affine, &inverse);
++  gegl_transform_create_composite_matrix (transform, &inverse);
+   gegl_matrix3_invert (&inverse);
+ 
+-  if (gegl_affine_is_intermediate_node (affine) ||
++  if (gegl_transform_is_intermediate_node (transform) ||
+       gegl_matrix3_is_identity (&inverse))
+     {
+       return requested_rect;
+@@ -570,8 +572,8 @@ gegl_affine_get_required_for_output (GeglOperation       *op,
+ 
+   for (i = 0; i < 8; i += 2)
+     gegl_matrix3_transform_point (&inverse,
+-                             need_points + i, need_points + i + 1);
+-  gegl_affine_bounding_box (need_points, 4, &need_rect);
++                                  need_points + i, need_points + i + 1);
++  gegl_transform_bounding_box (need_points, 4, &need_rect);
+ 
+   need_rect.x      += context_rect.x;
+   need_rect.y      += context_rect.y;
+@@ -581,11 +583,11 @@ gegl_affine_get_required_for_output (GeglOperation       *op,
+ }
+ 
+ static GeglRectangle
+-gegl_affine_get_invalidated_by_change (GeglOperation       *op,
+-                                       const gchar         *input_pad,
+-                                       const GeglRectangle *input_region)
++gegl_transform_get_invalidated_by_change (GeglOperation       *op,
++                                          const gchar         *input_pad,
++                                          const GeglRectangle *input_region)
+ {
+-  OpTransform          *affine = OP_AFFINE (op);
++  OpTransform       *transform = OP_TRANSFORM (op);
+   GeglMatrix3        matrix;
+   GeglRectangle      affected_rect;
+   GeglRectangle      context_rect;
+@@ -595,24 +597,24 @@ gegl_affine_get_invalidated_by_change (GeglOperation       *op,
+   GeglRectangle      region = *input_region;
+ 
+   sampler = gegl_buffer_sampler_new (NULL, babl_format("RaGaBaA float"),
+-      gegl_sampler_type_from_string (affine->filter));
++      gegl_sampler_type_from_string (transform->filter));
+   context_rect = *gegl_sampler_get_context_rect (sampler);
+   g_object_unref (sampler);
+ 
+-  gegl_affine_create_matrix (affine, &matrix);
++  gegl_transform_create_matrix (transform, &matrix);
+ 
+-  if (affine->origin_x || affine->origin_y)
+-    gegl_matrix3_originate (&matrix, affine->origin_x, affine->origin_y);
++  if (transform->origin_x || transform->origin_y)
++    gegl_matrix3_originate (&matrix, transform->origin_x, transform->origin_y);
+ 
+-  if (gegl_affine_is_composite_node (affine))
++  if (gegl_transform_is_composite_node (transform))
+     {
+       GeglMatrix3 source;
+ 
+-      gegl_affine_get_source_matrix (affine, &source);
++      gegl_transform_get_source_matrix (transform, &source);
+       gegl_matrix3_multiply (&matrix, &source, &matrix);
+     }
+ 
+-  if (gegl_affine_is_intermediate_node (affine) ||
++  if (gegl_transform_is_intermediate_node (transform) ||
+       gegl_matrix3_is_identity (&matrix))
+     {
+       return region;
+@@ -639,30 +641,31 @@ gegl_affine_get_invalidated_by_change (GeglOperation       *op,
+     gegl_matrix3_transform_point (&matrix,
+                              affected_points + i, affected_points + i + 1);
+ 
+-  gegl_affine_bounding_box (affected_points, 4, &affected_rect);
++  gegl_transform_bounding_box (affected_points, 4, &affected_rect);
+   return affected_rect;
+ }
+ 
+ static void
+-affine_affine (GeglBuffer  *dest,
+-               GeglBuffer  *src,
+-               GeglMatrix3 *matrix,
+-               GeglSampler *sampler,
+-               gint         level)
++transform_affine (GeglBuffer  *dest,
++                  GeglBuffer  *src,
++                  GeglMatrix3 *matrix,
++                  GeglSampler *sampler,
++                  gint         level)
+ {
+-  GeglBufferIterator *i;
++  GeglBufferIterator  *i;
+   const GeglRectangle *dest_extent;
+-  gint                  x, y;
+-  gfloat * restrict     dest_buf,
+-                       *dest_ptr;
+-  GeglMatrix3           inverse;
+-  GeglMatrix2           inverse_jacobian;
+-  gdouble               u_start,
+-                        v_start,
+-                        w_start,
+-                        u_float,
+-                        v_float,
+-                        w_float;
++  gint                 x,
++                       y;
++  gfloat * restrict    dest_buf,
++                      *dest_ptr;
++  GeglMatrix3          inverse;
++  GeglMatrix2          inverse_jacobian;
++  gdouble              u_start,
++                       v_start,
++                       w_start,
++                       u_float,
++                       v_float,
++                       w_float;
+ 
+   const Babl           *format;
+ 
+@@ -670,7 +673,7 @@ affine_affine (GeglBuffer  *dest,
+ 
+   format = babl_format ("RaGaBaA float");
+ 
+-  /* XXX: fast paths as existing in files in the same dir as affine.c
++  /* XXX: fast paths as existing in files in the same dir as transform.c
+    *      should probably be hooked in here, and bailing out before using
+    *      the generic code.
+    */
+@@ -678,7 +681,12 @@ affine_affine (GeglBuffer  *dest,
+   dest_extent = gegl_buffer_get_extent (dest);
+ 
+ 
+-  i = gegl_buffer_iterator_new (dest, dest_extent, level, format, GEGL_BUFFER_WRITE, GEGL_ABYSS_NONE);
++  i = gegl_buffer_iterator_new (dest,
++                                dest_extent,
++                                level,
++                                format,
++                                GEGL_BUFFER_WRITE,
++                                GEGL_ABYSS_NONE);
+   while (gegl_buffer_iterator_next (i))
+     {
+       GeglRectangle *roi = &i->roi[0];
+@@ -686,20 +694,22 @@ affine_affine (GeglBuffer  *dest,
+ 
+       gegl_matrix3_copy_into (&inverse, matrix);
+       gegl_matrix3_invert (&inverse);
++
+       /* set inverse_jacobian for samplers that support it */
+       inverse_jacobian.coeff[0][0] = inverse.coeff[0][0];
+       inverse_jacobian.coeff[0][1] = inverse.coeff[0][1];
+       inverse_jacobian.coeff[1][0] = inverse.coeff[1][0];
+       inverse_jacobian.coeff[1][1] = inverse.coeff[1][1];
+ 
+-      u_start = inverse.coeff[0][0] * roi->x + inverse.coeff[0][1] * roi->y + inverse.coeff[0][2];
+-      v_start = inverse.coeff[1][0] * roi->x + inverse.coeff[1][1] * roi->y + inverse.coeff[1][2];
+-      w_start = inverse.coeff[2][0] * roi->x + inverse.coeff[2][1] * roi->y + inverse.coeff[2][2];
+-
+-      /* correct rounding on e.g. negative scaling (is this sound?) */
+-      if (inverse.coeff [0][0] < 0.)  u_start -= .001;
+-      if (inverse.coeff [1][1] < 0.)  v_start -= .001;
+-      if (inverse.coeff [2][2] < 0.)  w_start -= .001;
++      u_start = inverse.coeff[0][0] * (roi->x + (gdouble) 0.5) +
++                inverse.coeff[0][1] * (roi->y + (gdouble) 0.5) +
++                inverse.coeff[0][2];
++      v_start = inverse.coeff[1][0] * (roi->x + (gdouble) 0.5) +
++                inverse.coeff[1][1] * (roi->y + (gdouble) 0.5) +
++                inverse.coeff[1][2];
++      w_start = inverse.coeff[2][0] * (roi->x + (gdouble) 0.5) +
++                inverse.coeff[2][1] * (roi->y + (gdouble) 0.5) +
++                inverse.coeff[2][2];
+ 
+       for (dest_ptr = dest_buf, y = roi->height; y--;)
+         {
+@@ -709,7 +719,12 @@ affine_affine (GeglBuffer  *dest,
+ 
+           for (x = roi->width; x--;)
+             {
+-              gegl_sampler_get (sampler, u_float/w_float, v_float/w_float, &inverse_jacobian, dest_ptr);
++              gegl_sampler_get (sampler,
++                                u_float/w_float,
++                                v_float/w_float,
++                                &inverse_jacobian,
++                                dest_ptr,
++                                GEGL_ABYSS_NONE);
+               dest_ptr+=4;
+               u_float += inverse.coeff [0][0];
+               v_float += inverse.coeff [1][0];
+@@ -724,24 +739,25 @@ affine_affine (GeglBuffer  *dest,
+ }
+ 
+ static void
+-affine_generic (GeglBuffer  *dest,
+-                GeglBuffer  *src,
+-                GeglMatrix3 *matrix,
+-                GeglSampler *sampler,
+-                gint         level)
++transform_generic (GeglBuffer  *dest,
++                   GeglBuffer  *src,
++                   GeglMatrix3 *matrix,
++                   GeglSampler *sampler,
++                   gint         level)
+ {
+-  GeglBufferIterator *i;
++  GeglBufferIterator  *i;
+   const GeglRectangle *dest_extent;
+-  gint                  x, y;
+-  gfloat * restrict     dest_buf,
+-                       *dest_ptr;
+-  GeglMatrix3           inverse;
+-  gdouble               u_start,
+-                        v_start,
+-                        w_start,
+-                        u_float,
+-                        v_float,
+-                        w_float;
++  gint                 x,
++                       y;
++  gfloat * restrict    dest_buf,
++                      *dest_ptr;
++  GeglMatrix3          inverse;
++  gdouble              u_start,
++                       v_start,
++                       w_start,
++                       u_float,
++                       v_float,
++                       w_float;
+ 
+   const Babl           *format;
+ 
+@@ -749,7 +765,7 @@ affine_generic (GeglBuffer  *dest,
+ 
+   format = babl_format ("RaGaBaA float");
+ 
+-  /* XXX: fast paths as existing in files in the same dir as affine.c
++  /* XXX: fast paths as existing in files in the same dir as transform.c
+    *      should probably be hooked in here, and bailing out before using
+    *      the generic code.
+    */
+@@ -757,7 +773,12 @@ affine_generic (GeglBuffer  *dest,
+   dest_extent = gegl_buffer_get_extent (dest);
+ 
+ 
+-  i = gegl_buffer_iterator_new (dest, dest_extent, level, format, GEGL_BUFFER_WRITE, GEGL_ABYSS_NONE);
++  i = gegl_buffer_iterator_new (dest,
++                                dest_extent,
++                                level,
++                                format,
++                                GEGL_BUFFER_WRITE,
++                                GEGL_ABYSS_NONE);
+   while (gegl_buffer_iterator_next (i))
+     {
+       GeglRectangle *roi = &i->roi[0];
+@@ -766,14 +787,15 @@ affine_generic (GeglBuffer  *dest,
+       gegl_matrix3_copy_into (&inverse, matrix);
+       gegl_matrix3_invert (&inverse);
+ 
+-      u_start = inverse.coeff[0][0] * roi->x + inverse.coeff[0][1] * roi->y + inverse.coeff[0][2];
+-      v_start = inverse.coeff[1][0] * roi->x + inverse.coeff[1][1] * roi->y + inverse.coeff[1][2];
+-      w_start = inverse.coeff[2][0] * roi->x + inverse.coeff[2][1] * roi->y + inverse.coeff[2][2];
+-
+-      /* correct rounding on e.g. negative scaling (is this sound?) */
+-      if (inverse.coeff [0][0] < 0.)  u_start -= .001;
+-      if (inverse.coeff [1][1] < 0.)  v_start -= .001;
+-      if (inverse.coeff [2][2] < 0.)  w_start -= .001;
++      u_start = inverse.coeff[0][0] * (roi->x + (gdouble) 0.5) +
++                inverse.coeff[0][1] * (roi->y + (gdouble) 0.5) +
++                inverse.coeff[0][2];
++      v_start = inverse.coeff[1][0] * (roi->x + (gdouble) 0.5)  +
++                inverse.coeff[1][1] * (roi->y + (gdouble) 0.5)  +
++                inverse.coeff[1][2];
++      w_start = inverse.coeff[2][0] * (roi->x + (gdouble) 0.5)  +
++                inverse.coeff[2][1] * (roi->y + (gdouble) 0.5)  +
++                inverse.coeff[2][2];
+ 
+       for (dest_ptr = dest_buf, y = roi->height; y--;)
+         {
+@@ -784,15 +806,25 @@ affine_generic (GeglBuffer  *dest,
+           for (x = roi->width; x--;)
+             {
+               GeglMatrix2 inverse_jacobian;
+-              float u = u_float / w_float;
+-              float v = v_float / w_float;
+-
+-              inverse_jacobian.coeff[0][0]= (u_float + inverse.coeff[0][0] ) / (w_float + inverse.coeff[2][0]) - u;
+-              inverse_jacobian.coeff[0][1]= (u_float + inverse.coeff[0][1] ) / (w_float + inverse.coeff[2][1]) - u;
+-              inverse_jacobian.coeff[1][0]= (v_float + inverse.coeff[1][0] ) / (w_float + inverse.coeff[2][0]) - v;
+-              inverse_jacobian.coeff[1][1]= (v_float + inverse.coeff[1][1] ) / (w_float + inverse.coeff[2][1]) - v;
+-
+-              gegl_sampler_get (sampler, u, v, &inverse_jacobian, dest_ptr);
++              gdouble w_recip = 1.0 / w_float;
++              gdouble u = u_float * w_recip;
++              gdouble v = v_float * w_recip;
++
++              inverse_jacobian.coeff[0][0] =
++                (inverse.coeff[0][0] - inverse.coeff[2][0] * u) * w_recip;
++              inverse_jacobian.coeff[0][1] =
++                (inverse.coeff[0][1] - inverse.coeff[2][1] * u) * w_recip;
++              inverse_jacobian.coeff[1][0] =
++                (inverse.coeff[1][0] - inverse.coeff[2][0] * v) * w_recip;
++              inverse_jacobian.coeff[1][1] =
++                (inverse.coeff[1][1] - inverse.coeff[2][1] * v) * w_recip;
++
++              gegl_sampler_get (sampler,
++                                u,
++                                v,
++                                &inverse_jacobian,
++                                dest_ptr,
++                                GEGL_ABYSS_NONE);
+               dest_ptr+=4;
+ 
+               u_float += inverse.coeff [0][0];
+@@ -824,7 +856,7 @@ static gboolean gegl_matrix3_is_affine (GeglMatrix3 *matrix)
+ }
+ 
+ static gboolean
+-gegl_affine_matrix3_allow_fast_translate (GeglMatrix3 *matrix)
++gegl_transform_matrix3_allow_fast_translate (GeglMatrix3 *matrix)
+ {
+   if (! GEGL_FLOAT_EQUAL (matrix->coeff[0][2], (gint) matrix->coeff[0][2]) ||
+       ! GEGL_FLOAT_EQUAL (matrix->coeff[1][2], (gint) matrix->coeff[1][2]))
+@@ -833,7 +865,7 @@ gegl_affine_matrix3_allow_fast_translate (GeglMatrix3 *matrix)
+ }
+ 
+ static gboolean
+-gegl_affine_matrix3_allow_fast_reflect_x (GeglMatrix3 *matrix)
++gegl_transform_matrix3_allow_fast_reflect_x (GeglMatrix3 *matrix)
+ {
+   GeglMatrix3 copy;
+ 
+@@ -841,11 +873,11 @@ gegl_affine_matrix3_allow_fast_reflect_x (GeglMatrix3 *matrix)
+     return FALSE;
+   gegl_matrix3_copy_into (&copy, matrix);
+   copy.coeff[1][1] = 1.;
+-  return gegl_affine_matrix3_allow_fast_translate (&copy);
++  return gegl_transform_matrix3_allow_fast_translate (&copy);
+ }
+ 
+ static gboolean
+-gegl_affine_matrix3_allow_fast_reflect_y (GeglMatrix3 *matrix)
++gegl_transform_matrix3_allow_fast_reflect_y (GeglMatrix3 *matrix)
+ {
+   GeglMatrix3 copy;
+ 
+@@ -853,23 +885,29 @@ gegl_affine_matrix3_allow_fast_reflect_y (GeglMatrix3 *matrix)
+     return FALSE;
+   gegl_matrix3_copy_into (&copy, matrix);
+   copy.coeff[0][0] = 1.;
+-  return gegl_affine_matrix3_allow_fast_translate (&copy);
++  return gegl_transform_matrix3_allow_fast_translate (&copy);
+ }
+ 
+ static void
+-gegl_affine_fast_reflect_x (GeglBuffer              *dest,
+-                            GeglBuffer              *src,
+-                            const GeglRectangle     *dest_rect,
+-                            const GeglRectangle     *src_rect,
+-                            gint                     level)
++gegl_transform_fast_reflect_x (GeglBuffer              *dest,
++                               GeglBuffer              *src,
++                               const GeglRectangle     *dest_rect,
++                               const GeglRectangle     *src_rect,
++                               gint                     level)
+ {
+-  const Babl              *format = gegl_buffer_get_format (src);
+-  const gint               px_size = babl_format_get_bytes_per_pixel (format),
+-                           rowstride = src_rect->width * px_size;
+-  gint                     i;
+-  guchar                  *buf = (guchar *) g_malloc (src_rect->height * rowstride);
+-
+-  gegl_buffer_get (src,  src_rect, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  const Babl *format = gegl_buffer_get_format (src);
++  const gint  px_size = babl_format_get_bytes_per_pixel (format),
++              rowstride = src_rect->width * px_size;
++  gint        i;
++  guchar     *buf = (guchar *) g_malloc (src_rect->height * rowstride);
++
++  gegl_buffer_get (src,
++                   src_rect,
++                   1.0,
++                   format,
++                   buf,
++                   GEGL_AUTO_ROWSTRIDE,
++                   GEGL_ABYSS_NONE);
+ 
+   for (i = 0; i < src_rect->height / 2; i++)
+     {
+@@ -894,25 +932,31 @@ gegl_affine_fast_reflect_x (GeglBuffer              *dest,
+ }
+ 
+ static void
+-gegl_affine_fast_reflect_y (GeglBuffer              *dest,
+-                            GeglBuffer              *src,
+-                            const GeglRectangle     *dest_rect,
+-                            const GeglRectangle     *src_rect,
+-                            gint                     level)
++gegl_transform_fast_reflect_y (GeglBuffer              *dest,
++                               GeglBuffer              *src,
++                               const GeglRectangle     *dest_rect,
++                               const GeglRectangle     *src_rect,
++                               gint                     level)
+ {
+-  const Babl              *format = gegl_buffer_get_format (src);
+-  const gint               px_size = babl_format_get_bytes_per_pixel (format),
+-                           rowstride = src_rect->width * px_size;
+-  gint                     i;
+-  guchar                  *buf = (guchar *) g_malloc (src_rect->height * rowstride);
+-
+-  gegl_buffer_get (src, src_rect, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  const Babl *format = gegl_buffer_get_format (src);
++  const gint  px_size = babl_format_get_bytes_per_pixel (format),
++              rowstride = src_rect->width * px_size;
++  gint        i;
++  guchar     *buf = (guchar *) g_malloc (src_rect->height * rowstride);
++
++  gegl_buffer_get (src,
++                   src_rect,
++                   1.0,
++                   format,
++                   buf,
++                   GEGL_AUTO_ROWSTRIDE,
++                   GEGL_ABYSS_NONE);
+ 
+   for (i = 0; i < src_rect->height; i++)
+     {
+-      gint      src_offset = i * rowstride,
+-                dest_offset = src_offset + rowstride,
+-                j;
++      gint src_offset = i * rowstride,
++           dest_offset = src_offset + rowstride,
++           j;
+ 
+       for (j = 0; j < src_rect->width / 2; j++)
+         {
+@@ -940,20 +984,20 @@ gegl_affine_fast_reflect_y (GeglBuffer              *dest,
+ }
+ 
+ static gboolean
+-gegl_affine_process (GeglOperation        *operation,
+-                     GeglOperationContext *context,
+-                     const gchar          *output_prop,
+-                     const GeglRectangle  *result,
+-                     gint                  level)
++gegl_transform_process (GeglOperation        *operation,
++                        GeglOperationContext *context,
++                        const gchar          *output_prop,
++                        const GeglRectangle  *result,
++                        gint                  level)
+ {
+-  GeglBuffer          *input;
+-  GeglBuffer          *output;
+-  GeglMatrix3          matrix;
+-  OpTransform            *affine = (OpTransform *) operation;
++  GeglBuffer  *input;
++  GeglBuffer  *output;
++  GeglMatrix3  matrix;
++  OpTransform *transform = (OpTransform *) operation;
+ 
+-  gegl_affine_create_composite_matrix (affine, &matrix);
++  gegl_transform_create_composite_matrix (transform, &matrix);
+ 
+-  if (gegl_affine_is_intermediate_node (affine) ||
++  if (gegl_transform_is_intermediate_node (transform) ||
+       gegl_matrix3_is_identity (&matrix))
+     {
+       /* passing straight through (like gegl:nop) */
+@@ -966,9 +1010,9 @@ gegl_affine_process (GeglOperation        *operation,
+ 
+       gegl_operation_context_take_object (context, "output", G_OBJECT (input));
+     }
+-  else if (gegl_affine_matrix3_allow_fast_translate (&matrix) ||
++  else if (gegl_transform_matrix3_allow_fast_translate (&matrix) ||
+            (gegl_matrix3_is_translate (&matrix) &&
+-            ! strcmp (affine->filter, "nearest")))
++            ! strcmp (transform->filter, "nearest")))
+     {
+       /* doing a buffer shifting trick, (enhanced nop) */
+       input  = gegl_operation_context_get_source (context, "input");
+@@ -990,7 +1034,7 @@ gegl_affine_process (GeglOperation        *operation,
+       if (input != NULL)
+         g_object_unref (input);
+     }
+-  else if (gegl_affine_matrix3_allow_fast_reflect_x (&matrix))
++  else if (gegl_transform_matrix3_allow_fast_reflect_x (&matrix))
+     {
+       GeglRectangle      src_rect;
+       GeglSampler       *sampler;
+@@ -1005,23 +1049,29 @@ gegl_affine_process (GeglOperation        *operation,
+ 
+       output = gegl_operation_context_get_target (context, "output");
+ 
+-      src_rect = gegl_operation_get_required_for_output (operation, "output", result);
++      src_rect = gegl_operation_get_required_for_output (operation,
++                                                         "output",
++                                                         result);
+       src_rect.y += 1;
+ 
+       sampler = gegl_buffer_sampler_new (input, babl_format("RaGaBaA float"),
+-          gegl_sampler_type_from_string (affine->filter));
++          gegl_sampler_type_from_string (transform->filter));
+       context_rect = *gegl_sampler_get_context_rect (sampler);
+ 
+       src_rect.width -= context_rect.width;
+       src_rect.height -= context_rect.height;
+ 
+-      gegl_affine_fast_reflect_x (output, input, result, &src_rect, context->level);
++      gegl_transform_fast_reflect_x (output,
++                                     input,
++                                     result,
++                                     &src_rect,
++                                     context->level);
+       g_object_unref (sampler);
+ 
+       if (input != NULL)
+         g_object_unref (input);
+     }
+-  else if (gegl_affine_matrix3_allow_fast_reflect_y (&matrix))
++  else if (gegl_transform_matrix3_allow_fast_reflect_y (&matrix))
+     {
+       GeglRectangle      src_rect;
+       GeglSampler       *sampler;
+@@ -1036,17 +1086,23 @@ gegl_affine_process (GeglOperation        *operation,
+ 
+       output = gegl_operation_context_get_target (context, "output");
+ 
+-      src_rect = gegl_operation_get_required_for_output (operation, "output", result);
++      src_rect = gegl_operation_get_required_for_output (operation,
++                                                         "output",
++                                                         result);
+       src_rect.x += 1;
+ 
+       sampler = gegl_buffer_sampler_new (input, babl_format("RaGaBaA float"),
+-          gegl_sampler_type_from_string (affine->filter));
++          gegl_sampler_type_from_string (transform->filter));
+       context_rect = *gegl_sampler_get_context_rect (sampler);
+ 
+       src_rect.width -= context_rect.width;
+       src_rect.height -= context_rect.height;
+ 
+-      gegl_affine_fast_reflect_y (output, input, result, &src_rect, context->level);
++      gegl_transform_fast_reflect_y (output,
++                                     input,
++                                     result,
++                                     &src_rect,
++                                     context->level);
+       g_object_unref (sampler);
+ 
+       if (input != NULL)
+@@ -1061,15 +1117,15 @@ gegl_affine_process (GeglOperation        *operation,
+       output = gegl_operation_context_get_target (context, "output");
+ 
+       sampler = gegl_buffer_sampler_new (input, babl_format("RaGaBaA float"),
+-          gegl_sampler_type_from_string (affine->filter));
++          gegl_sampler_type_from_string (transform->filter));
+ 
+       if (gegl_matrix3_is_affine (&matrix))
+         {
+-          affine_affine  (output, input, &matrix, sampler, context->level);
++          transform_affine  (output, input, &matrix, sampler, context->level);
+         }
+       else
+         {
+-          affine_generic (output, input, &matrix, sampler, context->level);
++          transform_generic (output, input, &matrix, sampler, context->level);
+         }
+ 
+       g_object_unref (sampler);
+@@ -1080,4 +1136,3 @@ gegl_affine_process (GeglOperation        *operation,
+ 
+   return TRUE;
+ }
+-
+diff --git a/operations/transform/transform-core.h b/operations/transform/transform-core.h
+index a5200af..0a00811 100644
+--- operations/transform/transform-core.h
++++ operations/transform/transform-core.h
+@@ -1,17 +1,17 @@
+-#ifndef __OP_AFFINE_H__
+-#define __OP_AFFINE_H__
++#ifndef __OP_TRANSFORM_H__
++#define __OP_TRANSFORM_H__
+ 
+ #include "gegl-buffer-private.h"
+ #include <gegl-matrix.h>
+ 
+ G_BEGIN_DECLS
+ 
+-#define TYPE_OP_AFFINE               (op_affine_get_type ())
+-#define OP_AFFINE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_OP_AFFINE, OpTransform))
+-#define OP_AFFINE_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass),  TYPE_OP_AFFINE, OpTransformClass))
+-#define IS_OP_AFFINE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_OP_AFFINE))
+-#define IS_OP_AFFINE_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass),  TYPE_OP_AFFINE))
+-#define OP_AFFINE_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj),  TYPE_OP_AFFINE, OpTransformClass))
++#define TYPE_OP_TRANSFORM               (op_transform_get_type ())
++#define OP_TRANSFORM(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_OP_TRANSFORM, OpTransform))
++#define OP_TRANSFORM_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass),  TYPE_OP_TRANSFORM, OpTransformClass))
++#define IS_OP_TRANSFORM(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_OP_TRANSFORM))
++#define IS_OP_TRANSFORM_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass),  TYPE_OP_TRANSFORM))
++#define OP_TRANSFORM_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj),  TYPE_OP_TRANSFORM, OpTransformClass))
+ 
+ typedef struct _OpTransform OpTransform;
+ 
+@@ -31,11 +31,11 @@ struct _OpTransformClass
+ {
+   GeglOperationFilterClass parent_class;
+ 
+-  void (* create_matrix) (OpTransform    *affine,
++  void (* create_matrix) (OpTransform  *transform,
+                           GeglMatrix3  *matrix);
+ };
+ 
+-GType op_affine_get_type (void) G_GNUC_CONST;
++GType op_transform_get_type (void) G_GNUC_CONST;
+ 
+ G_END_DECLS
+ 
+diff --git a/operations/workshop/buffer-cache.c b/operations/workshop/buffer-cache.c
+index 324fb5a..d6ff855 100644
+--- operations/workshop/buffer-cache.c
++++ operations/workshop/buffer-cache.c
+@@ -35,19 +35,12 @@ gegl_chant_pointer (buffer, _("Cache buffer"),
+ static GeglRectangle
+ get_bounding_box (GeglOperation *operation)
+ {
+-  GeglRectangle result = {0,0,0,0};
+   GeglChantO   *o = GEGL_CHANT_PROPERTIES (operation);
+ 
+   if (o->buffer)
+-    {
+-      result = *gegl_buffer_get_extent (GEGL_BUFFER (o->buffer));
+-    }
++    return *gegl_buffer_get_extent (GEGL_BUFFER (o->buffer));
+   else
+-    {
+-      result = GEGL_OPERATION_GET_CLASS (operation)->get_bounding_box (operation);
+-    }
+-
+-  return result;
++    return *gegl_operation_source_get_bounding_box (operation, "input");
+ }
+ 
+ static gboolean
+diff --git a/operations/workshop/color-reduction.c b/operations/workshop/color-reduction.c
+deleted file mode 100644
+index 24ae0aa..0000000
+--- operations/workshop/color-reduction.c
++++ /dev/null
+@@ -1,463 +0,0 @@
+-/* This file is an image processing operation for GEGL
+- *
+- * GEGL is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
+- *
+- * GEGL 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
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+- *
+- * Copyright 2008 Hans Petter Jansson <hpj at copyleft.no>
+- */
+-
+-#include "config.h"
+-#include <glib/gi18n-lib.h>
+-
+-
+-#ifdef GEGL_CHANT_PROPERTIES
+-
+-gegl_chant_int (red_bits,   _("Red bits"),   1, 16, 16, _("Number of bits for red channel"))
+-gegl_chant_int (green_bits, _("Green bits"), 1, 16, 16, _("Number of bits for green channel"))
+-gegl_chant_int (blue_bits,  _("Blue bits"),  1, 16, 16, _("Number of bits for blue channel"))
+-gegl_chant_int (alpha_bits, _("Alpha bits"), 1, 16, 16, _("Number of bits for alpha channel"))
+-gegl_chant_string (dither_type, _("Dither"), "none",
+-              _("Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"))
+-
+-#else
+-
+-#define GEGL_CHANT_TYPE_FILTER
+-#define GEGL_CHANT_C_FILE       "color-reduction.c"
+-
+-#include "gegl-chant.h"
+-
+-static void
+-prepare (GeglOperation *operation)
+-{
+-  gegl_operation_set_format (operation, "input", babl_format ("RGBA u16"));
+-  gegl_operation_set_format (operation, "output", babl_format ("RGBA u16"));
+-}
+-
+-static void
+-generate_channel_masks (guint *channel_bits, guint *channel_mask)
+-{
+-  gint i;
+-
+-  for (i = 0; i < 4; i++)
+-    channel_mask [i] = ~((1 << (16 - channel_bits [i])) - 1);
+-}
+-
+-static guint
+-quantize_value (guint value, guint n_bits, guint mask)
+-{
+-  gint i;
+-
+-  value &= mask;
+-
+-  for (i = n_bits; i < 16; i += n_bits)
+-    value |= value >> i;
+-
+-  return value;
+-}
+-
+-static void
+-process_floyd_steinberg (GeglBuffer *input,
+-                         GeglBuffer *output,
+-                         const GeglRectangle *result,
+-                         guint *channel_bits)
+-{
+-  GeglRectangle        line_rect;
+-  guint16             *line_buf;
+-  gdouble             *error_buf [2];
+-  guint                channel_mask [4];
+-  gint                 y;
+-
+-  line_rect.x      = result->x;
+-  line_rect.y      = result->y;
+-  line_rect.width  = result->width;
+-  line_rect.height = 1;
+-
+-  line_buf      = g_new  (guint16, line_rect.width * 4);
+-  error_buf [0] = g_new0 (gdouble, line_rect.width * 4);
+-  error_buf [1] = g_new0 (gdouble, line_rect.width * 4);
+-
+-  generate_channel_masks (channel_bits, channel_mask);
+-
+-  for (y = 0; y < result->height; y++)
+-  {
+-    gdouble  *error_buf_swap;
+-    gint      step;
+-    gint      start_x;
+-    gint      end_x;
+-    gint      x;
+-
+-    /* Serpentine scanning; reverse direction every row */
+-
+-    if (y & 1)
+-    {
+-      start_x = result->width - 1;
+-      end_x   = -1;
+-      step    = -1;
+-    }
+-    else
+-    {
+-      start_x = 0;
+-      end_x   = result->width;
+-      step    = 1;
+-    }
+-
+-    /* Pull input row */
+-
+-    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("RGBA u16"), line_buf,
+-                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+-
+-    /* Process the row */
+-
+-    for (x = start_x; x != end_x; x += step)
+-    {
+-      guint16  *pixel = &line_buf [x * 4];
+-      guint     ch;
+-
+-      for (ch = 0; ch < 4; ch++)
+-      {
+-        gdouble value;
+-        gdouble value_clamped;
+-        gdouble quantized;
+-        gdouble qerror;
+-
+-        value         = pixel [ch] + error_buf [0] [x * 4 + ch];
+-        value_clamped = CLAMP (value, 0.0, 65535.0);
+-        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
+-        qerror        = value - quantized;
+-
+-        pixel [ch] = (guint16) quantized;
+-
+-        /* Distribute the error */
+-
+-        error_buf [1] [x * 4 + ch] += qerror * 5.0 / 16.0;  /* Down */
+-
+-        if (x + step >= 0 && x + step < result->width)
+-        {
+-          error_buf [0] [(x + step) * 4 + ch] += qerror * 6.0 / 16.0;  /* Ahead */
+-          error_buf [1] [(x + step) * 4 + ch] += qerror * 1.0 / 16.0;  /* Down, ahead */
+-        }
+-
+-        if (x - step >= 0 && x - step < result->width)
+-        {
+-          error_buf [1] [(x - step) * 4 + ch] += qerror * 3.0 / 16.0;  /* Down, behind */
+-        }
+-      }
+-    }
+-
+-    /* Swap error accumulation rows */
+-
+-    error_buf_swap = error_buf [0];
+-    error_buf [0]  = error_buf [1];
+-    error_buf [1]  = error_buf_swap;
+-
+-    /* Clear error buffer for next-plus-one line */
+-
+-    memset (error_buf [1], 0, line_rect.width * 4 * sizeof (gdouble));
+-
+-    /* Push output row */
+-
+-    gegl_buffer_set (output, &line_rect, 0, babl_format ("RGBA u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
+-    line_rect.y++;
+-  }
+-
+-  g_free (line_buf);
+-  g_free (error_buf [0]);
+-  g_free (error_buf [1]);
+-}
+-
+-static const gdouble bayer_matrix_8x8 [] =
+-{
+-   1, 49, 13, 61,  4, 52, 16, 64,
+-  33, 17, 45, 29, 36, 20, 48, 32,
+-   9, 57,  5, 53, 12, 60,  8, 56,
+-  41, 25, 37, 21, 44, 28, 40, 24,
+-   3, 51, 15, 63,  2, 50, 14, 62,
+-  35, 19, 47, 31, 34, 18, 46, 30,
+-  11, 59,  7, 55, 10, 58,  6, 54,
+-  43, 27, 39, 23, 42, 26, 38, 22
+-};
+-
+-static void
+-process_bayer (GeglBuffer *input,
+-               GeglBuffer *output,
+-               const GeglRectangle *result,
+-               guint *channel_bits)
+-{
+-  GeglRectangle        line_rect;
+-  guint16             *line_buf;
+-  guint                channel_mask [4];
+-  guint                y;
+-
+-  line_rect.x = result->x;
+-  line_rect.y = result->y;
+-  line_rect.width = result->width;
+-  line_rect.height = 1;
+-
+-  line_buf = g_new (guint16, line_rect.width * 4);
+-
+-  generate_channel_masks (channel_bits, channel_mask);
+-
+-  for (y = 0; y < result->height; y++)
+-  {
+-    guint x;
+-
+-    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("RGBA u16"), line_buf,
+-                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+-
+-    for (x = 0; x < result->width; x++)
+-    {
+-      guint16 *pixel = &line_buf [x * 4];
+-      guint    ch;
+-
+-      for (ch = 0; ch < 4; ch++)
+-      {
+-        gdouble value;
+-        gdouble value_clamped;
+-        gdouble quantized;
+-
+-        value         = pixel [ch] + ((bayer_matrix_8x8 [(y % 8) * 8 + (x % 8)] - 32) * 65536.0 / 65.0) / (1 << (channel_bits [ch] - 1));
+-        value_clamped = CLAMP (value, 0.0, 65535.0);
+-        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
+-
+-        pixel [ch] = (guint16) quantized;
+-      }
+-    }
+-
+-    gegl_buffer_set (output, &line_rect, 0, babl_format ("RGBA u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
+-    line_rect.y++;
+-  }
+-
+-  g_free (line_buf);
+-}
+-
+-static void
+-process_random_covariant (GeglBuffer *input,
+-                          GeglBuffer *output,
+-                          const GeglRectangle *result,
+-                          guint *channel_bits)
+-{
+-  GeglRectangle        line_rect;
+-  guint16             *line_buf;
+-  guint                channel_mask [4];
+-  guint                y;
+-
+-  line_rect.x = result->x;
+-  line_rect.y = result->y;
+-  line_rect.width = result->width;
+-  line_rect.height = 1;
+-
+-  line_buf = g_new (guint16, line_rect.width * 4);
+-
+-  generate_channel_masks (channel_bits, channel_mask);
+-
+-  for (y = 0; y < result->height; y++)
+-  {
+-    guint x;
+-
+-    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("RGBA u16"), line_buf,
+-                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+-
+-    for (x = 0; x < result->width; x++)
+-    {
+-      guint16 *pixel = &line_buf [x * 4];
+-      guint    ch;
+-      gint     r = g_random_int_range (-65536, 65536);
+-
+-      for (ch = 0; ch < 4; ch++)
+-      {
+-        gdouble value;
+-        gdouble value_clamped;
+-        gdouble quantized;
+-
+-        value         = pixel [ch] + (r / (1 << channel_bits [ch]));
+-        value_clamped = CLAMP (value, 0.0, 65535.0);
+-        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
+-
+-        pixel [ch] = (guint16) quantized;
+-      }
+-    }
+-
+-    gegl_buffer_set (output, &line_rect, 0, babl_format ("RGBA u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
+-    line_rect.y++;
+-  }
+-
+-  g_free (line_buf);
+-}
+-
+-static void
+-process_random (GeglBuffer *input,
+-                GeglBuffer *output,
+-                const GeglRectangle *result,
+-                guint *channel_bits)
+-{
+-  GeglRectangle        line_rect;
+-  guint16             *line_buf;
+-  guint                channel_mask [4];
+-  guint                y;
+-
+-  line_rect.x = result->x;
+-  line_rect.y = result->y;
+-  line_rect.width = result->width;
+-  line_rect.height = 1;
+-
+-  line_buf = g_new (guint16, line_rect.width * 4);
+-
+-  generate_channel_masks (channel_bits, channel_mask);
+-
+-  for (y = 0; y < result->height; y++)
+-  {
+-    guint x;
+-
+-    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("RGBA u16"), line_buf,
+-                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+-
+-    for (x = 0; x < result->width; x++)
+-    {
+-      guint16 *pixel = &line_buf [x * 4];
+-      guint    ch;
+-
+-      for (ch = 0; ch < 4; ch++)
+-      {
+-        gdouble value;
+-        gdouble value_clamped;
+-        gdouble quantized;
+-
+-        value         = pixel [ch] + (g_random_int_range (-65536, 65536) / (1 << channel_bits [ch]));
+-        value_clamped = CLAMP (value, 0.0, 65535.0);
+-        quantized     = quantize_value ((guint) (value_clamped + 0.5), channel_bits [ch], channel_mask [ch]);
+-
+-        pixel [ch] = (guint16) quantized;
+-      }
+-    }
+-
+-    gegl_buffer_set (output, &line_rect, 0, babl_format ("RGBA u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
+-    line_rect.y++;
+-  }
+-
+-  g_free (line_buf);
+-}
+-
+-static void
+-process_no_dither (GeglBuffer *input,
+-                   GeglBuffer *output,
+-                   const GeglRectangle *result,
+-                   guint *channel_bits)
+-{
+-  GeglRectangle        line_rect;
+-  guint16             *line_buf;
+-  guint                channel_mask [4];
+-  guint                y;
+-
+-  line_rect.x = result->x;
+-  line_rect.y = result->y;
+-  line_rect.width = result->width;
+-  line_rect.height = 1;
+-
+-  line_buf = g_new (guint16, line_rect.width * 4);
+-
+-  generate_channel_masks (channel_bits, channel_mask);
+-
+-  for (y = 0; y < result->height; y++)
+-  {
+-    guint x;
+-
+-    gegl_buffer_get (input, &line_rect, 1.0, babl_format ("RGBA u16"), line_buf,
+-                     GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+-
+-    for (x = 0; x < result->width; x++)
+-    {
+-      guint16 *pixel = &line_buf [x * 4];
+-      guint    ch;
+-
+-      for (ch = 0; ch < 4; ch++)
+-      {
+-        pixel [ch] = quantize_value (pixel [ch], channel_bits [ch], channel_mask [ch]);
+-      }
+-    }
+-
+-    gegl_buffer_set (output, &line_rect, 0, babl_format ("RGBA u16"), line_buf, GEGL_AUTO_ROWSTRIDE);
+-    line_rect.y++;
+-  }
+-
+-  g_free (line_buf);
+-}
+-
+-static GeglRectangle
+-get_required_for_output (GeglOperation        *self,
+-                         const gchar         *input_pad,
+-                         const GeglRectangle *roi)
+-{
+-  return *gegl_operation_source_get_bounding_box (self, "input");
+-}
+-
+-static GeglRectangle
+-get_cached_region (GeglOperation       *self,
+-                   const GeglRectangle *roi)
+-{
+-  return *gegl_operation_source_get_bounding_box (self, "input");
+-}
+-
+-static gboolean
+-process (GeglOperation       *operation,
+-         GeglBuffer          *input,
+-         GeglBuffer          *output,
+-         const GeglRectangle *result,
+-         gint                 level)
+-{
+-  GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
+-  guint       channel_bits [4];
+-
+-  channel_bits [0] = o->red_bits;
+-  channel_bits [1] = o->green_bits;
+-  channel_bits [2] = o->blue_bits;
+-  channel_bits [3] = o->alpha_bits;
+-
+-  if (!o->dither_type)
+-    process_no_dither (input, output, result, channel_bits);
+-  else if (!strcasecmp (o->dither_type, "random"))
+-    process_random (input, output, result, channel_bits);
+-  else if (!strcasecmp (o->dither_type, "random-covariant"))
+-    process_random_covariant (input, output, result, channel_bits);
+-  else if (!strcasecmp (o->dither_type, "bayer"))
+-    process_bayer (input, output, result, channel_bits);
+-  else if (!strcasecmp (o->dither_type, "floyd-steinberg"))
+-    process_floyd_steinberg (input, output, result, channel_bits);
+-  else
+-    process_no_dither (input, output, result, channel_bits);
+-
+-  return TRUE;
+-}
+-
+-static void
+-gegl_chant_class_init (GeglChantClass *klass)
+-{
+-  GeglOperationClass       *operation_class;
+-  GeglOperationFilterClass *filter_class;
+-
+-  operation_class = GEGL_OPERATION_CLASS (klass);
+-  filter_class    = GEGL_OPERATION_FILTER_CLASS (klass);
+-
+-  operation_class->prepare = prepare;
+-  operation_class->get_required_for_output = get_required_for_output;
+-  operation_class->get_cached_region = get_cached_region;
+-  filter_class->process = process;
+-
+-  gegl_operation_class_set_keys (operation_class,
+-    "name"        , "gegl:color-reduction",
+-    "categories"  , "misc",
+-    "description" ,
+-            _("Reduces the number of bits per channel (colors and alpha), with optional dithering"),
+-            NULL);
+-}
+-
+-#endif
+diff --git a/operations/workshop/color-rotate.c b/operations/workshop/color-rotate.c
+index 4f75480..8084e3d 100644
+--- operations/workshop/color-rotate.c
++++ operations/workshop/color-rotate.c
+@@ -351,8 +351,6 @@ process (GeglOperation       *operation,
+ 
+   src_buf = g_new0 (gfloat, result->width * result->height * 4);
+ 
+-  format = babl_format ("RGBA float");
+-
+   gegl_buffer_get (input, result, 1.0, format, src_buf,
+                    GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+ 
+diff --git a/operations/workshop/convolution-matrix.c b/operations/workshop/convolution-matrix.c
+index 0765efd..a542d1b 100644
+--- operations/workshop/convolution-matrix.c
++++ operations/workshop/convolution-matrix.c
+@@ -88,8 +88,8 @@ gegl_chant_boolean (alpha, _("Alpha"), TRUE, _("Alpha channel"))
+ gegl_chant_boolean (weight, _("Alpha-weighting"), TRUE, _("Alpha weighting"))
+ 
+ gegl_chant_string (border, _("Border"), "extend",
+-                   _("Type of border to choose."
+-                     "Choices are extend, wrap, crop."
++                   _("Type of border to choose. "
++                     "Choices are extend, wrap, crop. "
+                      "Default is extend"))
+ 
+ #else
+diff --git a/operations/workshop/ditto.c b/operations/workshop/ditto.c
+index 9a19df9..a6a294d 100644
+--- operations/workshop/ditto.c
++++ operations/workshop/ditto.c
+@@ -24,7 +24,7 @@
+ 
+ #ifdef GEGL_CHANT_PROPERTIES
+ 
+-gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, GEGL_TYPE_SAMPLER_TYPE,
++gegl_chant_enum (sampler_type, _("Sampler"), GeglSamplerType, gegl_sampler_type,
+                  GEGL_SAMPLER_CUBIC, _("Sampler used internally"))
+ 
+ #else
+@@ -71,7 +71,8 @@ process (GeglOperation       *operation,
+                         x,
+                         y,
+                         NULL,
+-                        out_pixel);
++                        out_pixel,
++                        GEGL_ABYSS_NONE);
+ 
+       out_pixel += 4;
+ 
+diff --git a/operations/workshop/external/gluas.c b/operations/workshop/external/gluas.c
+index 8ba1101..63e82a2 100644
+--- operations/workshop/external/gluas.c
++++ operations/workshop/external/gluas.c
+@@ -97,7 +97,7 @@ static int l_progress  (lua_State * lua);
+ static int l_flush     (lua_State * lua);
+ static int l_print     (lua_State * lua);
+ 
+-static const luaL_reg gluas_functions[] =
++static const luaL_Reg gluas_functions[] =
+ {
+     {"set_rgba",    l_set_rgba},
+     {"get_rgba",    l_get_rgba},
+@@ -122,7 +122,7 @@ static const luaL_reg gluas_functions[] =
+ };
+ static void
+ register_functions (lua_State      *L,
+-                    const luaL_reg *l)
++                    const luaL_Reg *l)
+ {
+   for (;l->name; l++)
+     lua_register (L, l->name, l->func);
+@@ -146,7 +146,7 @@ drawable_lua_process (GeglOperation       *op,
+     lua_State *L;
+     Priv p;
+ 
+-    L = lua_open ();
++    L = luaL_newstate ();
+     luaL_openlibs (L);
+ 
+     register_functions (L, gluas_functions);
+diff --git a/operations/workshop/external/lens-correct.c b/operations/workshop/external/lens-correct.c
+index 79bd0ff..cd79e48 100644
+--- operations/workshop/external/lens-correct.c
++++ operations/workshop/external/lens-correct.c
+@@ -30,7 +30,7 @@ gegl_chant_string (maker, _("Maker:"),"none",
+ gegl_chant_string (Camera, _("Camera:"),"none",
+                    _("Write camera name correctly"))
+ gegl_chant_string (Lens, _("Lens:"),"none",
+-                   _("Write your lens model with majuscules"))
++                   _("Write your lens model with uppercase letters"))
+ gegl_chant_double (focal, _("Focal of the camera"), 0.0, 300.0, 20.0,
+                    _("Calculate b value from focal"))
+ 
+diff --git a/operations/workshop/fractal-trace.c b/operations/workshop/fractal-trace.c
+index f864bad..1f7647c 100644
+--- operations/workshop/fractal-trace.c
++++ operations/workshop/fractal-trace.c
+@@ -41,9 +41,8 @@ gegl_chant_int    (depth, _("Depth"), 1, 65536, 3,
+                    _("Depth value"))
+ gegl_chant_double (bailout, _("Bailout"), 0.0, G_MAXDOUBLE, G_MAXDOUBLE,
+                    _("Bailout length"))
+-gegl_chant_string (background, _("Background"), "wrap",
+-                   _("Optional parameter to override automatic selection of wrap background. "
+-                     "Choices are wrap, black, white and transparent."))
++gegl_chant_enum   (abyss_policy, _("Abyss policy"), GeglAbyssPolicy, gegl_abyss_policy,
++                   GEGL_ABYSS_LOOP, _("How to deal with pixels outside of the input buffer"))
+ 
+ #else
+ 
+@@ -55,14 +54,6 @@ gegl_chant_string (background, _("Background"), "wrap",
+ 
+ typedef enum
+ {
+-  BACKGROUND_TYPE_WRAP,
+-  BACKGROUND_TYPE_TRANSPARENT,
+-  BACKGROUND_TYPE_BLACK,
+-  BACKGROUND_TYPE_WHITE
+-} BackgroundType;
+-
+-typedef enum
+-{
+   FRACTAL_TYPE_MANDELBROT,
+   FRACTAL_TYPE_JULIA
+ } FractalType;
+@@ -113,7 +104,6 @@ fractaltrace (GeglBuffer          *input,
+               GeglChantO          *o,
+               gint                 y,
+               FractalType          fractal_type,
+-              BackgroundType       background_type,
+               const Babl          *format)
+ {
+   GeglMatrix2  scale;        /* a matrix indicating scaling factors around the
+@@ -141,89 +131,38 @@ fractaltrace (GeglBuffer          *input,
+         {
+         case FRACTAL_TYPE_JULIA:
+ #define gegl_unmap(u,v,ud,vd) {\
+-       gdouble rx, ry;\
+-       cx = o->X1 + ((u) - picture->x) * scale_x; \
+-       cy = o->Y1 + ((v) - picture->y) * scale_y; \
+-       julia (cx, cy, o->JX, o->JY, &rx, &ry, o->depth, bailout2);\
+-       ud = (rx - o->X1) / scale_x + picture->x;\
+-       vd = (ry - o->Y1) / scale_y + picture->y;\
+-      }
+-      gegl_sampler_compute_scale (scale, x, y);
+-      gegl_unmap(x,y,px,py);
++            gdouble rx, ry;                       \
++            cx = o->X1 + ((u) - picture->x) * scale_x;  \
++            cy = o->Y1 + ((v) - picture->y) * scale_y;              \
++            julia (cx, cy, o->JX, o->JY, &rx, &ry, o->depth, bailout2); \
++            ud = (rx - o->X1) / scale_x + picture->x;                   \
++            vd = (ry - o->Y1) / scale_y + picture->y;                   \
++          }
++        gegl_sampler_compute_scale (scale, x, y);
++        gegl_unmap(x,y,px,py);
+ #undef gegl_unmap
+-          break;
++        break;
+ 
+         case FRACTAL_TYPE_MANDELBROT:
+-#define gegl_unmap(u,v,ud,vd) {\
+-           gdouble rx, ry;\
+-           cx = o->X1 + ((u) - picture->x) * scale_x; \
+-           cy = o->Y1 + ((v) - picture->y) * scale_y; \
+-           julia (cx, cy, cx, cy, &rx, &ry, o->depth, bailout2);\
+-           ud = (rx - o->X1) / scale_x + picture->x;\
+-           vd = (ry - o->Y1) / scale_y + picture->y;\
+-         }
+-      gegl_sampler_compute_scale (scale, x, y);
+-      gegl_unmap(x,y,px,py);
++#define gegl_unmap(u,v,ud,vd) {                 \
++            gdouble rx, ry;                                         \
++            cx = o->X1 + ((u) - picture->x) * scale_x;              \
++            cy = o->Y1 + ((v) - picture->y) * scale_y;              \
++            julia (cx, cy, cx, cy, &rx, &ry, o->depth, bailout2);   \
++            ud = (rx - o->X1) / scale_x + picture->x;               \
++            vd = (ry - o->Y1) / scale_y + picture->y;               \
++          }
++        gegl_sampler_compute_scale (scale, x, y);
++        gegl_unmap(x,y,px,py);
+ #undef gegl_unmap
+-          break;
++        break;
+ 
+         default:
+           g_error (_("Unsupported fractal type"));
+         }
+ 
+-      if (0 <= px && px < picture->width && 0 <= py && py < picture->height)
+-        {
+-          gegl_buffer_sample (input, px, py, &scale, dest, format,
+-                              GEGL_SAMPLER_LOHALO, GEGL_ABYSS_NONE);
+-        }
+-      else
+-        {
+-          switch (background_type)
+-            {
+-            case BACKGROUND_TYPE_WRAP:
+-              px = fmod (px, picture->width);
+-              py = fmod (py, picture->height);
+-
+-              if (px < 0.0)
+-                px += picture->width;
+-              if (py < 0.0)
+-                py += picture->height;
+-
+-              /* Check for NaN */
+-              if (isnan (px))
+-                {
+-                  if (signbit (px))
+-                    px = 0.0;
+-                  else
+-                    px = picture->width - 1.0;
+-                }
+-
+-              if (isnan (py))
+-                {
+-                  if (signbit (py))
+-                    py = 0.0;
+-                  else
+-                    py = picture->height - 1.0;
+-                }
+-
+-              gegl_buffer_sample (input, px, py, &scale, dest, format,
+-                                  GEGL_SAMPLER_LOHALO, GEGL_ABYSS_NONE);
+-              break;
+-
+-            case BACKGROUND_TYPE_TRANSPARENT:
+-              dest[0] = dest[1] = dest[2] = dest[3] = 0.0;
+-              break;
+-
+-            case BACKGROUND_TYPE_BLACK:
+-              dest[0] = dest[1] = dest[2] = 0.0;
+-              dest[3] = 1.0;
+-              break;
+-
+-            case BACKGROUND_TYPE_WHITE:
+-              dest[0] = dest[1] = dest[2] = dest[3] = 1.0;
+-              break;
+-            }
+-        }
++      gegl_buffer_sample (input, px, py, &scale, dest, format,
++                          GEGL_SAMPLER_LOHALO, o->abyss_policy);
+ 
+       for (i = 0; i < 4; i++)
+         dst_buf[offset++] = dest[i];
+@@ -241,7 +180,6 @@ process (GeglOperation       *operation,
+   GeglRectangle  boundary;
+   const Babl    *format;
+   FractalType    fractal_type;
+-  BackgroundType background_type;
+   gfloat        *dst_buf;
+   gint           y;
+ 
+@@ -254,22 +192,11 @@ process (GeglOperation       *operation,
+   else if (!strcmp(o->fractal, "julia"))
+     fractal_type = FRACTAL_TYPE_JULIA;
+ 
+-  background_type = BACKGROUND_TYPE_WRAP;
+-  if (!strcmp (o->background, "wrap"))
+-    background_type = BACKGROUND_TYPE_WRAP;
+-  else if (!strcmp (o->background, "transparent"))
+-    background_type = BACKGROUND_TYPE_TRANSPARENT;
+-  else if (!strcmp (o->background, "black"))
+-    background_type = BACKGROUND_TYPE_BLACK;
+-  else if (!strcmp (o->background, "white"))
+-    background_type = BACKGROUND_TYPE_WHITE;
+-
+   format = babl_format ("RGBA float");
+   dst_buf = g_new0 (gfloat, result->width * result->height * 4);
+ 
+   for (y = result->y; y < result->y + result->height; y++)
+-    fractaltrace (input, &boundary, dst_buf, result, o, y,
+-                  fractal_type, background_type, format);
++    fractaltrace (input, &boundary, dst_buf, result, o, y, fractal_type, format);
+ 
+   gegl_buffer_set (output, result, 0, format, dst_buf, GEGL_AUTO_ROWSTRIDE);
+ 
+diff --git a/operations/workshop/hstack.c b/operations/workshop/hstack.c
+index 3ba5bd5..3e41ce7 100644
+--- operations/workshop/hstack.c
++++ operations/workshop/hstack.c
+@@ -125,8 +125,8 @@ process (GeglOperation       *operation,
+ 
+       gegl_buffer_get (temp_in,  NULL, 1.0, babl_format ("RGBA float"), buf,
+                        GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+-      gegl_buffer_get (temp_aux, NULL, 1.0, babl_format ("RGBA float"), bufB, GEGL_AUTO_ROWSTRIDE,
+-                       GEGL_ABYSS_NONE);
++      gegl_buffer_get (temp_aux, NULL, 1.0, babl_format ("RGBA float"), bufB,
++                       GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
+         {
+           gint offset=0;
+           gint x,y;
+diff --git a/operations/workshop/linear-gradient.c b/operations/workshop/linear-gradient.c
+index 3e17870..28ea820 100644
+--- operations/workshop/linear-gradient.c
++++ operations/workshop/linear-gradient.c
+@@ -48,8 +48,7 @@ prepare (GeglOperation *operation)
+ static GeglRectangle
+ get_bounding_box (GeglOperation *operation)
+ {
+-  GeglRectangle result = {-10000000, -10000000, 20000000, 20000000};
+-  return result;
++  return gegl_rectangle_infinite_plane ();
+ }
+ 
+ static gfloat dist(gfloat x1, gfloat y1, gfloat x2, gfloat y2)
+diff --git a/operations/workshop/max-rgb.c b/operations/workshop/max-rgb.c
+deleted file mode 100644
+index 2cfc92e..0000000
+--- operations/workshop/max-rgb.c
++++ /dev/null
+@@ -1,124 +0,0 @@
+-/* This file is an image processing operation for GEGL
+- *
+- * GEGL is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
+- *
+- * GEGL 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
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+- *
+- * Copyright (C) 2011 Barak Itkin <lightningismyname at gmail.org>
+- *
+- * Based on "Maximum RGB" GIMP plugin
+- * Copyright (C) 1997 Shuji Narazaki <narazaki at InetQ.or.jp>
+- * Copyright (C) 2000 tim copperfield <timecop at japan.co.jp>
+- *
+- * The common/brightness-contrast.c operation by \xD8yvind Kol\xE5s was used
+- * as a template for this op file.
+- */
+-
+-#include "config.h"
+-#include <glib/gi18n-lib.h>
+-
+-#ifdef GEGL_CHANT_PROPERTIES
+-gegl_chant_boolean (min,   _("Minimal"),   FALSE,
+-                    _("Hold the minimal values instead of the maximal values"))
+-
+-#else
+-
+-#define GEGL_CHANT_TYPE_POINT_FILTER
+-#define GEGL_CHANT_C_FILE       "max-rgb.c"
+-
+-#include "gegl-chant.h"
+-
+-
+-static void prepare (GeglOperation *operation)
+-{
+-  gegl_operation_set_format (operation, "input", babl_format ("RGBA float"));
+-  gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
+-}
+-
+-static gboolean
+-process (GeglOperation       *op,
+-         void                *in_buf,
+-         void                *out_buf,
+-         glong                n_pixels,
+-         const GeglRectangle *roi,
+-         gint                 level)
+-{
+-  GeglChantO *o = GEGL_CHANT_PROPERTIES (op);
+-  gfloat     * GEGL_ALIGNED in_pixel;
+-  gfloat     * GEGL_ALIGNED out_pixel;
+-  gfloat      val;
+-  glong       i;
+-
+-  in_pixel   = in_buf;
+-  out_pixel  = out_buf;
+-
+-  /* The code could be compacted by inserting the if into the loop, but
+-   * it's more efficient if we do it like this. Note also that in cases
+-   * of equality between the maximal/minimal channels, we want to keep
+-   * them all.
+-   */
+-  if (!o->min)
+-    {
+-      for (i=0; i<n_pixels; i++)
+-        {
+-          val = MAX (in_pixel[0], MAX (in_pixel[1], in_pixel[2]));
+-
+-          out_pixel[0] = (in_pixel[0] == val) ? val : 0;
+-          out_pixel[1] = (in_pixel[1] == val) ? val : 0;
+-          out_pixel[2] = (in_pixel[2] == val) ? val : 0;
+-
+-          out_pixel[3] = in_pixel[3]; /* copy the alpha */
+-
+-          in_pixel  += 4;
+-          out_pixel += 4;
+-        }
+-    }
+-  else
+-    {
+-      for (i=0; i<n_pixels; i++)
+-        {
+-          val = MIN (in_pixel[0], MIN (in_pixel[1], in_pixel[2]));
+-
+-          out_pixel[0] = (in_pixel[0] == val) ? val : 0;
+-          out_pixel[1] = (in_pixel[1] == val) ? val : 0;
+-          out_pixel[2] = (in_pixel[2] == val) ? val : 0;
+-
+-          out_pixel[3] = in_pixel[3]; /* copy the alpha */
+-
+-          in_pixel  += 4;
+-          out_pixel += 4;
+-        }
+-    }
+-
+-  return TRUE;
+-}
+-
+-static void
+-gegl_chant_class_init (GeglChantClass *klass)
+-{
+-  GeglOperationClass            *operation_class;
+-  GeglOperationPointFilterClass *point_filter_class;
+-
+-  operation_class    = GEGL_OPERATION_CLASS (klass);
+-  point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
+-
+-  operation_class->prepare = prepare;
+-  point_filter_class->process = process;
+-
+-  gegl_operation_class_set_keys (operation_class,
+-    "name"        , "gegl:max-rgb",
+-    "categories"  , "color",
+-    "description" , _("Reduce image to pure red, green, and blue"),
+-    NULL);
+-}
+-
+-#endif
+diff --git a/operations/workshop/plasma.c b/operations/workshop/plasma.c
+index 872f539..e05ad77 100644
+--- operations/workshop/plasma.c
++++ operations/workshop/plasma.c
+@@ -57,7 +57,8 @@ typedef struct
+   gint        buffer_width;
+ } PlasmaContext;
+ 
+-static void prepare (GeglOperation *operation)
++static void
++prepare (GeglOperation *operation)
+ {
+   gegl_operation_set_format (operation, "input", babl_format ("RGBA float"));
+   gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
+@@ -135,13 +136,13 @@ put_pixel (PlasmaContext *context,
+ }
+ 
+ static gboolean
+-do_plasma_big (PlasmaContext *context,
+-               gint           x1,
+-               gint           y1,
+-               gint           x2,
+-               gint           y2,
+-               gint           depth,
+-               gint           scale_depth)
++do_plasma (PlasmaContext *context,
++           gint           x1,
++           gint           y1,
++           gint           x2,
++           gint           y2,
++           gint           plasma_depth,
++           gint           recursion_depth)
+ {
+   gfloat tl[4], ml[4], bl[4], mt[4], mm[4], mb[4], tr[4], mr[4], br[4];
+   gfloat tmp[4];
+@@ -168,7 +169,7 @@ do_plasma_big (PlasmaContext *context,
+       context->buffer_y = y1;
+       context->buffer_width = x2 - x1 + 1;
+ 
+-      ret = do_plasma_big (context, x1, y1, x2, y2, depth, scale_depth);
++      ret = do_plasma (context, x1, y1, x2, y2, plasma_depth, recursion_depth);
+ 
+       context->using_buffer = FALSE;
+ 
+@@ -181,7 +182,7 @@ do_plasma_big (PlasmaContext *context,
+   xm = (x1 + x2) / 2;
+   ym = (y1 + y2) / 2;
+ 
+-  if (depth == -1)
++  if (plasma_depth == -1)
+     {
+       random_rgba (context->gr, tl);
+       put_pixel (context, tl, x1, y1);
+@@ -213,7 +214,7 @@ do_plasma_big (PlasmaContext *context,
+       return FALSE;
+     }
+ 
+-  if (!depth)
++  if (!plasma_depth)
+     {
+       if (x1 == x2 && y1 == y2)
+         return FALSE;
+@@ -227,7 +228,7 @@ do_plasma_big (PlasmaContext *context,
+       gegl_buffer_sample (context->output, x2, y2, NULL, br, babl_format ("RGBA float"),
+                           GEGL_SAMPLER_NEAREST, GEGL_ABYSS_NONE);
+ 
+-      ran = context->o->turbulence / (2.0 * scale_depth);
++      ran = context->o->turbulence / (2.0 * recursion_depth);
+ 
+       if (xm != x1 || xm != x2)
+         {
+@@ -282,13 +283,13 @@ do_plasma_big (PlasmaContext *context,
+   if (x1 < x2 || y1 < y2)
+     {
+       /* Top left. */
+-      do_plasma_big (context, x1, y1, xm, ym, depth - 1, scale_depth + 1);
++      do_plasma (context, x1, y1, xm, ym, plasma_depth - 1, recursion_depth + 1);
+       /* Bottom left. */
+-      do_plasma_big (context, x1, ym, xm, y2, depth - 1, scale_depth + 1);
++      do_plasma (context, x1, ym, xm, y2, plasma_depth - 1, recursion_depth + 1);
+       /* Top right. */
+-      do_plasma_big (context, xm, y1, x2, ym, depth - 1, scale_depth + 1);
++      do_plasma (context, xm, y1, x2, ym, plasma_depth - 1, recursion_depth + 1);
+       /* Bottom right. */
+-      return do_plasma_big (context, xm, ym, x2, y2, depth - 1, scale_depth + 1);
++      return do_plasma (context, xm, ym, x2, y2, plasma_depth - 1, recursion_depth + 1);
+     }
+ 
+   return TRUE;
+@@ -337,13 +338,13 @@ process (GeglOperation       *operation,
+   else
+     context->gr = g_rand_new_with_seed (context->o->seed);
+ 
+-  do_plasma_big (context, boundary.x, boundary.y, x-1, y-1, -1, 0);
++  do_plasma (context, boundary.x, boundary.y, x-1, y-1, -1, 0);
+ 
+   /*
+    * Now we recurse through the images, going deeper each time
+    */
+   depth = 1;
+-  while (!do_plasma_big (context, boundary.x, boundary.y, x-1, y-1, depth, 0))
++  while (!do_plasma (context, boundary.x, boundary.y, x-1, y-1, depth, 0))
+     depth++;
+ 
+   gegl_buffer_sample_cleanup (context->output);
+diff --git a/operations/workshop/radial-gradient.c b/operations/workshop/radial-gradient.c
+index 99c32a3..483faf4 100644
+--- operations/workshop/radial-gradient.c
++++ operations/workshop/radial-gradient.c
+@@ -48,8 +48,7 @@ prepare (GeglOperation *operation)
+ static GeglRectangle
+ get_bounding_box (GeglOperation *operation)
+ {
+-  GeglRectangle result = {-10000000, -10000000, 20000000, 20000000};
+-  return result;
++  return gegl_rectangle_infinite_plane ();
+ }
+ 
+ static gfloat dist(gfloat x1, gfloat y1, gfloat x2, gfloat y2)
+diff --git a/operations/workshop/warp.c b/operations/workshop/warp.c
+index fcd19b8..c7f1a5e 100644
+--- operations/workshop/warp.c
++++ operations/workshop/warp.c
+@@ -19,10 +19,19 @@
+ #include "config.h"
+ #include <glib/gi18n-lib.h>
+ #include <math.h>
+-#include <stdio.h> /* for test only */
+ 
+ #ifdef GEGL_CHANT_PROPERTIES
+ 
++gegl_chant_register_enum (gegl_warp_behavior)
++  enum_value (GEGL_WARP_BEHAVIOR_MOVE,      "Move pixels")
++  enum_value (GEGL_WARP_BEHAVIOR_GROW,      "Grow area")
++  enum_value (GEGL_WARP_BEHAVIOR_SHRINK,    "Shrink area")
++  enum_value (GEGL_WARP_BEHAVIOR_SWIRL_CW,  "Swirl clockwise")
++  enum_value (GEGL_WARP_BEHAVIOR_SWIRL_CCW, "Swirl counter-clockwise")
++  enum_value (GEGL_WARP_BEHAVIOR_ERASE,     "Erase warping")
++  enum_value (GEGL_WARP_BEHAVIOR_SMOOTH,    "Smooth warping")
++gegl_chant_register_enum_end (GeglWarpBehavior)
++
+ gegl_chant_double (strength, _("Strength"), 0.0, 100.0, 50,
+                    _("Effect Strength"))
+ gegl_chant_double (size, _("Size"), 1.0, 10000.0, 40.0,
+@@ -30,7 +39,7 @@ gegl_chant_double (size, _("Size"), 1.0, 10000.0, 40.0,
+ gegl_chant_double (hardness, _("Hardness"), 0.0, 1.0, 0.5,
+                    _("Effect Hardness"))
+ gegl_chant_path (stroke, _("Stroke"), _("Effect Strength"))
+-gegl_chant_enum (behavior, _("Behavior"), GeglWarpBehavior, GEGL_TYPE_WARP_BEHAVIOR,
++gegl_chant_enum (behavior, _("Behavior"), GeglWarpBehavior, gegl_warp_behavior,
+                  GEGL_WARP_BEHAVIOR_MOVE, _("Behavior of the op"))
+ 
+ #else
+@@ -320,8 +329,6 @@ process (GeglOperation       *operation,
+   gulong               i;
+   GeglPathList        *event;
+ 
+-  printf("Process %p\n", operation);
+-
+   priv->buffer = gegl_buffer_dup (input);
+ 
+   event = gegl_path_get_path (o->stroke);
+diff --git a/operations/workshop/whirl-pinch.c b/operations/workshop/whirl-pinch.c
+index 0a901eb..eb71dff 100644
+--- operations/workshop/whirl-pinch.c
++++ operations/workshop/whirl-pinch.c
+@@ -158,7 +158,7 @@ apply_whirl_pinch (gdouble whirl, gdouble pinch, gdouble radius,
+         gegl_sampler_compute_scale (scale, roi->x + col, roi->y + row);
+         gegl_unmap (roi->x + col, roi->y + row, cx, cy);
+ 
+-        gegl_sampler_get (sampler, cx, cy, &scale, &dst_buf[(row * roi->width + col) * 4]);
++        gegl_sampler_get (sampler, cx, cy, &scale, &dst_buf[(row * roi->width + col) * 4], GEGL_ABYSS_NONE);
+     } /* for */
+   } /* for */
+ 
+diff --git a/po/LINGUAS b/po/LINGUAS
+index c936ade..16b7a9d 100644
+--- po/LINGUAS
++++ po/LINGUAS
+@@ -1,5 +1,15 @@
++de
++el
++en_GB
++eo
+ es
+ fr
++gl
++it
++ko
++lv
+ pl
++pt_BR
+ ru
+ sl
++sv
+diff --git a/po/POTFILES.in b/po/POTFILES.in
+index e309594..964ddfc 100644
+--- po/POTFILES.in
++++ po/POTFILES.in
+@@ -1,5 +1,6 @@
+ [encoding: UTF-8]
+-
++bin/gegl.c
++bin/gegl-options.c
+ gegl/gegl-init.c
+ gegl/module/geglmodule.c
+ operations/common/bilateral-filter.c
+@@ -8,13 +9,16 @@ operations/common/brightness-contrast.c
+ operations/common/buffer-sink.c
+ operations/common/buffer-source.c
+ operations/common/c2g.c
++operations/common/cartoon.c
+ operations/common/checkerboard.c
++operations/common/color.c
++operations/common/color-reduction.c
+ operations/common/color-temperature.c
+ operations/common/color-to-alpha.c
+-operations/common/color.c
+ operations/common/contrast-curve.c
+ operations/common/difference-of-gaussians.c
+ operations/common/display.c
++operations/common/dot.c
+ operations/common/dropshadow.c
+ operations/common/edge-laplace.c
+ operations/common/edge-sobel.c
+@@ -26,6 +30,7 @@ operations/common/gegl-buffer-load-op.c
+ operations/common/gegl-buffer-save-op.c
+ operations/common/grey.c
+ operations/common/grid.c
++operations/common/image-compare.c
+ operations/common/introspect.c
+ operations/common/invert.c
+ operations/common/layer.c
+@@ -41,11 +46,19 @@ operations/common/mblur.c
+ operations/common/mirrors.c
+ operations/common/mono-mixer.c
+ operations/common/motion-blur.c
+-operations/common/noise-reduction.c
+ operations/common/noise.c
++operations/common/noise-cielch.c
++operations/common/noise-hsv.c
++operations/common/noise-hurl.c
++operations/common/noise-pick.c
++operations/common/noise-reduction.c
++operations/common/noise-rgb.c
++operations/common/noise-slur.c
++operations/common/oilify.c
+ operations/common/opacity.c
+ operations/common/open-buffer.c
+ operations/common/over.c
++operations/common/photocopy.c
+ operations/common/pixelize.c
+ operations/common/polar-coordinates.c
+ operations/common/posterize.c
+@@ -55,7 +68,9 @@ operations/common/reinhard05.c
+ operations/common/remap.c
+ operations/common/ripple.c
+ operations/common/save.c
++operations/common/shift.c
+ operations/common/snn-mean.c
++operations/common/softglow.c
+ operations/common/stress.c
+ operations/common/stretch-contrast.c
+ operations/common/svg-huerotate.c
+@@ -63,11 +78,13 @@ operations/common/svg-luminancetoalpha.c
+ operations/common/svg-matrix.c
+ operations/common/svg-saturate.c
+ operations/common/threshold.c
++operations/common/tile.c
+ operations/common/unsharp-mask.c
+ operations/common/value-invert.c
+ operations/common/vignette.c
+ operations/common/waves.c
+ operations/common/weighted-blend.c
++operations/common/wind.c
+ operations/common/write-buffer.c
+ operations/core/clone.c
+ operations/core/convert-format.c
+@@ -101,10 +118,10 @@ operations/generated/darken.c
+ operations/generated/difference.c
+ operations/generated/divide.c
+ operations/generated/dst-atop.c
++operations/generated/dst.c
+ operations/generated/dst-in.c
+ operations/generated/dst-out.c
+ operations/generated/dst-over.c
+-operations/generated/dst.c
+ operations/generated/exclusion.c
+ operations/generated/gamma.c
+ operations/generated/hard-light.c
+@@ -115,25 +132,26 @@ operations/generated/plus.c
+ operations/generated/screen.c
+ operations/generated/soft-light.c
+ operations/generated/src-atop.c
++operations/generated/src.c
+ operations/generated/src-in.c
+ operations/generated/src-out.c
+ operations/generated/src-over.c
+-operations/generated/src.c
+ operations/generated/subtract.c
+ operations/generated/svg-multiply.c
+ operations/generated/xor.c
+ operations/transform/reflect.c
+ operations/transform/rotate.c
+ operations/transform/scale.c
++operations/transform/scale-ratio.c
++operations/transform/scale-size.c
+ operations/transform/shear.c
+-operations/transform/transform-core.c
+ operations/transform/transform.c
++operations/transform/transform-core.c
+ operations/transform/translate.c
+ operations/workshop/box-max.c
+ operations/workshop/box-min.c
+ operations/workshop/box-percentile.c
+ operations/workshop/buffer-cache.c
+-operations/workshop/color-reduction.c
+ operations/workshop/color-rotate.c
+ operations/workshop/convolution-matrix.c
+ operations/workshop/cubism.c
+@@ -158,7 +176,6 @@ operations/workshop/hstack.c
+ operations/workshop/kuwahara.c
+ operations/workshop/linear-gradient.c
+ operations/workshop/mandelbrot.c
+-operations/workshop/max-rgb.c
+ operations/workshop/noise-spread.c
+ operations/workshop/plasma.c
+ operations/workshop/radial-gradient.c
+diff --git a/po/de.po b/po/de.po
+new file mode 100644
+index 0000000..1794106
+--- /dev/null
++++ po/de.po
+@@ -0,0 +1,3444 @@
++# German translation for gegl.
++# Copyright (C) 2012 gegl's COPYRIGHT HOLDER
++# This file is distributed under the same license as the gegl package.
++# Mario Blättermann <mario.blaettermann at gmail.com>, 2012.
++# Christian Kirbach <Christian.Kirbach at googlemail.com>, 2012.
++#
++#: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
++#: ../operations/external/sdl-display.c:27
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl master\n"
++"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
++"product=gegl&keywords=I18N+L10N&component=general\n"
++"POT-Creation-Date: 2012-05-01 13:04+0000\n"
++"PO-Revision-Date: 2012-05-01 20:28+0200\n"
++"Last-Translator: Christian Kirbach <Christian.Kirbach at googlemail.com>\n"
++"Language-Team: Deutsch <gnome-de at gnome.org>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++"X-Poedit-Language: German\n"
++"X-Poedit-Country: GERMANY\n"
++
++#: ../gegl/gegl-init.c:216
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "Fehlertoleranz von babl, ein Wert zwischen 0.2 und 0.000000001"
++
++#: ../gegl/gegl-init.c:221
++msgid "Where GEGL stores its swap"
++msgstr "Wo GEGL den Auslagerungsspeicher abspeichert"
++
++#: ../gegl/gegl-init.c:226
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr ""
++"So viel Speicher wird ungefähr zum Zwischenspeichern von Bildern verwendet"
++
++#: ../gegl/gegl-init.c:231
++msgid "Default size of tiles in GeglBuffers"
++msgstr "Voreingestellte Größe von Kacheln in GeglBuffers"
++
++#: ../gegl/gegl-init.c:236
++msgid "The count of pixels to compute simultaneously"
++msgstr "Anzahl der Bildpunkte, die gleichzeitig berechnet werden"
++
++#: ../gegl/gegl-init.c:241
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr ""
++"Die Darstellungsqualität eines Punktes zwischen 0.0(schnell) and 1.0"
++"(Referenzwert)"
++
++#: ../gegl/gegl-init.c:246
++msgid "The number of concurrent processing threads to use"
++msgstr "Die Anzahl gleichzeitig berechnender Threads"
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr "Fehler beim Laden von Modul »%s«: %s"
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Modulfehler"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Geladen"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Laden fehlgeschlagen"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Nicht geladen"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "Weichzeichnenradius"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "Kantenbewahrung"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "Maß der Kantenbewahrung"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Radius"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr ""
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Kontrast"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr "Skalierungsfaktor des Umfangs"
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27
++msgid "Brightness"
++msgstr "Helligkeit"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr "Menge, um welche die Helligkeit erhöht werden soll"
++
++#: ../operations/common/brightness-contrast.c:145
++msgid "Changes the light level and contrast."
++msgstr "Lichtstärke und Kontrast ändern."
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "Pufferort"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr "Der Ort, wo die Ausgabe von GeglBuffer gespeichert werden soll"
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "babl-Format"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++"Das babl-Format der Ausgabe von GeglBuffer, NULL bedeutet Format des "
++"Eingabepuffers"
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:127
++msgid "A GEGL buffer destination surface."
++msgstr ""
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Eingabe-Puffer"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr "Der GeglBuffer, welcher in die Weiterleitung geladen werden soll"
++
++#: ../operations/common/buffer-source.c:122
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++#, fuzzy
++msgid "Samples"
++msgstr "Muster"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr "Iterationen"
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++
++#: ../operations/common/c2g.c:493
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial  color "
++"differences to perform color-feature preserving grayscale  spatial contrast "
++"enhancement"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Breite"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "Horizontale Breite der Zellen-Pixel"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Höhe"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "Vertikale Breite der Zellen-Pixel"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "X-Versatz"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "Horizontaler Versatz (vom Ursprung) für den Anfang des Rasters"
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Y-Versatz"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "Vertikaler Versatz (vom Ursprung) für den Anfang des Rasters"
++
++#: ../operations/common/checkerboard.c:33 ../operations/common/color.c:24
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/grid.c:36
++#: ../operations/common/rectangle.c:37 ../operations/common/vignette.c:25
++#: ../operations/external/text.c:31 ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Farbe"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "Andere Farbe"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr "Schachbrettmuster-Renderer"
++
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Ursprüngliche Temperatur"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++"Geschätzte Farbtemperatur der Lichtquelle in Kelvin bei Aufnahme des Bildes."
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Beabsichtigte Temperatur"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr "Korrigierte Schätzung der Farbtemperatur der Lichtquelle in Kelvin."
++
++#: ../operations/common/color-temperature.c:267
++msgid "Allows changing the color temperature of an image."
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:176
++msgid "Performs color-to-alpha on the image."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:25
++#, fuzzy
++msgid "Sample points"
++msgstr "Prüfpunkte"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Kurve"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr "Die Kontrastkurve."
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr "Passt den Kontrast des Bildes anhand einer Kurve an."
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Radius 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Radius 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr "Führt eine Kantenerkennung mittels zweier Gaußscher Weichzeichner aus."
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr "Titel für das Ausgabefenster"
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr "Den Eingabepuffer in einem Fenster darstellen"
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Deckkraft"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "Horizontaler Schatten-Versatz"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr "Vertikaler Schatten-Versatz"
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Erzeugt einen Schlagschatteneffekt im Eingabepuffer"
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr "Hochauflösende Kantenerkennung"
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Horizontal"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Vertikal"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "Signal behalten"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr "Spezialisierte richtungsabhängige Kantenerkennung"
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "Belichtungswerte"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr "Relative Helligkeit jeder Belichtung in EV"
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr "Sigma gewichten"
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distribution sigma controlling response contributions"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr "Mehrere Szenenbelichtungen in einen Puffer hoher Dynamik kombinieren"
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alpha"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Beta"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Sättigung"
++
++#: ../operations/common/fattal02.c:41
++msgid "Global color saturation factor"
++msgstr "Globaler Farbsättigungsfaktor"
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Rauschen"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr "Fraktaltyp"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr "Fraktaltyp"
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Links"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Rechts"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Oben"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Unten"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (nur Julia)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr "CY (nur Julia)"
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "Roter Modus"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "Grüner Modus"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "Blauer Modus"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "Rot-Umkehrung"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "Grün-Umkehrung"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "Blau-Umkehrung"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Farben"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Farbanzahl"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr "loglog-Glättung"
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr "loglog-Glättung verwenden"
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr "Fraktal-Explorer"
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "X-Größe"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++"Standardabweichung der horizontalen Achse. (mit ca. 2 multiplizieren, um den "
++"Radius zu erhalten)"
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Y-Größe"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++"Standardabweichung der vertikalen Achse. (mit ca. 2 multiplizieren, um den "
++"Radius zu erhalten)"
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:218
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filter"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "Datei"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr "Pfad zur zu ladenden GeglBuffer-Datei."
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr "GeglBuffer-Dateilader."
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr "Zielpfad zum Speichern des GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr "GeglBuffer-Dateischreiber."
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr "Das Bild in Graustufen umwandeln"
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "Linienbreite"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr "Die Breite der Rasterlinien in Pixel"
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "Linienhöhe"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr "Die Höhe der Rasterlinien in Pixel"
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr "Farbe der Rasterlinien"
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr "Rasterdarstellung"
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Knoten"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr "Zu inspizierender GeglNode"
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr ""
++
++#: ../operations/common/invert.c:86
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++"Kehrt die Komponenten um (außer Alpha), wobei das Ergebnis das entsprechende "
++"»Negativbild« ist."
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Operation"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr ""
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr "Horizontale Position"
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr "Vertikale Position"
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Skalierung"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr "Größe 1:1 skalieren"
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Quelle"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr "Quelldatei (png, jpg, raw, svg, bmp, tif, …)"
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr "Eine Ebene im traditionellen Sinn"
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr "Hauptwert:"
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr "Hauptwert der Verzerrung"
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Maßstab:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr "Kante:"
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr "Kantenwert der Verzerrung"
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr "Aufhellen:"
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr "Das Bild aufhellen"
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr "X-Verschiebung:"
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr "Horizontal verschieben"
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr "Y-Verschiebung:"
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr "Vertikal verschieben"
++
++#: ../operations/common/lens-distortion.c:321
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr "Kopiert das Bild mit einer Korrektur der Objektivverzerrung."
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr "Niedrige Eingabe"
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr "Eingabe-Leuchtkraft, die niedrigste Ausgabe werden soll"
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr "Hohe Eingabe"
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr "Eingabe-Leuchtkraft, die weiß werden soll"
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr "Niedrige Eingabe"
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr "Niedrigste Leuchtkraftstufe in der Ausgabe"
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr "Hohe Eingabe"
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr "Höchste Leuchtkraftstufe in der Ausgabe"
++
++#: ../operations/common/levels.c:182
++msgid "Remaps the intensity range of the image"
++msgstr "Bildet den Intensitätsumfang des Bilds neu ab"
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr "%s"
++
++#: ../operations/common/load.c:180
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using image magick's convert."
++msgstr ""
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr "Menge der Kontrast-Kompression"
++
++#: ../operations/common/mantiuk06.c:36
++msgid "Global colour saturation factor"
++msgstr "Globaler Farbsättigungsfaktor"
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Detail"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Intern verwendeter Sampler"
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr "Skalieren"
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++
++#: ../operations/common/map-relative.c:156
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Anzahl der Iterationen"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr ""
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr ""
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr ""
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "Spiegeldrehung"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr "Auf die Spiegel angewendete Drehung"
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "Ergebnisdrehung"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr "Auf das Ergebnis angewendete Drehung"
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Spiegel"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "Anzahl der zu verwendenden Spiegel"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr "X-Versatz des Spiegelungsergebnisses"
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr "Y-Versatz des Spiegelungsergebnisses"
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "Mittelpunkt-X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr "X-Achsenverhältnis für den Mittelpunkt der Spiegelung"
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "Mittelpunkt-Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr "Y-Achsenverhältnis für den Mittelpunkt der Spiegelung"
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr "Y trimmen"
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr "Y trimmen"
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Vergrößern"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr ""
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr "Ausdehnen"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr "Ergebnis beschneiden"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr "Ergebnis auf Eingabegröße beschneiden"
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr "Kompletten Ausgabebereich füllen"
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr "Wendet einen Spiegelungseffekt auf das Bild an."
++
++#: ../operations/common/mono-mixer.c:26
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Rot"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:28
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Grün"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:30
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Blau"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr "Monochromer Kanalmixer"
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Länge"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr "Länge der Bewegungsunschärfe in Pixel"
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Winkel"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr "Winkel der Bewegungsunschärfe"
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr "Lineare Bewegungsunschärfe"
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Z-Versatz"
++
++#: ../operations/common/noise.c:31 ../operations/workshop/cubism.c:34
++#: ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr "Startwert"
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Iteration"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr "Perlin-Rauschgenerator"
++
++#: ../operations/common/noise-reduction.c:26 ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Stärke"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "Anzahl der Iterationen des Algorithmus"
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr "Ein GeglBuffer zum Öffnen vom Datenträger"
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr ""
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr "Porter-Duff-Operation over (d = cA + cB * (1 - aA))"
++
++#: ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Blockbreite"
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr "Die Breite der Blöcke in Pixel"
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr "Blockhöhe"
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr "Die Höhe der Blöcke in Pixel"
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr "Das Bild in eine Matrix einfarbiger Quadrate vereinfachen"
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr "Kreistiefe in Prozent"
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "Versatzwinkel"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "Versatzwinkel."
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr "Umgekehrt abbilden"
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr "Von rechts statt von links beginnen"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr "In Polarkoordinaten"
++
++#: ../operations/common/polar-coordinates.c:40
++#, fuzzy
++msgid "Map the image to a circle"
++msgstr "Das Bild in einer Datei speichern"
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr "Ursprung der Polarkoordinaten"
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "Mittelpunkt wählen"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:402
++#, fuzzy
++msgid "Performs polar-coordinates on the image."
++msgstr "Das Bild in oder von Polarkoordinaten umwandeln"
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Farbwerte"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr "Zahl der Stufen je Komponente"
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr ""
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr ""
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr "Horizontale Ausdehnung"
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr "Vertikale Ausdehnung"
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr "Farbe, die dargestellt werden soll"
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr "Eine rechteckige Quelle fester Größe, einfarbig"
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr "Gesamthelligkeit des Bilds"
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr "Chromatische Aberration"
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adapation to colour variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adapation to light variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range 0.0-"
++"1.0"
++msgstr ""
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr "Amplitude"
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++#, fuzzy
++msgid "Amplitude of the ripple"
++msgstr "Amplitude des Lesekopfflatterns"
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr "Periode"
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr "Phasenverschiebung"
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr "Winkel in Grad"
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "Wellentyp"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "Wellentyp"
++
++#: ../operations/common/ripple.c:169
++msgid "Transform the buffer with a ripple pattern"
++msgstr ""
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr "Pfad der zu speichernden Datei."
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr ""
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr "Paare"
++
++#: ../operations/common/snn-mean.c:29
++#, fuzzy
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr "Anzahl der Paare. Einen höhere Zahl bewahrt mehr ? Merkmale"
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Werte"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr "SVG Farbmatrix-Operation svg_huerotate"
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr "SVG Farbmatrix-Operation svg_luminancetoalpha"
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr "SVG Farbmatrix-Operation svg_matrix"
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr "SVG Farbmatrix-Operation svg_saturate"
++
++#: ../operations/common/threshold.c:25
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Schwellwert"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr "Std.abw."
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr "Standardabweichung (räumlicher Skalierungsfaktor)"
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr "Skalierung, Stärke des Effekts"
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++
++# Negativbild?
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++"Kehrt lediglich die Wert-Komponente um, so dass das Ergebnis das "
++"korrespondierende »umgekehrte« Bild ist."
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "Form"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "Zu verwendende Form: 0=Kreis 1=Raute 2=Quadrat"
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr ""
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr ""
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Gamma"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr ""
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "Proportion"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr "Horizontaler Mittelpunkt der Vignettierung"
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr "Vertikaler Mittelpunkt der Vignettierung"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Drehung"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "Drehwinkel"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr "X-Koordinate des Mittelpunkts der Wellen"
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr "Y-Koordinate des Mittelpunkts der Wellen"
++
++#: ../operations/common/waves.c:164
++msgid "Transform the buffer with waves"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Wert"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr ""
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr "In einen bestehenden GeglBuffer schreiben"
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "Referenz"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr ""
++
++#: ../operations/core/clone.c:112
++msgid "Clone a buffer"
++msgstr "Einen Puffer klonen"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Ausgabeformat"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr ""
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr "Daten in ein das angegebene Format umwandeln"
++
++#: ../operations/core/crop.c:179
++msgid "Crop a buffer"
++msgstr "Einen Puffer beschneiden"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr ""
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Pfad der zu ladenden Datei"
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr "Einzelbild"
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr "Einzelbildnummer"
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr "FFmpeg-Importeur für Videobilder"
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Unbekanntes JPEG2000-Bildformat in »%s«"
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "JPEG2000-Bild in »%s« konnte nicht geöffnet werden"
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr "Farbausgabeprofil für »%s« konnte nicht erzeugt werden"
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++"Bei der Verarbeitung von »%s« konnte das Bild nicht in den sRGB-Farbraum "
++"umgewandelt werden"
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr "Nicht unterstützte nicht-RGB JPEG2000-Datei mit %d Komponenten in »%s«"
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "Nicht unterstützte JPEG2000-Datei mit Tiefe %d in »%s«"
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr "Komponenten des Eingabebildes »%s« passen nicht zueinander"
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr "Ein oder mehrere R, G, B - Komponenten fehlen in »%s« "
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr "Fehler beim Lesen von Zeile %d Komponente %d von »%s«"
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr "JPEG2000-Bildlader"
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr "JPG-Bildlader"
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr "Zielpfad und Dateiname, für die Standardausgabe verwenden Sie »-«"
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Qualität"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr "Qualität der JPEG-Kompression (zwischen 1 und 100)"
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr "Glätten"
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr "Glättungsfaktor von 1 bis 100; 0 deaktiviert die Glättung"
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Optimieren"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr "Optimierte Huffman-Tabellen verwenden"
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Progressiv"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr "Progressive JPEG-Bilder erstellen"
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Graustufen"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr "Ein Graustufen-Bild erstellen"
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilon"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Protokoll der Fehlergewichtung"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Radius des Verarbeitungsfensters"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Füllfarbe"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr ""
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr "Zum Zeichnen zu verwendende Farbe"
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr "Pinselbreite"
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr ""
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr "Deckkraft des Pinsels"
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "Härte"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr ""
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr "Füllregel"
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd"
++msgstr ""
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Transformieren"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr "SVG-Stilbeschreibung der Transformation"
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr "Füll-Deckkraft"
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr "Die zu verwendende Deckkraft der Füllung"
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr "Vektor"
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr ""
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "Zu verwendendes GdkPixbuf"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr ""
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr "PNG-Bildlader."
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr "Zielpfad und Dateiname, für die Standardausgabe verwenden Sie »-«."
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Kompression"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr "PNG-Kompressionsstufe zwischen 1 und 9"
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Bit-Tiefe"
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr "8 und 16 sind unter den derzeit akzeptierten Werten."
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr "PPM-Bildlader."
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Raw-Format"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr "PPM-Bildspeicher (Portabler Pixmap-Speicherer.)"
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr ""
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr "Ort des Pixbuf"
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr "Der Ort, wo die Ausgabe von GdkPixbuf gespeichert werden soll."
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr "Ausgabe in ein GdkPixbuf speichern."
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr "Für das Ausgabefenster zu verwendendes Symbol"
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr "Pfad zur zu ladenden SVG-Datei"
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr "Breite des gerenderten Bildes"
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr "Höhe des gerenderten Bildes"
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:245
++msgid "Load an SVG file using librsvg"
++msgstr "Eine SVG-Datei mittels librsvg laden"
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Text"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr "Darzustellende Zeichenkette (UTF-8)"
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Schriftfamilie"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr "Schriftfamilie (utf8)"
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Größe"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr "Ungefähre Texthöhe in Pixel."
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr "Farbe des Texts (Vorgabe ist »white«)"
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr "Umbruchbreite"
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr "Ausrichtung"
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr "Anordnung für mehrzeiligen Text (0=Links, 1=Mitte, 2=Rechts)"
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr "Gerenderte Breite in Pixel (schreibgeschützt)"
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr "Gerenderte Höhe in Pixel (schreibgeschützt)"
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr "Eine Textzeichenkette mittels Pango und Cairo anzeigen."
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Pfad"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr "Pfad zu v4l-Gerät"
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++"Aktuelle Einzelbildnummer, kann geändert werden, um das Bild neu laden zu "
++"lassen."
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "Bilder pro Sekunde"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr ""
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:28
++#, fuzzy
++msgid "Color of paint to use for filling."
++msgstr "Die für ungerade Zeilen zu verwendende Farbe"
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr "Die zu verwendende Deckkraft der Füllung."
++
++#: ../operations/external/vector-fill.c:33
++#, fuzzy
++msgid "Fill rule."
++msgstr "Füllregel"
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd"
++msgstr ""
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr "SVG-Stilbeschreibung der Transformation."
++
++#: ../operations/external/vector-fill.c:258
++msgid "Renders a filled region"
++msgstr "Rendert eine gefüllte Region"
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr "Zum Zeichnen zu verwendende Farbe"
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr ""
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr "Mathematische Operation addieren (c = c + Wert)"
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr "Porter-Duff-Operation clear (d = 0.0f)"
++
++#: ../operations/generated/color-burn.c:117
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/color-dodge.c:117
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/darken.c:115
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/difference.c:115
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr "Mathematische Operation dividieren (c = Wert==0.0f?0.0f:c/Wert)"
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr "Porter-Duff-Operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr "Porter-Duff-Operation dst (d = cB)"
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr "Porter-Duff-Operation dst-in (d = cB * aA)"
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr "Porter-Duff-Operation dst-out (d = cB * (1.0f - aA))"
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr "Porter-Duff-Operation dst-over (d = cB + cA * (1.0f - aB))"
++
++#: ../operations/generated/exclusion.c:115
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr ""
++
++#: ../operations/generated/hard-light.c:117
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/lighten.c:115
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr "Mathematische Operation multiplizieren (c = c * Wert)"
++
++#: ../operations/generated/overlay.c:117
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/plus.c:115
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr ""
++
++#: ../operations/generated/screen.c:115
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr ""
++
++#: ../operations/generated/soft-light.c:119
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr "Porter-Duff-Operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr "Porter-Duff-Operation src (d = cA)"
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr "Porter-Duff-Operation src-in (d = cA * aB)"
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr "Porter-Duff-Operation src-out (d = cA * (1.0f - aB))"
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr "Porter-Duff-Operation src-over (d = cA + cB * (1.0f - aA))"
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr "Mathematische Operation subtrahieren (c = c - Wert)"
++
++#: ../operations/generated/svg-multiply.c:115
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++"SVG-Blend-Operation multiplizieren (<code>d = cA * cB +  cA * (1 - aB) + cB "
++"* (1 - aA)</code>)"
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr "Porter-Duff-Operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr ""
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr ""
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Drehwinkel (im Uhrzeigersinn)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Den Puffer um den angegebenen Ursprung drehen"
++
++#: ../operations/transform/scale.c:29 ../operations/transform/scale-ratio.c:26
++msgid "Horizontal scale factor"
++msgstr "Horizontaler Skalierungsfaktor"
++
++#: ../operations/transform/scale.c:31 ../operations/transform/scale-ratio.c:28
++msgid "Vertical scale factor"
++msgstr "Vertikaler Skalierungsfaktor"
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr "Skaliert den Puffer."
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr "Skaliert den Puffer entsprechend eines Seitenverhältnisses."
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Horizontale Größe"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Vertikale Größe"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr "Skaliert den Puffer entsprechend einer Größe."
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Schert den Puffer"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Transformations-Zeichenkette"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr ""
++
++#: ../operations/transform/transform-core.c:202
++msgid "Origin-x"
++msgstr "X-Ursprung"
++
++#: ../operations/transform/transform-core.c:203
++msgid "X coordinate of origin"
++msgstr "X-Koordinate des Ursprungs"
++
++#: ../operations/transform/transform-core.c:210
++msgid "Origin-y"
++msgstr "Y-Ursprung"
++
++#: ../operations/transform/transform-core.c:211
++msgid "Y coordinate of origin"
++msgstr "Y-Koordinate des Ursprungs"
++
++#: ../operations/transform/transform-core.c:219
++#, fuzzy
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Filtertyp (nahester, linear, Lanczos, kubisch, lohalo)"
++
++#: ../operations/transform/transform-core.c:225
++#: ../operations/transform/transform-core.c:226
++msgid "Hard edges"
++msgstr "Harte Kanten"
++
++#: ../operations/transform/transform-core.c:232
++msgid "Lanczos width"
++msgstr "Lanczos-Breite"
++
++#: ../operations/transform/transform-core.c:233
++msgid "Width of the Lanczos function"
++msgstr "Breite der Lanczos-Funktion"
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Horizontale Verschiebung"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Vertikale Verschiebung"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr "Prozentsatz"
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr "Zwischenspeicher-Puffer"
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr "Der GeglBuffer zum Zwischenspeichern"
++
++#: ../operations/workshop/buffer-cache.c:103
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++"Den Eingabepuffer intern zwischenspeichern, so dass er in der weiteren "
++"Verarbeitung als Eingabe verwendet wird."
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Red bits"
++msgstr "Rote Bits"
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Number of bits for red channel"
++msgstr "Anzahl der Bits für den Rot-Kanal"
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Green bits"
++msgstr "Grüne Bits"
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Number of bits for green channel"
++msgstr "Anzahl der Bits für den Grün-Kanal"
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Blue bits"
++msgstr "Blaue Bits"
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Number of bits for blue channel"
++msgstr "Anzahl der Bits für den Blau-Kanal"
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Alpha bits"
++msgstr "Alpha-Bits"
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Number of bits for alpha channel"
++msgstr "Anzahl der Bits für den Alpha-Kanal"
++
++#: ../operations/workshop/color-reduction.c:29
++msgid "Dither"
++msgstr "Halbton"
++
++#: ../operations/workshop/color-reduction.c:30
++msgid ""
++"Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:459
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Im Uhrzeigersinn"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "Von:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr "Startwinkel für die Farbdrehung"
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "Bis:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr "Endwinkel für die Farbdrehung"
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Farbton"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr "Der Wert des Farbtons"
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr "Wert der Sättigung"
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr "Schwellenwert für Grau"
++
++#: ../operations/workshop/color-rotate.c:385
++msgid "Rotate colors on the image"
++msgstr "Farben im Bild drehen"
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr "Der Wert des Elements an Position (1,1)"
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr "Der Wert des Elements an Position (1,2)"
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr "Der Wert des Elements an Position (1,3)"
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr "Der Wert des Elements an Position (1,4)"
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr "Der Wert des Elements an Position (1,5)"
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr "Der Wert des Elements an Position (2,1)"
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr "Der Wert des Elements an Position (2,2)"
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr "Der Wert des Elements an Position (2,3)"
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr "Der Wert des Elements an Position (2,4)"
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr "Der Wert des Elements an Position (2,5)"
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr "Der Wert des Elements an Position (3,1)"
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr "Der Wert des Elements an Position (3,2)"
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr "Der Wert des Elements an Position (3,3)"
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr "Der Wert des Elements an Position (3,4)"
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr "Der Wert des Elements an Position (3,5)"
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr "Der Wert des Elements an Position (4,1)"
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr "Der Wert des Elements an Position (4,2)"
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr "Der Wert des Elements an Position (4,3)"
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr "Der Wert des Elements an Position (4,4)"
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr "Der Wert des Elements an Position (4,5)"
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr "Der Wert des Elements an Position (5,1)"
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr "Der Wert des Elements an Position (5,2)"
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr "Der Wert des Elements an Position (5,3)"
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr "Der Wert des Elements an Position (5,4)"
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr "Der Wert des Elements an Position (5,5)"
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr "Divisor: "
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr "Der Wert des Divisors"
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr "Versatz:"
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr "Der Wert des Versatzes"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "Normalisieren"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "Normalisieren oder nicht"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "Roter Kanal"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "Grüner Kanal"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "Blauer Kanal"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "Alphakanal"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr "Alpha-Gewichtung"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr "Alpha-Gewichtung"
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr "Rand"
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose.Choices are extend, wrap, crop.Default is extend"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "Kachelgröße"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Anfangswert für Zufallszahlen"
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "Gerade/Ungerade"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr "Horizontal/Vertikal"
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr "Horizontal oder vertikal auswählen"
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr "Blockgröße"
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr "Fügt die Halbbilder des Bildes zusammen"
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr "Bayer-Muster"
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++
++#: ../operations/workshop/ditto.c:111
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Azimut"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr "Der Azimut-Wert"
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Tiefe"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr "Pixeltiefe"
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++"Optionaler Parameter, der die automatische Auswahl des Relieffilters "
++"überschreibt. Möglich sind »emboss« und »blur-map«"
++
++#: ../operations/workshop/emboss.c:248
++#, fuzzy
++msgid "Simulates an image created by embossing"
++msgstr "Ein Reliefbild simulieren"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Bitrate"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr "Ziel-Bitrate"
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr "Bilder pro Sekunde"
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr "Ziel der FFmpeg-Videoausgabe"
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr "Skript"
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr "Benutzerwert"
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr "Hersteller:"
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr "Schreiben Sie den Objektivhersteller richtig"
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Kamera:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr "Geben Sie den Kameranamen richtig an"
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr "Objektiv:"
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with majuscules"
++msgstr "Schreiben Sie das Objektivmodell in Großbuchstaben"
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr "Brennweite der Kamera"
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "Mitte"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr "Maßstab des Bildes"
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr "Modell rot a:"
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr "Korrekturparameter für jeden Farbkanal"
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr "Modell rot b:"
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr "Modell rot c:"
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr "Modell rot d:"
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr "Modell grün a:"
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr "Modell grün b:"
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr "Modell grün c:"
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr "Modell grün d:"
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr "Modell blau a:"
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr "Modell blau a:"
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr "Modell blau c:"
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr "Modell blau d:"
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr "Modell alpha a:"
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr "Korrekturparameter für Alphakanal"
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr "Modell alpha b:"
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr "Modell alpha c:"
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr "Modell alpha d:"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr "X-Startkoordinate"
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr "X-Endkoordinate"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr "Y-Startkoordinate"
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr "Y-Endkoordinate"
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr "Breite der Darstellungsfläche"
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr "Höhe der Darstellungsfläche"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Min"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr "Wert unten"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Max"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr "Wert oben"
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr "Fraktal"
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "X1-Wert, Position"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "X2-Wert, Position"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Y2-Wert, Position"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr "Tiefenwert"
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Background"
++msgstr "Hintergrund"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid ""
++"Optional parameter to override automatic selection of wrap background. "
++"Choices are wrap, black, white and transparent."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:171
++msgid "Unsupported fractal type"
++msgstr "Nicht unterstützter Fraktaltyp"
++
++#: ../operations/workshop/fractal-trace.c:321
++msgid "Performs fractal trace on the image"
++msgstr ""
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr ""
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "Eine Seite eines Farbverlaufs"
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr "Die andere Seite eines Farbverlaufs"
++
++#: ../operations/workshop/linear-gradient.c:137
++msgid "Linear gradient renderer"
++msgstr "Linearer Farbverlauf-Renderer"
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "Real"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "Reale Koordinate"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "Imaginär"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr "Imaginäre Koordinate"
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Stufe"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Wasserstufe"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr "Maximale Anzahl der Wiederholungen"
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr "Darstellung einer Mandelbrot-Menge"
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr ""
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr "Turbulenz"
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Ein Ende des Farbverlaufs"
++
++#: ../operations/workshop/radial-gradient.c:129
++msgid "Radial gradient renderer"
++msgstr "Radialer Farbverlauf-Renderer"
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr "Der Grenzwert"
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr "Führt eine Rote-Augen-Reduzierung im Bild aus"
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr "Stärke des Effekts"
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr "Effektgröße"
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Effektstärke"
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr ""
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Verhalten"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr ""
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "Wirbel"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr "Wirbelwinkel (Grad)"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr "Drücken"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr ""
++
++#~ msgid "Sampler used internaly"
++#~ msgstr "Intern genutzter Sampler"
++
++#~ msgid "Minimal"
++#~ msgstr "Minimal"
++
++#~ msgid "Reduce image to pure red, green, and blue"
++#~ msgstr "Das Bild auf reines Rot, Grün und Blau reduzieren"
+diff --git a/po/el.po b/po/el.po
+new file mode 100644
+index 0000000..f7148b3
+--- /dev/null
++++ po/el.po
+@@ -0,0 +1,4049 @@
++# Greek translation for gegl.
++# Copyright (C) 2012 gegl's COPYRIGHT HOLDER
++# This file is distributed under the same license as the gegl package.
++# Dimitris Spingos <dmtrs32 at gmail.com>, 2012.
++# Dimitris Spingos (Δημήτρης  Σπίγγος) <dmtrs32 at gmail.com>, 2012.
++# Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32 at gmail.com>, 2012.
++#: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
++#: ../operations/external/sdl-display.c:27
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl master\n"
++"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gegl&k"
++"eywords=I18N+L10N&component=general\n"
++"POT-Creation-Date: 2012-09-22 23:20+0000\n"
++"PO-Revision-Date: 2012-10-23 17:58+0300\n"
++"Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32 at gmail.com>\n"
++"Language-Team: team at gnome.gr\n"
++"Language: el\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++"X-Generator: Virtaal 0.7.0\n"
++"X-Project-Style: gnome\n"
++
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++"χρήση: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      πληροφορίες βοήθειας\n"
++"\n"
++"     -i, --file      ανάγνωση xml από επώνυμο αρχείο\n"
++"\n"
++"     -x, --xml       χρήση xml που δίνεται στο επόμενο όρισμα\n"
++"\n"
++"     --dot           έξοδος γραφικής περιγραφής graphviz\n"
++"\n"
++"     -o, --output    έξοδος δημιουργημένης εικόνας σε επώνυμο αρχείο, με "
++"βάση τον τύπο\n"
++"                     στην επέκταση.\n"
++"\n"
++"     -p              αυξητικοί μετρητές πλαισίου ποικίλων στοιχείων όταν\n"
++"                     γίνεται η επεξεργασία.\n"
++"\n"
++"     -X              έξοδος του XML που διαβάστηκε σε\n"
++"\n"
++"     -v, --verbose   εκτύπωση διαγνωστικών κατά την εκτέλεση\n"
++"\n"
++"Όλες οι παράμετροι που ακολουθούν -- θεωρούνται λειτουργίες που συνδέονται "
++"μαζί\n"
++"σε μια μικρή σύνθεση αντί για χρήση αρχείου xml, αυτό επιτρέπει\n"
++"εύκολη δοκιμή των φίλτρων. Να ξέρετε ότι η προεπιλεγμένη τιμή θα "
++"χρησιμοποιηθεί\n"
++"για όλες τις ιδιότητες.\n"
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr "ΣΦΑΛΜΑ: η επιλογή '%s' περίμενε όρισμα\n"
++
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr "Προβολή στην οθόνη"
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr "Εκτύπωση XML"
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr "Έξοδος σε αρχείο"
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
++msgstr "Εμφάνιση πληροφοριών βοήθειας"
++
++#: ../bin/gegl-options.c:124 ../bin/gegl.c:257
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr "Άγνωστη κατάσταση GeglOption: %d"
++
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
++msgstr "άγνωστη κατάσταση"
++
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++"Αναλυμένη γραμμή εντολών:\n"
++"\tκατάσταση:   %s\n"
++"\tαρχείο:      %s\n"
++"\txml:         %s\n"
++"\tέξοδος:      %s\n"
++"\tυπόλοιπο:    %s\n"
++"\t\n"
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
++msgstr ""
++"\n"
++"\n"
++"άγνωστη παράμετρος '%s' σας βοηθά αντί για\n"
++"\n"
++"\n"
++
++#: ../bin/gegl.c:147
++#, c-format
++#| msgid "Unable to create output color profile for '%s'"
++msgid "Unable to read file: %s"
++msgstr "Αδυναμία ανάγνωσης αρχείου: %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr "Άκυρο γράφημα, απόρριψη.\n"
++
++#: ../gegl/gegl-init.c:205
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "ανοχή σφάλματος babl, μια τιμή μεταξύ 0,2 και 0,000000001"
++
++#: ../gegl/gegl-init.c:210
++msgid "Where GEGL stores its swap"
++msgstr "Πού αποθηκεύει το GEGL την εναλλακτική μνήμη"
++
++#: ../gegl/gegl-init.c:215
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr "Πόση μνήμη για χρήση (περίπου) για επαναποθήκευση εικόνας"
++
++#: ../gegl/gegl-init.c:220
++msgid "Default size of tiles in GeglBuffers"
++msgstr "Προεπιλεγμένο μέγεθος παραθέσεων στο GeglBuffers"
++
++#: ../gegl/gegl-init.c:225
++msgid "The count of pixels to compute simultaneously"
++msgstr "Ο αριθμός των εικονοστοιχείων για ταυτόχρονο υπολογισμό"
++
++#: ../gegl/gegl-init.c:230
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr "Η ποιότητα απόδοσης μιας τιμής μεταξύ 0,0 (γρήγορη) και 1,0 (αναφορά)"
++
++#: ../gegl/gegl-init.c:235
++msgid "The number of concurrent processing threads to use"
++msgstr "Ο αριθμός των σύγχρονων νημάτων επεξεργασίας για χρήση"
++
++#: ../gegl/gegl-init.c:240
++msgid "Use OpenCL"
++msgstr "Χρήση OpenCL"
++
++#: ../gegl/gegl-init.c:245
++msgid "Maximum number of entries in the file tile backend's writer queue"
++msgstr ""
++"Μέγιστος αριθμός καταχωρίσεων στην παράθεση αρχείου της ουράς συγγραφής "
++"οπισθοφυλακής"
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr "Άρθρωμα '%s' σφάλμα φόρτωσης: %s"
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Σφάλμα αρθρώματος"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Φορτωμένο"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Αποτυχία φόρτωσης"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Δε φορτώθηκε"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "Ακτίνα θόλωσης"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++"Ακτίνα της τετράγωνης περιοχής εικονοστοιχείου, (πλάτος και ύψος θα είναι "
++"ακτίνα*2+1)."
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "Διατήρηση άκρης"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "Ποσότητα διατήρησης άκρης"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++"Μια άκρη που διατηρεί φίλτρο θόλωσης που μπορεί να χρησιμοποιηθεί για μείωση "
++"θορύβου. Είναι ένα φίλτρο Gauss, όπου η συμμετοχή των γειτονικών "
++"εικονοστοιχείων σταθμίζεται από τη χρωματική διαφορά από το κεντρικό "
++"εικονοστοιχείο."
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Ακτίνα"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++"Ακτίνα της τετράγωνης περιοχής εικονοστοιχείου, (πλάτος και ύψος θα είναι "
++"ακτίνα*2+1)"
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr "Υπολογίζει ένα μέσο όρο του τετράγωνου πλαισίου των εικονοστοιχείων"
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Αντίθεση"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr "Συντελεστής κλίμακας περιοχής"
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27 ../operations/common/softglow.c:27
++msgid "Brightness"
++msgstr "Φωτεινότητα"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr "Ποσότητα για αύξηση φωτεινότητας"
++
++#: ../operations/common/brightness-contrast.c:159
++msgid "Changes the light level and contrast."
++msgstr "Αλλάζει τη στάθμη φωτός και αντίθεσης."
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "Τοποθεσία μνήμης"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr "Η τοποθεσία αποθήκευσης της εξόδου GeglBuffer"
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "μορφή babl"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++"Η μορφή babl της εξόδου GeglBuffer, NULL για χρήση μορφής μνήμης εισόδου"
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:132
++msgid "A GEGL buffer destination surface."
++msgstr "Μια επιφάνεια προορισμού μνήμης GEGL."
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Μνήμη εισόδου"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr "Η GeglBuffer για φόρτωση στη συνεχή διοχέτευση"
++
++#: ../operations/common/buffer-source.c:177
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++"Μια πηγή που χρησιμοποιεί μια μνήμη GeglBuffer, για εσωτερική χρήση από το "
++"GEGL."
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++"Οι γειτονιές που λαμβάνονται υπόψη, αυτή είναι η ακτίνα σε εικονοστοιχεία "
++"που λαμβάνονται υπόψη όταν αποφασίζεται ποια χρώματα απεικονίζονται σε ποιες "
++"γκρι τιμές"
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr "Δείγματα"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++"Αριθμός δειγμάτων να γίνουν ανά αναζήτηση επανάληψης στην περιοχή των "
++"χρωμάτων"
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr "Επαναλήψεις"
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++"Αριθμός επαναλήψεων, ένας υψηλότερος αριθμός επαναλήψεων παρέχει λιγότερα "
++"θορυβώδη αποτελέσματα ανά υπολογιστικό κόστος"
++
++#: ../operations/common/c2g.c:493
++#| msgid ""
++#| "Color to grayscale conversion, uses envelopes formed from spatial  color "
++#| "differences to perform color-feature preserving grayscale  spatial "
++#| "contrast enhancement"
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial color "
++"differences to perform color-feature preserving grayscale spatial contrast "
++"enhancement"
++msgstr ""
++"Το χρώμα για μετατροπή σε γκρι κλίμακα, χρησιμοποιεί φακέλους σχηματισμένους "
++"από χρωματικές διαφορές χώρου για εκτέλεση χρωματικών γνωρισμάτων που "
++"διατηρούν τη βελτίωση αντίθεσης χώρου γκρι κλίμακας"
++
++#: ../operations/common/cartoon.c:25
++#| msgid "Blur radius"
++msgid "Mask radius"
++msgstr "Ακτίνα μάσκας"
++
++#: ../operations/common/cartoon.c:27
++#| msgid "Percentile"
++msgid "Percent black"
++msgstr "Ποσοστό μαύρου"
++
++#: ../operations/common/cartoon.c:376
++msgid "Cartoon effect"
++msgstr "Αποτέλεσμα σκίτσου"
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Πλάτος"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "Οριζόντιο πλάτος κελιών σε εικονοστοιχεία"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Ύψος"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "Κάθετο πλάτος κελιών σε εικονοστοιχεία"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "Αντιστάθμιση X"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "Οριζόντια αντιστάθμιση (από το αρχικό) για αρχή του πλέγματος"
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Αντιστάθμιση Υ"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "Κάθετη αντιστάθμιση (από το αρχικό) για αρχή του πλέγματος"
++
++#: ../operations/common/checkerboard.c:33
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:24
++#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
++#: ../operations/common/vignette.c:25 ../operations/external/text.c:31
++#: ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Χρώμα"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr "Ένα από τα χρώματα κελιού (προεπιλογή σε 'μαύρο')"
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "Άλλο χρώμα"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr "Το άλλο χρώμα κελιού (προεπιλογή σε 'άσπρο')"
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr "Απόδοση σκακιέρας"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr "Κόκκινα δυαδικά"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr "Αριθμός δυαδικών για το κόκκινο κανάλι"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr "Πράσινα δυαδικά"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr "Αριθμός δυαδικών για το πράσινο κανάλι"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr "Γαλάζια δυαδικά"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr "Αριθμός δυαδικών για το γαλάζιο κανάλι"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr "Δυαδικά άλφα"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr "Αριθμός δυαδικών για το κανάλι άλφα"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr "Στρατηγική πρόσμειξης"
++
++#: ../operations/common/color-reduction.c:39
++msgid "The dithering strategy to use"
++msgstr "Η στρατηγική πρόσμειξης για χρήση"
++
++#: ../operations/common/color-reduction.c:495
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++"Μειώνει τον αριθμό των δυαδικών ανά κανάλι (χρώματα και άλφα), με "
++"προαιρετική πρόσμειξη"
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Αρχική θερμοκρασία"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr "Εκτιμώμενη θερμοκρασία της πηγής φωτός σε Κέλβιν που ελήφθη η εικόνα."
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Σκοπούμενη θερμοκρασία"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr "Διορθωμένη εκτίμηση της θερμοκρασίας της πηγής φωτός σε Κέλβιν."
++
++#: ../operations/common/color-temperature.c:280
++msgid "Allows changing the color temperature of an image."
++msgstr "Να επιτρέπεται η αλλαγή της θερμοκρασίας χρώματος εικόνας."
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr "Χρώμα για απόδοση (προεπιλογή σε 'μαύρο')"
++
++#: ../operations/common/color-to-alpha.c:197
++msgid "Performs color-to-alpha on the image."
++msgstr "Εκτελεί χρώμα σε άλφα στην εικόνα."
++
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr "Χρώμα για απόδοση (προεπιλογή σε 'μαύρο')"
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++"Γεννά μνήμη πλήρως γεμάτη με το συγκεκριμένο χρώμα, περικοπή του για "
++"μικρότερες διαστάσεις."
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "Σημεία δειγματοληψίας"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr "Αριθμός καμπυλών σημείων δειγματοληψίας. 0 για ακριβή υπολογισμό."
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Καμπύλη"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr "Η καμπύλη αντίθεσης."
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr "Ρυθμίζει την αντίθεση της εικόνας σύμφωνα με μια καμπύλη."
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Ακτίνα 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Ακτίνα 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr "Κάνει ανίχνευση άκρης βασισμένη στη διαφορά δύο θολώσεων Gauss."
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr "Αποδιδόμενος τίτλος στο παράθυρο εξόδου"
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr "Εμφάνιση της μνήμης εισόδου σε παράθυρο."
++
++#: ../operations/common/dot.c:26 ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Πλάτος ομάδας"
++
++#: ../operations/common/dot.c:27
++msgid "Size of each block in pixels"
++msgstr "Πλάτος κάθε ομάδας σε εικονοστοιχεία"
++
++#: ../operations/common/dot.c:28
++msgid "Dot size ratio"
++msgstr "Λόγος μεγέθους κουκκίδας"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr "Λόγος μεγέθους μιας κουκκίδας μέσα σε κάθε ομάδα"
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr "Απλοποίηση εικόνας σε έναν πίνακα κουκίδων με συμπαγή χρώματα"
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Αδιαφάνεια"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "Χ"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "Οριζόντια αντιστάθμιση σκιάς"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Υ"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr "Κάθετη αντιστάθμιση σκιάς"
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Δημιουργεί εφέ πίπτουσας σκιάς στη μνήμη εισόδου"
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr "Ανίχνευση άκρης υψηλής ανάλυσης"
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Οριζόντια"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Κάθετη"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "Διατήρηση σήματος"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr "Εξειδικευμένη ανίχνευση κατευθυνσιοεξαρτώμενου άκρου"
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "Τιμές έκθεσης"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr "Σχετική λαμπρότητα κάθε έκθεσης σε EV"
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr "Δυαδικά διακριτοποίησης"
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr "Log2 των βημάτων διακριτοποίησης της πηγής"
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr "Σίγμα βάρος"
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distribution sigma controlling response contributions"
++msgstr "Σίγμα κατανομή βάρους που ελέγχει τις συνεισφορές απάντησης"
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr "Συνδυασμός πολλαπλών εκθέσεων σκηνών σε μια μνήμη μεγάλης περιοχής"
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise-rgb.c:37
++#: ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Άλφα"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr "Όριο διαβάθμισης για λεπτομερή βελτίωση"
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Βήτα"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr "Ισχύς τοπικής βελτίωσης λεπτομέρειας"
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/common/noise-hsv.c:31
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Κορεσμός"
++
++#: ../operations/common/fattal02.c:41 ../operations/common/mantiuk06.c:36
++msgid "Global color saturation factor"
++msgstr "Συντελεστής γενικού χρωματικού κορεσμού"
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Θόρυβος"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr "Όριο διαβάθμισης για μείωση βελτίωσης λεπτομέρειας"
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Προσαρμογή εικόνας, που μπορεί να έχει μια υψηλή δυναμική περιοχή, για "
++"παρουσίαση χρησιμοποιώντας μια χαμηλή δυναμική περιοχή. Αυτός ο τελεστής "
++"εξασθενεί τα μεγέθη των τοπικών διαβαθμίσεων εικόνας, παράγοντας φωτεινότητα "
++"στην περιοχή 0,0-1,0"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr "Τύπος κλαστικού"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr "Τύπος ενός κλαστικού"
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Αριστερά"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Δεξιά"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Επάνω"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Κάτω"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (μόνο Julia)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr "CY (μόνο Julia)"
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr "Επιμήκυνση κόκκινου"
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr "Συντελεστής επιμήκυνσης κόκκινου"
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr "Επιμήκυνση πράσινου"
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr "Συντελεστής επιμήκυνσης πράσινου"
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr "Επιμήκυνση γαλάζιου"
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr "Συντελεστής επιμήκυνσης γαλάζιου"
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "Λειτουργία κόκκινου"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Λειτουργία εφαρμογής κόκκινου (0:ημίτονο, 1:συνημίτονο, 2:τίποτα)"
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "Λειτουργία πράσινου"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Λειτουργία εφαρμογής πράσινου (0:ημίτονο, 1:συνημίτονο, 2:τίποτα)"
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "Λειτουργία γαλάζιου"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Λειτουργία εφαρμογής γαλάζιου (0:ημίτονο, 1:συνημίτονο, 2:τίποτα)"
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "Αντιστροφή κόκκινου"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "Αντιστροφή πράσινου"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "Αντιστροφή γαλάζιου"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Χρώματα"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Αριθμός χρωμάτων"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr "Εξομάλυνση λογαριθμικών κλιμάκων"
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr "Χρήση εξομάλυνσης λογαριθμικών κλιμάκων"
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr "Περιηγητής κλαστικών"
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "Μέγεθος Χ"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++"Τυπική απόκλιση για τον οριζόντιο άξονα. (πολλαπλασιασμός με ~2 για λήψη "
++"ακτίνας)"
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Μέγεθος Υ"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++"Τυπική απόκλιση για τον κάθετο άξονα. (πολλαπλασιασμός με ~2 για λήψη "
++"ακτίνας.)"
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Φίλτρο"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++"Προαιρετική παράμετρος για υπερίσχυση της αυτόματης επιλογής του φίλτρου "
++"θόλωσης. Οι επιλογές είναι fir, iir, auto."
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++"Βρίσκει το μέσο όρο των γειτονικών εικονοστοιχείων με την κανονική κατανομή "
++"ως αντιστάθμιση"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "Αρχείο"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr "Διαδρομή του αρχείου GeglBuffer για φόρτωση."
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr "Φορτωτής αρχείου GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr "Διαδρομή στόχου αρχείου για εγγραφή σε GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr "Εγγραφή αρχείου GeglBuffer."
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr "Μετατρέπει την εικόνα σε γκρι κλίμακα"
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "Πλάτος γραμμής"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr "Πλάτος των γραμμών πλέγματος σε εικονοστοιχεία"
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "Ύψος Γραμμής"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr "Ύψος των γραμμών πλέγματος σε εικονοστοιχεία"
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr "Χρώμα των γραμμών πλέγματος"
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr "Απόδοση πλέγματος"
++
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr "Εσφαλμένα εικονοστοιχεία"
++
++#: ../operations/common/image-compare.c:26
++#| msgid "Number of iterations"
++msgid "Number of differing pixels."
++msgstr "Αριθμός διαφοροποιημένων εικονοστοιχείων."
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Μέγιστη διαφορά"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "Μέγιστη διαφορά μεταξύ δύο εικονοστοιχείων."
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr "Μέσος όρος διαφοράς (λάθος)"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr "Μέσος όρος διαφοράς μεταξύ εσφαλμένων εικονοστοιχείων."
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr "Μέσος όρος διαφοράς (σύνολο)"
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr "Μέσος όρος διαφοράς μεταξύ όλων των εικονοστοιχείων."
++
++#: ../operations/common/image-compare.c:177
++msgid ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
++msgstr ""
++"Συγκρίνει εάν η είσοδος και τα βοηθητικά των ενδιάμεσων μνημών είναι "
++"διαφορετικά. Τα αποτελέσματα αποθηκεύονται στις ιδιότητες."
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Κόμβος"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr "GeglNode για αυτοέλεγχο"
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr "Οπτικοποιητής γραφικού GEGL."
++
++#: ../operations/common/invert.c:86
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++"Αντιστρέφει τα συστατικά (εκτός από άλφα), το αποτέλεσμα είναι η αντίστοιχη "
++"\"αρνητική\" εικόνα."
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Λειτουργία"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr "Σύνθετη λειτουργία για χρήση"
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr "Οριζόντια θέση"
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr "Κάθετη θέση"
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Κλίμακα"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr "Μέγεθος κλίμακας 1:1"
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Πηγή"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr "Πηγαίο μεταρχείο (png, jpg, raw, svg, bmp, tif, ...)"
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr "Μια στρώση στην παραδοσιακή έννοια"
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr "Κύρια:"
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr "Κύρια τιμή παραμόρφωσης"
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Εστίαση:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr "Άκρη:"
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr "Τιμή άκρης παραμόρφωσης"
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr "Λαμπρύνω:"
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr "Λάμπρυσμα της εικόνας"
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr "Μετατόπιση X:"
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr "Οριζόντια μετατόπιση"
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr "Μετατόπιση Y:"
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr "Κάθετη μετατόπιση"
++
++#: ../operations/common/lens-distortion.c:338
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr "Αντιγράφει εικόνα που εκτελεί διόρθωση παραμόρφωσης φακών."
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr "Χαμηλή είσοδος"
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr "Στάθμη φωτεινότητας εισόδου για να γίνει πολύ χαμηλή έξοδος"
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr "Υψηλή είσοδος"
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr "Στάθμη φωτεινότητας εισόδου για να γίνει λευκή."
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr "Χαμηλή έξοδος"
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr "Πολύ χαμηλή στάθμη φωτεινότητας στην έξοδο"
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr "Υψηλή έξοδος"
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr "Πολύ υψηλή στάθμη φωτεινότητας στην έξοδο"
++
++#: ../operations/common/levels.c:198
++msgid "Remaps the intensity range of the image"
++msgstr "Ξανααπεικονίζει την περιοχή έντασης της εικόνας"
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr "Διαδρομή αρχείου για φόρτωση."
++
++#: ../operations/common/load.c:180
++#| msgid ""
++#| "Multipurpose file loader, that uses other native handlers, and fallback "
++#| "conversion using image magick's convert."
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using Image Magick's convert."
++msgstr ""
++"Φόρτωση αρχείου πολλαπλών σκοπών, που χρησιμοποιεί άλλους εγγενείς χειριστές "
++"και μετατροπή ανάγκης χρησιμοποιώντας τη μετατροπή εικόνας του Magick."
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr "Κέλυφος εικόνας Magick χρησιμοποιώντας την επιλογή png."
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr "Η ποσότητα συμπίεσης αντίθεσης"
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Λεπτομέρεια"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr "Στάθμη έμφασης στις λεπτομέρειες διαβάθμισης εικόνας"
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Προσαρμογή εικόνας, που μπορεί να έχει μια υψηλή δυναμική περιοχή, για "
++"παρουσίαση χρησιμοποιώντας μια χαμηλή δυναμική περιοχή. Αυτός ο τελεστής "
++"περιορίζει τις αντιθέσεις κατά πλάτος πολλαπλών χωρικών συχνοτήτων, "
++"παράγοντας φωτεινότητα στην περιοχή 0,0-1,0"
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr "Δειγματοληψία"
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Εσωτερικά χρησιμοποιούμενη δειγματοληψία"
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++"είσοδος δείγματος με βοηθητική μνήμη που περιέχει απόλυτες συντεταγμένες "
++"πηγής"
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr "Κλιμάκωση"
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++"συντελεστής κλιμάκωσης μετατόπισης, δείχνει σε πόσο μεγάλη χωρική μετατόπιση "
++"μια σχετική τιμή απεικόνισης του 1,0 αντιστοιχεί."
++
++#: ../operations/common/map-relative.c:173
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++"είσοδος δείγματος με βοηθητική μνήμη που περιέχει σχετικές συντεταγμένες "
++"πηγής"
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Αριθμός επαναλήψεων"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++"Με δεδομένο έναν αραιό τριπλό χάρτη από το χρήστη και μια είσοδο εικόνας, "
++"δημιουργήστε ένα αστιλβές άλφα προσκήνιο. Ορίστε το λευκό ως προσκήνιο, το "
++"μαύρο ως παρασκήνιο για τον τριπλό χάρτη. Ο,τιδήποτε άλλο θα επεξεργαστεί ως "
++"άγνωστο και γεμάτο."
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr "Απόσβεση"
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr "Η τιμή αντιπροσωπεύει τη συμμετοχή του παλιού στο νέο πλαίσιο."
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr "Σώρευση θόλωσης κίνησης"
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "Περιστροφή κατόπτρου"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr "Εφαρμογή περιστροφής στα κάτοπτρα"
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "Περιστροφή αποτελέσματος"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr "Εφαρμογή περιστροφής στο αποτέλεσμα"
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Κάτοπτρα"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "Αριθμός κατόπτρων για χρήση"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr "Αντιστάθμιση Χ του αποτελέσματος κατοπτρισμού"
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr "Αντιστάθμιση Υ του αποτελέσματος κατοπτρισμού"
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "Κέντρο X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr "Λόγος άξονα Χ για το κέντρο κατοπτρισμού"
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "Κέντρο Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr "Λόγος άξονα Υ για το κέντρο κατοπτρισμού"
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr "Κόψιμο Χ"
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr "Λόγος άξονα Χ για κόψιμο επέκτασης κατόπτρου"
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr "Κόψιμο Υ"
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr "Λόγος άξονα Υ για κόψιμο επέκτασης κατόπτρου"
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Εστίαση"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr "Συντελεστής κλιμάκωσης για απόδοση μεγαλύτερου μεγέθους"
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr "Επέκταση"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr "Κοπή αποτελέσματος"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr "Κοπή αποτελέσματος στο μέγεθος εισόδου"
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr "Αναδίπλωση εισόδου"
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr "Πλήρες γέμισμα περιοχής εξόδου"
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr "Εφαρμογή αποτελέσματος κατοπτρισμού στην εικόνα."
++
++#: ../operations/common/mono-mixer.c:26 ../operations/common/noise-rgb.c:31
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Κόκκινο"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr "Ποσότητα κόκκινου"
++
++#: ../operations/common/mono-mixer.c:28 ../operations/common/noise-rgb.c:33
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Πράσινο"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr "Ποσότητα πράσινου"
++
++#: ../operations/common/mono-mixer.c:30 ../operations/common/noise-rgb.c:35
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Γαλάζιο"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr "Ποσότητα γαλάζιου"
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr "Μονόχρωμος μείκτης καναλιού"
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Μήκος"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr "Μήκος θόλωσης σε εικονοστοιχεία"
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Γωνία"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr "Γωνία θόλωσης σε μοίρες"
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr "Θόλωση γραμμικής κίνησης"
++
++#: ../operations/common/noise-cielch.c:25 ../operations/common/noise-hsv.c:27
++#| msgid "Hardness"
++msgid "Holdness"
++msgstr "Κράτημα"
++
++#: ../operations/common/noise-cielch.c:27
++#| msgid "Brightness"
++msgid "Lightness"
++msgstr "Φωτεινότητα"
++
++#: ../operations/common/noise-cielch.c:29
++msgid "Chroma"
++msgstr "Χρώμα"
++
++#: ../operations/common/noise-cielch.c:31 ../operations/common/noise-hsv.c:29
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Απόχρωση"
++
++#: ../operations/common/noise-cielch.c:160
++msgid "Randomize lightness, chroma and hue independently"
++msgstr "Τυχαία φωτεινότητα, χρώμα και απόχρωση ανεξάρτητα"
++
++#: ../operations/common/noise-hsv.c:33
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Τιμή"
++
++#: ../operations/common/noise-hsv.c:164
++msgid "Randomize hue, saturation and value independently"
++msgstr "Τυχαία απόχρωση, κορεσμός και τιμή ανεξάρτητα"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/noise.c:31
++#: ../operations/common/shift.c:29 ../operations/common/wind.c:33
++#: ../operations/workshop/cubism.c:34 ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr "Σπόρος"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33 ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Τυχαία σπορά"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization (%)"
++msgstr "Τυχαιότητα (%)"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++#| msgid "Rotation"
++msgid "Randomization"
++msgstr "Τυχαιότητα"
++
++#: ../operations/common/noise-hurl.c:34 ../operations/common/noise-pick.c:34
++#: ../operations/common/noise-slur.c:37
++msgid "Repeat"
++msgstr "Επανάληψη"
++
++#: ../operations/common/noise-hurl.c:135
++msgid "Completely randomize a fraction of pixels"
++msgstr "Πλήρης τυχαία σειρά ενός κλάσματος εικονοστοιχείων"
++
++#: ../operations/common/noise-pick.c:192
++msgid "Randomly interchange some pixels with neighbors"
++msgstr "Τυχαία ανταλλαγή μερικών εικονοστοιχείων με γειτονικά"
++
++#: ../operations/common/noise-reduction.c:26 ../operations/common/wind.c:30
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Ισχύς"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "Αριθμός επαναλήψεων εκτέλεσης του αλγόριθμου"
++
++#: ../operations/common/noise-rgb.c:27
++msgid "Correlated noise"
++msgstr "Συσχετισμένος θόρυβος"
++
++#: ../operations/common/noise-rgb.c:29
++msgid "Independent RGB"
++msgstr "Ανεξάρτητο RGB"
++
++#: ../operations/common/noise-rgb.c:164
++msgid "Distort colors by random amounts."
++msgstr "Παραμόρφωση χρωμάτων με τυχαίες ποσότητες."
++
++#: ../operations/common/noise-slur.c:178
++msgid "Randomly slide some pixels downward (similar to melting)"
++msgstr ""
++"Τυχαία μετακίνηση μερικών εικονοστοιχείων προς τα κάτω (παρόμοια με "
++"συγχώνευση)"
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Αντιστάθμιση Ζ"
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Επανάληψη"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr "Γεννήτρια θορύβου Perlin"
++
++#: ../operations/common/oilify.c:27 ../operations/common/photocopy.c:25
++#: ../operations/common/photocopy.c:26
++#| msgid "Radius"
++msgid "Mask Radius"
++msgstr "Ακτίνα μάσκας"
++
++#: ../operations/common/oilify.c:28
++msgid "Radius of circle around pixel"
++msgstr "Ακτίνα ή κύκλος γύρω από το εικονοστοιχείο"
++
++#: ../operations/common/oilify.c:30 ../operations/common/oilify.c:31
++msgid "Exponent"
++msgstr "Εκθέτης"
++
++#: ../operations/common/oilify.c:33
++msgid "Intensity Mode"
++msgstr "Κατάσταση έντασης"
++
++#: ../operations/common/oilify.c:34
++#| msgid "Use optimized huffman tables"
++msgid "Use pixel luminance values"
++msgstr "Χρήση τιμών λαμπρότητας εικονοστοιχείου"
++
++#: ../operations/common/oilify.c:309
++msgid "Emulate an oil painting"
++msgstr "Απομίμηση ελαιογραφίας"
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++"Γενική τιμή αδιαφάνειας που χρησιμοποιείται πάντοτε στην κορυφή της "
++"προαιρετικής βοηθητικής μνήμης εισόδου."
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++"Σταθμίζει την αδιαφάνεια εισόδου και της τιμής της βοηθητικής εισόδου και "
++"της ιδιότητας γενικής τιμής."
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr "μια GeglBuffer στο δίσκο για άνοιγμα"
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr "Μια πηγή που χρησιμοποιεί μία GeglBuffer στο δίσκο."
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr "Λειτουργία Porter Duff στο (d = cA + cB * (1 - aA))"
++
++#: ../operations/common/photocopy.c:28 ../operations/common/photocopy.c:29
++#: ../operations/common/softglow.c:29
++#| msgid "Dampness"
++msgid "Sharpness"
++msgstr "Οξύτητα"
++
++#: ../operations/common/photocopy.c:31 ../operations/common/photocopy.c:32
++#| msgid "Percentile"
++msgid "Percent Black"
++msgstr "Ποσοστό μαύρου"
++
++#: ../operations/common/photocopy.c:34 ../operations/common/photocopy.c:35
++#| msgid "Percentile"
++msgid "Percent White"
++msgstr "Ποσοστό λευκού"
++
++#: ../operations/common/photocopy.c:395
++msgid "Photocopy effect"
++msgstr "Εφέ φωτοαντιγράφου"
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr "Πλάτος ομάδων σε εικονοστοιχεία"
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr "Ύψος ομάδας"
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr "Ύψος ομάδων σε εικονοστοιχεία"
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr "Απλοποίηση εικόνας σε έναν πίνακα τετραγώνων με συμπαγή χρώματα"
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr "Βάθος κύκλου σε ποσοστό"
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "Γωνία αντιστάθμισης"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "Γωνία αντιστάθμισης."
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr "Χάρτης προς τα πίσω"
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr "Έναρξη από τα δεξιά αντί από αριστερά"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr "Χάρτης από την κορυφή"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++"Τοποθέτηση της κορυφαίας γραμμής στο μέσο και της χαμηλότερης γραμμής "
++"εξωτερικά"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr "Σε πολική"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr "Απεικόνιση εικόνας σε κύκλο"
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr "Αρχικό σημείο για πολικές συντεταγμένες"
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "Επιλογή μεσαίου"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr "Να επιτρέπεται το αρχικό σημείο να είναι μεσαίο"
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr "Εκτελεί πολικές συντεταγμένες στην εικόνα."
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Στάθμες"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr "αριθμός σταθμών ανά συστατικό"
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr ""
++"Μείωση του αριθμού των σταθμών σε κάθε χρωματικό συστατικό της εικόνας."
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr "Φόρτωση ακατέργαστης εικόνας, αναδιπλώνοντας dcraw με σωλήνες."
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr "Οριζόντια έκταση"
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr "Κάθετη έκταση"
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr "Χρώμα για απόδοση"
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr "Ορθογώνια πηγή σταθερού μεγέθους με συμπαγές χρώμα"
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr "Συνολική λαμπρότητα της εικόνας"
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr "Χρωματική προσαρμογή"
++
++#: ../operations/common/reinhard05.c:32
++#| msgid "Adapation to colour variation across the image"
++msgid "Adaptation to color variation across the image"
++msgstr "Προσαρμογή στη χρωματική μεταβολή κατά μήκος της εικόνας"
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr "Προσαρμογή φωτός"
++
++#: ../operations/common/reinhard05.c:35
++#| msgid "Adapation to light variation across the image"
++msgid "Adaptation to light variation across the image"
++msgstr "Προσαρμογή στη μεταβολή φωτός κατά μήκος της εικόνας"
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++msgstr ""
++"Προσαρμογή εικόνας, που μπορεί να έχει μια υψηλή δυναμική περιοχή, για "
++"παρουσίαση χρησιμοποιώντας μια χαμηλή δυναμική περιοχή. Αυτός είναι ένας "
++"αποτελεσματικός γενικός τελεστής που παράγεται από απλές φυσιολογικές "
++"παρατηρήσεις, παράγοντας φωτεινότητα στην περιοχή 0,0-1,0"
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++"επέκταση συστατικών εικονοστοιχείων ατομικά βασισμένη σε φακέλους "
++"φωτεινότητας"
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr "Μέγεθος"
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr "Μέγεθος κυματισμού"
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr "Περίοδος"
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr "Περίοδος κυματισμού"
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr "Μετατόπιση φάσης"
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr "Γωνία σε μοίρες"
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "Τύπος κύματος"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "Τύπος κύματος"
++
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr "Παραθέσιμο"
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr "Διατήρηση παράθεσης"
++
++#: ../operations/common/ripple.c:175
++msgid "Transform the buffer with a ripple pattern"
++msgstr "Μετασχηματισμός μνήμης με μοτίβο κυματισμού"
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr "Διαδρομή αρχείου για αποθήκευση."
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr ""
++"Αποθήκευση αρχείου πολλαπλών σκοπών, που χρησιμοποιεί άλλους γηγενείς "
++"χειριστές."
++
++#: ../operations/common/shift.c:26
++#| msgid "X shift:"
++msgid "Shift"
++msgstr "Μετατόπιση"
++
++#: ../operations/common/shift.c:27
++msgid "Maximum amount to shift"
++msgstr "Μέγιστη ποσότητα μετατόπισης"
++
++#: ../operations/common/shift.c:36
++msgid "Direction"
++msgstr "Κατεύθυνση"
++
++#: ../operations/common/shift.c:37
++#| msgid "Shift horizontal"
++msgid "Shift direction"
++msgstr "Κατεύθυνση μετατόπισης"
++
++#: ../operations/common/shift.c:231
++msgid "Shift by a random number of pixels"
++msgstr "Μετατόπιση κατά έναν τυχαίο αριθμό εικονοστοιχείων"
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr "Ζεύγη"
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr ""
++"Αριθμός ζευγών· υψηλότερος αριθμός διατηρεί περισσότερο οξέα γνωρίσματα"
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Βελτίωση του φίλτρου θόλωσης μειώνοντας το θόρυβο άκρης βασισμένο στους "
++"συμμετρικούς πολύ κοντινούς γείτονες"
++
++#: ../operations/common/softglow.c:25
++#| msgid "Blur radius"
++msgid "Glow radius"
++msgstr "Ακτίνα λάμψης"
++
++#: ../operations/common/softglow.c:224
++msgid "Softglow effect"
++msgstr "Εφέ ήπιας λάμψης"
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++"Λαμβάνοντας υπόψη τη γειτονιά, για βελτίωση ιδανικών τιμών που είναι κοντά "
++"στη μεγαλύτερη πλευρά της εικόνας, αύξηση του αυξάνει το χρόνο εκτέλεσης"
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++"Αριθμός επαναλήψεων, ένας υψηλότερος αριθμός επαναλήψεων παρέχει λιγότερα "
++"θορυβώδη απόδοση ανά υπολογιστικό κόστος"
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++"Ο χωροχρονικός φάκελος παρόμοιος με ματόμυαλο με στοχαστική δειγματοληψία"
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++"Κλιμακώνει τα συστατικά της μνήμης για να είναι στην περιοχή 0,0-1,0. Αυτό "
++"βελτιώνει τις εικόνες που κάνουν φτωχή χρήση της διαθέσιμης αντίθεσης (μικρή "
++"αντίθεση, πολύ σκοτεινές, ή πολύ φωτεινές εικόνες)."
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Τιμές"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr "λίστα των <number> (αριθμών)"
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr "Λειτουργία πίνακα χρωμάτων SVG svg_περιστροφήαπόχρωσης"
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr "Λειτουργία πίνακα χρωμάτων SVG svg_φωτεινότητασεάλφα"
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr "Λειτουργία πίνακα χρωμάτων SVG svg_πίνακας"
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr "Λειτουργία πίνακα χρωμάτων SVG svg_κορεσμός"
++
++#: ../operations/common/threshold.c:25 ../operations/common/wind.c:26
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Όριο"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++"Γενική στάθμη ορίου (χρησιμοποιούμενη όταν δεν υπάρχει βοηθητική μνήμη "
++"εισόδου)."
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++"Κατώφλι εικόνας σε ασπρόμαυρο βασισμένο σε γενικό ορισμό τιμής στην ιδιότητα "
++"τιμής, ή ανά στοιχείο από τη βοηθητική είσοδο."
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr "Τυπική απόκλιση"
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr "Τυπική απόκλιση (συντελεστής χωρικής κλίμακας)"
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr "Κλίμακα, ισχύς του φαινομένου"
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++"Εκτελεί μια μάσκα απόξυνσης στη μνήμη εισόδου (οξύνει μια εικόνα "
++"προσθέτοντας ψευδείς ζώνες προσαρμογής γύρω από τα άκρα)"
++
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++"Αντιστρέφει μόνο το συστατικό τιμής, το αποτέλεσμα είναι η αντίστοιχη "
++"`ανεστραμμένη' εικόνα."
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "Σχήμα"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "Σχήμα για χρήση: 0=κύκλος 1=ρόμβος 2=τετράγωνο"
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++"Προεπιλογή σε 'μαύρο', μπορείτε να χρησιμοποιήσετε διαφάνεια εδώ για να "
++"σβήσετε τμήματα της εικόνας"
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr ""
++"Πόσο μακριά εκτός βινιέτας πηγαίνει ως τμήμα της μισής διαγωνίου εικόνας"
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr "Απαλότητα"
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Γάμα"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr "Μείωση γραμμικότητας"
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "Αναλογία"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr "Πόσο κοντά ήμαστε στις αναλογίες εικόνας"
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr "Συμπίεση"
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++"Λόγος θέασης για χρήση, -0,5 = 1:2, 0,0 = 1:1, 0,5 = 2:1, -1,0 =1:inf 1,0 = "
++"inf:1, αυτό εφαρμόζεται μετά τη λήψη της αναλογίας, για άμεση χρήση "
++"συντελεστή συμπίεσης ως αναλογιών, ορίστε την αναλογία σε 0,0."
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr "Οριζόντιο κέντρο της βινιέτας"
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr "Κάθετο κέντρο της βινιέτας"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Περιστροφή"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "Γωνία περιστροφής"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++"Η λειτουργία βινιέτας, εφαρμόζει βινιέτα σε μια εικόνα. Προσομοιάζει τη "
++"μείωση της φωτεινότητας στην άκρη του εκτιθέμενου φιλμ και μερικά άλλα "
++"αποτελέσματα ασαφούς περιγράμματος που μπορούν να συμβούν φυσικά με "
++"αναλογική φωτογραφία."
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr "Η συντεταγμένη Χ του κέντρου των κυμάτων"
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr "Η συντεταγμένη y του κέντρου των κυμάτων"
++
++#: ../operations/common/waves.c:44
++#| msgid "Operation"
++msgid "Clamp deformation"
++msgstr "Παραμόρφωση σφηγκτήρα"
++
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr "Όριο παραμόρφωσης στην περιοχή εικόνας."
++
++#: ../operations/common/waves.c:169
++msgid "Transform the buffer with waves"
++msgstr "Μετασχηματισμός της μνήμης με κύματα"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr "χρησιμοποιούμενη γενική τιμή εάν η βοηθητική δεν περιέχει δεδομένα"
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr "ανάμειξη δύο εικόνων χρησιμοποιώντας τιμές άλφα ως βάρη"
++
++#: ../operations/common/wind.c:27
++msgid "Higher values restrict the effect to fewer areas of the image"
++msgstr "Υψηλότερες τιμές περιορίζουν το εφέ σε λιγότερες περιοχές της εικόνας"
++
++#: ../operations/common/wind.c:31
++msgid "Higher values increase the magnitude of the effect"
++msgstr "Υψηλότερες τιμές αυξάνουν το μέγεθος του εφέ"
++
++#: ../operations/common/wind.c:367
++msgid "Wind-like bleed effect"
++msgstr "Εφέ ανεμώδους διαρροής"
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr "Εγγραφή σε υπάρχουσα GeglBuffer"
++
++#: ../operations/common/write-buffer.c:28
++#| msgid "Input buffer"
++msgid "Flush buffer"
++msgstr "Ενδιάμεση μνήμη αποστολής"
++
++#: ../operations/common/write-buffer.c:29
++msgid "Flush buffer after writing"
++msgstr "Ενδιάμεση μνήμη αποστολής μετά την εγγραφή"
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "Αναφορά"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr ""
++"Το αναγνωριστικό αναφοράς που χρησιμοποιείται ως είσοδος (για χρήση σε XML)."
++
++#: ../operations/core/clone.c:110
++msgid "Clone a buffer"
++msgstr "Κλωνοποίηση μνήμης"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Τύπος εξόδου"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr "Συμβολοσειρά τύπου εξόδου Babl"
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr "Μετατροπή δεδομένων σε συγκεκριμένη μορφή"
++
++#: ../operations/core/crop.c:194
++msgid "Crop a buffer"
++msgstr "Περικοπή μνήμης"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr "Χωρίς λειτουργία (μπορεί να χρησιμοποιηθεί ως σημείο δρομολόγησης)"
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Διαδρομή αρχείου για φόρτωση"
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr "Πλαίσιο"
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr "Αριθμός πλαισίου"
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr "Εισαγωγή πλαισίου βίντεο FFmpeg"
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Άγνωστη μορφή εικόνας JPEG 2000 στο '%s'"
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "Αδυναμία ανοίγματος εικόνας JPEG 2000 στο '%s'"
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr "Αδυναμία δημιουργίας κατατομής χρώματος εξόδου για το '%s'"
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++"Αδυναμία μετατροπής εικόνας σε χρωματικό χώρο sRGB όταν επεξεργάζεται το '%s'"
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr "Αρχείο χωρίς υποστήριξη μη RGB JPEG 2000 με %d συστατικά στο '%s'"
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "Αρχείο χωρίς υποστήριξη JPEG 2000 με βάθος %d στο '%s'"
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr "Τα συστατικά της εικόνας εισόδου '%s' δεν ταιριάζουν"
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr "Ένα ή περισσότερα συστατικά R, G, B λείπουν από το '%s'"
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr "Ένα ή περισσότερα συστατικά R, G, B υπέγραψαν δεδομένα στο '%s'"
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr "Σφάλμα ανάγνωσης γραμμής %d συστατικού %d από το '%s'"
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr "Φόρτωση εικόνας JPEG 2000"
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr "Φόρτωση εικόνας JPG"
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr "Στόχος διαδρομής και ονόματος αρχείου, χρήση '-' για τυπική έξοδο"
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Ποιότητα"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr "Ποιότητα συμπίεσης JPEG (μεταξύ 1 και 100)"
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr "Εξομάλυνση"
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr ""
++"Συντελεστής εξομάλυνσης από 1 έως 100· το 0 απενεργοποιεί την εξομάλυνση"
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Βελτιστοποίηση"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr "Χρήση βελτιστοποιημένων πινάκων huffman"
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Σταδιακό"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr "Δημιουργία σταδιακών εικόνων JPEG"
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Κλίμακα του γκρίζου"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr "Δημιουργία εικόνας κλίμακας του γκρι (μονόχρωμη)"
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++"Αποθήκευση εικόνας JPEG (περνά μέσα από τη μνήμη, αποθήκευση ως παρενέργεια)"
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Έψιλον"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Λογάριθμος της στάθμισης σφάλματος"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Ακτίνα του παραθύρου επεξεργασίας"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr "Όριο άλφα για επεξεργασία πολλαπλής στάθμης"
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Λάμδα"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr "Συντελεστής επιρροής τριπλού χάρτη"
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr "Αριθμός των κατεβασμένων σταθμών για χρήση"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Ενεργές στάθμες"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr "Αριθμός σταθμών επίλυσης"
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++"Με δεδομένο έναν αραιό τριπλό χάρτη παρεχόμενο από το χρήστη και μια είσοδο "
++"εικόνας, δημιουργήστε ένα αστιλβές άλφα προσκήνιο. Ορίστε το λευκό ως "
++"επιλογή, το μαύρο ως ανεπίλεκτο, για τον τριπλό χάρτη."
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Χρώμα γεμίσματος"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++"Χρώμα βαφής για γέμισμα, χρήση αδιαφάνειας 0 για απενεργοποίηση γεμίσματος"
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr "Χρώμα πινελιάς"
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr "Χρώμα βαφής πινελιάς"
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr "Πλάτος πινελιάς"
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr "Το πλάτος του πινέλου για βάψιμο του μονοπατιού"
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr "Αδιαφάνεια πινελιάς"
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++"Η αδιαφάνεια πινελιάς, σημειώστε, ότι δεν συμπεριφέρεται όπως το SVG αφού "
++"προς το παρόν το βάψιμο γίνεται με αερογράφο"
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "Σκληρότητα"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr "Σκληρότητα του πινέλου, 0,0 για απαλό πινέλο, 1,0 για έντονο πινέλο"
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr "Κανόνας γεμίσματος"
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr "Προσδιορισμός γεμίσματος (μη μηδενικός|ζυγός-μονός)"
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Μετασχηματισμός"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr "Περιγραφή τεχνοτροπίας SVG του μετασχηματισμού"
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr "Αδιαφάνεια γεμίσματος"
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr "Η αδιαφάνεια γεμίσματος για χρήση"
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr "Διάνυσμα"
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr "Ένα GeglVector αναπαριστά τη διαδρομή της πινελιάς"
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr "Αποδίδει μια πινελιά"
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "GdkPixbuf για χρήση"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr ""
++"Χρησιμοποιεί το GdkPixbuf τοποθετημένο στη θέση της μνήμης στο <em>pixbuf</"
++"em>."
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr "Φόρτωση εικόνας PNG."
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr "Στόχος διαδρομής και ονόματος αρχείου, χρήση '-' για τυπική έξοδο."
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Συμπίεση"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr "Στάθμη συμπίεσης PNG από 1 έως 9"
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Βάθος δυαδικού"
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr "8 και 16 είναι μεταξύ των τρεχουσών αποδεκτών τιμών."
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++"Αποθήκευση εικόνας PNG (περνά μέσα από τη μνήμη, αποθήκευση ως παρενέργεια.)"
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr "Φόρτωση εικόνας PPM."
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Ακατέργαστη μορφή"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr "Αποθήκευση εικόνας PPM (αποθήκευση φορητής pixmap.)"
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr "Φόρτωση εικόνας RGBE (μορφής ακτινοβολίας HDR)."
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr "Αποθήκευση εικόνας RGBE (μορφής ακτινοβολίας HDR)"
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr "Θέση pixbuf"
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr "Η θέση για αποθήκευση της εξόδου GdkPixbuf."
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr "Αποθήκευση εξόδου στο GdkPixbuf."
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr "Χρησιμοποιούμενο εικονίδιο για παράθυρο εξόδου"
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++"Εμφανίζει τη μνήμη εισόδου σε παράθυρο SDL (περιοριζόμενο σε μια λειτουργία "
++"εμφάνισης/επεξεργασία, λόγω θεμάτων υλοποίησης SDL)."
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr "Διαδρομή σε αρχείο SVG για φόρτωση"
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr "Πλάτος για αποδιδόμενη εικόνα"
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr "Ύψος για αποδιδόμενη εικόνα"
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:239
++msgid "Load an SVG file using librsvg"
++msgstr "Φόρτωση αρχείου SVG χρησιμοποιώντας librsvg"
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Κείμενο"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr "Συμβολοσειρά για εμφάνιση (utf8)"
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Οικογένεια γραμματοσειράς"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr "Οικογένεια γραμματοσειράς (utf8)"
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Μέγεθος"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr "Προσεγγιστικό ύψος του κειμένου σε εικονοστοιχεία."
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr "Χρώμα για το κείμενο (προεπιλογή σε 'λευκό')"
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr "Πλάτος αναδίπλωσης"
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++"Ορίζει το πλάτος σε εικονοστοιχεία στο οποίο μεγάλες γραμμές θα "
++"αναδιπλωθούν. Χρήση του -1 για μη αναδίπλωση."
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr "Στοίχιση"
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr "Στοίχιση για κείμενο πολλαπλής γραμμής (0=αριστερά, 1=κέντρο, 2=δεξιά)"
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr "Αποδιδόμενο πλάτος σε εικονοστοιχεία. (μόνο ανάγνωση)"
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr "Αποδιδόμενο ύψος σε εικονοστοιχεία. (μόνο ανάγνωση)"
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr "Εμφάνιση συμβολοσειράς κειμένου χρησιμοποιώντας pango και cairo."
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Διαδρομή"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr "Διαδρομή σε συσκευή v4l"
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++"τρέχον αριθμός πλαισίου, μπορεί να αλλαχθεί για έναυσμα επαναφόρτωσης της "
++"εικόνας."
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "FPS"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr "αυτόματο έναυσμα επαναφόρτωσης αυτού πολλές φορές το δευτερόλεπτο."
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++"Είσοδος Video4Linux, κάμερες ιστού, άρπαγες πλαισίου και παρόμοιων συσκευών."
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr "Χρώμα βαφής για γέμισμα."
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr "Η αδιαφάνεια γεμίσματος για χρήση."
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr "Κανόνας γεμίσματος."
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr "προσδιορισμός γεμίσματος (μη μηδενικός|ζυγός-μονός)"
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr "περιγραφή τεχνοτροπίας SVG του μετασχηματισμού."
++
++#: ../operations/external/vector-fill.c:268
++msgid "Renders a filled region"
++msgstr "Αποδίδει μια γεμάτη περιοχή"
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr "Χρώμα βαφής πινελιάς."
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr "Το πλάτος του πινέλου για βάψιμο του μονοπατιού."
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++"Η αδιαφάνεια πινελιάς, σημειώστε, ότι δεν συμπεριφέρεται όπως το SVG αφού "
++"προς το παρόν το βάψιμο γίνεται με αερογράφο."
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr "Αποδίδει μια πινελιά διανύσματος"
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr "Μαθηματική πράξη πρόσθεσης (c = c + τιμή)"
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr "Καθαρισμός πράξης Porter Duff (d = 0.0f)"
++
++#: ../operations/generated/color-burn.c:165
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG σκοτείνιασμα χρώματος (<code>if cA * aB + cB * aA <= aA "
++"* aB: d = cA * (1 - aB) + cB * (1 - aA) αλλιώς: d = (cA == 0 ? 1 : (aA * (cA "
++"* aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++
++#: ../operations/generated/color-dodge.c:165
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG ξάνοιγμα χρώματος (<code>if cA * aB + cB * aA >= aA * "
++"aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) αλλιώς: d = (cA == aA ? 1 : "
++"cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</"
++"code>)"
++
++#: ../operations/generated/darken.c:163
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG σκοτείνιασμα (<code>d = MIN (cA * aB, cB * aA) + cA * (1 "
++"- aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/difference.c:163
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr ""
++"Πράξης ανάμειξη SVG διαφορά (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))"
++"</code>)"
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr "Μαθηματική πράξη διαίρεσης (c = τιμή==0.0f?0.0f:c/τιμή)"
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr "Πράξη dst-atop Porter Duff (d = cB * aA + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr "Πράξη dst-in Porter Duff (d = cB * aA)"
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr "Πράξη dst-out Porter Duff (d = cB * (1.0f - aA))"
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr "Πράξη dst-over Porter Duff (d = cB + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr "Πράξη dst Porter Duff (d = cB)"
++
++#: ../operations/generated/exclusion.c:163
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG αποκλεισμός (<code>d = (cA * aB + cB * aA - 2 * cA * cB) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr "Μαθηματική πράξη γάμα (c = powf (c, τιμή))"
++
++#: ../operations/generated/hard-light.c:165
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG έντονο φως (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) αλλιώς: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/lighten.c:163
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG φωτισμός (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr "Μαθηματική πράξη πολλαπλασιασμού (c = c * τιμή)"
++
++#: ../operations/generated/overlay.c:165
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG επικάλυψη (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) αλλιώς: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/plus.c:163
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr "Πράξη ανάμειξης SVG συν (<code>d = cA + cB</code>)"
++
++#: ../operations/generated/screen.c:163
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr "Πράξη ανάμειξης SVG οθόνη (<code>>d = cA + cB - cA * cB</code>)"
++
++#: ../operations/generated/soft-light.c:167
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG απαλό φως (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); αλλιώς: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr "Πράξη Porter Duff src-atop (d = cA * aB + cB * (1.0f - aA))"
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr "Πράξη Porter Duff src-in (d = cA * aB)"
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr "Πράξη Porter Duff src-out (d = cA * (1.0f - aB))"
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr "Πράξη Porter Duff src-over (d = cA + cB * (1.0f - aA))"
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr "Πράξη Porter Duff src (d = cA)"
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr "Μαθηματική πράξη αφαίρεσης (c = c - τιμή)"
++
++#: ../operations/generated/svg-multiply.c:163
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++"Πράξη ανάμειξης SVG πολλαπλασιασμός (<code>d = cA * cB +  cA * (1 - aB) + cB "
++"* (1 - aA)</code>)"
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr "Πράξη Porter Duff xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr "Συστατικό Χ του διανύσματος κατεύθυνσης"
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr "Συστατικό Υ του διανύσματος κατεύθυνσης"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Γωνία για περιστροφή (δεξιόστροφα)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Περιστροφή μνήμης γύρω από το ορισμένο αρχικό."
++
++#: ../operations/transform/scale-ratio.c:26 ../operations/transform/scale.c:29
++msgid "Horizontal scale factor"
++msgstr "Οριζόντιος συντελεστής κλίμακας"
++
++#: ../operations/transform/scale-ratio.c:28 ../operations/transform/scale.c:31
++msgid "Vertical scale factor"
++msgstr "Κάθετος συντελεστής κλίμακας"
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr "Κλιμακώνει τη μνήμη σύμφωνα με μια αναλογία."
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Οριζόντιο μέγεθος"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Κάθετο μέγεθος"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr "Κλιμακώνει τη μνήμη σύμφωνα με ένα μέγεθος."
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr "Κλιμακώνει τη μνήμη."
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Οριζόντια ποσότητα αποκοπής"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Κάθετη ποσότητα αποκοπής"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Αποκόπτει τη μνήμη"
++
++#: ../operations/transform/transform-core.c:200
++msgid "Origin-x"
++msgstr "Αρχικό-x"
++
++#: ../operations/transform/transform-core.c:201
++msgid "X coordinate of origin"
++msgstr "Συντεταγμένη X αρχικού"
++
++#: ../operations/transform/transform-core.c:208
++msgid "Origin-y"
++msgstr "Αρχικό-y"
++
++#: ../operations/transform/transform-core.c:209
++msgid "Y coordinate of origin"
++msgstr "Συντεταγμένη Y του αρχικού"
++
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Τύπος φίλτρου (πολύ κοντινό, γραμμικό, lanczos, κυβικό, lohalo)"
++
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++msgid "Hard edges"
++msgstr "Έντονες ακμές"
++
++#: ../operations/transform/transform-core.c:230
++msgid "Lanczos width"
++msgstr "Πλάτος lanczos"
++
++#: ../operations/transform/transform-core.c:231
++msgid "Width of the Lanczos function"
++msgstr "Πλάτος της συνάρτησης Lanczos"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Μετασχηματισμός συμβολοσειράς"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr "Μετασχηματίζει την ομάδα (χρησιμοποιείται από svg)."
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Οριζόντια μετάφραση"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Κάθετη μετάφραση"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++"Επανατοποθετήσεις της μνήμης (με ακρίβεια υποεικονοστοιχείου), εάν οι "
++"συντεταγμένες ακέραιου πέρασαν ένα γρήγορο μονοπάτι χωρίς τη χρήση νέας "
++"δειγματοληψίας"
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr ""
++"Ακτίνα της τετράγωνης περιοχής εικονοστοιχείου (πλάτος και ύψος θα είναι "
++"ακτίνα*2+1)"
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Ορίζει το εικονοστοιχείο στόχου στην τιμή της μέγιστης τιμής σε ένα πλαίσιο "
++"που περιβάλλει το εικονοστοιχείο"
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Ορίζει το εικονοστοιχείο στόχου στην τιμή της ελάχιστης τιμής σε ένα πλαίσιο "
++"που περιβάλλει το εικονοστοιχείο"
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr "Ποσοστό"
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr "Το ποσοστό για υπολογισμό, προεπιλογή το 50, που είναι το μέσο φίλτρο"
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++"Ορίζει το εικονοστοιχείο στόχου στο αντίστοιχο χρώμα σε δοσμένο ποσοστό όταν "
++"τα χρώματα ταξινομούνται κατά φωτεινότητα"
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr "Κρυφή μνήμη"
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr "Το GeglBuffer όπου γίνεται η επαναποθήκευση"
++
++#: ../operations/workshop/buffer-cache.c:96
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++"Αποθήκευση της μνήμης εισόδου εσωτερικά, παραπέρα επεξεργασία παίρνει αυτή "
++"τη μνήμη ως είσοδο."
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Δεξιόστροφα"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr "Εναλλαγή σε δεξιόστροφο"
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "Από:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr "Γωνία εκκίνησης για την χρωματική περιστροφή"
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "Προς:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr "Γωνία τέλους για την χρωματική περιστροφή"
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr "Επιλογή σε περίπτωση εικόνων γκρι κλίμακας"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr "Η τιμή της απόχρωσης"
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr "Η τιμή του κορεσμού"
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr "Αλλαγή/επεξεργασία σε αυτό"
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr "Η τιμή του ορίου του γκρίζου"
++
++#: ../operations/workshop/color-rotate.c:383
++msgid "Rotate colors on the image"
++msgstr "Περιστροφή χρωμάτων στην εικόνα"
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr "Τιμή του στοιχείου στη θέση (1,1)"
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr "Τιμή του στοιχείου στη θέση (1,2)"
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr "Τιμή του στοιχείου στη θέση (1,3)"
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr "Τιμή του στοιχείου στη θέση (1,4)"
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr "Τιμή του στοιχείου στη θέση (1,5)"
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr "Τιμή του στοιχείου στη θέση (2,1)"
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr "Τιμή του στοιχείου στη θέση (2,2)"
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr "Τιμή του στοιχείου στη θέση (2,3)"
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr "Τιμή του στοιχείου στη θέση (2,4)"
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr "Τιμή του στοιχείου στη θέση (2,5)"
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr "Τιμή του στοιχείου στη θέση (3,1)"
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr "Τιμή του στοιχείου στη θέση (3,2)"
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr "Τιμή του στοιχείου στη θέση (3,3)"
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr "Τιμή του στοιχείου στη θέση (3,4)"
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr "Τιμή του στοιχείου στη θέση (3,5)"
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr "Τιμή του στοιχείου στη θέση (4,1)"
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr "Τιμή του στοιχείου στη θέση (4,2)"
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr "Τιμή του στοιχείου στη θέση (4,3)"
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr "Τιμή του στοιχείου στη θέση (4,4)"
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr "Τιμή του στοιχείου στη θέση (4,5)"
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr "Τιμή του στοιχείου στη θέση (5,1)"
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr "Τιμή του στοιχείου στη θέση (5,2)"
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr "Τιμή του στοιχείου στη θέση (5,3)"
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr "Τιμή του στοιχείου στη θέση (5,4)"
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr "Τιμή του στοιχείου στη θέση (5,5)"
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr "Διαιρέτης:"
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr "Η τιμή του διαιρέτη"
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr "Αντιστάθμιση:"
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr "Η τιμή της αντιστάθμισης"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "Κανονικοποίηση"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "Κανονικοποίηση ή όχι"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "Κόκκινο κανάλι"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "Πράσινο κανάλι"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "Γαλάζιο κανάλι"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "Κανάλι άλφα"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr "Στάθμιση άλφα"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr "Στάθμιση άλφα"
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr "Περίγραμμα"
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++msgstr ""
++"Τύπος επιλεγόμενου περιγράμματος. Οι επιλογές είναι επέκταση, αναδίπλωση, "
++"περικοπή. Προεπιλογή είναι η επέκταση"
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr "Δημιουργία εικόνας με χειροκίνητο ορισμό του πίνακα συνέλιξης"
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "Μέγεθος παράθεσης"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr "Κορεσμός παράθεσης"
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr "Ένα φίλτρο που μοιάζει κάπως με κυβική τεχνοτροπία βαφής"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "Ζυγός/μονός"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr "Διατήρηση ζυγών/μονών πεδίων"
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr "Οριζόντια/κάθετα"
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr "Επιλογή οριζόντιου ή κάθετου"
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr "Μέγεθος ομάδας"
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr "Μέγεθος ομάδας απόπλεξης γραμμών/στηλών"
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr "Εκτέλεση απόπλεξης στην εικόνα"
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr "Μοτίβο Bayer"
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++"Με χρήση μοτίβου Bayer, 0 φαίνεται να δουλεύει με μερικά αρχεία nikon, 2 με "
++"μερικά αρχεία Fuji."
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++"Εκτέλεση αποψηφίδωσης χρώματος γκρι κλίμακας 2 μιας εικόνας, χρησιμοποιώντας "
++"διδιάμεση παρεμβολή."
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++"Εκτέλεση αποψηφίδωσης ανεπίδευτου χρώματος γκρι κλίμακας 2 μιας εικόνας, "
++"χρησιμοποιώντας διδιάμεση παρεμβολή."
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr "Το ποσοστό για υπολογισμό, προεπιλογή το 50, που είναι το μέσο φίλτρο."
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++"Ορίζει το εικονοστοιχείο στόχου στο αντίστοιχο χρώμα σε δοσμένο ποσοστό όταν "
++"τα χρώματα ταξινομούνται κατά φωτεινότητα."
++
++#: ../operations/workshop/ditto.c:112
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++"Επιλογή ελέγχου για να γίνει μια απεικόνιση εισόδου 1:1 έξοδος, κατά τη "
++"δειγμετοληψία"
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Αζιμούθιο"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr "Η τιμή του αζιμούθιου"
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr "Ανύψωση"
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr "Η τιμή της ανύψωσης"
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Βάθος"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr "Βάθος εικονοστοιχείου"
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++"Προαιρετική παράμετρος για υπερίσχυση της αυτόματης επιλογής του φίλτρου "
++"χάραξης. Οι επιλογές είναι χάραξη, χάρτης θόλωσης"
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr "Προσομοίωση εικόνας που δημιουργήθηκε από χάραξη"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Ρυθμός δυαδικών"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr "ρυθμός δυαδικών στόχου"
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr "πλαίσια ανά δευτερόλεπτο"
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr "Δέκτης εξόδου βίντεο FFmpeg"
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr "Σενάριο"
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr "Το σενάριο lua που περιέχει την υλοποίηση αυτής της λειτουργίας."
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr "ένα αποθηκευμένο σενάριο lua στο δίσκο υλοποιεί μια λειτουργία."
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr "Τιμή χρήστη"
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr "(εμφανίζεται στην καθολική μεταβλητή 'user_value' στο lua."
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++"Ένας γενικού σκοπού διαμεσολαβητής υλοποίησης φίλτρου/συνθέτη για τη γλώσσα "
++"προγραμματισμού lua."
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr "Κατασκευαστής:"
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr "Γράψτε σωστά τον κατασκευαστή φακών"
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Κάμερα:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr "Γράψτε σωστά το όνομα της κάμερας"
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr "Φακοί:"
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with uppercase letters"
++msgstr "Γράψτε τον τύπο φακών σας με κεφαλαία"
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr "Εστία της κάμερας"
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr "Υπολογισμός της τιμής b από την εστία"
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "Κέντρο"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr "Εάν θέλετε το κέντρο"
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr "Κέντρο φακού x"
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr "Συντεταγμένες του κέντρου φακού"
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr "Κέντρο φακού y"
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr "Κλίμακα της εικόνας"
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr "Αυτόματη διόρθωση τιμών d"
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr "Αυτόματη διόρθωση τιμών D για πρότυπα διόρθωσης φακών."
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr "Πρότυπο κόκκινου a:"
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr "Παράμετροι διόρθωσης για κάθε χρωματικό κανάλι"
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr "Πρότυπο κόκκινου b:"
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr "Πρότυπο κόκκινου c:"
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr "Πρότυπο κόκκινου d:"
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr "Πρότυπο πράσινου a:"
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr "Πρότυπο πράσινου b:"
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr "Πρότυπο πράσινου c:"
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr "Πρότυπο πράσινου d:"
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr "Πρότυπο γαλάζιου a:"
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr "Πρότυπο γαλάζιου b:"
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr "Πρότυπο γαλάζιου c:"
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr "Πρότυπο γαλάζιου d:"
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr "Πρότυπο άλφα a:"
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr "Παράμετροι διόρθωσης για κανάλι άλφα"
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr "Πρότυπο άλφα b:"
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr "Πρότυπο άλφα c:"
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr "Πρότυπο άλφα d:"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr "Αρχή συντεταγμένης x"
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr "Τέλος συντεταγμένης x"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr "Αρχή συντεταγμένης y"
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr "Τέλος συντεταγμένης y"
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr "Πλάτος σχεδιογραφήματος"
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr "Ύψος σχεδιογραφήματος"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Ελάχιστο"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr "Τιμή στον πάτο"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Μέγιστο"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr "Τιμή στην κορυφή"
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++"Απόδοση κατατομών φωτεινότητας για κόκκινο, πράσινο και γαλάζιο συστατικό "
++"κατά μήκος της συγκεκριμένης γραμμής στη μνήμη εισόδου, σχεδιογραφημένη σε "
++"μνήμη συγκεκριμένου μεγέθους."
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr "Κλαστικό"
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++"Τύπος κλαστικού για χρήση. Οι επιλογές είναι julia, mandelbrot. Προεπιλογή "
++"είναι το mandelbrot."
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "Θέση τιμής Χ1"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "Θέση τιμής Χ2"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Θέση τιμής Υ2"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr "Θέση τιμής Χ σπόρου Julia"
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr "Θέση τιμής Υ σπόρου Julia"
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr "Τιμή βάθους"
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr "Όριο"
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr "Μήκος ορίου"
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Abyss policy"
++msgstr "Πολιτική αβύσσου"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid "How to deal with pixels outside of the input buffer"
++msgstr ""
++"Πώς να αντιμετωπίσετε εικονοστοιχεία έξω από την ενδιάμεση μνήμη εισόδου"
++
++#: ../operations/workshop/fractal-trace.c:161
++msgid "Unsupported fractal type"
++msgstr "Μη υποστηριζόμενος τύπος κλαστικού"
++
++#: ../operations/workshop/fractal-trace.c:248
++msgid "Performs fractal trace on the image"
++msgstr "Εκτέλεση ανίχνευσης κλαστικού στην εικόνα"
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr "Πράξη ανάμειξης εικόνας 'μέσος όρος' (<tt>c = (cA + aB)/2</tt>)"
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++"Πράξη ανάμειξης εικόνας 'ανάκλαση ανάμειξης' (<tt>c = cB>=1.0?1.0:cA*cA / "
++"(1.0-cB)</tt>)"
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++"Πράξη ανάμειξης εικόνας 'αρνητικού' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++"Πράξη ανάμειξης εικόνας 'απαλό σκοτείνιασμα' (<tt>c = (cA+cB<1.0)?0.5*cB / "
++"(1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++"Πράξη ανάμειξης εικόνας 'απαλό ξάνοιγμα' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 "
++"- cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr "Πράξη ανάμειξης εικόνας 'αφαίρεση' (<tt>c = cA+cB-1.0</tt>)"
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++"Οριζόντιες είσοδοι στοίβας, (στα \"έξοδος\" \"βοηθητικό\" τοποθετείται στα "
++"δεξιά της \"εισόδου\")"
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr "Θόλωση διατήρησης άκρης"
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "Ένα άκρο μιας διαβάθμισης"
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr "Το άλλο άκρο διαβάθμισης"
++
++#: ../operations/workshop/linear-gradient.c:136
++msgid "Linear gradient renderer"
++msgstr "Απόδοση γραμμικής διαβάθμισης"
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "Πραγματική"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "Πραγματική συντεταγμένη"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "Φανταστική"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr "Φανταστική συντεταγμένη"
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Στάθμη"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Στάθμη νερού"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr "Μέγιστος αριθμός επαναλήψεων"
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr "Απόδοση συνόλου Mandelbrot"
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr "Οριζόντια ποσότητα εξάπλωσης"
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr "Κάθετη ποσότητα εξάπλωσης"
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr "Φίλτρο εξάπλωσης θορύβου"
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr ""
++"Τυχαίος σπόρος. Περνώντας -1 υποδηλώνει ότι ο σπόρος επιλέχτηκε τυχαία."
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr "Ανατάραξη"
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr "Η τιμή της ανατάραξης"
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr "Εκτέλεση εφέ πλάσματος στην εικόνα"
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Μία άκρη διαβάθμισης"
++
++#: ../operations/workshop/radial-gradient.c:128
++msgid "Radial gradient renderer"
++msgstr "Απόδοση ακτινικής διαβάθμισης"
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++"Φόρτωση ακατέργαστης εικόνας, αναδίπλωση dcraw με σωλήνες, παρέχει το "
++"ακατέργαστο πλέγμα bayer ως γκρίζα κλίμακα, εάν η μορφή αρχείου είναι ."
++"rawbayer θα χρησιμοποιήσει αυτή τη φόρτωση αντί για την κανονική φόρτωση "
++"dcraw, εάν η μορφή αρχείου είναι .rawbayerS θα εναλλάξει τους "
++"επιστρεφόμενους 16 δυαδικών αριθμούς (η φόρτωση pnm είναι προφανώς εσφαλμένη)"
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr "Η τιμή του κατωφλίου"
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr "Εκτελεί την αφαίρεση κόκκινου ματιού στην εικόνα"
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr ""
++"Αριθμός ζευγών, υψηλότερος αριθμός διατηρεί περισσότερο οξέα γνωρίσματα"
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr ""
++"Το ποσοστό για επιστροφή, η προεπιλεγμένη τιμή 50 είναι ίση με τη διάμεση"
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Βελτίωση του φίλτρου ποσόστωσης μειώνοντας το θόρυβο άκρης βασισμένο στους "
++"συμμετρικούς πολύ κοντινούς γείτονες"
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr "Ισχύς εφέ"
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr "Μέγεθος εφέ"
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Σκληρότητα εφέ"
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr "Πινελιά"
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Συμπεριφορά"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr "Συμπεριφορά της λειτουργίας"
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr "Υπολογισμός σχετικής απεικόνισης μετατόπισης από πινελιά"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "Στροβιλισμός"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr "Γωνία στροβιλισμού (μοίρες)"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr "Πίεση"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr "Ποσότητα πίεσης"
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++"Ακτίνα (1,0 είναι ο μέγιστος κύκλος που ταιριάζει στην εικόνα και το 2,0 "
++"πηγαίνει ολότελα μέχρι τις γωνίες)"
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr "Εφαρμογή στροβιλισμού και πίεσης στην εικόνα"
++
++#~ msgid "Global colour saturation factor"
++#~ msgstr "Συντελεστής γενικού χρωματικού κορεσμού"
++
++#~ msgid "Background"
++#~ msgstr "Παρασκήνιο"
++
++#~ msgid ""
++#~ "Optional parameter to override automatic selection of wrap background. "
++#~ "Choices are wrap, black, white and transparent."
++#~ msgstr ""
++#~ "Προαιρετική παράμετρος για υπερίσχυση της αυτόματης επιλογής του "
++#~ "παρασκηνίου αναδίπλωσης. Οι επιλογές είναι αναδίπλωση, μαύρο, άσπρο και "
++#~ "διαφανές."
++
++#~ msgid "Dither"
++#~ msgstr "Πρόσμειξη"
++
++#~ msgid ""
++#~ "Dithering strategy (none, random, random-covariant, bayer, floyd-"
++#~ "steinberg)"
++#~ msgstr ""
++#~ "Στρατηγική πρόσμειξης (καμία, τυχαία, τυχαία-συμπαραλλαγή, bayer, floyd-"
++#~ "steinberg)"
++
++#~ msgid "Sampler used internaly"
++#~ msgstr "Εσωτερικά χρησιμοποιούμενη δειγματοληψία"
++
++#~ msgid "Minimal"
++#~ msgstr "Ελάχιστο"
++
++#~ msgid "Hold the minimal values instead of the maximal values"
++#~ msgstr "Διατήρηση των ελάχιστων τιμών αντί για τις μέγιστες"
++
++#~ msgid "Reduce image to pure red, green, and blue"
++#~ msgstr "Αναγωγή εικόνας σε καθαρό κόκκινο, πράσινο και γαλάζιο"
+diff --git a/po/en_GB.po b/po/en_GB.po
+new file mode 100644
+index 0000000..af2950a
+--- /dev/null
++++ po/en_GB.po
+@@ -0,0 +1,3939 @@
++# British English translation for gegl.
++# Copyright (C) 2012 gegl's COPYRIGHT HOLDER
++# This file is distributed under the same license as the gegl package.
++# Chris Leonard <cjl at laptop.org>, 2012.
++# Bruce Cowan <bruce at bcowan.me.uk>, 2012.
++#: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
++#: ../operations/external/sdl-display.c:27
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl master\n"
++"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gegl&k"
++"eywords=I18N+L10N&component=general\n"
++"POT-Creation-Date: 2012-09-10 08:50+0000\n"
++"PO-Revision-Date: 2012-09-11 17:20+0100\n"
++"Last-Translator: Bruce Cowan <bruce at bcowan.me.uk>\n"
++"Language-Team: British English <en at li.org>\n"
++"Language: en_GB\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++"X-Generator: Virtaal 0.7.1\n"
++"X-Project-Style: gnome\n"
++
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr "ERROR: '%s' option expected argument\n"
++
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr "Display on screen"
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr "Print XML"
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr "Output in a file"
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
++msgstr "Display help information"
++
++#: ../bin/gegl-options.c:124 ../bin/gegl.c:257
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr "Unknown GeglOption mode: %d"
++
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
++msgstr "unknown mode"
++
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
++msgstr ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
++
++#: ../bin/gegl.c:147
++#, c-format
++msgid "Unable to read file: %s"
++msgstr "Unable to read file: %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr "Invalid graph, abort.\n"
++
++#: ../gegl/gegl-init.c:205
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "babls error tolerance, a value between 0.2 and 0.000000001"
++
++#: ../gegl/gegl-init.c:210
++msgid "Where GEGL stores its swap"
++msgstr "Where GEGL stores its swap"
++
++#: ../gegl/gegl-init.c:215
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr "How much memory to (approximately) use for caching imagery"
++
++#: ../gegl/gegl-init.c:220
++msgid "Default size of tiles in GeglBuffers"
++msgstr "Default size of tiles in GeglBuffers"
++
++#: ../gegl/gegl-init.c:225
++msgid "The count of pixels to compute simultaneously"
++msgstr "The count of pixels to compute simultaneously"
++
++#: ../gegl/gegl-init.c:230
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++
++#: ../gegl/gegl-init.c:235
++msgid "The number of concurrent processing threads to use"
++msgstr "The number of concurrent processing threads to use"
++
++#: ../gegl/gegl-init.c:240
++msgid "Use OpenCL"
++msgstr "Use OpenCL"
++
++#: ../gegl/gegl-init.c:245
++msgid "Maximum number of entries in the file tile backend's writer queue"
++msgstr "Maximum number of entries in the file tile backend's writer queue"
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr "Module '%s' load error: %s"
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Module error"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Loaded"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Load failed"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Not loaded"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "Blur radius"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr "Radius of square pixel region, (width and height will be radius*2+1)."
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "Edge preservation"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "Amount of edge preservation"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted "
++"by the colour difference from the centre pixel."
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Radius"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr "Radius of square pixel region, (width and height will be radius*2+1)"
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr "Performs an averaging of a square box of pixels"
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Contrast"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr "Range scale factor"
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27 ../operations/common/softglow.c:27
++msgid "Brightness"
++msgstr "Brightness"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr "Amount to increase brightness"
++
++#: ../operations/common/brightness-contrast.c:159
++msgid "Changes the light level and contrast."
++msgstr "Changes the light level and contrast."
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "Buffer location"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr "The location where to store the output GeglBuffer"
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "babl format"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:132
++msgid "A GEGL buffer destination surface."
++msgstr "A GEGL buffer destination surface."
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Input buffer"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr "The GeglBuffer to load into the pipeline"
++
++#: ../operations/common/buffer-source.c:177
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++"A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++"Neighbourhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colours map to which grey values"
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr "Samples"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr "Number of samples to do per iteration looking for the range of colours"
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr "Iterations"
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++
++#: ../operations/common/c2g.c:493
++#| msgid ""
++#| "Color to grayscale conversion, uses envelopes formed from spatial  color "
++#| "differences to perform color-feature preserving grayscale  spatial "
++#| "contrast enhancement"
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial color "
++"differences to perform color-feature preserving grayscale spatial contrast "
++"enhancement"
++msgstr ""
++"Colour to greyscale conversion, uses envelopes formed from spatial colour "
++"differences to perform colour-feature preserving greyscale spatial contrast "
++"enhancement"
++
++#: ../operations/common/cartoon.c:25
++msgid "Mask radius"
++msgstr "Mask radius"
++
++#: ../operations/common/cartoon.c:27
++msgid "Percent black"
++msgstr "Percent black"
++
++#: ../operations/common/cartoon.c:376
++msgid "Cartoon effect"
++msgstr "Cartoon effect"
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Width"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "Horizontal width of cells pixels"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Height"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "Vertical width of cells in pixels"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "X offset"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "Horizontal offset (from origin) for start of grid"
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Y offset"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "Vertical offset (from origin) for start of grid"
++
++#: ../operations/common/checkerboard.c:33
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:24
++#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
++#: ../operations/common/vignette.c:25 ../operations/external/text.c:31
++#: ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Colour"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr "One of the cell colours (defaults to 'black')"
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "Other colour"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr "The other cell colour (defaults to 'white')"
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr "Checkerboard renderer"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr "Red bits"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr "Number of bits for red channel"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr "Green bits"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr "Number of bits for green channel"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr "Blue bits"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr "Number of bits for blue channel"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr "Alpha bits"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr "Number of bits for alpha channel"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr "Dithering Strategy"
++
++#: ../operations/common/color-reduction.c:39
++msgid "The dithering strategy to use"
++msgstr "The dithering strategy to use"
++
++#: ../operations/common/color-reduction.c:495
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++"Reduces the number of bits per channel (colours and alpha), with optional "
++"dithering"
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Original temperature"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Intended temperature"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr "Corrected estimation of the temperature of the light source in Kelvin."
++
++#: ../operations/common/color-temperature.c:280
++msgid "Allows changing the color temperature of an image."
++msgstr "Allows changing the colour temperature of an image."
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr "The colour to render (defaults to 'white')"
++
++#: ../operations/common/color-to-alpha.c:197
++msgid "Performs color-to-alpha on the image."
++msgstr "Performs colour-to-alpha on the image."
++
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr "The colour to render (defaults to 'black')"
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++"Generates a buffer entirely filled with the specified colour, crop it to get "
++"smaller dimensions."
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "Sample points"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr "Number of curve sampling points.  0 for exact calculation."
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Curve"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr "The contrast curve."
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr "Adjusts the contrast of the image according to a curve."
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Radius 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Radius 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr "Does an edge detection based on the difference of two gaussian blurs."
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr "Title to be given to output window"
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr "Display the input buffer in a window."
++
++#: ../operations/common/dot.c:26 ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Block Width"
++
++#: ../operations/common/dot.c:27
++msgid "Size of each block in pixels"
++msgstr "Size of each block in pixels"
++
++#: ../operations/common/dot.c:28
++msgid "Dot size ratio"
++msgstr "Dot size ratio"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr "Size ratio of a dot inside each block"
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr "Simplify image into an array of solid-coloured dots"
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Opacity"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "Horizontal shadow offset"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr "Vertical shadow offset"
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Creates a dropshadow effect on the input buffer"
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr "High-resolution edge detection"
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Horizontal"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Vertical"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "Keep Signal"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr "Specialized direction-dependent edge detection"
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "Exposure Values"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr "Relative brightness of each exposure in EV"
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr "Discretisation Bits"
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr "Log2 of source's discretisation steps"
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr "Weight Sigma"
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distribution sigma controlling response contributions"
++msgstr "Weight distribution sigma controlling response contributions"
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr "Combine multiple scene exposures into one high range buffer"
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise-rgb.c:37
++#: ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alpha"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr "Gradient threshold for detail enhancement"
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Beta"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr "Strength of local detail enhancement"
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/common/noise-hsv.c:31
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Saturation"
++
++#: ../operations/common/fattal02.c:41 ../operations/common/mantiuk06.c:36
++msgid "Global color saturation factor"
++msgstr "Global colour saturation factor"
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Noise"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr "Gradient threshold for lowering detail enhancement"
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr "Fractal type"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr "Type of a fractal"
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Left"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Right"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Top"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Bottom"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (only Julia)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr "CY (only Julia)"
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr "Red stretch"
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr "Red stretching factor"
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr "Green stretch"
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr "Green stretching factor"
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr "Blue stretch"
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr "Blue stretching factor"
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "Red mode"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Red application mode (0:SIN; 1:COS; 2:NONE)"
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "Green mode"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Green application mode (0:SIN; 1:COS; 2:NONE)"
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "Blue mode"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "Red inversion"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "Green inversion"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "Blue inversion"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Colours"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Number of colours"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr "Loglog smoothing"
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr "Use loglog smoothing"
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr "Fractal Explorer"
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "Size X"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Size Y"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filter"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++"Performs an averaging of neighbouring pixels with the normal distribution as "
++"weighting"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "File"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr "Path of GeglBuffer file to load."
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr "GeglBuffer file loader."
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr "Target file path to write GeglBuffer to."
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr "GeglBuffer file writer."
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr "Turns the image greyscale"
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "Line Width"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr "Width of grid lines in pixels"
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "Line Height"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr "Height of grid lines in pixels"
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr "Colour of the grid lines"
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr "Grid renderer"
++
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr "Wrong pixels"
++
++#: ../operations/common/image-compare.c:26
++msgid "Number of differing pixels."
++msgstr "Number of differing pixels."
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Maximum difference"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "Maximum difference between two pixels."
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr "Average difference (wrong)"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr "Average difference between wrong pixels."
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr "Average difference (total)"
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr "Average difference between all pixels."
++
++#: ../operations/common/image-compare.c:177
++msgid ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
++msgstr ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Node"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr "GeglNode to introspect"
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr "GEGL graph visualizer."
++
++#: ../operations/common/invert.c:86
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Operation"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr "Composite operation to use"
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr "Horizontal position"
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr "Vertical position"
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Scale"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr "Scale 1:1 size"
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Source"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr "Source datafile (png, jpg, raw, svg, bmp, tif, …)"
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr "A layer in the traditional sense"
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr "Main:"
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr "Main value of distortion"
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Zoom:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr "Edge:"
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr "Edge value of distortion"
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr "Brighten:"
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr "Brighten the image"
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr "X shift:"
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr "Shift horizontal"
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr "Y shift:"
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr "Shift vertical"
++
++#: ../operations/common/lens-distortion.c:338
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr "Copies image performing lens distortion correction."
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr "Low input"
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr "Input luminance level to become lowest output"
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr "High input"
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr "Input luminance level to become white."
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr "Low output"
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr "Lowest luminance level in output"
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr "High output"
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr "Highest luminance level in output"
++
++#: ../operations/common/levels.c:198
++msgid "Remaps the intensity range of the image"
++msgstr "Remaps the intensity range of the image"
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr "Path of file to load."
++
++#: ../operations/common/load.c:180
++#| msgid ""
++#| "Multipurpose file loader, that uses other native handlers, and fallback "
++#| "conversion using image magick's convert."
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using Image Magick's convert."
++msgstr ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using Image Magick's convert."
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr "Image Magick wrapper using the png op."
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr "The amount of contrast compression"
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Detail"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr "Level of emphasis on image gradient details"
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr "Sampler"
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Sampler used internally"
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr "Scaling"
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++
++#: ../operations/common/map-relative.c:173
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Number of iterations"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr "Dampness"
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr "The value represents the contribution of the past to the new frame."
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr "Accumulating motion blur"
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "Mirror rotation"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr "Rotation applied to the mirrors"
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "Result rotation"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr "Rotation applied to the result"
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Mirrors"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "Number of mirrors to use"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr "X offset of the result of mirroring"
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr "Y offset of the result of mirroring"
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "Centre X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr "X axis ratio for the centre of mirroring"
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "Centre Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr "Y axis ratio for the centre of mirroring"
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr "Trim X"
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr "X axis ratio for trimming mirror expanse"
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr "Trim Y"
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr "Y axis ratio for trimming mirror expanse"
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Zoom"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr "Scale factor to make rendering size bigger"
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr "Expand"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr "Clip result"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr "Clip result to input size"
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr "Wrap input"
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr "Fill full output area"
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr "Applies mirroring effect on the image."
++
++#: ../operations/common/mono-mixer.c:26 ../operations/common/noise-rgb.c:31
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Red"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr "Amount of red"
++
++#: ../operations/common/mono-mixer.c:28 ../operations/common/noise-rgb.c:33
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Green"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr "Amount of green"
++
++#: ../operations/common/mono-mixer.c:30 ../operations/common/noise-rgb.c:35
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Blue"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr "Amount of blue"
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr "Monochrome channel mixer"
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Length"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr "Length of blur in pixels"
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Angle"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr "Angle of blur in degrees"
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr "Linear motion blur"
++
++#: ../operations/common/noise-cielch.c:25 ../operations/common/noise-hsv.c:27
++msgid "Holdness"
++msgstr "Holdness"
++
++#: ../operations/common/noise-cielch.c:27
++msgid "Lightness"
++msgstr "Lightness"
++
++#: ../operations/common/noise-cielch.c:29
++msgid "Chroma"
++msgstr "Chroma"
++
++#: ../operations/common/noise-cielch.c:31 ../operations/common/noise-hsv.c:29
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Hue"
++
++#: ../operations/common/noise-cielch.c:160
++msgid "Randomize lightness/chroma/hue independently"
++msgstr "Randomise lightness/chroma/hue independently"
++
++#: ../operations/common/noise-hsv.c:33
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Value"
++
++#: ../operations/common/noise-hsv.c:164
++msgid "Randomize hue/saturation/value independently"
++msgstr "Randomise hue/saturation/value independently"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/noise.c:31
++#: ../operations/common/shift.c:29 ../operations/common/wind.c:33
++#: ../operations/workshop/cubism.c:34 ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr "Seed"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33 ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Random seed"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization (%)"
++msgstr "Randomisation (%)"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++#| msgid "Radomization"
++msgid "Randomization"
++msgstr "Randomisation"
++
++#: ../operations/common/noise-hurl.c:34 ../operations/common/noise-pick.c:34
++#: ../operations/common/noise-slur.c:37
++msgid "Repeat"
++msgstr "Repeat"
++
++#: ../operations/common/noise-hurl.c:135
++msgid "Completely randomize a fraction of pixels"
++msgstr "Completely randomize a fraction of pixels"
++
++#: ../operations/common/noise-pick.c:192
++msgid "Randomly interchange some pixels with neighbors"
++msgstr "Randomly interchange some pixels with neighbours"
++
++#: ../operations/common/noise-reduction.c:26 ../operations/common/wind.c:30
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Strength"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "How many iteratarions to run the algorithm with"
++
++#: ../operations/common/noise-rgb.c:27
++msgid "Correlated noise"
++msgstr "Correlated noise"
++
++#: ../operations/common/noise-rgb.c:29
++msgid "Independent RGB"
++msgstr "Independent RGB"
++
++#: ../operations/common/noise-rgb.c:164
++msgid "Distort colors by random amounts."
++msgstr "Distort colours by random amounts."
++
++#: ../operations/common/noise-slur.c:178
++msgid "Randomly slide some pixels downward (similar to melting)"
++msgstr "Randomly slide some pixels downward (similar to melting)"
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Z offset"
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Iteration"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr "Perlin noise generator"
++
++#: ../operations/common/oilify.c:27 ../operations/common/photocopy.c:25
++#: ../operations/common/photocopy.c:26
++msgid "Mask Radius"
++msgstr "Mask Radius"
++
++#: ../operations/common/oilify.c:28
++msgid "Radius of circle around pixel"
++msgstr "Radius of circle around pixel"
++
++#: ../operations/common/oilify.c:30 ../operations/common/oilify.c:31
++msgid "Exponent"
++msgstr "Exponent"
++
++#: ../operations/common/oilify.c:33
++msgid "Intensity Mode"
++msgstr "Intensity Mode"
++
++#: ../operations/common/oilify.c:34
++msgid "Use pixel luminance values"
++msgstr "Use pixel luminance values"
++
++#: ../operations/common/oilify.c:309
++msgid "Emulate an oil painting"
++msgstr "Emulate an oil painting"
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr "a GeglBuffer on disk to open"
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr "A source that uses an on-disk GeglBuffer."
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr "Porter Duff operation over (d = cA + cB * (1 - aA))"
++
++#: ../operations/common/photocopy.c:28 ../operations/common/photocopy.c:29
++#: ../operations/common/softglow.c:29
++msgid "Sharpness"
++msgstr "Sharpness"
++
++#: ../operations/common/photocopy.c:31 ../operations/common/photocopy.c:32
++msgid "Percent Black"
++msgstr "Percent Black"
++
++#: ../operations/common/photocopy.c:34 ../operations/common/photocopy.c:35
++msgid "Percent White"
++msgstr "Percent White"
++
++#: ../operations/common/photocopy.c:395
++msgid "Photocopy effect"
++msgstr "Photocopy effect"
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr "Width of blocks in pixels"
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr "Block Height"
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr "Height of blocks in pixels"
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr "Simplify image into an array of solid-coloured squares"
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr "Circle depth in percent"
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "Offset angle"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "Offset angle."
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr "Map backwards"
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr "Start from the right instead of the left"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr "Map from top"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr "Put the top row in the middle and the bottom row on the outside"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr "To polar"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr "Map the image to a circle"
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr "Origin point for the polar coordinates"
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "Choose middle"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr "Let origin point to be the middle one"
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr "Performs polar-coordinates on the image."
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Levels"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr "number of levels per component"
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr "Reduces the number of levels in each colour component of the image."
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr "Raw image loader, wrapping dcraw with pipes."
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr "Horizontal extent"
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr "Vertical extent"
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr "Colour to render"
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr "A rectangular source of a fixed size with a solid colour"
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr "Overall brightness of the image"
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr "Chromatic Adaptation"
++
++#: ../operations/common/reinhard05.c:32
++#| msgid "Adapation to colour variation across the image"
++msgid "Adapation to color variation across the image"
++msgstr "Adaptation to colour variation across the image"
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr "Light Adaptation"
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adapation to light variation across the image"
++msgstr "Adapation to light variation across the image"
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++msgstr ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr "stretch components of pixels individually based on luminance envelopes"
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr "Amplitude"
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr "Amplitude of the ripple"
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr "Period"
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr "Period of the ripple"
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr "Phase shift"
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr "Angle in degree"
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "Wave type"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "Type of wave"
++
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr "Tileable"
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr "Retain tilebility"
++
++#: ../operations/common/ripple.c:175
++msgid "Transform the buffer with a ripple pattern"
++msgstr "Transform the buffer with a ripple pattern"
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr "Path of file to save."
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr "Multipurpose file saver, that uses other native handlers."
++
++#: ../operations/common/shift.c:26
++msgid "Shift"
++msgstr "Shift"
++
++#: ../operations/common/shift.c:27
++msgid "Maximum amount to shift"
++msgstr "Maximum amount to shift"
++
++#: ../operations/common/shift.c:36
++msgid "Direction"
++msgstr "Direction"
++
++#: ../operations/common/shift.c:37
++msgid "Shift direction"
++msgstr "Shift direction"
++
++#: ../operations/common/shift.c:231
++msgid "Shift by a random number of pixels"
++msgstr "Shift by a random number of pixels"
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr "Pairs"
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr "Number of pairs; higher number preserves more acute features"
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++
++#: ../operations/common/softglow.c:25
++msgid "Glow radius"
++msgstr "Glow radius"
++
++#: ../operations/common/softglow.c:224
++msgid "Softglow effect"
++msgstr "Softglow effect"
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++"Neighbourhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Values"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr "list of <number>s"
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr "SVG colour matrix operation svg_huerotate"
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr "SVG colour matrix operation svg_luminancetoalpha"
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr "SVG colour matrix operation svg_matrix"
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr "SVG colour matrix operation svg_saturate"
++
++#: ../operations/common/threshold.c:25 ../operations/common/wind.c:26
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Threshold"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr "Global threshold level (used when there is no auxiliary input buffer)."
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr "Std. Dev."
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr "Standard deviation (spatial scale factor)"
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr "Scale, strength of effect"
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "Shape"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "Shape to use: 0=circle 1=diamond 2=square"
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr "How far out vignetting goes as portion of half image diagonal"
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr "Softness"
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Gamma"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr "Falloff linearity"
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "Proportion"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr "How close we are to image proportions"
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr "Squeeze"
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr "Horizontal centre of vignetting"
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr "Vertical centre of vignetting"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Rotation"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "Rotation angle"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr "X coordinate of the centre of the waves"
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr "Coordinate y of the centre of the waves"
++
++#: ../operations/common/waves.c:44
++msgid "Clamp deformation"
++msgstr "Clamp deformation"
++
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr "Limit deformation in the image area."
++
++#: ../operations/common/waves.c:169
++msgid "Transform the buffer with waves"
++msgstr "Transform the buffer with waves"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr "global value used if aux doesn't contain data"
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr "blend two images using alpha values as weights"
++
++#: ../operations/common/wind.c:27
++msgid "Higher values restrict the effect to fewer areas of the image"
++msgstr "Higher values restrict the effect to fewer areas of the image"
++
++#: ../operations/common/wind.c:31
++msgid "Higher values increase the magnitude of the effect"
++msgstr "Higher values increase the magnitude of the effect"
++
++#: ../operations/common/wind.c:367
++msgid "Wind-like bleed effect"
++msgstr "Wind-like bleed effect"
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr "Write to an existing GeglBuffer"
++
++#: ../operations/common/write-buffer.c:28
++msgid "Flush buffer"
++msgstr "Flush buffer"
++
++#: ../operations/common/write-buffer.c:29
++msgid "Flush buffer after writing"
++msgstr "Flush buffer after writing"
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "Reference"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr "The reference ID used as input (for use in XML)."
++
++#: ../operations/core/clone.c:110
++msgid "Clone a buffer"
++msgstr "Clone a buffer"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Output format"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr "Babl output format string"
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr "Convert the data to the specified format"
++
++#: ../operations/core/crop.c:194
++msgid "Crop a buffer"
++msgstr "Crop a buffer"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr "No operation (can be used as a routing point)"
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Path of file to load"
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr "Frame"
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr "Frame number"
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr "FFmpeg video frame importer"
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Unknown JPEG 2000 image format in '%s'"
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "Unable to open JPEG 2000 image in '%s'"
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr "Unable to create output colour profile for '%s'"
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr "Unable to convert image to sRGB colour space when processing '%s'"
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "Unsupported JPEG 2000 file with depth %d in '%s'"
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr "Components of input image '%s' don't match"
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr "One or more of R, G, B components are missing from '%s'"
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr "One or more of R, G, B components have signed data in '%s'"
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr "Error reading row %d component %d from '%s'"
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr "JPEG 2000 image loader"
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr "JPG image loader"
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr "Target path and filename, use '-' for stdout"
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Quality"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr "JPEG compression quality (between 1 and 100)"
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr "Smoothing"
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr "Smoothing factor from 1 to 100; 0 disables smoothing"
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Optimise"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr "Use optimised huffman tables"
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Progressive"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr "Create progressive JPEG images"
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Greyscale"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr "Create a greyscale (monochrome) image"
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr "JPEG image saver (passes the buffer through, saves as a side-effect)"
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilon"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Log of the error weighting"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Radius of the processing window"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr "Alpha threshold for multilevel processing"
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr "Trimap influence factor"
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr "Number of downsampled levels to use"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Active Levels"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr "Number of levels to perform solving"
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Fill Colour"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr "Colour of paint to use for filling, use 0 opacity to disable filling"
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr "Stroke Colour"
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr "Colour of paint to use for stroking"
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr "Stroke width"
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr "The width of the brush used to stroke the path"
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr "Stroke opacity"
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "Hardness"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr "Fill rule"
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr "How to determine what to fill (nonzero|evenodd)"
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Transform"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr "SVG style description of transform"
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr "Fill opacity"
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr "The fill opacity to use"
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr "Vector"
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr "A GeglVector representing the path of the stroke"
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr "Renders a brush stroke"
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "GdkPixbuf to use"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr "PNG image loader."
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr "Target path and filename, use '-' for stdout."
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Compression"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr "PNG compression level from 1 to 9"
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Bitdepth"
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr "8 and 16 are amongst the currently accepted values."
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr "PNG image saver (passes the buffer through, saves as a side-effect.)"
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr "PPM image loader."
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Raw format"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr "PPM image saver (Portable pixmap saver.)"
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr "RGBE image loader (Radiance HDR format)."
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr "RGBE image saver (Radiance HDR format)"
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr "Pixbuf location"
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr "The location where to store the output GdkPixbuf."
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr "Save output into a GdkPixbuf."
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr "Icon to be used for output window"
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr "Path to SVG file to load"
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr "Width for rendered image"
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr "Height for rendered image"
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:239
++msgid "Load an SVG file using librsvg"
++msgstr "Load an SVG file using librsvg"
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Text"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr "String to display (utf8)"
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Font family"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr "Font family (utf8)"
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Size"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr "Approximate height of text in pixels."
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr "Colour for the text (defaults to 'white')"
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr "Wrap width"
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr "Justification"
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr "Alignment for multi-line text (0=Left, 1=Centre, 2=Right)"
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr "Rendered width in pixels. (read only)"
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr "Rendered height in pixels. (read only)"
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr "Display a string of text using pango and cairo."
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Path"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr "Path to v4l device"
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr "current frame number, can be changed to trigger a reload of the image."
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "FPS"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr "autotrigger reload this many times a second."
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr "Video4Linux input, webcams framegrabbers and similar devices."
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr "Colour of paint to use for filling."
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr "The fill opacity to use."
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr "Fill rule."
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr "how to determine what to fill (nonzero|evenodd)"
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr "svg style description of transform."
++
++#: ../operations/external/vector-fill.c:268
++msgid "Renders a filled region"
++msgstr "Renders a filled region"
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr "Colour of paint to use for stroking."
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr "The width of the brush used to stroke the path."
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr "Renders a vector stroke"
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr "Math operation add (c = c + value)"
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr "Porter Duff operation clear (d = 0.0f)"
++
++#: ../operations/generated/color-burn.c:165
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++"SVG blend operation colour-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++
++#: ../operations/generated/color-dodge.c:165
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG blend operation colour-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/darken.c:163
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++
++#: ../operations/generated/difference.c:163
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr "Math operation divide (c = value==0.0f?0.0f:c/value)"
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr "Porter Duff operation dst-in (d = cB * aA)"
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr "Porter Duff operation dst (d = cB)"
++
++#: ../operations/generated/exclusion.c:163
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr "Math operation gamma (c = powf (c, value))"
++
++#: ../operations/generated/hard-light.c:165
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/lighten.c:163
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr "Math operation multiply (c = c * value)"
++
++#: ../operations/generated/overlay.c:165
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/plus.c:163
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr "SVG blend operation plus (<code>d = cA + cB</code>)"
++
++#: ../operations/generated/screen.c:163
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++
++#: ../operations/generated/soft-light.c:167
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr "Porter Duff operation src-in (d = cA * aB)"
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr "Porter Duff operation src (d = cA)"
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr "Math operation subtract (c = c - value)"
++
++#: ../operations/generated/svg-multiply.c:163
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr "Direction vector's X component"
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr "Direction vector's Y component"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Angle to rotate (clockwise)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Rotate the buffer around the specified origin."
++
++#: ../operations/transform/scale-ratio.c:26 ../operations/transform/scale.c:29
++msgid "Horizontal scale factor"
++msgstr "Horizontal scale factor"
++
++#: ../operations/transform/scale-ratio.c:28 ../operations/transform/scale.c:31
++msgid "Vertical scale factor"
++msgstr "Vertical scale factor"
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr "Scales the buffer according to a ratio."
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Horizontal size"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Vertical size"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr "Scales the buffer according to a size."
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr "Scales the buffer."
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Horizontal shear amount"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Vertical shear amount"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Shears the buffer"
++
++#: ../operations/transform/transform-core.c:200
++msgid "Origin-x"
++msgstr "Origin-x"
++
++#: ../operations/transform/transform-core.c:201
++msgid "X coordinate of origin"
++msgstr "X coordinate of origin"
++
++#: ../operations/transform/transform-core.c:208
++msgid "Origin-y"
++msgstr "Origin-y"
++
++#: ../operations/transform/transform-core.c:209
++msgid "Y coordinate of origin"
++msgstr "Y coordinate of origin"
++
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++msgid "Hard edges"
++msgstr "Hard edges"
++
++#: ../operations/transform/transform-core.c:230
++msgid "Lanczos width"
++msgstr "Lanczos width"
++
++#: ../operations/transform/transform-core.c:231
++msgid "Width of the Lanczos function"
++msgstr "Width of the Lanczos function"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Transformation string"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr "Transforms the group (used by svg)."
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Horizontal translation"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Vertical translation"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr "Radius of square pixel region (width and height will be radius*2+1)"
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr "Percentile"
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr "The percentile to compute, defaults to 50, which is a median filter"
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++"Sets the target pixel to the colour corresponding to a given percentile when "
++"colours are sorted by luminance"
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr "Cache buffer"
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr "The GeglBuffer where the caching is done"
++
++#: ../operations/workshop/buffer-cache.c:96
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++"Cache the input buffer internally, further process take this buffer as input."
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Clockwise"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr "Switch to clockwise"
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "From:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr "Starting angle for the colour rotation"
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "To:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr "End angle for the colour rotation"
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr "Choose in case of greyscale images"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr "The value of hue"
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr "The value of saturation"
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr "Change/Treat to this"
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr "The value of grey threshold"
++
++#: ../operations/workshop/color-rotate.c:383
++msgid "Rotate colors on the image"
++msgstr "Rotate colours on the image"
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr "Value of the element in position (1,1)"
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr "Value of the element in position (1,2)"
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr "Value of the element in position (1,3)"
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr "Value of the element in position (1,4)"
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr "Value of the element in position (1,5)"
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr "Value of the element in position (2,1)"
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr "Value of the element in position (2,2)"
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr "Value of the element in position (2,3)"
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr "Value of the element in position (2,4)"
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr "Value of the element in position (2,5)"
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr "Value of the element in position (3,1)"
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr "Value of the element in position (3,2)"
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr "Value of the element in position (3,3)"
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr "Value of the element in position (3,4)"
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr "Value of the element in position (3,5)"
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr "Value of the element in position (4,1)"
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr "Value of the element in position (4,2)"
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr "Value of the element in position (4,3)"
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr "Value of the element in position (4,4)"
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr "Value of the element in position (4,5)"
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr "Value of the element in position (5,1)"
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr "Value of the element in position (5,2)"
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr "Value of the element in position (5,3)"
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr "Value of the element in position (5,4)"
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr "Value of the element in position (5,5)"
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr "Divisor: "
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr "The value of the divisor"
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr "Offset: "
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr "The value of the offset"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "Normalise"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "Normalise or not"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "Red channel"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "Green channel"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "Blue channel"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "Alpha channel"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr "Alpha-weighting"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr "Alpha weighting"
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr "Border"
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++msgstr ""
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr "Creates image by manually set convolution matrix"
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "Tile size"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr "Tile saturation"
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr "A filter that somehow resembles a cubist painting style"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "Even/Odd"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr "Keep even/odd fields"
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr "Horizontal/Vertical"
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr "Choose horizontal or vertical"
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr "Block size"
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr "Block size of deinterlacing rows/columns"
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr "Performs deinterlace on the image"
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr "Bayer pattern"
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr "The percentile to compute, defaults to 50, which is a median filter."
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++"Sets the target pixel to the colour corresponding to a given percentile when "
++"colours are sorted by luminance."
++
++#: ../operations/workshop/ditto.c:112
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr "Test op to do a 1:1 map of input to output, while sampling"
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Azimuth"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr "The value of azimuth"
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr "Elevation"
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr "The value of elevation"
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Depth"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr "Pixel depth"
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr "Simulates an image created by embossing"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Bitrate"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr "target bitrate"
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr "frames per second"
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr "FFmpeg video output sink"
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr "Script"
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr "The lua script containing the implementation of this operation."
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr "a stored lua script on disk implementing an operation."
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr "User value"
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr "(appears in the global variable 'user_value' in lua."
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr "Maker:"
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr "Write lens maker correctly"
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Camera:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr "Write camera name correctly"
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr "Lens:"
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with uppercase letters"
++msgstr "Write your lens model with uppercase letters"
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr "Focal of the camera"
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr "Calculate b value from focal"
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "Centre"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr "If you want centre"
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr "Lens centre x"
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr "Coordinates of lens centre"
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr "Lens centre y"
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr "Scale of the image"
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr "Autocorrect d values"
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr "Autocorrect D values for lens correction models."
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr "Model red a:"
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr "Correction parameters for each colour channel"
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr "Model red b:"
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr "Model red c:"
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr "Model red d:"
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr "Model green a:"
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr "Model green b:"
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr "Model green c:"
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr "Model green d:"
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr "Model blue a:"
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr "Model blue b:"
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr "Model blue c:"
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr "Model blue d:"
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr "Model alpha a:"
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr "Correction parameters for alpha channel"
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr "Model alpha b:"
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr "Model alpha c:"
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr "Model alpha d:"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr "Start x coordinate"
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr "End x coordinate"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr "Start y coordinate"
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr "End y coordinate"
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr "Width of plot"
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr "Height of plot"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Min"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr "Value at bottom"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Max"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr "Value at top"
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr "Fractal"
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "X1 value, position"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "X2 value, position"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Y2 value, position"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr "Julia seed X value, position"
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr "Julia seed Y value, position"
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr "Depth value"
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr "Bailout"
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr "Bailout length"
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Background"
++msgstr "Background"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid ""
++"Optional parameter to override automatic selection of wrap background. "
++"Choices are wrap, black, white and transparent."
++msgstr ""
++"Optional parameter to override automatic selection of wrap background. "
++"Choices are wrap, black, white and transparent."
++
++#: ../operations/workshop/fractal-trace.c:171
++msgid "Unsupported fractal type"
++msgstr "Unsupported fractal type"
++
++#: ../operations/workshop/fractal-trace.c:321
++msgid "Performs fractal trace on the image"
++msgstr "Performs fractal trace on the image"
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr "Edge preserving blur"
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "One end of a agradient"
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr "The other end of a gradient"
++
++#: ../operations/workshop/linear-gradient.c:136
++msgid "Linear gradient renderer"
++msgstr "Linear gradient renderer"
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "Real"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "Real coordinate"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "Imaginary"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr "Imaginary coordinate"
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Level"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Water level"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr "Maximum number of iterations"
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr "Mandelbrot set renderer"
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr "Horizontal spread amount"
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr "Vertical spread amount"
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr "Noise spread filter"
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr "Random seed. Passing -1 implies that the seed is randomly chosen."
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr "Turbulence"
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr "The value of the turbulence"
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr "Performs plasma effect on the image"
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "One end of gradient"
++
++#: ../operations/workshop/radial-gradient.c:128
++msgid "Radial gradient renderer"
++msgstr "Radial gradient renderer"
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"greyscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr "The value of the threshold"
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr "Performs red-eye-removal on the image"
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr "Number of pairs, higher number preserves more acute features"
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr "The percentile to return, the default value 50 is equal to the median"
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr "Effect Strength"
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr "Effect Size"
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Effect Hardness"
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr "Stroke"
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Behaviour"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr "Behaviour of the op"
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr "Compute a relative displacement mapping from a stroke"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "Whirl"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr "Whirl angle (degrees)"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr "Pinch"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr "Pinch amount"
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr "Applies whirling and pinching on the image"
+diff --git a/po/eo.po b/po/eo.po
+new file mode 100644
+index 0000000..d969787
+--- /dev/null
++++ po/eo.po
+@@ -0,0 +1,3392 @@
++# Esperanto translation for gegl.
++# Copyright (C) 2012 Free Software Foundation, Inc.
++# This file is distributed under the same license as the gegl package.
++# Kristjan SCHMIDT <kristjan.schmidt at googlemail.com>, 2012.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl master\n"
++"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
++"product=gegl&keywords=I18N+L10N&component=general\n"
++"POT-Creation-Date: 2012-04-06 18:48+0000\n"
++"PO-Revision-Date: 2012-04-06 23:39+0200\n"
++"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt at googlemail.com>\n"
++"Language-Team: Esperanto <gnome-l10n-eo at lists.launchpad.net>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1)\n"
++
++#: ../gegl/gegl-init.c:216
++msgid "babls error tolerance, a value beteen 0.2 and 0.000000001"
++msgstr ""
++
++#: ../gegl/gegl-init.c:221
++msgid "Where GEGL stores it's swap"
++msgstr ""
++
++#: ../gegl/gegl-init.c:226
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr ""
++
++#: ../gegl/gegl-init.c:231
++msgid "Default size of tiles in GeglBuffers"
++msgstr ""
++
++#: ../gegl/gegl-init.c:236
++msgid "The count of pixels to compute simultaneously"
++msgstr ""
++
++#: ../gegl/gegl-init.c:241
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr ""
++
++#: ../gegl/gegl-init.c:246
++msgid "The number of concurrent processing threads to use"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Moduleraro"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Ŝargite"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Ŝargado malsukcesis"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Ne ŝargite"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Radiuso"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr ""
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Kontrasto"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27
++msgid "Brightness"
++msgstr "Heleco"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:198
++msgid "Changes the light level and contrast."
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:127
++msgid "A GEGL buffer destination surface."
++msgstr ""
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr ""
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr ""
++
++#: ../operations/common/buffer-source.c:116
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr ""
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr ""
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++
++#: ../operations/common/c2g.c:493
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial  color "
++"differences to perform color-feature preserving grayscale  spatial contrast "
++"enhancement"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Larĝo"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Alto"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:33
++#: ../operations/common/color-to-alpha.c:27 ../operations/common/color.c:24
++#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
++#: ../operations/common/vignette.c:25 ../operations/external/text.c:31
++#: ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Koloro"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:267
++msgid "Allows changing the color temperature of an image."
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:170
++msgid "Performs color-to-alpha on the image."
++msgstr ""
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr ""
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr ""
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr ""
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr ""
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr ""
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr ""
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Opakeco"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr ""
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr ""
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr ""
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr ""
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Horizontale"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Vertikale"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr ""
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distrubtion sigma controlling response contributions"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr ""
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alfo"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr ""
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Satureco"
++
++#: ../operations/common/fattal02.c:41
++msgid "Global color saturation factor"
++msgstr ""
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Bruo"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Maldekstre"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Dekstre"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Supre"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Malsupre"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Koloroj"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:217
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filtrilo"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "Dosiero"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr ""
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr ""
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr ""
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr ""
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr ""
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr ""
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr ""
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr ""
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr ""
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr ""
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr ""
++
++#: ../operations/common/invert.c:131
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Operacio"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr ""
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr ""
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr ""
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Skali"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr ""
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Fonto"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr ""
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Zomo:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:321
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr ""
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr ""
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr ""
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr ""
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr ""
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr ""
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr ""
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:182
++msgid "Remaps the intensity range of the image"
++msgstr ""
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr ""
++
++#: ../operations/common/load.c:180
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using image magick's convert."
++msgstr ""
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:36
++msgid "Global colour saturation factor"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Detalo"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27
++msgid "Sampler used internaly"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr ""
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++
++#: ../operations/common/map-relative.c:156
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr ""
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr ""
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr ""
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr ""
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr ""
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr ""
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr ""
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr ""
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr ""
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr ""
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr ""
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Zomi"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr ""
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr ""
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr ""
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:26
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Ruĝo"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:28
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Verdo"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:30
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Bluo"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:202
++msgid "Monochrome channel mixer"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Longo"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Angulo"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr ""
++
++#: ../operations/common/noise-reduction.c:26 ../operations/workshop/warp.c:26
++msgid "Strength"
++msgstr "Forto"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr ""
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr ""
++
++#: ../operations/common/noise.c:31 ../operations/workshop/cubism.c:34
++#: ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr ""
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr ""
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr ""
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++
++#: ../operations/common/opacity.c:225
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr ""
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr ""
++
++#: ../operations/common/over.c:200
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr ""
++
++#: ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr ""
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr ""
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr ""
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Niveloj"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr ""
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr ""
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr ""
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr ""
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adapation to colour variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adapation to light variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++msgstr ""
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr ""
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr ""
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr ""
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr ""
++
++#: ../operations/common/ripple.c:40 ../operations/common/waves.c:42
++#: ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr ""
++
++#: ../operations/common/ripple.c:42
++msgid "Wave type"
++msgstr ""
++
++#: ../operations/common/ripple.c:43
++msgid "Type of wave"
++msgstr ""
++
++#: ../operations/common/ripple.c:164
++msgid "Transform the buffer with a ripple pattern"
++msgstr ""
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr ""
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr ""
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr ""
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Valoroj"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr ""
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr ""
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr ""
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr ""
++
++#: ../operations/common/threshold.c:25
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Sojlo"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++
++#: ../operations/common/threshold.c:193
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++
++#: ../operations/common/value-invert.c:232
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr ""
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr ""
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr ""
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr ""
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr ""
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr ""
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr ""
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Rotacio"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr ""
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:164
++msgid "Transform the buffer with waves"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Valoro"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr ""
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr ""
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr ""
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr ""
++
++#: ../operations/core/clone.c:112
++msgid "Clone a buffer"
++msgstr ""
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr ""
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr ""
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr ""
++
++#: ../operations/core/crop.c:179
++msgid "Crop a buffer"
++msgstr ""
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr ""
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr ""
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr ""
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr ""
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr ""
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Kvalito"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Plenig-koloro"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr ""
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr ""
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr ""
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr ""
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr ""
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:30
++msgid "Hardness"
++msgstr "Dureco"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr ""
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr ""
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd"
++msgstr ""
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Transformi"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr ""
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr ""
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr ""
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr ""
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr ""
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr ""
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr ""
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr ""
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Densigo"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr ""
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr ""
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr ""
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr ""
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr ""
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr ""
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr ""
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr ""
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr ""
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr ""
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr ""
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr ""
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:245
++msgid "Load an SVG file using librsvg"
++msgstr ""
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Teksto"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr ""
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Tiparfamilio"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr "Tiparfamilio (utf8)"
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:28
++msgid "Size"
++msgstr "Grando"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr ""
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr ""
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr ""
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr ""
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr ""
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr ""
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Vojo"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr ""
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr ""
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr ""
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd"
++msgstr ""
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:258
++msgid "Renders a filled region"
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr ""
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr ""
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr ""
++
++#: ../operations/generated/color-burn.c:117
++msgid ""
++"SVG blend operation color-burn (<tt>if cA * aB + cB * aA <= aA * aB: d = cA "
++"* (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB "
++"* aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</tt>)"
++msgstr ""
++
++#: ../operations/generated/color-dodge.c:117
++msgid ""
++"SVG blend operation color-dodge (<tt>if cA * aB + cB * aA >= aA * aB: d = aA "
++"* aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/darken.c:115
++msgid ""
++"SVG blend operation darken (<tt>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + "
++"cB * (1 - aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/difference.c:115
++msgid ""
++"SVG blend operation difference (<tt>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</tt>)"
++msgstr ""
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr ""
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr ""
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr ""
++
++#: ../operations/generated/exclusion.c:115
++msgid ""
++"SVG blend operation exclusion (<tt>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr ""
++
++#: ../operations/generated/hard-light.c:117
++msgid ""
++"SVG blend operation hard-light (<tt>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/lighten.c:115
++msgid ""
++"SVG blend operation lighten (<tt>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr ""
++
++#: ../operations/generated/overlay.c:117
++msgid ""
++"SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - "
++"aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA "
++"* (1 - aB) + cB * (1 - aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/plus.c:115
++msgid "SVG blend operation plus (<tt>d = cA + cB</tt>)"
++msgstr ""
++
++#: ../operations/generated/screen.c:115
++msgid "SVG blend operation screen (<tt>d = cA + cB - cA * cB</tt>)"
++msgstr ""
++
++#: ../operations/generated/soft-light.c:119
++msgid ""
++"SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr ""
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr ""
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr ""
++
++#: ../operations/generated/svg-multiply.c:114
++msgid ""
++"SVG blend operation svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 "
++"- aA)</tt>)"
++msgstr ""
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr ""
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr ""
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr ""
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr ""
++
++#: ../operations/transform/scale.c:26
++msgid "Horizontal scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:28
++msgid "Vertical scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:33
++msgid "Scales the buffer."
++msgstr ""
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:201
++msgid "Origin-x"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:202
++msgid "X coordinate of origin"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:209
++msgid "Origin-y"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:210
++msgid "Y coordinate of origin"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:218
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:224
++#: ../operations/transform/transform-core.c:225
++msgid "Hard edges"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:231
++msgid "Lanczos width"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:232
++msgid "Width of the Lanczos function"
++msgstr ""
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr ""
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr ""
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr ""
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr ""
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:103
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Red bits"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Number of bits for red channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Green bits"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Number of bits for green channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Blue bits"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Number of bits for blue channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Alpha bits"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Number of bits for alpha channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:29
++msgid "Dither"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:30
++msgid ""
++"Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:459
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Dekstrume"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "De:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "Al:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Nuanco"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:385
++msgid "Rotate colors on the image"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose.Choices are extend, wrap, crop.Default is extend"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++
++#: ../operations/workshop/ditto.c:111
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with majuscules"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "X1 valoro, posicio"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "X2 valoro, posicio"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Y2 valoro, posicio"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Background"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid ""
++"Optional parameter to override automatic selection of wrap background. "
++"Choices are wrap, black, white and transparent."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:171
++msgid "Unsupported fractal type"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:321
++msgid "Performs fractal trace on the image"
++msgstr ""
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr ""
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:137
++msgid "Linear gradient renderer"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Nivelo"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr ""
++
++#: ../operations/workshop/max-rgb.c:30
++msgid "Minimal"
++msgstr ""
++
++#: ../operations/workshop/max-rgb.c:31
++msgid "Hold the minimal values instead of the maximal values"
++msgstr ""
++
++#: ../operations/workshop/max-rgb.c:120
++msgid "Reduce image to pure red, green, and blue"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr ""
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:129
++msgid "Radial gradient renderer"
++msgstr ""
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/workshop/warp.c:27 ../operations/workshop/warp.c:32
++msgid "Effect Strength"
++msgstr ""
++
++#: ../operations/workshop/warp.c:29
++msgid "Effect Size"
++msgstr ""
++
++#: ../operations/workshop/warp.c:31
++msgid "Effect Hardness"
++msgstr ""
++
++#: ../operations/workshop/warp.c:32
++msgid "Stroke"
++msgstr ""
++
++#: ../operations/workshop/warp.c:33
++msgid "Behavior"
++msgstr ""
++
++#: ../operations/workshop/warp.c:34
++msgid "Behavior of the op"
++msgstr ""
++
++#: ../operations/workshop/warp.c:379
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr ""
+diff --git a/po/es.po b/po/es.po
+index e2b27d4..14eb2fb 100644
+--- po/es.po
++++ po/es.po
+@@ -1,51 +1,198 @@
+-# SOME DESCRIPTIVE TITLE.
++# translation of gegl.master.po to Español
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+ # This file is distributed under the same license as the GEGL package.
++#
++# Francisco Vila <francisco.vila at hispalinux.es>, 2012.
+ # Daniel Mustieles <daniel.mustieles at gmail.com>, 2012.
+ #
+ #: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
+ #: ../operations/external/sdl-display.c:27
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: master\n"
++"Project-Id-Version: gegl.master\n"
+ "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+ "product=gegl&keywords=I18N+L10N&component=general\n"
+-"POT-Creation-Date: 2012-03-31 10:38+0000\n"
+-"PO-Revision-Date: 2012-04-01 12:46+0200\n"
++"POT-Creation-Date: 2012-11-07 16:50+0000\n"
++"PO-Revision-Date: 2012-11-08 12:37+0100\n"
+ "Last-Translator: Daniel Mustieles <daniel.mustieles at gmail.com>\n"
+-"Language-Team: Español <gnome-es-list at gnome.org>\n"
++"Language-Team: Español; Castellano <gnome-es-list at gnome.org>\n"
++"Language: \n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
++"X-Generator: Gtranslator 2.91.5\n"
+ 
+-#: ../gegl/gegl-init.c:216
+-msgid "babls error tolerance, a value beteen 0.2 and 0.000000001"
+-msgstr ""
++#: ../bin/gegl.c:147
++#, c-format
++msgid "Unable to read file: %s"
++msgstr "No se pudo leer del archivo: %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr "Gráfico no válido, cancelar.\n"
++
++#: ../bin/gegl.c:257 ../bin/gegl-options.c:124
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr "Modo de GeglOption desconocido: %d"
++
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++"Uso: %s [opciones] <archivo | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      muestra esta ayuda\n"
++"\n"
++"     -i, --file      leer XML del archivo indicado\n"
++"\n"
++"     -x, --xml       usar el XML indicado en el siguiente argumento\n"
++"\n"
++"     --dot           mostrar una descripción del gráfico de graphviz\n"
++"\n"
++"     -o, --output    mostrar la imagen generada en un archivo con nombre, "
++"basándose el tipo\n"
++"                     en la extensión.\n"
++"\n"
++"     -p             incrementar los contadores de marcos de varios elementos "
++"cuando\n"
++"                     termine el procesado.\n"
++"\n"
++"     -X              mostrar el XML leído\n"
++"\n"
++"     -v, --verbose   mostrar diagnósticos durante la ejecución\n"
++"\n"
++"Todos los parámetros seguidos de -- se consideran opciones que se deben\n"
++"poner juntas, en una pequeña composición, en lugar de usar un archivo XML;\n"
++"esto permite probar sencillos filtros. Tenga en cuenta que se usará el "
++"valor\n"
++"predeterminado para todas las propiedades.\n"
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr "Error: se esperaba un argumento para la opción «%s»\n"
++
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr "Mostrar en la pantalla"
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr "Imprimir XML"
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr "Salida en un archivo"
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
++msgstr "Mostrar información de ayuda"
++
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
++msgstr "modo desconocido"
+ 
+-#: ../gegl/gegl-init.c:221
+-msgid "Where GEGL stores it's swap"
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++"Análisis de la línea de comandos:\n"
++"\tmodo:      %s\n"
++"\tarchivo:   %s\n"
++"\txml:         %s\n"
++"\tsalida:     %s\n"
++"\tresto:      %s\n"
++"\t\n"
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
+ msgstr ""
++"\n"
++"\n"
++"parámetro «%s» desconocido. Mostrando la ayuda en su lugar\n"
++"\n"
++"\n"
+ 
+-#: ../gegl/gegl-init.c:226
++#: ../gegl/gegl-init.c:205
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "tolerancia de error de babls, un valor entre 0.2 y 0.000000001"
++
++#: ../gegl/gegl-init.c:210
++msgid "Where GEGL stores its swap"
++msgstr "Dónde almacena GEGL su espacio de intercambio"
++
++#: ../gegl/gegl-init.c:215
+ msgid "How much memory to (approximately) use for caching imagery"
+-msgstr ""
++msgstr "Cuánta memoria (aproximadamente) usar para el cacheo de las imágenes"
+ 
+-#: ../gegl/gegl-init.c:231
++#: ../gegl/gegl-init.c:220
+ msgid "Default size of tiles in GeglBuffers"
+-msgstr ""
++msgstr "Tamaño predeterminado de las baldosas en GeglBuffers"
+ 
+-#: ../gegl/gegl-init.c:236
+-msgid "The count of pixels to compute simulantous"
+-msgstr ""
++#: ../gegl/gegl-init.c:225
++msgid "The count of pixels to compute simultaneously"
++msgstr "Cuántos píxeles calcular simultáneamente"
+ 
+-#: ../gegl/gegl-init.c:241
++#: ../gegl/gegl-init.c:230
+ msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
+ msgstr ""
++"Calidad del renderizado; un valor entre 0.0 (rápido) y 1.0 (referencia)"
++
++#: ../gegl/gegl-init.c:235
++msgid "The number of concurrent processing threads to use"
++msgstr "Número de hilos de procesado concurrente que usar"
+ 
+-#: ../gegl/gegl-init.c:246
+-msgid "The number of concurrent processing threads to use."
++#: ../gegl/gegl-init.c:240
++msgid "Use OpenCL"
++msgstr "Usar OpenCL"
++
++#: ../gegl/gegl-init.c:245
++msgid "Maximum number of entries in the file tile backend's writer queue"
+ msgstr ""
++"Número máximo de entradas en ella cola baldosa escritora del archivo del "
++"«backend»"
+ 
+ #: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
+ #: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
+@@ -70,139 +217,42 @@ msgstr "Falló al cargar"
+ msgid "Not loaded"
+ msgstr "No cargado"
+ 
+-#: ../operations/affine/affine.c:200
+-msgid "Origin-x"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:201
+-msgid "X-coordinate of origin"
+-msgstr "Coordenada X del origen"
+-
+-#: ../operations/affine/affine.c:208
+-msgid "Origin-y"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:209
+-msgid "Y-coordinate of origin"
+-msgstr "Coordenada Y del origen"
+-
+-#: ../operations/affine/affine.c:216 ../operations/common/gaussian-blur.c:34
+-#: ../operations/workshop/emboss.c:31
+-msgid "Filter"
+-msgstr "Filtro"
+-
+-#: ../operations/affine/affine.c:217
+-msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:223
+-msgid "Hard-edges"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:224
+-msgid "Hard edges"
+-msgstr "Bordes duros"
+-
+-#: ../operations/affine/affine.c:230
+-msgid "Lanczos-width"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:231
+-msgid "Width of lanczos function"
+-msgstr ""
+-
+-#: ../operations/affine/reflect.c:29
+-msgid "Direction vector's x component"
+-msgstr ""
+-
+-#: ../operations/affine/reflect.c:31
+-msgid "Direction vector's y component"
+-msgstr ""
+-
+-#: ../operations/affine/rotate.c:26
+-msgid "Angle to rotate (clockwize)"
+-msgstr ""
+-
+-#: ../operations/affine/rotate.c:31
+-msgid "Rotate the buffer around the specified origin."
+-msgstr ""
+-
+-#: ../operations/affine/scale.c:25
+-msgid "Horizontal scale factor."
+-msgstr ""
+-
+-#: ../operations/affine/scale.c:26
+-msgid "Vertical scale factor."
+-msgstr ""
+-
+-#: ../operations/affine/scale.c:31
+-msgid "Scales the buffer."
+-msgstr "Escala el búfer."
+-
+-#: ../operations/affine/shear.c:26
+-msgid "Horizontal shear amount."
+-msgstr ""
+-
+-#: ../operations/affine/shear.c:28
+-msgid "Vertical shear amount."
+-msgstr ""
+-
+-#: ../operations/affine/shear.c:33
+-msgid "Shears the buffer."
+-msgstr ""
+-
+-#: ../operations/affine/transform.c:25
+-msgid "Transformation string"
+-msgstr ""
+-
+-#: ../operations/affine/transform.c:30
+-msgid "Transforms the group (used by svg)."
+-msgstr ""
+-
+-#: ../operations/affine/translate.c:26
+-msgid "Horizontal translation."
+-msgstr ""
+-
+-#: ../operations/affine/translate.c:28
+-msgid "Vertical translation."
+-msgstr ""
+-
+-#: ../operations/affine/translate.c:33
+-msgid ""
+-"Repositions the buffer (with subpixel precision), if integer coordinates are "
+-"passed a fast-path without resampling is used."
+-msgstr ""
+-
+ #: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
+ msgid "Blur radius"
+ msgstr "Radio de desenfoque"
+ 
+ #: ../operations/common/bilateral-filter.c:28
+-#: ../operations/common/box-blur.c:25
+ msgid "Radius of square pixel region, (width and height will be radius*2+1)."
+ msgstr ""
++"Radio de la región cuadrada de píxeles (la anchura y la altura serán "
++"radio*2+1)."
+ 
+ #: ../operations/common/bilateral-filter.c:29
+ msgid "Edge preservation"
+-msgstr ""
++msgstr "Preservación de los bordes"
+ 
+ #: ../operations/common/bilateral-filter.c:30
+ msgid "Amount of edge preservation"
+-msgstr ""
++msgstr "Cantidad de preservación de los bordes"
+ 
+-#: ../operations/common/bilateral-filter.c:185
++#: ../operations/common/bilateral-filter.c:315
+ msgid ""
+ "An edge preserving blur filter that can be used for noise reduction. It is a "
+ "gaussian blur where the contribution of neighbourhood pixels are weighted by "
+ "the color difference from the center pixel."
+ msgstr ""
++"Un filtro de difuminado que preserva los bordes, que se puede usar para la "
++"reducción de ruido. Es un difuminado gaussiano en que la contribución de los "
++"píxeles vecinos está ponderada por la diferencia de color respecto al píxel "
++"central."
+ 
+ #: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
+ #: ../operations/common/difference-of-gaussians.c:26
+ #: ../operations/common/difference-of-gaussians.c:28
+-#: ../operations/common/dropshadow.c:30
+-#: ../operations/common/matting-global.c:28 ../operations/common/snn-mean.c:26
+-#: ../operations/common/stress.c:27 ../operations/external/matting-levin.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
+ #: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
+ #: ../operations/workshop/box-percentile.c:27
+ #: ../operations/workshop/disc-percentile.c:26
+@@ -212,9 +262,15 @@ msgstr ""
+ msgid "Radius"
+ msgstr "Radio"
+ 
+-#: ../operations/common/box-blur.c:413
+-msgid "Performs an averaging of a square box of pixels."
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
+ msgstr ""
++"Radio de la región cuadrada de píxeles (la anchura y la altura serán "
++"radio*2+1)."
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr "Efectúa el promediado de un cuadrado de píxeles"
+ 
+ #. ... are the properties of the filter, these are all scalar values
+ #. * (doubles), the the parameters are:
+@@ -227,20 +283,20 @@ msgstr "Contraste"
+ 
+ #: ../operations/common/brightness-contrast.c:30
+ msgid "Range scale factor"
+-msgstr ""
++msgstr "Factor de escalado del rango"
+ 
+ #: ../operations/common/brightness-contrast.c:31
+-#: ../operations/common/reinhard05.c:27
++#: ../operations/common/reinhard05.c:27 ../operations/common/softglow.c:27
+ msgid "Brightness"
+ msgstr "Brillo"
+ 
+ #: ../operations/common/brightness-contrast.c:32
+ msgid "Amount to increase brightness"
+-msgstr ""
++msgstr "Grado de aumento del brillo"
+ 
+-#: ../operations/common/brightness-contrast.c:198
++#: ../operations/common/brightness-contrast.c:159
+ msgid "Changes the light level and contrast."
+-msgstr ""
++msgstr "Cambia el nivel de luz y el contraste."
+ 
+ #: ../operations/common/buffer-sink.c:25
+ #: ../operations/common/write-buffer.c:25
+@@ -249,21 +305,23 @@ msgstr "Ubicación del búfer"
+ 
+ #: ../operations/common/buffer-sink.c:26
+ msgid "The location where to store the output GeglBuffer"
+-msgstr ""
++msgstr "Lugar donde guardar el GeglBuffer de salida"
+ 
+ #: ../operations/common/buffer-sink.c:27
+ msgid "babl format"
+-msgstr ""
++msgstr "formato de babl"
+ 
+ #: ../operations/common/buffer-sink.c:28
+ msgid ""
+ "The babl format of the output GeglBuffer, NULL to use input buffer format"
+ msgstr ""
++"El formato de babl del GeglBuffer de salida, NULL para usar el formato del "
++"búfer de entrada"
+ 
+ #: ../operations/common/buffer-sink.c:83
+-#: ../operations/common/write-buffer.c:87
++#: ../operations/common/write-buffer.c:132
+ msgid "A GEGL buffer destination surface."
+-msgstr ""
++msgstr "Una superficie de destino para el búfer GEGL."
+ 
+ #: ../operations/common/buffer-source.c:25
+ msgid "Input buffer"
+@@ -271,43 +329,66 @@ msgstr "Búfer de entrada"
+ 
+ #: ../operations/common/buffer-source.c:26
+ msgid "The GeglBuffer to load into the pipeline"
+-msgstr ""
++msgstr "El GeglBuffer que cargar dentro de la tubería"
+ 
+-#: ../operations/common/buffer-source.c:116
++#: ../operations/common/buffer-source.c:177
+ msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
+ msgstr ""
++"Una fuente que utiliza un GeglBuffer en memoria, para uso interno de GEGL."
+ 
+ #: ../operations/common/c2g.c:28
+ msgid ""
+-"Neighbourhood taken into account, this is the radius in pixels taken into "
+-"account when deciding which colors map to which gray values."
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
+ msgstr ""
++"Vecindad que se considera, es el radio en píxeles que se tiene en cuenta al "
++"decidir qué colores se asignan a los niveles de gris"
+ 
+ #: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
+ msgid "Samples"
+ msgstr "Muestras"
+ 
+ #: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
+-msgid "Number of samples to do per iteration looking for the range of colors."
++msgid "Number of samples to do per iteration looking for the range of colors"
+ msgstr ""
++"Número de muestras que tomar por cada iteración cuando se busca el rango de "
++"colores"
+ 
+ #: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
+-#: ../operations/common/stress.c:31 ../operations/workshop/mandelbrot.c:31
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
+ msgid "Iterations"
+ msgstr "Iteraciones"
+ 
+ #: ../operations/common/c2g.c:32
+ msgid ""
+-"Number of iterations, a higher number of iterations provides a less noisy "
+-"results at computational cost."
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
+ msgstr ""
++"Número de iteraciones, un número mayor ofrece resultados con menos ruido "
++"pero mayor coste de procesado"
+ 
+-#: ../operations/common/c2g.c:193
++#: ../operations/common/c2g.c:493
+ msgid ""
+-"Color to grayscale conversion, uses envelopes formed from spatial  color "
+-"differences to perform color-feature preserving grayscale  spatial contrast "
+-"enhancement."
++"Color to grayscale conversion, uses envelopes formed from spatial color "
++"differences to perform color-feature preserving grayscale spatial contrast "
++"enhancement"
+ msgstr ""
++"Conversión de color a escala de grises, usa envolventes formadas a partir de "
++"las diferencias de color espaciales para llevar a cabo un realzado espacial "
++"del contraste que preserva las características de color"
++
++#: ../operations/common/cartoon.c:25
++msgid "Mask radius"
++msgstr "Radio de la máscara"
++
++#: ../operations/common/cartoon.c:27
++msgid "Percent black"
++msgstr "Porcentaje de negro"
++
++#: ../operations/common/cartoon.c:376
++msgid "Cartoon effect"
++msgstr "Efecto de dibujos animados"
+ 
+ #: ../operations/common/checkerboard.c:25
+ #: ../operations/common/fractal-explorer.c:30
+@@ -320,8 +401,8 @@ msgid "Width"
+ msgstr "Anchura"
+ 
+ #: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
+-msgid "Horizontal width of cells pixels."
+-msgstr ""
++msgid "Horizontal width of cells pixels"
++msgstr "Anchura horizontal de los píxeles de las celdillas"
+ 
+ #: ../operations/common/checkerboard.c:27
+ #: ../operations/common/fractal-explorer.c:32
+@@ -334,8 +415,8 @@ msgid "Height"
+ msgstr "Altura"
+ 
+ #: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
+-msgid "Vertical width of cells in pixels."
+-msgstr ""
++msgid "Vertical width of cells in pixels"
++msgstr "Anchura vertical de las celdillas en píxeles"
+ 
+ #: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
+ #: ../operations/common/mirrors.c:36
+@@ -343,8 +424,8 @@ msgid "X offset"
+ msgstr "Desplazamiento X"
+ 
+ #: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
+-msgid "Horizontal offset (from origin) for start of grid."
+-msgstr ""
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "Desplazamiento horizontal (desde el origen) del comienzo de la rejilla"
+ 
+ #: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
+ #: ../operations/common/mirrors.c:38
+@@ -352,14 +433,13 @@ msgid "Y offset"
+ msgstr "Desplazamiento Y"
+ 
+ #: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
+-msgid "Vertical offset (from origin) for start of grid."
+-msgstr ""
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "Desplazamiento vertical (desde el origen) del comienzo de la rejilla"
+ 
+-#: ../operations/common/checkerboard.c:33
+-#: ../operations/common/color-to-alpha.c:27 ../operations/common/color.c:24
+-#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
+-#: ../operations/common/vignette.c:24 ../operations/external/text.c:31
+-#: ../operations/external/vector-fill.c:27
++#: ../operations/common/checkerboard.c:33 ../operations/common/color.c:24
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/grid.c:36
++#: ../operations/common/rectangle.c:37 ../operations/common/vignette.c:25
++#: ../operations/external/text.c:31 ../operations/external/vector-fill.c:27
+ #: ../operations/external/vector-stroke.c:27
+ #: ../operations/workshop/linear-gradient.c:28
+ #: ../operations/workshop/radial-gradient.c:28
+@@ -368,7 +448,7 @@ msgstr "Color"
+ 
+ #: ../operations/common/checkerboard.c:34
+ msgid "One of the cell colors (defaults to 'black')"
+-msgstr ""
++msgstr "Uno de los colores de las celdas. El predeterminado es: «negro»"
+ 
+ #: ../operations/common/checkerboard.c:35
+ #: ../operations/workshop/linear-gradient.c:30
+@@ -378,37 +458,108 @@ msgstr "Otro color"
+ 
+ #: ../operations/common/checkerboard.c:36
+ msgid "The other cell color (defaults to 'white')"
+-msgstr ""
++msgstr "El color de la otra celda. El predeterminado es: «blanco»"
+ 
+ #: ../operations/common/checkerboard.c:146
+ msgid "Checkerboard renderer"
+-msgstr ""
++msgstr "Renderizador de cuadros tipo tablero de ajedrez"
+ 
+-#: ../operations/common/color-temperature.c:266
+-msgid "Allows changing the color temperature of an image."
+-msgstr ""
+-
+-#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:25
++#: ../operations/common/color.c:25
+ msgid "The color to render (defaults to 'black')"
+-msgstr ""
+-
+-#: ../operations/common/color-to-alpha.c:170
+-msgid "Performs color-to-alpha on the image."
+-msgstr ""
++msgstr "Color que renderizar. El predeterminado es: «negro»"
+ 
+ #: ../operations/common/color.c:88
+ msgid ""
+ "Generates a buffer entirely filled with the specified color, crop it to get "
+ "smaller dimensions."
+ msgstr ""
++"Genera un búfer completamente relleno con el color especificado, recórtelo "
++"para obtener dimensiones más pequeñas."
++
++#: ../operations/common/color-reduction.c:35
++msgid "Red bits"
++msgstr "Bits rojos"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for red channel"
++msgstr "Número de bits para el canal rojo"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Green bits"
++msgstr "Bits verdes"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for green channel"
++msgstr "Número de bits para el canal verde"
++
++#: ../operations/common/color-reduction.c:37
++msgid "Blue bits"
++msgstr "Bits azules"
++
++#: ../operations/common/color-reduction.c:37
++msgid "Number of bits for blue channel"
++msgstr "Número de bits para el canal azul"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Alpha bits"
++msgstr "Bits alfa"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Number of bits for alpha channel"
++msgstr "Número de bits para el canal alfa"
++
++#: ../operations/common/color-reduction.c:40
++msgid "Dithering Strategy"
++msgstr "Estrategia de tramado"
++
++#: ../operations/common/color-reduction.c:41
++msgid "The dithering strategy to use"
++msgstr "Qué estrategia de tramado usar"
++
++#: ../operations/common/color-reduction.c:553
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++"Reduce el número de bits por canal (colores y alfa), con tramado opcional"
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Temperatura original"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++"Temperatura estimada en Kelvin de la fuente de luz con que se tomó la imagen."
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Temperatura esperada"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr "Estimación corregida de la temperatura en Kelvin de la fuente de luz."
++
++#: ../operations/common/color-temperature.c:280
++msgid "Allows changing the color temperature of an image."
++msgstr "Permite cambiar la temperatura de color de una imagen."
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr "Color que renderizar. El predeterminado es: «blanco»"
++
++#: ../operations/common/color-to-alpha.c:197
++msgid "Performs color-to-alpha on the image."
++msgstr "Convierte un color a alfa en la imagen."
+ 
+ #: ../operations/common/contrast-curve.c:25
+ msgid "Sample points"
+-msgstr ""
++msgstr "Puntos de muestra"
+ 
+ #: ../operations/common/contrast-curve.c:26
+ msgid "Number of curve sampling points.  0 for exact calculation."
+-msgstr ""
++msgstr "Número de puntos de muestra de la curva. 0 para un cálculo exacto."
+ 
+ #: ../operations/common/contrast-curve.c:27
+ msgid "Curve"
+@@ -416,31 +567,53 @@ msgstr "Curva"
+ 
+ #: ../operations/common/contrast-curve.c:27
+ msgid "The contrast curve."
+-msgstr ""
++msgstr "La curva de contraste."
+ 
+ #: ../operations/common/contrast-curve.c:125
+ msgid "Adjusts the contrast of the image according to a curve."
+-msgstr ""
++msgstr "Ajusta el contraste de la imagen según una curva."
+ 
+ #: ../operations/common/difference-of-gaussians.c:25
+ msgid "Radius 1"
+-msgstr ""
++msgstr "Radio 1"
+ 
+ #: ../operations/common/difference-of-gaussians.c:27
+ msgid "Radius 2"
+-msgstr ""
++msgstr "Radio 2"
+ 
+ #: ../operations/common/difference-of-gaussians.c:101
+ msgid "Does an edge detection based on the difference of two gaussian blurs."
+ msgstr ""
++"Efectúa una detección de bordes basada en la diferencia de dos desenfoques "
++"gaussianos."
+ 
+ #: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
+ msgid "Title to be given to output window"
+-msgstr ""
++msgstr "Título que dar a la ventana de salida"
+ 
+ #: ../operations/common/display.c:142
+ msgid "Display the input buffer in a window."
+-msgstr ""
++msgstr "Mostrar el búfer de salida en una ventana."
++
++#: ../operations/common/dot.c:26 ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Anchura del bloque"
++
++#: ../operations/common/dot.c:27
++msgid "Size of each block in pixels"
++msgstr "Tamaño de cada bloque en píxeles"
++
++#: ../operations/common/dot.c:28
++msgid "Dot size ratio"
++msgstr "Proporción del tamaño del punto"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr "Proporción del tamaño de un punto dentro de cada bloque"
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr "Simplificar la imagen en una matriz de puntos de color liso"
+ 
+ #: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
+ #: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
+@@ -450,36 +623,32 @@ msgid "Opacity"
+ msgstr "Opacidad"
+ 
+ #: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
+-#: ../operations/common/rectangle.c:29 ../operations/common/waves.c:26
+-#: ../operations/core/crop.c:25
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
+ msgid "X"
+ msgstr "X"
+ 
+ #: ../operations/common/dropshadow.c:27
+-msgid "Horizontal shadow offset."
+-msgstr ""
++msgid "Horizontal shadow offset"
++msgstr "Desplazamiento horizontal de la sombra"
+ 
+ #: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
+-#: ../operations/common/rectangle.c:31 ../operations/common/waves.c:29
+-#: ../operations/core/crop.c:26
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
+ msgid "Y"
+ msgstr "Y"
+ 
+ #: ../operations/common/dropshadow.c:29
+-msgid "Vertical shadow offset."
+-msgstr ""
+-
+-#: ../operations/common/dropshadow.c:31
+-msgid "Blur radius."
+-msgstr "Radio de desenfoque."
++msgid "Vertical shadow offset"
++msgstr "Desplazamiento vertical de la sombra"
+ 
+ #: ../operations/common/dropshadow.c:82
+-msgid "Creates a dropshadow effect on the input buffer."
+-msgstr ""
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Crea un efecto de sombra arrojada sobre el búfer de entrada"
+ 
+-#: ../operations/common/edge-laplace.c:245
++#: ../operations/common/edge-laplace.c:521
+ msgid "High-resolution edge detection"
+-msgstr ""
++msgstr "Detección de bordes de alta resolución"
+ 
+ #: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
+ #: ../operations/workshop/noise-spread.c:29
+@@ -493,48 +662,51 @@ msgstr "Vertical"
+ 
+ #: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
+ msgid "Keep Signal"
+-msgstr ""
++msgstr "Mantener la señal"
+ 
+-#: ../operations/common/edge-sobel.c:203
++#: ../operations/common/edge-sobel.c:352
+ msgid "Specialized direction-dependent edge detection"
+-msgstr ""
++msgstr "Detección de bordes especializada dependiente de la dirección"
+ 
+ #: ../operations/common/exp-combine.c:25
+ msgid "Exposure Values"
+-msgstr ""
++msgstr "Valores de exposición"
+ 
+ #: ../operations/common/exp-combine.c:26
+ msgid "Relative brightness of each exposure in EV"
+-msgstr ""
++msgstr "Brillo relativo de cada exposición en EV"
+ 
+ #: ../operations/common/exp-combine.c:27
+ msgid "Discretization Bits"
+-msgstr ""
++msgstr "Bits de discretización"
+ 
+ #: ../operations/common/exp-combine.c:29
+ msgid "Log2 of source's discretization steps"
+-msgstr ""
++msgstr "Log2 de los pasos de discretización de la fuente"
+ 
+ #: ../operations/common/exp-combine.c:30
+ msgid "Weight Sigma"
+-msgstr ""
++msgstr "Sigma del peso"
+ 
+ #: ../operations/common/exp-combine.c:32
+-msgid "Weight distrubtion sigma controlling response contributions"
++msgid "Weight distribution sigma controlling response contributions"
+ msgstr ""
++"Sigma de la distribución del peso que controla las contribuciones a la "
++"respuesta"
+ 
+ #: ../operations/common/exp-combine.c:1293
+ msgid "Combine multiple scene exposures into one high range buffer"
+-msgstr ""
++msgstr "Combinar varias exposiciones de escena en un búfer de alto rango"
+ 
+ #: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/common/noise-rgb.c:37
+ #: ../operations/workshop/convolution-matrix.c:86
+ msgid "Alpha"
+ msgstr "Alfa"
+ 
+ #: ../operations/common/fattal02.c:35
+ msgid "Gradient threshold for detail enhancement"
+-msgstr ""
++msgstr "Umbral del gradiente para realzado del detalle"
+ 
+ #: ../operations/common/fattal02.c:36
+ msgid "Beta"
+@@ -542,16 +714,17 @@ msgstr "Beta"
+ 
+ #: ../operations/common/fattal02.c:38
+ msgid "Strength of local detail enhancement"
+-msgstr ""
++msgstr "Intensidad del realzado local del detalle"
+ 
+ #: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/common/noise-hsv.c:31
+ #: ../operations/workshop/color-rotate.c:50
+ msgid "Saturation"
+ msgstr "Saturación"
+ 
+ #: ../operations/common/fattal02.c:41 ../operations/common/mantiuk06.c:36
+-msgid "Global colour saturation factor"
+-msgstr ""
++msgid "Global color saturation factor"
++msgstr "Factor global de saturación del color"
+ 
+ #: ../operations/common/fattal02.c:42
+ msgid "Noise"
+@@ -559,7 +732,7 @@ msgstr "Ruido"
+ 
+ #: ../operations/common/fattal02.c:44
+ msgid "Gradient threshold for lowering detail enhancement"
+-msgstr ""
++msgstr "Umbral del gradiente para la disminución del realzado del detalle"
+ 
+ #: ../operations/common/fattal02.c:1325
+ msgid ""
+@@ -567,13 +740,17 @@ msgid ""
+ "a low dynamic range. This operator attenuates the magnitudes of local image "
+ "gradients, producing luminance within the range 0.0-1.0"
+ msgstr ""
++"Adaptar una imagen, que puede tener un rango dinámico alto, para su "
++"presentación utilizando un rango dinámico bajo. Este operador atenúa las "
++"magnitudes de los gradientes locales de la imagen, produciendo una "
++"luminancia dentro del rango de 0.0 a 1.0"
+ 
+ #: ../operations/common/fractal-explorer.c:35
+ msgid "Fractal type"
+ msgstr "Tipo de fractal"
+ 
+ #: ../operations/common/fractal-explorer.c:35
+-msgid "Fractal Type"
++msgid "Type of a fractal"
+ msgstr "Tipo de fractal"
+ 
+ #: ../operations/common/fractal-explorer.c:37
+@@ -582,15 +759,15 @@ msgstr "Izquierda"
+ 
+ #: ../operations/common/fractal-explorer.c:38
+ msgid "Right"
+-msgstr ""
++msgstr "Derecha"
+ 
+ #: ../operations/common/fractal-explorer.c:39
+ msgid "Top"
+-msgstr ""
++msgstr "Arriba"
+ 
+ #: ../operations/common/fractal-explorer.c:40
+ msgid "Bottom"
+-msgstr ""
++msgstr "Abajo"
+ 
+ #: ../operations/common/fractal-explorer.c:44
+ msgid "CX"
+@@ -598,7 +775,7 @@ msgstr "CX"
+ 
+ #: ../operations/common/fractal-explorer.c:44
+ msgid "CX (only Julia)"
+-msgstr ""
++msgstr "CX (sólo Julia)"
+ 
+ #: ../operations/common/fractal-explorer.c:45
+ msgid "CY"
+@@ -606,70 +783,70 @@ msgstr "CY"
+ 
+ #: ../operations/common/fractal-explorer.c:45
+ msgid "CY (only Julia)"
+-msgstr ""
++msgstr "CY (sólo Julia)"
+ 
+ #: ../operations/common/fractal-explorer.c:47
+ msgid "Red stretch"
+-msgstr ""
++msgstr "Ensanchamiento del rojo"
+ 
+ #: ../operations/common/fractal-explorer.c:48
+ msgid "Red stretching factor"
+-msgstr ""
++msgstr "Factor de ensanchamiento del rojo"
+ 
+ #: ../operations/common/fractal-explorer.c:49
+ msgid "Green stretch"
+-msgstr ""
++msgstr "Ensanchamiento del verde"
+ 
+ #: ../operations/common/fractal-explorer.c:50
+ msgid "Green stretching factor"
+-msgstr ""
++msgstr "Factor de ensanchamiento del verde"
+ 
+ #: ../operations/common/fractal-explorer.c:51
+ msgid "Blue stretch"
+-msgstr ""
++msgstr "Ensanchamiento del azul"
+ 
+ #: ../operations/common/fractal-explorer.c:52
+ msgid "Blue stretching factor"
+-msgstr ""
++msgstr "Factor de ensanchamiento del azul"
+ 
+ #: ../operations/common/fractal-explorer.c:54
+ msgid "Red mode"
+-msgstr ""
++msgstr "Modo del rojo"
+ 
+ #: ../operations/common/fractal-explorer.c:55
+ msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
+-msgstr ""
++msgstr "Modo de aplicación del rojo (0:seno; 1:coseno; 2:ninguno)"
+ 
+ #: ../operations/common/fractal-explorer.c:56
+ msgid "Green mode"
+-msgstr ""
++msgstr "Modo del verde"
+ 
+ #: ../operations/common/fractal-explorer.c:57
+ msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
+-msgstr ""
++msgstr "Modo de aplicación del verde (0:seno; 1:coseno; 2:ninguno)"
+ 
+ #: ../operations/common/fractal-explorer.c:58
+ msgid "Blue mode"
+-msgstr ""
++msgstr "Modo del azul"
+ 
+ #: ../operations/common/fractal-explorer.c:59
+ msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
+-msgstr ""
++msgstr "Modo de aplicación del azul (0:seno; 1:coseno; 2:ninguno)"
+ 
+ #: ../operations/common/fractal-explorer.c:61
+ #: ../operations/common/fractal-explorer.c:62
+ msgid "Red inversion"
+-msgstr ""
++msgstr "Inversión del rojo"
+ 
+ #: ../operations/common/fractal-explorer.c:63
+ #: ../operations/common/fractal-explorer.c:64
+ msgid "Green inversion"
+-msgstr ""
++msgstr "Inversión del verde"
+ 
+ #: ../operations/common/fractal-explorer.c:65
+ #: ../operations/common/fractal-explorer.c:66
+ msgid "Blue inversion"
+-msgstr ""
++msgstr "Inversión del azul"
+ 
+ #: ../operations/common/fractal-explorer.c:68
+ msgid "Colors"
+@@ -681,11 +858,11 @@ msgstr "Número de colores"
+ 
+ #: ../operations/common/fractal-explorer.c:71
+ msgid "Loglog smoothing"
+-msgstr ""
++msgstr "Suavizado logarítmico-logarítmico"
+ 
+ #: ../operations/common/fractal-explorer.c:72
+ msgid "Use loglog smoothing"
+-msgstr ""
++msgstr "Usar suavizado logarítmico-logarítmico"
+ 
+ #: ../operations/common/fractal-explorer.c:474
+ msgid "Fractal Explorer"
+@@ -699,6 +876,8 @@ msgstr "Tamaño X"
+ msgid ""
+ "Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
+ msgstr ""
++"Desviación estándar para el eje horizontal (multiplicar por 2 aprox. para "
++"obtener el radio)."
+ 
+ #: ../operations/common/gaussian-blur.c:32
+ msgid "Size Y"
+@@ -708,18 +887,30 @@ msgstr "Tamaño Y"
+ msgid ""
+ "Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
+ msgstr ""
++"Desviación estándar para el eje vertical (multiplicar por 2 aprox. para "
++"obtener el radio)."
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filtro"
+ 
+ #: ../operations/common/gaussian-blur.c:35
+ msgid ""
+ "Optional parameter to override the automatic selection of blur filter. "
+ "Choices are fir, iir, auto"
+ msgstr ""
++"Parámetro opcional para sobreescribr la selección automática del filtro de "
++"desenfoque. Las posibilidades son «fir», «iir», «auto»"
+ 
+-#: ../operations/common/gaussian-blur.c:496
++#: ../operations/common/gaussian-blur.c:731
+ msgid ""
+-"Performs an averaging of neighbouring pixels with the normal distribution as "
+-"weighting."
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
+ msgstr ""
++"Efectúa un promediado de los píxeles vecinos con la distribución normal como "
++"ponderación"
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:24
+ #: ../operations/common/gegl-buffer-save-op.c:24
+@@ -739,47 +930,87 @@ msgstr "Archivo"
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:24
+ msgid "Path of GeglBuffer file to load."
+-msgstr ""
++msgstr "Ruta del archivo GeglBuffer que cargar."
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:88
+ msgid "GeglBuffer file loader."
+-msgstr ""
++msgstr "Cargador del archivo GeglBuffer."
+ 
+ #: ../operations/common/gegl-buffer-save-op.c:24
+ msgid "Target file path to write GeglBuffer to."
+-msgstr ""
++msgstr "Ruta del archivo objetivo al que escribir el GeglBuffer."
+ 
+ #: ../operations/common/gegl-buffer-save-op.c:62
+ msgid "GeglBuffer file writer."
+-msgstr ""
++msgstr "Escritor del archivo GeglBuffer."
+ 
+-#: ../operations/common/grey.c:79
++#: ../operations/common/grey.c:104
+ msgid "Turns the image greyscale"
+-msgstr ""
++msgstr "Convierte la imagen a escala de grises"
+ 
+ #: ../operations/common/grid.c:32
+ msgid "Line Width"
+ msgstr "Anchura de la línea"
+ 
+ #: ../operations/common/grid.c:33
+-msgid "Width of grid lines in pixels."
+-msgstr ""
++msgid "Width of grid lines in pixels"
++msgstr "Anchura de las líneas de rejilla en píxeles"
+ 
+ #: ../operations/common/grid.c:34
+ msgid "Line Height"
+ msgstr "Altura de la línea"
+ 
+ #: ../operations/common/grid.c:35
+-msgid "Height of grid lines in pixels."
+-msgstr ""
++msgid "Height of grid lines in pixels"
++msgstr "Altura de las líneas de rejilla en píxeles"
+ 
+ #: ../operations/common/grid.c:37
+ msgid "Color of the grid lines"
+-msgstr ""
++msgstr "Color de las líneas de rejilla"
+ 
+ #: ../operations/common/grid.c:129
+ msgid "Grid renderer"
++msgstr "Renderizador de la rejilla"
++
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr "Píxeles incorrectos"
++
++#: ../operations/common/image-compare.c:26
++msgid "Number of differing pixels."
++msgstr "Número de píxeles diferentes."
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Máxima diferencia"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "Máxima diferencia entre dos píxeles."
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr "Diferencia media (incorrecta)"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr "Diferencia media entre dos píxeles erróneos."
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr "Diferencia media (total)"
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr "Diferencia media entre todos los píxeles."
++
++#: ../operations/common/image-compare.c:177
++msgid ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
+ msgstr ""
++"Compara si los búferes de entrada y los auxiliares son diferentes. Los "
++"resultados se guardan en las propiedades."
+ 
+ #: ../operations/common/introspect.c:26
+ msgid "Node"
+@@ -787,17 +1018,19 @@ msgstr "Nodo"
+ 
+ #: ../operations/common/introspect.c:26
+ msgid "GeglNode to introspect"
+-msgstr ""
++msgstr "GeglNode que inspeccionar"
+ 
+ #: ../operations/common/introspect.c:160
+ msgid "GEGL graph visualizer."
+-msgstr ""
++msgstr "Visualizador de gráficos de GEGL."
+ 
+-#: ../operations/common/invert.c:130
++#: ../operations/common/invert.c:86
+ msgid ""
+ "Inverts the components (except alpha), the result is the corresponding "
+ "\"negative\" image."
+ msgstr ""
++"Invierte las componentes (excepto alfa), el resultado es la imagen "
++"«negativa» correspondiente."
+ 
+ #: ../operations/common/layer.c:30
+ msgid "Operation"
+@@ -805,7 +1038,7 @@ msgstr "Operación"
+ 
+ #: ../operations/common/layer.c:31
+ msgid "Composite operation to use"
+-msgstr ""
++msgstr "Operación de composición que usar"
+ 
+ #: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
+ msgid "Horizontal position"
+@@ -815,13 +1048,15 @@ msgstr "Posición horizontal"
+ msgid "Vertical position"
+ msgstr "Posición vertical"
+ 
+-#: ../operations/common/layer.c:38
+-msgid "scale"
+-msgstr ""
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Escala"
+ 
+ #: ../operations/common/layer.c:39
+ msgid "Scale 1:1 size"
+-msgstr ""
++msgstr "Escalar al tamaño 1:1"
+ 
+ #: ../operations/common/layer.c:40
+ msgid "Source"
+@@ -829,36 +1064,36 @@ msgstr "Origen"
+ 
+ #: ../operations/common/layer.c:41
+ msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
+-msgstr ""
++msgstr "Archivo de datos fuente (png, jpg, raw, svg, bmp, tif, …)"
+ 
+ #: ../operations/common/layer.c:267
+-msgid "A layer in the traditional sense."
+-msgstr ""
++msgid "A layer in the traditional sense"
++msgstr "Una capa en el sentido tradicional de la palabra"
+ 
+ #: ../operations/common/lens-distortion.c:33
+ msgid "Main:"
+-msgstr ""
++msgstr "Principal:"
+ 
+ #: ../operations/common/lens-distortion.c:34
+ #: ../operations/common/lens-distortion.c:36
+ msgid "Main value of distortion"
+-msgstr ""
++msgstr "Valor principal de la distorsión"
+ 
+ #: ../operations/common/lens-distortion.c:35
+ msgid "Zoom:"
+-msgstr ""
++msgstr "Ampliación:"
+ 
+ #: ../operations/common/lens-distortion.c:37
+ msgid "Edge:"
+-msgstr ""
++msgstr "Borde:"
+ 
+ #: ../operations/common/lens-distortion.c:38
+ msgid "Edge value of distortion"
+-msgstr ""
++msgstr "Valor de borde de la distorsión"
+ 
+ #: ../operations/common/lens-distortion.c:39
+ msgid "Brighten:"
+-msgstr ""
++msgstr "Aclarar:"
+ 
+ #: ../operations/common/lens-distortion.c:40
+ msgid "Brighten the image"
+@@ -869,63 +1104,61 @@ msgid "X shift:"
+ msgstr "Desplazamiento X:"
+ 
+ #: ../operations/common/lens-distortion.c:42
+-msgid "Shift vertical"
+-msgstr "Desplazamiento vertical"
+-
++msgid "Shift horizontal"
++msgstr "Desplazamiento horizontal"
++
+ #: ../operations/common/lens-distortion.c:43
+ msgid "Y shift:"
+ msgstr "Desplazamiento Y:"
+ 
+ #: ../operations/common/lens-distortion.c:44
+-msgid "Shift horizontal"
+-msgstr "Desplazamiento horizontal"
++msgid "Shift vertical"
++msgstr "Desplazamiento vertical"
+ 
+-#: ../operations/common/lens-distortion.c:321
++#: ../operations/common/lens-distortion.c:338
+ #: ../operations/workshop/external/lens-correct.c:476
+ msgid "Copies image performing lens distortion correction."
+-msgstr ""
++msgstr "Copia la imagen corrigiendo la distorsión de lente"
+ 
+ #: ../operations/common/levels.c:26
+ msgid "Low input"
+-msgstr ""
++msgstr "Entrada baja"
+ 
+ #: ../operations/common/levels.c:27
+ msgid "Input luminance level to become lowest output"
+-msgstr ""
++msgstr "Hacer que el nivel de luminancia de la entrada sea la salida más baja"
+ 
+ #: ../operations/common/levels.c:28
+ msgid "High input"
+-msgstr ""
++msgstr "Entrada alta"
+ 
+ #: ../operations/common/levels.c:29
+ msgid "Input luminance level to become white."
+-msgstr ""
++msgstr "Hacer que el nivel de luminancia de la entrada sea blanco"
+ 
+ #: ../operations/common/levels.c:30
+ msgid "Low output"
+-msgstr ""
++msgstr "Salida baja"
+ 
+ #: ../operations/common/levels.c:31
+ msgid "Lowest luminance level in output"
+-msgstr ""
++msgstr "El nivel de luminancia más bajo en la salida"
+ 
+ #: ../operations/common/levels.c:32
+ msgid "High output"
+-msgstr ""
++msgstr "Salida alta"
+ 
+ #: ../operations/common/levels.c:33
+ msgid "Highest luminance level in output"
+-msgstr ""
++msgstr "El nivel de luminancia más alto en la salida"
+ 
+-#: ../operations/common/levels.c:103
++#: ../operations/common/levels.c:198
+ msgid "Remaps the intensity range of the image"
+-msgstr ""
++msgstr "Reasigna el rango de intensidad de la imagen"
+ 
+ #: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
+-#: ../operations/common/raw-load.c:27 ../operations/external/ff-load.c:25
+-#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
+-#: ../operations/external/png-load.c:27 ../operations/external/ppm-load.c:25
+-#: ../operations/external/rgbe-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
+ #: ../operations/workshop/rawbayer-load.c:25
+ msgid "Path of file to load."
+ msgstr "Ruta del archivo que cargar"
+@@ -933,16 +1166,19 @@ msgstr "Ruta del archivo que cargar"
+ #: ../operations/common/load.c:180
+ msgid ""
+ "Multipurpose file loader, that uses other native handlers, and fallback "
+-"conversion using image magick's convert."
++"conversion using Image Magick's convert."
+ msgstr ""
++"Cargador de archivos de multipropósito, que usa otros manejadores nativos, y "
++"conversión de último recurso usando la función «convert» de ImageMagick."
+ 
+ #: ../operations/common/magick-load.c:136
+ msgid "Image Magick wrapper using the png op."
+ msgstr ""
++"Instrucción envolvente de ImageMagick que usa el código de operación de png."
+ 
+ #: ../operations/common/mantiuk06.c:33
+ msgid "The amount of contrast compression"
+-msgstr ""
++msgstr "Cantidad de compresión del contraste"
+ 
+ #: ../operations/common/mantiuk06.c:37
+ msgid "Detail"
+@@ -950,7 +1186,7 @@ msgstr "Detalle"
+ 
+ #: ../operations/common/mantiuk06.c:39
+ msgid "Level of emphasis on image gradient details"
+-msgstr ""
++msgstr "Nivel de énfasis en los detalles de gradiente de la imagen"
+ 
+ #: ../operations/common/mantiuk06.c:1639
+ msgid ""
+@@ -958,149 +1194,109 @@ msgid ""
+ "a low dynamic range. This operator constrains contrasts across multiple "
+ "spatial frequencies, producing luminance within the range 0.0-1.0"
+ msgstr ""
++"Adaptar una imagen, que puede tener un rango dinámico alto, para su "
++"presentación utilizando un rango dinámico bajo. Este operador restringe el "
++"contraste a través de varias frecuencias espaciales, produciendo una "
++"luminancia dentro del rango de 0.0 a 1.0"
+ 
+ #: ../operations/common/map-absolute.c:22
+ #: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
+ #: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
+ msgid "Sampler"
+-msgstr ""
++msgstr "Muestreador"
+ 
+ #: ../operations/common/map-absolute.c:23
+-#: ../operations/common/map-relative.c:27
+-msgid "Sampler used internaly"
+-msgstr ""
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Muestreador usado internamente"
+ 
+ #: ../operations/common/map-absolute.c:148
+ msgid ""
+ "sample input with an auxiliary buffer that contain absolute source "
+ "coordinates"
+ msgstr ""
++"muestrear la entrada con un búfer auxiliar que contiene coordenadas "
++"absolutas de la fuente"
+ 
+ #: ../operations/common/map-relative.c:23
+ msgid "Scaling"
+-msgstr ""
++msgstr "Escalado"
+ 
+ #: ../operations/common/map-relative.c:24
+ msgid ""
+ "scaling factor of displacement, indicates how large spatial displacement a "
+ "relative mapping value of 1.0 corresponds to."
+ msgstr ""
++"Factor de escalado del desplazamiento, indica a qué tamaño del "
++"desplazamiento espacial corresponde un valor de asignación relativa de 1.0."
+ 
+-#: ../operations/common/map-relative.c:156
++#: ../operations/common/map-relative.c:173
+ msgid ""
+ "sample input with an auxiliary buffer that contain relative source "
+ "coordinates"
+ msgstr ""
++"muestrear la entrada con un búfer auxiliar que contiene coordenadas de "
++"fuente relativas"
+ 
+-#: ../operations/common/matting-global.c:25
+-#: ../operations/external/matting-levin.c:25
+-msgid "Epsilon"
+-msgstr "Epsilon"
+-
+-#: ../operations/common/matting-global.c:27
+-#: ../operations/external/matting-levin.c:27
+-msgid "Log of the error weighting"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:30
+-#: ../operations/external/matting-levin.c:30
+-msgid "Radius of the processing window"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:31
+-#: ../operations/common/threshold.c:25
+-#: ../operations/external/matting-levin.c:31
+-#: ../operations/workshop/color-rotate.c:54
+-#: ../operations/workshop/red-eye-removal.c:31
+-msgid "Threshold"
+-msgstr "Umbral"
+-
+-#: ../operations/common/matting-global.c:33
+-#: ../operations/external/matting-levin.c:33
+-msgid "Alpha threshold for multilevel processing"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:34
+-#: ../operations/external/matting-levin.c:34
+-msgid "Lambda"
+-msgstr "Lambda"
+-
+-#: ../operations/common/matting-global.c:35
+-#: ../operations/external/matting-levin.c:35
+-msgid "Trimap influence factor"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:36
+-#: ../operations/common/posterize.c:25
+-#: ../operations/external/matting-levin.c:36
+-msgid "Levels"
+-msgstr "Niveles"
+-
+-#: ../operations/common/matting-global.c:38
+-#: ../operations/external/matting-levin.c:38
+-msgid "Number of downsampled levels to use"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:39
+-#: ../operations/external/matting-levin.c:39
+-msgid "Active Levels"
+-msgstr ""
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Número de iteraciones"
+ 
+-#: ../operations/common/matting-global.c:41
+-#: ../operations/external/matting-levin.c:41
+-msgid "Number of levels to perform solving"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:554
+-#: ../operations/external/matting-levin.c:1428
++#: ../operations/common/matting-global.c:482
+ msgid ""
+ "Given a sparse user supplied tri-map and an input image, create a foreground "
+-"alpha mat. Set white as selected, black as unselected, for the tri-map."
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
+ msgstr ""
++"Dados un tri-map difuso aportado por el usuario y una imagen de entrada, "
++"crear un «matte» de alfa en primer plano. Establezca blanco como primer "
++"plano y negro como fondo para el tri-map. Todo lo demás se tratará como "
++"desconocido y se rellenará."
+ 
+ #: ../operations/common/mblur.c:25
+ msgid "Dampness"
+-msgstr ""
++msgstr "Tamponado"
+ 
+ #: ../operations/common/mblur.c:26
+ msgid "The value represents the contribution of the past to the new frame."
+-msgstr ""
++msgstr "El valor representa la contribución del fotograma anterior al nuevo."
+ 
+ #: ../operations/common/mblur.c:144
+ msgid "Accumulating motion blur"
+-msgstr ""
++msgstr "Desenfoque acumulativo de movimiento"
+ 
+ #: ../operations/common/mirrors.c:30
+ msgid "Mirror rotation"
+-msgstr ""
++msgstr "Rotación de los espejos"
+ 
+ #: ../operations/common/mirrors.c:30
+ msgid "Rotation applied to the mirrors"
+-msgstr ""
++msgstr "Rotación aplicada a los espejos"
+ 
+ #: ../operations/common/mirrors.c:32
+ msgid "Result rotation"
+-msgstr ""
++msgstr "Rotación del resultado"
+ 
+ #: ../operations/common/mirrors.c:32
+ msgid "Rotation applied to the result"
+-msgstr ""
++msgstr "Rotación aplicada al resultado"
+ 
+ #: ../operations/common/mirrors.c:34
+ msgid "Mirrors"
+-msgstr ""
++msgstr "Espejos"
+ 
+ #: ../operations/common/mirrors.c:34
+ msgid "Number of mirrors to use"
+-msgstr ""
++msgstr "Número de espejos que usar"
+ 
+ #: ../operations/common/mirrors.c:36
+ msgid "X offset of the result of mirroring"
+-msgstr ""
++msgstr "Desplazamiento X del resultado del reflejo especular"
+ 
+ #: ../operations/common/mirrors.c:38
+ msgid "Y offset of the result of mirroring"
+-msgstr ""
++msgstr "Desplazamiento Y del resultado del reflejo especular"
+ 
+ #: ../operations/common/mirrors.c:40
+ msgid "Center X"
+@@ -1108,7 +1304,7 @@ msgstr "Centro X"
+ 
+ #: ../operations/common/mirrors.c:40
+ msgid "X axis ratio for the center of mirroring"
+-msgstr ""
++msgstr "Proporción en el eje X para el centro de la reflexión"
+ 
+ #: ../operations/common/mirrors.c:42
+ msgid "Center Y"
+@@ -1116,31 +1312,33 @@ msgstr "Centro Y"
+ 
+ #: ../operations/common/mirrors.c:42
+ msgid "Y axis ratio for the center of mirroring"
+-msgstr ""
++msgstr "Proporción en el eje Y para el centro de la reflexión"
+ 
+ #: ../operations/common/mirrors.c:44
+ msgid "Trim X"
+-msgstr ""
++msgstr "Recorte X"
+ 
+ #: ../operations/common/mirrors.c:44
+ msgid "X axis ratio for trimming mirror expanse"
+ msgstr ""
++"Proporción en el eje X para recortar la expansión producida por el espejo"
+ 
+ #: ../operations/common/mirrors.c:46
+ msgid "Trim Y"
+-msgstr ""
++msgstr "Recortar Y"
+ 
+ #: ../operations/common/mirrors.c:46
+ msgid "Y axis ratio for trimming mirror expanse"
+ msgstr ""
++"Proporción en el eje Y para recortar la expansión producida por el espejo"
+ 
+ #: ../operations/common/mirrors.c:48
+ msgid "Zoom"
+-msgstr ""
++msgstr "Ampliación"
+ 
+ #: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
+ msgid "Scale factor to make rendering size bigger"
+-msgstr ""
++msgstr "Factor de escala para aumentar el tamaño del renderizado"
+ 
+ #: ../operations/common/mirrors.c:50
+ msgid "Expand"
+@@ -1148,25 +1346,25 @@ msgstr "Expandir"
+ 
+ #: ../operations/common/mirrors.c:52
+ msgid "Clip result"
+-msgstr ""
++msgstr "Recortar el resultado"
+ 
+ #: ../operations/common/mirrors.c:52
+ msgid "Clip result to input size"
+-msgstr ""
++msgstr "Recortar el resultado al tamaño de la entrada"
+ 
+ #: ../operations/common/mirrors.c:54
+ msgid "Wrap input"
+-msgstr ""
++msgstr "Ajustar la entrada"
+ 
+ #: ../operations/common/mirrors.c:54
+ msgid "Fill full output area"
+-msgstr ""
++msgstr "Rellenar toda el área de salida"
+ 
+ #: ../operations/common/mirrors.c:401
+ msgid "Applies mirroring effect on the image."
+-msgstr ""
++msgstr "Aplica un efecto de espejo sobre la imagen."
+ 
+-#: ../operations/common/mono-mixer.c:26
++#: ../operations/common/mono-mixer.c:26 ../operations/common/noise-rgb.c:31
+ #: ../operations/workshop/convolution-matrix.c:83
+ msgid "Red"
+ msgstr "Rojo"
+@@ -1175,7 +1373,7 @@ msgstr "Rojo"
+ msgid "Amount of red"
+ msgstr "Cantidad de rojo"
+ 
+-#: ../operations/common/mono-mixer.c:28
++#: ../operations/common/mono-mixer.c:28 ../operations/common/noise-rgb.c:33
+ #: ../operations/workshop/convolution-matrix.c:84
+ msgid "Green"
+ msgstr "Verde"
+@@ -1184,7 +1382,7 @@ msgstr "Verde"
+ msgid "Amount of green"
+ msgstr "Cantidad de verde"
+ 
+-#: ../operations/common/mono-mixer.c:30
++#: ../operations/common/mono-mixer.c:30 ../operations/common/noise-rgb.c:35
+ #: ../operations/workshop/convolution-matrix.c:85
+ msgid "Blue"
+ msgstr "Azul"
+@@ -1193,9 +1391,9 @@ msgstr "Azul"
+ msgid "Amount of blue"
+ msgstr "Cantidad de azul"
+ 
+-#: ../operations/common/mono-mixer.c:108
++#: ../operations/common/mono-mixer.c:104
+ msgid "Monochrome channel mixer"
+-msgstr ""
++msgstr "Mezclador de canales monocromático."
+ 
+ #: ../operations/common/motion-blur.c:27
+ msgid "Length"
+@@ -1203,7 +1401,7 @@ msgstr "Longitud"
+ 
+ #: ../operations/common/motion-blur.c:28
+ msgid "Length of blur in pixels"
+-msgstr ""
++msgstr "Longitud del desenfoque en píxeles"
+ 
+ #: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
+ msgid "Angle"
+@@ -1211,23 +1409,20 @@ msgstr "Ángulo"
+ 
+ #: ../operations/common/motion-blur.c:30
+ msgid "Angle of blur in degrees"
+-msgstr ""
++msgstr "Ángulo del desenfoque en grados"
+ 
+-#: ../operations/common/motion-blur.c:174
++#: ../operations/common/motion-blur.c:349
+ msgid "Linear motion blur"
+-msgstr ""
+-
+-#: ../operations/common/noise.c:27 ../operations/common/unsharp-mask.c:26
+-#: ../operations/workshop/external/lens-correct.c:43
+-msgid "Scale"
+-msgstr "Escala"
++msgstr "Desenfoque de movimiento lineal"
+ 
+ #: ../operations/common/noise.c:29
+ msgid "Z offset"
+ msgstr "Desplazamiento Z"
+ 
+-#: ../operations/common/noise.c:31 ../operations/workshop/cubism.c:34
+-#: ../operations/workshop/plasma.c:33
++#: ../operations/common/noise.c:31 ../operations/common/noise-hurl.c:30
++#: ../operations/common/noise-pick.c:30 ../operations/common/noise-slur.c:33
++#: ../operations/common/shift.c:29 ../operations/common/wind.c:33
++#: ../operations/workshop/cubism.c:34 ../operations/workshop/plasma.c:33
+ msgid "Seed"
+ msgstr "Semilla"
+ 
+@@ -1236,60 +1431,186 @@ msgid "Iteration"
+ msgstr "Iteración"
+ 
+ #: ../operations/common/noise.c:111
+-msgid "Perlin noise generator."
++msgid "Perlin noise generator"
++msgstr "Generador de ruido de Perlin"
++
++#: ../operations/common/noise-cielch.c:25 ../operations/common/noise-hsv.c:27
++msgid "Holdness"
++msgstr "Holgura"
++
++#: ../operations/common/noise-cielch.c:27
++msgid "Lightness"
++msgstr "Brillo"
++
++#: ../operations/common/noise-cielch.c:29
++msgid "Chroma"
++msgstr "Croma"
++
++#: ../operations/common/noise-cielch.c:31 ../operations/common/noise-hsv.c:29
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Tono"
++
++#: ../operations/common/noise-cielch.c:160
++msgid "Randomize lightness, chroma and hue independently"
++msgstr "Aleatorizar brillo, croma y tono independientemente"
++
++#: ../operations/common/noise-hsv.c:33
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Valor"
++
++#: ../operations/common/noise-hsv.c:164
++msgid "Randomize hue, saturation and value independently"
++msgstr "Aleatorizar los valores de tono y saturación independientemente"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33 ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Semilla aleatoria"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization (%)"
++msgstr "Aleatorización (%s)"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization"
++msgstr "Aleatorización"
++
++#: ../operations/common/noise-hurl.c:34 ../operations/common/noise-pick.c:34
++#: ../operations/common/noise-slur.c:37
++msgid "Repeat"
++msgstr "Repetir"
++
++#: ../operations/common/noise-hurl.c:135
++msgid "Completely randomize a fraction of pixels"
++msgstr "Aleatorizar completamenet una fracción de píxeles"
++
++#: ../operations/common/noise-pick.c:192
++msgid "Randomly interchange some pixels with neighbors"
++msgstr "Intercambiar aleatoriamente algunos píxeles con sus vecinos"
++
++#: ../operations/common/noise-reduction.c:26 ../operations/common/wind.c:30
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Fuerza"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "Con cuántas iteraciones ejecutar el algoritmo"
++
++#: ../operations/common/noise-rgb.c:27
++msgid "Correlated noise"
++msgstr "Ruido correlacionado"
++
++#: ../operations/common/noise-rgb.c:29
++msgid "Independent RGB"
++msgstr "RGB independiente"
++
++#: ../operations/common/noise-rgb.c:164
++msgid "Distort colors by random amounts."
++msgstr "Distorsionar colores una cantidad aleatoria."
++
++#: ../operations/common/noise-slur.c:178
++msgid "Randomly slide some pixels downward (similar to melting)"
+ msgstr ""
++"Deslizar aleatoriamente algunos píxeles hacia abajo (similar a la fusión)"
++
++#: ../operations/common/oilify.c:27 ../operations/common/photocopy.c:25
++#: ../operations/common/photocopy.c:26
++msgid "Mask Radius"
++msgstr "Radio de la máscara"
++
++#: ../operations/common/oilify.c:28
++msgid "Radius of circle around pixel"
++msgstr "Radio del círculo alrededor del píxel"
++
++#: ../operations/common/oilify.c:30 ../operations/common/oilify.c:31
++msgid "Exponent"
++msgstr "Exponente"
++
++#: ../operations/common/oilify.c:33
++msgid "Intensity Mode"
++msgstr "Modo de intensidad"
++
++#: ../operations/common/oilify.c:34
++msgid "Use pixel luminance values"
++msgstr "Usar valores de luminancia de píxeles"
++
++#: ../operations/common/oilify.c:309
++msgid "Emulate an oil painting"
++msgstr "Emular una pintura al óleo"
+ 
+ #: ../operations/common/opacity.c:25
+ msgid ""
+ "Global opacity value that is always used on top of the optional auxiliary "
+ "input buffer."
+ msgstr ""
++"Valor de opacidad global que se usa siempre encima del búfer de entrada "
++"auxiliar opcional."
+ 
+-#: ../operations/common/opacity.c:224
++#: ../operations/common/opacity.c:153
+ msgid ""
+ "Weights the opacity of the input both the value of the aux input and the "
+ "global value property."
+ msgstr ""
++"Pondera la opacidad de la entrada, tanto el valor de la entrada auxiliar "
++"como la propiedad del valor global."
+ 
+ #: ../operations/common/open-buffer.c:25
+ msgid "a GeglBuffer on disk to open"
+-msgstr ""
++msgstr "GeglBuffer del disco que abrir"
+ 
+ #: ../operations/common/open-buffer.c:130
+ msgid "A source that uses an on-disk GeglBuffer."
+-msgstr ""
++msgstr "Una fuente que usa un GeglBuffer que está en el disco."
+ 
+-#: ../operations/common/over.c:200
++#: ../operations/common/over.c:153
+ msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
+-msgstr ""
++msgstr "Operación de Porter-Duff sobre (d = cA + cB * (1 - aA))"
+ 
+-#: ../operations/common/pixelise.c:25
+-msgid "Block Width"
+-msgstr "Anchura del bloque"
++#: ../operations/common/photocopy.c:28 ../operations/common/photocopy.c:29
++#: ../operations/common/softglow.c:29
++msgid "Sharpness"
++msgstr "Nitidez"
++
++#: ../operations/common/photocopy.c:31 ../operations/common/photocopy.c:32
++msgid "Percent Black"
++msgstr "Porcentaje de negro"
++
++#: ../operations/common/photocopy.c:34 ../operations/common/photocopy.c:35
++msgid "Percent White"
++msgstr "Porcentaje de blanco"
++
++#: ../operations/common/photocopy.c:395
++msgid "Photocopy effect"
++msgstr "Efecto fotocopia"
+ 
+-#: ../operations/common/pixelise.c:26
++#: ../operations/common/pixelize.c:26
+ msgid "Width of blocks in pixels"
+-msgstr ""
++msgstr "Anchura de los bloques en píxeles"
+ 
+-#: ../operations/common/pixelise.c:27
++#: ../operations/common/pixelize.c:27
+ msgid "Block Height"
+ msgstr "Altura del bloque"
+ 
+-#: ../operations/common/pixelise.c:28
++#: ../operations/common/pixelize.c:28
+ msgid "Height of blocks in pixels"
+-msgstr ""
++msgstr "Altura de los bloques en píxeles"
+ 
+-#: ../operations/common/pixelise.c:182
+-msgid "Pixelise filter"
+-msgstr ""
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr "Simplificar la imagen en una matriz de cuadrados de color liso"
+ 
+ #: ../operations/common/polar-coordinates.c:34
+-msgid "Circle depth in percent"
+-msgstr ""
+-
+ #: ../operations/common/polar-coordinates.c:35
+-msgid "Circle depth in percent."
+-msgstr ""
++msgid "Circle depth in percent"
++msgstr "Profundidad del círculo en porcentaje"
+ 
+ #: ../operations/common/polar-coordinates.c:36
+ msgid "Offset angle"
+@@ -1301,23 +1622,27 @@ msgstr "Ángulo de desfase."
+ 
+ #: ../operations/common/polar-coordinates.c:38
+ msgid "Map backwards"
+-msgstr ""
++msgstr "Mapear hacia atrás"
+ 
+ #: ../operations/common/polar-coordinates.c:38
+-msgid "Map backwards."
+-msgstr ""
++msgid "Start from the right instead of the left"
++msgstr "Empezar desde la derecha en lugar de la izquierda"
+ 
+ #: ../operations/common/polar-coordinates.c:39
+ msgid "Map from top"
+-msgstr ""
++msgstr "Mapear desde arriba"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr "Poner la fila superior en el medio y la inferior en la parte exterior"
+ 
+ #: ../operations/common/polar-coordinates.c:40
+ msgid "To polar"
+ msgstr "A polares"
+ 
+ #: ../operations/common/polar-coordinates.c:40
+-msgid "To polar."
+-msgstr "A polares."
++msgid "Map the image to a circle"
++msgstr "Mapear la imagen a un círculo"
+ 
+ #: ../operations/common/polar-coordinates.c:41
+ msgid "X:"
+@@ -1326,7 +1651,7 @@ msgstr "X:"
+ #: ../operations/common/polar-coordinates.c:42
+ #: ../operations/common/polar-coordinates.c:44
+ msgid "Origin point for the polar coordinates"
+-msgstr ""
++msgstr "Punto de origen para las coordenadas polares"
+ 
+ #: ../operations/common/polar-coordinates.c:43
+ msgid "Y:"
+@@ -1334,35 +1659,40 @@ msgstr "Y:"
+ 
+ #: ../operations/common/polar-coordinates.c:45
+ msgid "Choose middle"
+-msgstr ""
++msgstr "Seleccionar el punto medio"
+ 
+ #: ../operations/common/polar-coordinates.c:46
+ msgid "Let origin point to be the middle one"
+-msgstr ""
++msgstr "Hacer que el punto de origen sea el punto medio"
+ 
+ #: ../operations/common/polar-coordinates.c:402
+ msgid "Performs polar-coordinates on the image."
+-msgstr ""
++msgstr "Efectúa coordenadas polares sobre la imagen."
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Niveles"
+ 
+ #: ../operations/common/posterize.c:26
+ msgid "number of levels per component"
+-msgstr ""
++msgstr "número de niveles por componente"
+ 
+ #: ../operations/common/posterize.c:82
+ msgid "Reduces the number of levels in each color component of the image."
+-msgstr ""
++msgstr "Reduce el número de niveles en cada componente de color de la imagen."
+ 
+ #: ../operations/common/raw-load.c:183
+ msgid "Raw image loader, wrapping dcraw with pipes."
+-msgstr ""
++msgstr "Cargador de imágenes en bruto, envuelve a dcraw con tuberías."
+ 
+ #: ../operations/common/rectangle.c:34
+ msgid "Horizontal extent"
+-msgstr ""
++msgstr "Dimensión horizontal"
+ 
+ #: ../operations/common/rectangle.c:36
+ msgid "Vertical extent"
+-msgstr ""
++msgstr "Dimensión vertical"
+ 
+ #: ../operations/common/rectangle.c:38
+ msgid "Color to render"
+@@ -1370,27 +1700,27 @@ msgstr "Color que renderizar"
+ 
+ #: ../operations/common/rectangle.c:134
+ msgid "A rectangular source of a fixed size with a solid color"
+-msgstr ""
++msgstr "Una fuente rectangular de tamaño fijo y color liso"
+ 
+ #: ../operations/common/reinhard05.c:29
+ msgid "Overall brightness of the image"
+-msgstr ""
++msgstr "Brillo general de la imagen"
+ 
+ #: ../operations/common/reinhard05.c:30
+ msgid "Chromatic Adaptation"
+ msgstr "Adaptación cromática"
+ 
+ #: ../operations/common/reinhard05.c:32
+-msgid "Adapation to colour variation across the image"
+-msgstr ""
++msgid "Adaptation to color variation across the image"
++msgstr "Adaptación a la variación del color a través de la imagen"
+ 
+ #: ../operations/common/reinhard05.c:33
+ msgid "Light Adaptation"
+-msgstr ""
++msgstr "Adaptación a la luz"
+ 
+ #: ../operations/common/reinhard05.c:35
+-msgid "Adapation to light variation across the image"
+-msgstr ""
++msgid "Adaptation to light variation across the image"
++msgstr "Adaptación a la variación de luz a través de la imagen"
+ 
+ #: ../operations/common/reinhard05.c:274
+ msgid ""
+@@ -1399,10 +1729,16 @@ msgid ""
+ "simple physiological observations, producing luminance within the range "
+ "0.0-1.0"
+ msgstr ""
++"Adaptar una imagen, que puede tener un rango dinámico alto, para su "
++"presentación utilizando un rango dinámico bajo. Es un operador global "
++"eficiente derivado de observaciones fisiológicas sencillas, que produce una "
++"luminancia dentro del rango de 0.0 a 1.0"
+ 
+ #: ../operations/common/remap.c:96
+ msgid "stretch components of pixels individually based on luminance envelopes"
+ msgstr ""
++"estirar los componentes de los píxeles individualmente basándose en "
++"envolventes de luminancia"
+ 
+ #: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
+ msgid "Amplitude"
+@@ -1410,7 +1746,7 @@ msgstr "Amplitud"
+ 
+ #: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
+ msgid "Amplitude of the ripple"
+-msgstr ""
++msgstr "Amplitud del remolino"
+ 
+ #: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
+ msgid "Period"
+@@ -1418,7 +1754,7 @@ msgstr "Periodo"
+ 
+ #: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
+ msgid "Period of the ripple"
+-msgstr ""
++msgstr "Período del remolino"
+ 
+ #: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
+ #: ../operations/common/waves.c:38 ../operations/common/waves.c:39
+@@ -1429,72 +1765,110 @@ msgstr "Desfase"
+ msgid "Angle in degree"
+ msgstr "Ángulo en grados"
+ 
+-#: ../operations/common/ripple.c:40 ../operations/common/waves.c:42
+-#: ../operations/workshop/ditto.c:28
+-msgid "Sampler used internally"
+-msgstr ""
+-
+-#: ../operations/common/ripple.c:42
++#: ../operations/common/ripple.c:47
+ msgid "Wave type"
+ msgstr "Tipo de onda"
+ 
+-#: ../operations/common/ripple.c:43
++#: ../operations/common/ripple.c:48
+ msgid "Type of wave"
+ msgstr "Tipo de onda"
+ 
+-#: ../operations/common/ripple.c:164
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr "Convertible en mosaico"
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr "Conservar enlosabilidad"
++
++#: ../operations/common/ripple.c:175
+ msgid "Transform the buffer with a ripple pattern"
+-msgstr ""
++msgstr "Transformar el búfer con un patrón de remolinos"
+ 
+ #: ../operations/common/save.c:25
+ msgid "Path of file to save."
+-msgstr ""
++msgstr "Ruta del archivo que guardar."
+ 
+ #: ../operations/common/save.c:195
+ msgid "Multipurpose file saver, that uses other native handlers."
+ msgstr ""
++"Guardador de archivos de varios usos, que utiliza otros manejadores nativos."
+ 
+-#: ../operations/common/snn-mean.c:27
+-msgid "Radius of square pixel region, (width and height will be radius*2+1)"
+-msgstr ""
++#: ../operations/common/shift.c:26
++msgid "Shift"
++msgstr "Desplazamiento"
++
++#: ../operations/common/shift.c:27
++msgid "Maximum amount to shift"
++msgstr "Cantidad máxima que desplazar"
++
++#: ../operations/common/shift.c:36
++msgid "Direction"
++msgstr "Dirección"
++
++#: ../operations/common/shift.c:37
++msgid "Shift direction"
++msgstr "Dirección del desplazamiento"
++
++#: ../operations/common/shift.c:231
++msgid "Shift by a random number of pixels"
++msgstr "Desplazar un número aleatorio de píxeles"
+ 
+ #: ../operations/common/snn-mean.c:28
+ #: ../operations/workshop/snn-percentile.c:29
+ msgid "Pairs"
+-msgstr ""
++msgstr "Pares"
+ 
+ #: ../operations/common/snn-mean.c:29
+ msgid "Number of pairs; higher number preserves more acute features"
+-msgstr ""
++msgstr "Número de pares; un número mayor preserva detalles más precisos"
+ 
+-#: ../operations/common/snn-mean.c:228
++#: ../operations/common/snn-mean.c:436
+ msgid ""
+ "Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
+ "Neighbours"
+ msgstr ""
++"Filtro de desenfoque que resalta los bordes y reduce el ruido, basado en los "
++"vecinos simétricos más próximos"
+ 
+-#: ../operations/common/stretch-contrast.c:162
+-msgid ""
+-"Scales the components of the buffer to be in the 0.0-1.0 range. This "
+-"improves images that make poor use of the available contrast (little "
+-"contrast, very dark, or very bright images)."
+-msgstr ""
++#: ../operations/common/softglow.c:25
++msgid "Glow radius"
++msgstr "Radio del resplandor"
++
++#: ../operations/common/softglow.c:224
++msgid "Softglow effect"
++msgstr "Efecto resplandor suave"
+ 
+ #: ../operations/common/stress.c:28
+ msgid ""
+-"Neighbourhood taken into account, for enhancement ideal values are close to "
+-"the longest side of the image, increasing this increases the runtime."
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
+ msgstr ""
++"Vecindad que se toma en cuenta; los valores ideales para realzar son "
++"próximos al lado largo de la imagen, aumentarlo hace aumentar el tiempo de "
++"ejecución"
+ 
+ #: ../operations/common/stress.c:32
+ msgid ""
+ "Number of iterations, a higher number of iterations provides a less noisy "
+-"rendering at computational cost."
++"rendering at a computational cost"
+ msgstr ""
++"Número de iteraciones, un número más alto de iteraciones aporta una "
++"renderización con menos ruido a costa de un incremento en el cálculo"
+ 
+ #: ../operations/common/stress.c:191
+-msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling."
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr "Envolvente de tipo Retinex espacio-temporal con muestreo estocástico"
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
+ msgstr ""
++"Escala las componentes del búfer para que estén en el rango de 0.0 a 1.0. "
++"Esto mejora las imágenes que hacen un uso pobre del contraste disponible "
++"(imágenes con poco contraste, muy oscuras o muy claras)."
+ 
+ #: ../operations/common/svg-huerotate.c:27
+ #: ../operations/common/svg-luminancetoalpha.c:27
+@@ -1510,29 +1884,44 @@ msgstr "lista de <number>s"
+ 
+ #: ../operations/common/svg-huerotate.c:116
+ msgid "SVG color matrix operation svg_huerotate"
+-msgstr ""
++msgstr "Operación svg_huerotate de la matriz de colores SVG"
+ 
+ #: ../operations/common/svg-luminancetoalpha.c:95
+ msgid "SVG color matrix operation svg_luminancetoalpha"
+-msgstr ""
++msgstr "Operación svg_luminancetoalpha de la matriz de colores SVG"
+ 
+ #: ../operations/common/svg-matrix.c:132
+ msgid "SVG color matrix operation svg_matrix"
+-msgstr ""
++msgstr "Operación svg_matrix de la matriz de colores SVG"
+ 
+ #: ../operations/common/svg-saturate.c:127
+ msgid "SVG color matrix operation svg_saturate"
+-msgstr ""
++msgstr "Operación svg_saturate de la matriz de colores SVG"
++
++#: ../operations/common/threshold.c:25 ../operations/common/wind.c:26
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Umbral"
+ 
+ #: ../operations/common/threshold.c:26
+ msgid "Global threshold level (used when there is no auxiliary input buffer)."
+ msgstr ""
++"Nivel del umbral global (usado cuando no hay búfer de entrada auxiliar)."
+ 
+-#: ../operations/common/threshold.c:192
++#: ../operations/common/threshold.c:123
+ msgid ""
+ "Thresholds the image to white/black based on either the global value set in "
+ "the value property, or per pixel from the aux input."
+ msgstr ""
++"Aplica a la imagen un umbral de blanco o negro basado en el valor global "
++"fijado en la propiedad del valor, o bien por cada píxel a partir de la "
++"entrada auxiliar."
++
++#: ../operations/common/tile.c:109
++msgid "Infinitely repeats the input image."
++msgstr "Repite infinitamente la imagen de entrada."
+ 
+ #: ../operations/common/unsharp-mask.c:24
+ msgid "Std. Dev."
+@@ -1540,139 +1929,165 @@ msgstr "Desv. Est."
+ 
+ #: ../operations/common/unsharp-mask.c:25
+ msgid "Standard deviation (spatial scale factor)"
+-msgstr ""
++msgstr "Desviación estándar (factor de escala espacial)"
+ 
+ #: ../operations/common/unsharp-mask.c:27
+-msgid "Scale, strength of effect."
+-msgstr ""
++msgid "Scale, strength of effect"
++msgstr "Escala, fuerza del efecto"
+ 
+ #: ../operations/common/unsharp-mask.c:73
+ msgid ""
+ "Performs an unsharp mask on the input buffer (sharpens an image by adding "
+-"false mach-bands around edges)."
++"false mach-bands around edges)"
+ msgstr ""
++"Efectúa una máscara de desenfoque sobre el búfer de entrada (afila los "
++"detalles de una imagen añadiendo bandas de mach falsas alrededor de los "
++"bordes)"
+ 
+-#: ../operations/common/value-invert.c:218
++#: ../operations/common/value-invert.c:190
+ msgid ""
+ "Inverts just the value component, the result is the corresponding `inverted' "
+ "image."
+ msgstr ""
+-
+-#: ../operations/common/vignette.c:23
+-msgid "shape"
+-msgstr "forma"
+-
+-#: ../operations/common/vignette.c:23
+-msgid "shape to use 0=circle 1=diamond 2=square"
+-msgstr ""
++"Invierte sólo la componente de valor, el resultado es la correspondiente "
++"imagen «invertida»."
+ 
+ #: ../operations/common/vignette.c:24
+-msgid ""
+-"defaults to 'black', you can use transparency here to erase portions of an "
+-"image"
+-msgstr ""
++msgid "Shape"
++msgstr "Forma"
+ 
+-#: ../operations/common/vignette.c:25
+-msgid "radius"
+-msgstr ""
++#: ../operations/common/vignette.c:24
++#| msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgid "Shape to use: 0=circle 1=square 2=diamond"
++msgstr "Forma que usar: 0=círculo 1=cuadrado 2=rombo"
+ 
+ #: ../operations/common/vignette.c:25
+-msgid "how far out vignetting goes as portion of half image diagonal"
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
+ msgstr ""
++"El predeterminado es: «negro», aquí puede usar transparencia para eliminar "
++"partes de una imagen"
+ 
+ #: ../operations/common/vignette.c:26
+-msgid "softness"
+-msgstr ""
+-
+-#: ../operations/common/vignette.c:27
+-msgid "gamma"
+-msgstr "gamma"
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr "Magnitud del viñeteado como porción de la semidiagonal de la imagen"
+ 
+ #: ../operations/common/vignette.c:27
+-msgid "falloff linearity"
+-msgstr ""
++msgid "Softness"
++msgstr "Suavidad"
+ 
+ #: ../operations/common/vignette.c:28
+-msgid "proportion"
+-msgstr "proporción"
++msgid "Gamma"
++msgstr "Gamma"
+ 
+ #: ../operations/common/vignette.c:28
+-msgid "how close we are to image proportions"
+-msgstr ""
++msgid "Falloff linearity"
++msgstr "Linealidad del Falloff"
+ 
+ #: ../operations/common/vignette.c:29
+-msgid "squeeze"
+-msgstr ""
++msgid "Proportion"
++msgstr "Proporción"
+ 
+ #: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr "Cómo de cerca está de las proporciones de la imagen"
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr "Apretar"
++
++#: ../operations/common/vignette.c:30
+ msgid ""
+ "Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
+ "inf:1, this is applied after proportion is taken into account, to directly "
+ "use squeeze factor as proportions, set proportion to 0.0."
+ msgstr ""
+-
+-#: ../operations/common/vignette.c:31
+-msgid "x"
+-msgstr "x"
+-
+-#: ../operations/common/vignette.c:31
+-msgid "Horizontal center of vignetting"
+-msgstr ""
++"Proporción de aspecto que usar, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:"
++"inf 1.0 = inf:1, se aplica después de tener en cuenta la proporción, para "
++"usar directamente el factor de apriete como proporciones, establezca la "
++"proporción a 0.0."
+ 
+ #: ../operations/common/vignette.c:32
+-msgid "y"
+-msgstr "y"
++msgid "Horizontal center of vignetting"
++msgstr "Centro horizontal del viñeteado"
+ 
+-#: ../operations/common/vignette.c:32
++#: ../operations/common/vignette.c:33
+ msgid "Vertical center of vignetting"
+-msgstr ""
++msgstr "Centro vertical del viñeteado"
+ 
+-#: ../operations/common/vignette.c:33
+-msgid "rotation"
+-msgstr "rotación"
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Rotación"
+ 
+-#: ../operations/common/vignette.c:33
++#: ../operations/common/vignette.c:34
+ msgid "Rotation angle"
+ msgstr "Ángulo de rotación"
+ 
+-#: ../operations/common/vignette.c:220
++#: ../operations/common/vignette.c:386
+ msgid ""
+ "A vignetting op, applies a vignette to an image. Simulates the luminance "
+ "fall off at edge of exposed film, and some other fuzzier border effects that "
+ "can naturally occur with analoge photograpy."
+ msgstr ""
++"Operador de viñeteado, aplica una viñeta o marco difuso a una imagen. Simula "
++"el descenso de luminancia en los bordes de la película expuesta, y otros "
++"efectos de borde borroso que pueden ocurrir de forma natural con la "
++"fotografía analógica."
+ 
+ #: ../operations/common/waves.c:27
+ msgid "X coordinate of the center of the waves"
+-msgstr ""
++msgstr "Coordenada X del centro de las ondas"
+ 
+ #: ../operations/common/waves.c:30
+ msgid "Coordinate y of the center of the waves"
+-msgstr ""
++msgstr "Coordenada Y del centro de las ondas"
+ 
+-#: ../operations/common/waves.c:164
+-msgid "Transform the buffer with waves"
+-msgstr ""
++#: ../operations/common/waves.c:44
++msgid "Clamp deformation"
++msgstr "Restringir la deformación"
+ 
+-#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
+-#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
+-#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
+-msgid "Value"
+-msgstr "Valor"
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr "Limitar la deformación al área de la imagen."
++
++#: ../operations/common/waves.c:169
++msgid "Transform the buffer with waves"
++msgstr "Transformar el búfer con ondas"
+ 
+ #: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
+ #: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
+ #: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
+ msgid "global value used if aux doesn't contain data"
+-msgstr ""
++msgstr "valor global usado si el auxiliar no tiene datos"
+ 
+ #: ../operations/common/weighted-blend.c:124
+ msgid "blend two images using alpha values as weights"
+-msgstr ""
++msgstr "mezclar dos imágenes usando los valores de alfa como pesos"
++
++#: ../operations/common/wind.c:27
++msgid "Higher values restrict the effect to fewer areas of the image"
++msgstr "Los valores más altos restringen el efecto a menos áreas de la imagen"
++
++#: ../operations/common/wind.c:31
++msgid "Higher values increase the magnitude of the effect"
++msgstr "Los valores más altos incrementan la magnitud del efecto"
++
++#: ../operations/common/wind.c:367
++msgid "Wind-like bleed effect"
++msgstr "Efecto de sangrado con viento"
+ 
+ #: ../operations/common/write-buffer.c:26
+ msgid "Write to an existing GeglBuffer"
+-msgstr ""
++msgstr "Escribir en un GeglBuffer existente"
++
++#: ../operations/common/write-buffer.c:28
++msgid "Flush buffer"
++msgstr "Vacía búfer"
++
++#: ../operations/common/write-buffer.c:29
++msgid "Flush buffer after writing"
++msgstr "Vaciar el búfer después de escribir"
+ 
+ #: ../operations/core/clone.c:25
+ msgid "Reference"
+@@ -1680,9 +2095,9 @@ msgstr "Referencia"
+ 
+ #: ../operations/core/clone.c:26
+ msgid "The reference ID used as input (for use in XML)."
+-msgstr ""
++msgstr "ID de referencia usado como entrada (para su uso en XML)."
+ 
+-#: ../operations/core/clone.c:112
++#: ../operations/core/clone.c:110
+ msgid "Clone a buffer"
+ msgstr "Clonar un búfer"
+ 
+@@ -1692,103 +2107,107 @@ msgstr "Formato de salida"
+ 
+ #: ../operations/core/convert-format.c:29
+ msgid "Babl output format string"
+-msgstr ""
++msgstr "Cadena de formato de salida Babl"
+ 
+ #: ../operations/core/convert-format.c:81
+ msgid "Convert the data to the specified format"
+-msgstr ""
++msgstr "Convertir los datos al formato especificado"
+ 
+-#: ../operations/core/crop.c:179
++#: ../operations/core/crop.c:194
+ msgid "Crop a buffer"
+ msgstr "Recortar un búfer"
+ 
+ #: ../operations/core/nop.c:72
+ msgid "No operation (can be used as a routing point)"
+-msgstr ""
++msgstr "Ninguna operación (se puede usar como punto de enrutado)"
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Archivo de perfil para cargar"
+ 
+ #: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
+ msgid "Frame"
+ msgstr "Fotograma"
+ 
+ #: ../operations/external/ff-load.c:26
+-msgid "frame number"
+-msgstr "número de fotograma"
++msgid "Frame number"
++msgstr "Número de fotograma"
+ 
+ #: ../operations/external/ff-load.c:471
+-msgid "FFmpeg video frame importer."
+-msgstr ""
++msgid "FFmpeg video frame importer"
++msgstr "Importador de fotogramas de vídeo FFmpeg"
+ 
+ #: ../operations/external/jp2-load.c:70
+ #, c-format
+-msgid "Unknown JPEG-2000 image format in '%s'"
+-msgstr ""
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Formato de imagen JPEG 2000 desconocido en «%s»"
+ 
+ #: ../operations/external/jp2-load.c:77
+ #, c-format
+-msgid "Unable to open JPEG-2000 image in '%s'"
+-msgstr ""
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "No se pudo abrir la imagen JPEG 2000 en «%s»"
+ 
+ #: ../operations/external/jp2-load.c:84
+ #, c-format
+ msgid "Unable to create output color profile for '%s'"
+-msgstr ""
++msgstr "No se pudo crear el perfil de color de salida para «%s»"
+ 
+ #: ../operations/external/jp2-load.c:92
+ #, c-format
+ msgid "Unable to convert image to sRGB color space when processing '%s'"
+ msgstr ""
++"No se pudo convertir la imagen al espacio de colores sRGB al procesar «%s»"
+ 
+ #: ../operations/external/jp2-load.c:100
+ #, c-format
+-msgid "Unsupported non-RGB JPEG-2000 file with %d components in '%s'"
+-msgstr ""
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr "Archivo JPEG 2000 no RGB no soportado con %d componentes en «%s»"
+ 
+ #: ../operations/external/jp2-load.c:111
+ #, c-format
+-msgid "Unsupported JPEG-2000 file with depth %d in '%s'"
+-msgstr ""
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "Archivo JPEG 2000 no soportado con profundidad %d en «%s»"
+ 
+ #: ../operations/external/jp2-load.c:124
+ #, c-format
+ msgid "Components of input image '%s' don't match"
+-msgstr ""
++msgstr "Las componentes de la imagen de entrada «%s» no se corresponden"
+ 
+ #: ../operations/external/jp2-load.c:209
+ #, c-format
+ msgid "One or more of R, G, B components are missing from '%s'"
+-msgstr ""
++msgstr "Faltan una o más componentes de R, G, B de «%s»"
+ 
+ #: ../operations/external/jp2-load.c:218
+ #, c-format
+ msgid "One or more of R, G, B components have signed data in '%s'"
+-msgstr ""
++msgstr "Una o más componentes de R, G, B tienen datos firmados en «%s»"
+ 
+ #: ../operations/external/jp2-load.c:252
+ #, c-format
+ msgid "Error reading row %d component %d from '%s'"
+-msgstr ""
++msgstr "Error al leer la fila %d componente %d de «%s»"
+ 
+ #: ../operations/external/jp2-load.c:397
+-msgid "JPEG-2000 image loader."
+-msgstr ""
++msgid "JPEG 2000 image loader"
++msgstr "Cargador de imágenes JPEG 2000"
+ 
+ #: ../operations/external/jpg-load.c:223
+ msgid "JPG image loader"
+-msgstr ""
++msgstr "Cargador de imágenes JPG"
+ 
+-#: ../operations/external/jpg-save.c:26 ../operations/external/png-save.c:27
+-#: ../operations/external/ppm-save.c:26 ../operations/external/rgbe-save.c:27
+-#: ../operations/workshop/external/ff-save.c:30
+-msgid "Target path and filename, use '-' for stdout."
+-msgstr ""
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr "Ruta y nombre del archivo objetivo, use «-» para la salida estándar"
+ 
+ #: ../operations/external/jpg-save.c:27
+ msgid "Quality"
+-msgstr ""
++msgstr "Calidad"
+ 
+ #: ../operations/external/jpg-save.c:28
+ msgid "JPEG compression quality (between 1 and 100)"
+-msgstr ""
++msgstr "Calidad de la compresión JPEG (entre 1 y 100)"
+ 
+ #: ../operations/external/jpg-save.c:29
+ msgid "Smoothing"
+@@ -1796,7 +2215,7 @@ msgstr "Suavizado"
+ 
+ #: ../operations/external/jpg-save.c:30
+ msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
+-msgstr ""
++msgstr "Factor de suavizado de 1 a 100; 0 desactiva el suavizado"
+ 
+ #: ../operations/external/jpg-save.c:31
+ msgid "Optimize"
+@@ -1804,15 +2223,15 @@ msgstr "Optimizar"
+ 
+ #: ../operations/external/jpg-save.c:32
+ msgid "Use optimized huffman tables"
+-msgstr ""
++msgstr "Usar tablas de Huffman optimizadas"
+ 
+ #: ../operations/external/jpg-save.c:33
+ msgid "Progressive"
+-msgstr ""
++msgstr "Progresivo"
+ 
+ #: ../operations/external/jpg-save.c:34
+ msgid "Create progressive JPEG images"
+-msgstr ""
++msgstr "Crear imágenes JPEG progresivas"
+ 
+ #: ../operations/external/jpg-save.c:35
+ #: ../operations/workshop/color-rotate.c:46
+@@ -1821,79 +2240,129 @@ msgstr "Escala de grises"
+ 
+ #: ../operations/external/jpg-save.c:36
+ msgid "Create a grayscale (monochrome) image"
+-msgstr ""
++msgstr "Crear una imagen de escala de grises (monocromática)"
+ 
+ #: ../operations/external/jpg-save.c:192
+-msgid "JPEG image saver (passes the buffer through, saves as a side-effect.)"
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
+ msgstr ""
++"Guardador de imágenes JPEG (pasa el búfer a su través, guarda como efecto "
++"colateral)"
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilon"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Logaritmo de la ponderación de error"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Radio de la ventana de procesado"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr "Umbral alfa para el procesado multinivel"
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr "Factor de influencia del trimap"
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr "Número de niveles submuestreados que usar"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Niveles activos"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr "Número de niveles para el solucionado"
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++"Dado un trimap difuso aportado por el usuario y una imagen de entrada, crear "
++"una máscara alfa de primer plano. Establecer blanco como seleccionado, negro "
++"como no seleccionado, para el trimap."
+ 
+ #: ../operations/external/path.c:27
+ msgid "Fill Color"
+-msgstr ""
++msgstr "Color de relleno"
+ 
+ #: ../operations/external/path.c:28
+-msgid "Color of paint to use for filling, use 0 opacity to disable filling."
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
+ msgstr ""
++"Color de la pintura que usar para el relleno, use opacidad 0 para desactivar "
++"el rellenado"
+ 
+ #: ../operations/external/path.c:29
+ msgid "Stroke Color"
+-msgstr ""
++msgstr "Color del trazo"
+ 
+-#: ../operations/external/path.c:30 ../operations/external/vector-stroke.c:28
+-msgid "Color of paint to use for stroking."
+-msgstr ""
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr "Color de la pintura que usar para el trazado"
+ 
+ #: ../operations/external/path.c:32
+ msgid "Stroke width"
+-msgstr ""
++msgstr "Anchura del trazo"
+ 
+-#: ../operations/external/path.c:33 ../operations/external/vector-stroke.c:31
+-msgid "The width of the brush used to stroke the path."
+-msgstr ""
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr "Anchura del pincel que se usa para trazar la ruta"
+ 
+ #: ../operations/external/path.c:35
+ msgid "Stroke opacity"
+-msgstr ""
++msgstr "Opacidad del trazo"
+ 
+-#: ../operations/external/path.c:36 ../operations/external/vector-stroke.c:34
++#: ../operations/external/path.c:36
+ msgid ""
+ "Opacity of stroke, note, does not behave like SVG since at the moment "
+-"stroking is done using an airbrush tool."
++"stroking is done using an airbrush tool"
+ msgstr ""
++"Opacidad del trazo. Observe que no se comporta como SVG porque por el "
++"momento el trazado se hace con una herramienta de aerógrafo"
+ 
+-#: ../operations/external/path.c:38
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
+ msgid "Hardness"
+-msgstr ""
++msgstr "Dureza"
+ 
+ #: ../operations/external/path.c:39
+-msgid "hardness of brush, 0.0 for soft brush 1.0 for hard brush."
+-msgstr ""
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr "Dureza del pincel, 0.0 para un pincel blando, 1.0 para un pincel duro"
+ 
+-#: ../operations/external/path.c:41 ../operations/external/vector-fill.c:33
+-msgid "Fill rule."
+-msgstr ""
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr "Regla de rellenado"
+ 
+-#: ../operations/external/path.c:42 ../operations/external/vector-fill.c:34
+-msgid "how to determine what to fill (nonzero|evenodd"
+-msgstr ""
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr "Cómo determinar lo que se rellena (no nulo / par impar)"
+ 
+ #: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
+ #: ../operations/external/vector-stroke.c:36
+ msgid "Transform"
+-msgstr ""
++msgstr "Transformar"
+ 
+-#: ../operations/external/path.c:45 ../operations/external/vector-fill.c:37
+-#: ../operations/external/vector-stroke.c:37
+-msgid "svg style description of transform."
+-msgstr ""
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr "Descripción de la transformación en estilo SVG"
+ 
+ #: ../operations/external/path.c:47
+ msgid "Fill opacity"
+-msgstr ""
++msgstr "Opacidad del relleno"
+ 
+-#: ../operations/external/path.c:48 ../operations/external/vector-fill.c:31
+-msgid "The fill opacity to use."
+-msgstr ""
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr "Opacidad del relleno que usar"
+ 
+ #: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
+ #: ../operations/external/vector-stroke.c:39
+@@ -1903,15 +2372,15 @@ msgstr "Vector"
+ #: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
+ #: ../operations/external/vector-stroke.c:40
+ msgid "A GeglVector representing the path of the stroke"
+-msgstr ""
++msgstr "Un vector GeglVector que representa la ruta del trazo"
+ 
+ #: ../operations/external/path.c:518
+ msgid "Renders a brush stroke"
+-msgstr ""
++msgstr "Renderiza un trazo de pincel"
+ 
+ #: ../operations/external/pixbuf.c:25
+ msgid "Pixbuf"
+-msgstr ""
++msgstr "Pixbuf"
+ 
+ #: ../operations/external/pixbuf.c:25
+ msgid "GdkPixbuf to use"
+@@ -1920,10 +2389,18 @@ msgstr "GdkPixbuf que usar"
+ #: ../operations/external/pixbuf.c:103
+ msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
+ msgstr ""
++"Usa el GdkPixbuf situado en la posición de memoria que está en <em>pixbuf</"
++"em>."
+ 
+ #: ../operations/external/png-load.c:446
+ msgid "PNG image loader."
+-msgstr ""
++msgstr "Cargador de imágenes PNG."
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr "Ruta y nombre del archivo objetivo, use «-» para la salida estándar."
+ 
+ #: ../operations/external/png-save.c:28
+ msgid "Compression"
+@@ -1931,23 +2408,25 @@ msgstr "Compresión"
+ 
+ #: ../operations/external/png-save.c:29
+ msgid "PNG compression level from 1 to 9"
+-msgstr ""
++msgstr "Nivel de compresión PNG de 1 a 9"
+ 
+ #: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
+ msgid "Bitdepth"
+-msgstr ""
++msgstr "Bits de profundidad"
+ 
+ #: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
+ msgid "8 and 16 are amongst the currently accepted values."
+-msgstr ""
++msgstr "8 y 16 están entre los valores comúnmente aceptados."
+ 
+ #: ../operations/external/png-save.c:233
+ msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
+ msgstr ""
++"Guardador de imágenes PNG (pasa el búfer a su través, guarda como efecto "
++"colateral)."
+ 
+-#: ../operations/external/ppm-load.c:306
++#: ../operations/external/ppm-load.c:350
+ msgid "PPM image loader."
+-msgstr ""
++msgstr "Cargador de imágenes PPM."
+ 
+ #: ../operations/external/ppm-save.c:27
+ msgid "Raw format"
+@@ -1955,37 +2434,40 @@ msgstr "Formato Raw"
+ 
+ #: ../operations/external/ppm-save.c:190
+ msgid "PPM image saver (Portable pixmap saver.)"
+-msgstr ""
++msgstr "Guardador de imágenes PPM (guardador de mapas de píxeles portables)."
+ 
+ #: ../operations/external/rgbe-load.c:135
+ msgid "RGBE image loader (Radiance HDR format)."
+-msgstr ""
++msgstr "Cargador de imágenes RGBE (formato HDR de radiancia)."
+ 
+ #: ../operations/external/rgbe-save.c:86
+ msgid "RGBE image saver (Radiance HDR format)"
+-msgstr ""
++msgstr "Guardador de imágenes RGBE (formato HDR de radiancia)"
+ 
+ #: ../operations/external/save-pixbuf.c:28
+ msgid "Pixbuf location"
+-msgstr ""
++msgstr "Ubicación del Pixbuf"
+ 
+ #: ../operations/external/save-pixbuf.c:29
+ msgid "The location where to store the output GdkPixbuf."
+-msgstr ""
++msgstr "Lugar donde almacenar el GdkPixbuf de salida."
+ 
+ #: ../operations/external/save-pixbuf.c:106
+ msgid "Save output into a GdkPixbuf."
+-msgstr ""
++msgstr "Guardar la salida en un GdkPixbuf."
+ 
+ #: ../operations/external/sdl-display.c:28
+ msgid "Icon to be used for output window"
+-msgstr ""
++msgstr "Icono que usar para la ventana de salida"
+ 
+ #: ../operations/external/sdl-display.c:181
+ msgid ""
+ "Displays the input buffer in an SDL window (restricted to one display op/"
+ "process, due to SDL implementation issues)."
+ msgstr ""
++"Presenta el búfer de entrada en una ventana SDL (restringido a una "
++"presentación por operador o proceso, debido a cuestiones de implementación "
++"de SDL)."
+ 
+ #: ../operations/external/svg-load.c:26
+ msgid "Path to SVG file to load"
+@@ -1993,16 +2475,16 @@ msgstr "Ruta al archivo SVG que cargar"
+ 
+ #: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
+ msgid "Width for rendered image"
+-msgstr ""
++msgstr "Anchura de la imagen renderizada"
+ 
+ #: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
+ msgid "Height for rendered image"
+-msgstr ""
++msgstr "Altura de la imagen renderizada"
+ 
+ #. not hidden because it has extra API
+-#: ../operations/external/svg-load.c:245
++#: ../operations/external/svg-load.c:239
+ msgid "Load an SVG file using librsvg"
+-msgstr ""
++msgstr "Cargar un archivo SVG usando librsvg"
+ 
+ #: ../operations/external/text.c:25
+ msgid "Text"
+@@ -2010,7 +2492,7 @@ msgstr "Texto"
+ 
+ #: ../operations/external/text.c:26
+ msgid "String to display (utf8)"
+-msgstr ""
++msgstr "Cadena que mostrar (utf8)"
+ 
+ #: ../operations/external/text.c:27
+ msgid "Font family"
+@@ -2020,17 +2502,17 @@ msgstr "Familia tipográfica"
+ msgid "Font family (utf8)"
+ msgstr "Familia tipográfica (UTF-8)"
+ 
+-#: ../operations/external/text.c:29 ../operations/workshop/warp.c:28
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
+ msgid "Size"
+ msgstr "Tamaño"
+ 
+ #: ../operations/external/text.c:30
+ msgid "Approximate height of text in pixels."
+-msgstr ""
++msgstr "Altura aproximada del texto en píxeles."
+ 
+ #: ../operations/external/text.c:32
+ msgid "Color for the text (defaults to 'white')"
+-msgstr ""
++msgstr "Color del texto (el predeterminado es «blanco»)"
+ 
+ #: ../operations/external/text.c:33
+ msgid "Wrap width"
+@@ -2041,6 +2523,8 @@ msgid ""
+ "Sets the width in pixels at which long lines will wrap. Use -1 for no "
+ "wrapping."
+ msgstr ""
++"Establece la anchura en píxeles en la que la líneas largas se ajustan. Use "
++"-1 para no ajustar."
+ 
+ #: ../operations/external/text.c:36
+ msgid "Justification"
+@@ -2049,18 +2533,19 @@ msgstr "Justificación"
+ #: ../operations/external/text.c:37
+ msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
+ msgstr ""
++"Alineación para textos de varias líneas (0=Izquierda, 1=Centro, 2=Derecha)"
+ 
+ #: ../operations/external/text.c:39
+ msgid "Rendered width in pixels. (read only)"
+-msgstr ""
++msgstr "Anchura del renderizado en píxeles (solo lectura)."
+ 
+ #: ../operations/external/text.c:41
+ msgid "Rendered height in pixels. (read only)"
+-msgstr ""
++msgstr "Altura del renderizado en píxeles (solo lectura)."
+ 
+ #: ../operations/external/text.c:301
+ msgid "Display a string of text using pango and cairo."
+-msgstr ""
++msgstr "Presentar una cadena de texto usando Pango y Cairo."
+ 
+ #: ../operations/external/v4l.c:26
+ msgid "Path"
+@@ -2068,11 +2553,13 @@ msgstr "Ruta"
+ 
+ #: ../operations/external/v4l.c:26
+ msgid "Path to v4l device"
+-msgstr ""
++msgstr "Ruta al dispositivo v4l"
+ 
+ #: ../operations/external/v4l.c:30
+ msgid "current frame number, can be changed to trigger a reload of the image."
+ msgstr ""
++"número del fotograma actual, se puede cambiar para que dispare una recarga "
++"de la imagen."
+ 
+ #: ../operations/external/v4l.c:31
+ #: ../operations/workshop/external/ff-save.c:32
+@@ -2081,167 +2568,343 @@ msgstr "FPS"
+ 
+ #: ../operations/external/v4l.c:32
+ msgid "autotrigger reload this many times a second."
+-msgstr ""
++msgstr "autodisparar la recarga esta cantidad de veces por segundo."
+ 
+ #: ../operations/external/v4l.c:322
+ msgid "Video4Linux input, webcams framegrabbers and similar devices."
+-msgstr ""
++msgstr "Entrada Video4Linux, capturadoras, webcams y dispositivos similares."
+ 
+ #: ../operations/external/vector-fill.c:28
+ msgid "Color of paint to use for filling."
+-msgstr ""
++msgstr "Color de la pintura que usar para el relleno."
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr "Opacidad de relleno que usar."
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr "Regla de rellenado."
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr "cómo determinar lo que se rellena (no nulo / par impar)"
+ 
+-#: ../operations/external/vector-fill.c:258
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr "descripción estilo SVG de la transformación."
++
++#: ../operations/external/vector-fill.c:268
+ msgid "Renders a filled region"
++msgstr "Renderiza una región rellena"
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr "Color de la pintura que usar para el trazado."
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr "Anchura del pincel usado para trazar la ruta."
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
+ msgstr ""
++"Opacidad del trazo. Observe que no se comporta como SVG porque por el "
++"momento el trazado se hace con una herramienta de aerógrafo."
+ 
+ #: ../operations/external/vector-stroke.c:280
+ msgid "Renders a vector stroke"
+-msgstr ""
++msgstr "Renderiza un trazado de vector"
+ 
+ #: ../operations/generated/add.c:125
+ msgid "Math operation add (c = c + value)"
+-msgstr ""
++msgstr "Operación matemática suma (c = c + valor)"
+ 
+ #: ../operations/generated/clear.c:116
+ msgid "Porter Duff operation clear (d = 0.0f)"
+-msgstr ""
++msgstr "Operación Porter-Duff borrar (d = 0.0f)"
+ 
+-#: ../operations/generated/color-burn.c:117
++#: ../operations/generated/color-burn.c:165
+ msgid ""
+-"SVG blend operation color-burn (<tt>if cA * aB + cB * aA <= aA * aB: d = cA "
+-"* (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB "
+-"* aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</tt>)"
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
+ msgstr ""
++"Operación de mezcla SVG quemado de color (<code>si cA * aB + cB * aA <= aA * "
++"aB: d = cA * (1 - aB) + cB * (1 - aA) en caso contrario: d = (cA == 0 ? 1 : "
++"(aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</"
++"code>)"
+ 
+-#: ../operations/generated/color-dodge.c:117
++#: ../operations/generated/color-dodge.c:165
+ msgid ""
+-"SVG blend operation color-dodge (<tt>if cA * aB + cB * aA >= aA * aB: d = aA "
+-"* aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
+-"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
++"Operación de mezcla SVG máscara de color (<code>si cA * aB + cB * aA >= aA * "
++"aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) en caso contrario: d = (cA "
++"== aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 "
++"- aA)</code>)"
+ 
+-#: ../operations/generated/darken.c:115
++#: ../operations/generated/darken.c:163
+ msgid ""
+-"SVG blend operation darken (<tt>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + "
+-"cB * (1 - aA)</tt>)"
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
+ msgstr ""
++"Operación de mezcla SVG oscurecer (<code>d = MIN (cA * aB, cB * aA) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
+ 
+-#: ../operations/generated/difference.c:115
++#: ../operations/generated/difference.c:163
+ msgid ""
+-"SVG blend operation difference (<tt>d = cA + cB - 2 * (MIN (cA * aB, cB * "
+-"aA))</tt>)"
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
+ msgstr ""
++"Operación de mezcla SVG diferencia (<code>d = cA + cB - 2 * (MIN (cA * aB, "
++"cB * aA))</code>)"
+ 
+ #: ../operations/generated/divide.c:125
+ msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
+-msgstr ""
++msgstr "Operación matemática dividir (c = valor==0.0f?0.0f:c/valor)"
+ 
+ #: ../operations/generated/dst-atop.c:116
+ msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
+-msgstr ""
++msgstr "Operación de Porter-Duff dst-atop (d = cB * aA + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr "Operación de Porter-Duff dst (d = cB)"
+ 
+ #: ../operations/generated/dst-in.c:116
+ msgid "Porter Duff operation dst-in (d = cB * aA)"
+-msgstr ""
++msgstr "Operación de Porter-Duff dst-in (d = cB * aA)"
+ 
+ #: ../operations/generated/dst-out.c:116
+ msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
+-msgstr ""
++msgstr "Operación de Porter-Duff dst-out (d = cB * (1.0f - aA))"
+ 
+ #: ../operations/generated/dst-over.c:116
+ msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
+-msgstr ""
+-
+-#: ../operations/generated/dst.c:116
+-msgid "Porter Duff operation dst (d = cB)"
+-msgstr ""
++msgstr "Operación de Porter-Duff dst-over (d = cB + cA * (1.0f - aB))"
+ 
+-#: ../operations/generated/exclusion.c:115
++#: ../operations/generated/exclusion.c:163
+ msgid ""
+-"SVG blend operation exclusion (<tt>d = (cA * aB + cB * aA - 2 * cA * cB) + "
+-"cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
++"Operación de mezcla SVG exclusión (<code>d = (cA * aB + cB * aA - 2 * cA * "
++"cB) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+ #: ../operations/generated/gamma.c:125
+ msgid "Math operation gamma (c = powf (c, value))"
+-msgstr ""
++msgstr "Operación matemática gamma (c = powf (c, valor))"
+ 
+-#: ../operations/generated/hard-light.c:117
++#: ../operations/generated/hard-light.c:165
+ msgid ""
+-"SVG blend operation hard-light (<tt>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
+ "(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
+-"+ cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
++"Operación de mezcla SVG aclarado duro (<code>si 2 * cA < aA: d = 2 * cA * cB "
++"+ cA * (1 - aB) + cB * (1 - aA) en caso contrario: d = aA * aB - 2 * (aB - "
++"cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+-#: ../operations/generated/lighten.c:115
++#: ../operations/generated/lighten.c:163
+ msgid ""
+-"SVG blend operation lighten (<tt>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) "
+-"+ cB * (1 - aA)</tt>)"
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
+ msgstr ""
++"Operación de mezcla SVG aclarar (<code>d = MAX (cA * aB, cB * aA) + cA * (1 "
++"- aB) + cB * (1 - aA)</code>)"
+ 
+ #: ../operations/generated/multiply.c:125
+ msgid "Math operation multiply (c = c * value)"
++msgstr "Operación matemática multiplicar (c = c * valor)"
++
++#: ../operations/generated/overlay.c:165
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Operación de mezcla SVG overlay (<code>si 2 * cB > aB: d = 2 * cA * cB + cA "
++"* (1 - aB) + cB * (1 - aA) en caso contrario: d = aA * aB - 2 * (aB - cB) * "
++"(aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/plus.c:163
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr "Operación de mezcla SVG suma (<code>d = cA + cB</code>)"
++
++#: ../operations/generated/screen.c:163
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr "Operación de mezcla SVG pantalla (<code>d = cA + cB - cA * cB</code>)"
++
++#: ../operations/generated/soft-light.c:167
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
++"Operación de mezcla SVG aclarado suave (<code>si 2 * cA < aA: d = cB * (aA - "
++"(aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - "
++"aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - "
++"aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); en "
++"caso contrario: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 "
++"* cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr "Operación de Porter-Duff src-atop (d = cA * aB + cB * (1.0f - aA))"
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr "Operación de Porter-Duff src (d = cA)"
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr "Operación de Porter-Duff src-in (d = cA * aB)"
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr "Operación de Porter-Duff src-out (d = cA * (1.0f - aB))"
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr "Operación de Porter-Duff src-over (d = cA + cB * (1.0f - aA))"
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr "Operación matemática restar (c = c - valor)"
++
++#: ../operations/generated/svg-multiply.c:163
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++"Operación de mezcla SVG multiplicar (<code>d = cA * cB +  cA * (1 - aB) + cB "
++"* (1 - aA)</code>)"
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr "Operación de Porter-Duff xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr "Componente X del vector de dirección"
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr "Componente Y del vector de dirección"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Ángulo de rotación (sentido horario)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Girar el búfer alrededor del origen especificado."
++
++#: ../operations/transform/scale.c:29 ../operations/transform/scale-ratio.c:26
++msgid "Horizontal scale factor"
++msgstr "Factor de escalado horizontal"
++
++#: ../operations/transform/scale.c:31 ../operations/transform/scale-ratio.c:28
++msgid "Vertical scale factor"
++msgstr "Factor de escalado vertical"
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr "Escala el búfer."
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr "Escala el búfer según una proporción."
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Tamaño horizontal"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Tamaño vertical"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr "Escala el búfer según un tamaño."
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Grado de inclinación horizontal"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Grado de inclinación vertical"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Inclina el búfer"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Cadena de transformación"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr "Transforma el grupo (usado por SVG)."
+ 
+-#: ../operations/generated/overlay.c:117
+-msgid ""
+-"SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - "
+-"aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA "
+-"* (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/transform/transform-core.c:200
++msgid "Origin-x"
++msgstr "Origen X"
+ 
+-#: ../operations/generated/plus.c:115
+-msgid "SVG blend operation plus (<tt>d = cA + cB</tt>)"
+-msgstr ""
++#: ../operations/transform/transform-core.c:201
++msgid "X coordinate of origin"
++msgstr "Coordenada X del origen"
+ 
+-#: ../operations/generated/screen.c:115
+-msgid "SVG blend operation screen (<tt>d = cA + cB - cA * cB</tt>)"
+-msgstr ""
++#: ../operations/transform/transform-core.c:208
++msgid "Origin-y"
++msgstr "Origen Y"
+ 
+-#: ../operations/generated/soft-light.c:119
+-msgid ""
+-"SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == "
+-"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
+-"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
+-"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
+-"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
+-"(1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/transform/transform-core.c:209
++msgid "Y coordinate of origin"
++msgstr "Coordenada Y del origen"
+ 
+-#: ../operations/generated/src-atop.c:116
+-msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
+-msgstr ""
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Tipo de filtro (más cercano, lineal, lanczos, cúbico, lohalo)"
+ 
+-#: ../operations/generated/src-in.c:125
+-msgid "Porter Duff operation src-in (d = cA * aB)"
+-msgstr ""
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++msgid "Hard edges"
++msgstr "Bordes duros"
+ 
+-#: ../operations/generated/src-out.c:116
+-msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
+-msgstr ""
++#: ../operations/transform/transform-core.c:230
++msgid "Lanczos width"
++msgstr "Anchura del Lanczos"
+ 
+-#: ../operations/generated/src-over.c:116
+-msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
+-msgstr ""
++#: ../operations/transform/transform-core.c:231
++msgid "Width of the Lanczos function"
++msgstr "Anchura de la función de Lanczos"
+ 
+-#: ../operations/generated/src.c:116
+-msgid "Porter Duff operation src (d = cA)"
+-msgstr ""
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Traslación horizontal"
+ 
+-#: ../operations/generated/subtract.c:125
+-msgid "Math operation subtract (c = c - value)"
+-msgstr ""
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Traslación vertical"
+ 
+-#: ../operations/generated/svg-multiply.c:114
++#: ../operations/transform/translate.c:33
+ msgid ""
+-"SVG blend operation svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 "
+-"- aA)</tt>)"
+-msgstr ""
+-
+-#: ../operations/generated/xor.c:116
+-msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
+ msgstr ""
++"Reposiciona el búfer (con precisión de subpíxel), si se pasan coordenadas "
++"enteras se usa una ruta rápida sin remuestreo"
+ 
+ #: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
+ #: ../operations/workshop/box-percentile.c:28
+@@ -2250,18 +2913,24 @@ msgstr ""
+ #: ../operations/workshop/snn-percentile.c:28
+ msgid "Radius of square pixel region (width and height will be radius*2+1)"
+ msgstr ""
++"Radio de la región cuadrada de píxeles (la anchura y la altura serán "
++"radio*2+1)"
+ 
+ #: ../operations/workshop/box-max.c:198
+ msgid ""
+ "Sets the target pixel to the value of the maximum value in a box surrounding "
+-"the pixel."
++"the pixel"
+ msgstr ""
++"Fija el píxel objetivo al valor del máximo valor dentro de una caja que "
++"rodea al píxel"
+ 
+ #: ../operations/workshop/box-min.c:198
+ msgid ""
+ "Sets the target pixel to the value of the minimum value in a box surrounding "
+-"the pixel."
++"the pixel"
+ msgstr ""
++"Fija el píxel objetivo al valor del mínimo valor dentro de una caja que "
++"rodea al píxel"
+ 
+ #: ../operations/workshop/box-percentile.c:29
+ #: ../operations/workshop/disc-percentile.c:28
+@@ -2270,76 +2939,32 @@ msgid "Percentile"
+ msgstr "Percentil"
+ 
+ #: ../operations/workshop/box-percentile.c:30
+-#: ../operations/workshop/disc-percentile.c:29
+-msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgid "The percentile to compute, defaults to 50, which is a median filter"
+ msgstr ""
++"Percentil que calcular, el predeterminado es 50, que es un filtro de mediana"
+ 
+ #: ../operations/workshop/box-percentile.c:230
+-#: ../operations/workshop/disc-percentile.c:234
+ msgid ""
+ "Sets the target pixel to the color corresponding to a given percentile when "
+-"colors are sorted by luminance."
++"colors are sorted by luminance"
+ msgstr ""
++"Fija el píxel objetivo al color que corresponde a un percentil dado cuando "
++"los colores se ordenan por luminancia"
+ 
+ #: ../operations/workshop/buffer-cache.c:25
+ msgid "Cache buffer"
+-msgstr ""
++msgstr "Cachear el búfer"
+ 
+ #: ../operations/workshop/buffer-cache.c:26
+ msgid "The GeglBuffer where the caching is done"
+-msgstr ""
++msgstr "El GeglBuffer en que se hace el cacheado"
+ 
+-#: ../operations/workshop/buffer-cache.c:103
++#: ../operations/workshop/buffer-cache.c:96
+ msgid ""
+ "Cache the input buffer internally, further process take this buffer as input."
+ msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:25
+-msgid "Red bits"
+-msgstr "Bits rojos"
+-
+-#: ../operations/workshop/color-reduction.c:25
+-msgid "Number of bits for red channel"
+-msgstr "Número de bits para el canal rojo"
+-
+-#: ../operations/workshop/color-reduction.c:26
+-msgid "Green bits"
+-msgstr "Bits verdes"
+-
+-#: ../operations/workshop/color-reduction.c:26
+-msgid "Number of bits for green channel"
+-msgstr "Número de bits para el canal verde"
+-
+-#: ../operations/workshop/color-reduction.c:27
+-msgid "Blue bits"
+-msgstr "Bits azules"
+-
+-#: ../operations/workshop/color-reduction.c:27
+-msgid "Number of bits for blue channel"
+-msgstr "Número de bits para el canal azul"
+-
+-#: ../operations/workshop/color-reduction.c:28
+-msgid "Alpha bits"
+-msgstr "Bits alfa"
+-
+-#: ../operations/workshop/color-reduction.c:28
+-msgid "Number of bits for alpha channel"
+-msgstr "Número de bits para el canal alfa"
+-
+-#: ../operations/workshop/color-reduction.c:29
+-msgid "Dither"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:30
+-msgid ""
+-"Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:459
+-msgid ""
+-"Reduces the number of bits per channel (colors and alpha), with optional "
+-"dithering."
+-msgstr ""
++"Cachear internamente el búfer de entrada, los procesos posteriores toman "
++"este búfer como entrada."
+ 
+ #: ../operations/workshop/color-rotate.c:33
+ #: ../operations/workshop/color-rotate.c:39
+@@ -2349,7 +2974,7 @@ msgstr "Horario"
+ #: ../operations/workshop/color-rotate.c:34
+ #: ../operations/workshop/color-rotate.c:40
+ msgid "Switch to clockwise"
+-msgstr ""
++msgstr "Cambiar al sentido de las agujas del reloj"
+ 
+ #: ../operations/workshop/color-rotate.c:35
+ #: ../operations/workshop/color-rotate.c:41
+@@ -2359,7 +2984,7 @@ msgstr "Desde:"
+ #: ../operations/workshop/color-rotate.c:36
+ #: ../operations/workshop/color-rotate.c:42
+ msgid "Starting angle for the color rotation"
+-msgstr ""
++msgstr "Ángulo inicial para la rotación de colores"
+ 
+ #: ../operations/workshop/color-rotate.c:37
+ #: ../operations/workshop/color-rotate.c:43
+@@ -2369,36 +2994,32 @@ msgstr "Hasta:"
+ #: ../operations/workshop/color-rotate.c:38
+ #: ../operations/workshop/color-rotate.c:44
+ msgid "End angle for the color rotation"
+-msgstr ""
++msgstr "Ángulo final para la rotación de colores"
+ 
+ #: ../operations/workshop/color-rotate.c:47
+ msgid "Choose in case of grayscale images"
+-msgstr ""
+-
+-#: ../operations/workshop/color-rotate.c:48
+-msgid "Hue"
+-msgstr "Tono"
++msgstr "Seleccionar en el caso de imágenes de escala de grises"
+ 
+ #: ../operations/workshop/color-rotate.c:49
+ msgid "The value of hue"
+-msgstr ""
++msgstr "Valor del tono"
+ 
+ #: ../operations/workshop/color-rotate.c:51
+ msgid "The value of saturation"
+-msgstr ""
++msgstr "Valor de la saturación"
+ 
+ #: ../operations/workshop/color-rotate.c:52
+ #: ../operations/workshop/color-rotate.c:53
+ msgid "Change/Treat to this"
+-msgstr ""
++msgstr "Cambiar o pasar a manejar a éste"
+ 
+ #: ../operations/workshop/color-rotate.c:55
+ msgid "The value of gray threshold"
+-msgstr ""
++msgstr "Valor del umbral de gris"
+ 
+-#: ../operations/workshop/color-rotate.c:385
+-msgid "Rotate colors on the image."
+-msgstr ""
++#: ../operations/workshop/color-rotate.c:383
++msgid "Rotate colors on the image"
++msgstr "Rotar los colores de la imagen"
+ 
+ #: ../operations/workshop/convolution-matrix.c:25
+ msgid "(1,1) "
+@@ -2622,7 +3243,7 @@ msgstr "Normalizar"
+ 
+ #: ../operations/workshop/convolution-matrix.c:81
+ msgid "Normalize or not"
+-msgstr ""
++msgstr "Normalizar o no"
+ 
+ #: ../operations/workshop/convolution-matrix.c:83
+ msgid "Red channel"
+@@ -2654,12 +3275,14 @@ msgstr "Borde"
+ 
+ #: ../operations/workshop/convolution-matrix.c:91
+ msgid ""
+-"Type of border to choose.Choices are extend, wrap, crop.Default is extend"
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
+ msgstr ""
++"Tipo de borde que seleccionar. Se puede elegir entre extender, ajustar o "
++"recortar. El predeterminado es extender"
+ 
+ #: ../operations/workshop/convolution-matrix.c:433
+-msgid "Creates image by manually set convolution matrix."
+-msgstr ""
++msgid "Creates image by manually set convolution matrix"
++msgstr "Crea una imagen mediante una matriz de convolución fijada manualmente"
+ 
+ #: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
+ msgid "Tile size"
+@@ -2669,21 +3292,17 @@ msgstr "Tamaño del mosaico"
+ msgid "Tile saturation"
+ msgstr "Saturación del mosaico"
+ 
+-#: ../operations/workshop/cubism.c:35
+-msgid "Random seed"
+-msgstr "Semilla aleatoria"
+-
+ #: ../operations/workshop/cubism.c:595
+-msgid "Filter that somehow resembels a cubist painting style."
+-msgstr ""
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr "Un filtro semejante a un estilo de pintura cubista"
+ 
+ #: ../operations/workshop/deinterlace.c:30
+ msgid "Even/Odd"
+-msgstr ""
++msgstr "Par o impar"
+ 
+ #: ../operations/workshop/deinterlace.c:30
+ msgid "Keep even/odd fields"
+-msgstr ""
++msgstr "Mantener los campos pares o impares"
+ 
+ #: ../operations/workshop/deinterlace.c:31
+ msgid "Horizontal/Vertical"
+@@ -2691,7 +3310,7 @@ msgstr "Horizontal/Vertical"
+ 
+ #: ../operations/workshop/deinterlace.c:32
+ msgid "Choose horizontal or vertical"
+-msgstr ""
++msgstr "Elegir horizontal o vertical"
+ 
+ #: ../operations/workshop/deinterlace.c:33
+ msgid "Block size"
+@@ -2699,16 +3318,16 @@ msgstr "Tamaño de bloque"
+ 
+ #: ../operations/workshop/deinterlace.c:34
+ msgid "Block size of deinterlacing rows/columns"
+-msgstr ""
++msgstr "Tamaño del bloque de desentrelazado de filas o columnas"
+ 
+ #: ../operations/workshop/deinterlace.c:309
+-msgid "Performs deinterlace on the image."
+-msgstr ""
++msgid "Performs deinterlace on the image"
++msgstr "Efectúa un desentrelazado de la imagen"
+ 
+ #: ../operations/workshop/demosaic-bimedian.c:26
+ #: ../operations/workshop/demosaic-simple.c:25
+ msgid "Bayer pattern"
+-msgstr ""
++msgstr "Patrón de Bayer"
+ 
+ #: ../operations/workshop/demosaic-bimedian.c:27
+ #: ../operations/workshop/demosaic-simple.c:26
+@@ -2716,21 +3335,42 @@ msgid ""
+ "Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
+ "files."
+ msgstr ""
++"Patrón de Bayer usado, 0 parece funcionar para algunos archivos de Nikon, 2 "
++"para algunos archivos de Fuji."
+ 
+ #: ../operations/workshop/demosaic-bimedian.c:220
+ msgid ""
+ "Performs a grayscale2color demosaicing of an image, using bimedian "
+ "interpolation."
+ msgstr ""
++"Efectúa una desmosaiquización de tipo grayscale2color de la imagen, usando "
++"interpolación bimediana."
+ 
+ #: ../operations/workshop/demosaic-simple.c:152
+ msgid ""
+ "Performs a naive grayscale2color demosaicing of an image, no interpolation."
+ msgstr ""
++"Efectúa una desmosaiquización grayscale2color de tipo ingenuo, sin "
++"interpolación."
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++"Percentil que calcular, el predeterminado es 50, que es un filtro de mediana."
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++"Establece el píxel objetivo al color que corresponde a un percentil dado "
++"cuando los colores se ordenan por luminancia."
+ 
+-#: ../operations/workshop/ditto.c:111
++#: ../operations/workshop/ditto.c:112
+ msgid "Test op to do a 1:1 map of input to output, while sampling"
+ msgstr ""
++"Operación de prueba que hace una asignación 1:1 de la entrada a la salida, "
++"durante el muestreo"
+ 
+ #: ../operations/workshop/emboss.c:25
+ msgid "Azimuth"
+@@ -2755,17 +3395,19 @@ msgstr "Profundidad"
+ 
+ #: ../operations/workshop/emboss.c:30
+ msgid "Pixel depth"
+-msgstr ""
++msgstr "Píxeles de profundidad"
+ 
+ #: ../operations/workshop/emboss.c:32
+ msgid ""
+ "Optional parameter to override automatic selection of emboss filter. Choices "
+ "are emboss, blur-map"
+ msgstr ""
++"Parámetro opcional para sobreescribir la selección automática del filtro de "
++"repujado. Se puede elegir entre repujado o mapa de borrosidad"
+ 
+ #: ../operations/workshop/emboss.c:248
+-msgid "Simulates an image created by embossing."
+-msgstr ""
++msgid "Simulates an image created by embossing"
++msgstr "Simula una imagen creada mediante repujado"
+ 
+ #: ../operations/workshop/external/ff-save.c:31
+ msgid "Bitrate"
+@@ -2773,7 +3415,7 @@ msgstr "Tasa de bits"
+ 
+ #: ../operations/workshop/external/ff-save.c:31
+ msgid "target bitrate"
+-msgstr ""
++msgstr "tasa de bits objetivo"
+ 
+ #: ../operations/workshop/external/ff-save.c:32
+ msgid "frames per second"
+@@ -2781,7 +3423,7 @@ msgstr "fotogramas por segundo"
+ 
+ #: ../operations/workshop/external/ff-save.c:889
+ msgid "FFmpeg video output sink"
+-msgstr ""
++msgstr "Sumidero de salida de vídeo FFmpeg"
+ 
+ #: ../operations/workshop/external/gluas.c:41
+ msgid "Script"
+@@ -2789,25 +3431,27 @@ msgstr "Script"
+ 
+ #: ../operations/workshop/external/gluas.c:42
+ msgid "The lua script containing the implementation of this operation."
+-msgstr ""
++msgstr "Script LUA que contiene la implementación de esta operación."
+ 
+ #: ../operations/workshop/external/gluas.c:43
+ msgid "a stored lua script on disk implementing an operation."
+-msgstr ""
++msgstr "un script LUA almacenado en disco que implementa una operación."
+ 
+ #: ../operations/workshop/external/gluas.c:44
+ msgid "User value"
+-msgstr ""
++msgstr "Valor del usuario"
+ 
+ #: ../operations/workshop/external/gluas.c:45
+ msgid "(appears in the global variable 'user_value' in lua."
+-msgstr ""
++msgstr "(aparece en la variable global «user_value» en LUA)."
+ 
+ #: ../operations/workshop/external/gluas.c:984
+ msgid ""
+ "A general purpose filter/composer implementation proxy for the lua "
+ "programming language."
+ msgstr ""
++"Un proxy de implementación filtro/compositor de uso general para el lenguaje "
++"de programación LUA."
+ 
+ #: ../operations/workshop/external/lens-correct.c:28
+ msgid "Maker:"
+@@ -2815,7 +3459,7 @@ msgstr "Marcador:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:29
+ msgid "Write lens maker correctly"
+-msgstr ""
++msgstr "Escriba correctamente el fabricante del objetivo"
+ 
+ #: ../operations/workshop/external/lens-correct.c:30
+ msgid "Camera:"
+@@ -2823,23 +3467,23 @@ msgstr "Cámara:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:31
+ msgid "Write camera name correctly"
+-msgstr ""
++msgstr "Escriba correctamente el nombre de la cámara"
+ 
+ #: ../operations/workshop/external/lens-correct.c:32
+ msgid "Lens:"
+-msgstr ""
++msgstr "Objetivo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:33
+-msgid "Write your lens model with majuscules"
+-msgstr ""
++msgid "Write your lens model with uppercase letters"
++msgstr "Escriba el modelo de su objetivo con mayúsculas"
+ 
+ #: ../operations/workshop/external/lens-correct.c:34
+ msgid "Focal of the camera"
+-msgstr ""
++msgstr "Longitud focal de la cámara"
+ 
+ #: ../operations/workshop/external/lens-correct.c:35
+ msgid "Calculate b value from focal"
+-msgstr ""
++msgstr "Calcular el valor b a partir de la longitud focal"
+ 
+ #: ../operations/workshop/external/lens-correct.c:37
+ msgid "Center"
+@@ -2851,32 +3495,32 @@ msgstr "Si quiere centrar"
+ 
+ #: ../operations/workshop/external/lens-correct.c:39
+ msgid "Lens center x"
+-msgstr ""
++msgstr "Centro X del objetivo"
+ 
+ #: ../operations/workshop/external/lens-correct.c:40
+ #: ../operations/workshop/external/lens-correct.c:42
+ msgid "Coordinates of lens center"
+-msgstr ""
++msgstr "Coordenadas del centro del objetivo"
+ 
+ #: ../operations/workshop/external/lens-correct.c:41
+ msgid "Lens center y"
+-msgstr ""
++msgstr "Centro Y del objetivo"
+ 
+ #: ../operations/workshop/external/lens-correct.c:44
+ msgid "Scale of the image"
+-msgstr ""
++msgstr "Escala de la imagen"
+ 
+ #: ../operations/workshop/external/lens-correct.c:45
+ msgid "Autocorrect d values"
+-msgstr ""
++msgstr "Autocorregir los valores d"
+ 
+ #: ../operations/workshop/external/lens-correct.c:46
+ msgid "Autocorrect D values for lens correction models."
+-msgstr ""
++msgstr "Autocorregir los valores D para los modelos de corrección de objetivos"
+ 
+ #: ../operations/workshop/external/lens-correct.c:48
+ msgid "Model red a:"
+-msgstr ""
++msgstr "A rojo del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:49
+ #: ../operations/workshop/external/lens-correct.c:51
+@@ -2891,74 +3535,74 @@ msgstr ""
+ #: ../operations/workshop/external/lens-correct.c:71
+ #: ../operations/workshop/external/lens-correct.c:73
+ msgid "Correction parameters for each color channel"
+-msgstr ""
++msgstr "Parámetros de corrección para cada canal de color"
+ 
+ #: ../operations/workshop/external/lens-correct.c:50
+ msgid "Model red b:"
+-msgstr ""
++msgstr "B rojo del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:52
+ msgid "Model red c:"
+-msgstr ""
++msgstr "C rojo del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:54
+ msgid "Model red d:"
+-msgstr ""
++msgstr "D rojo del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:57
+ msgid "Model green a:"
+-msgstr ""
++msgstr "A verde del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:59
+ msgid "Model green b:"
+-msgstr ""
++msgstr "B verde del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:61
+ msgid "Model green c:"
+-msgstr ""
++msgstr "C verde del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:63
+ msgid "Model green d:"
+-msgstr ""
++msgstr "D verde del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:66
+ msgid "Model blue a:"
+-msgstr ""
++msgstr "A azul del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:68
+ msgid "Model blue b:"
+-msgstr ""
++msgstr "B azul del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:70
+ msgid "Model blue c:"
+-msgstr ""
++msgstr "C azul del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:72
+ msgid "Model blue d:"
+-msgstr ""
++msgstr "D azul del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:75
+ msgid "Model alpha a:"
+-msgstr ""
++msgstr "A alfa del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:76
+ #: ../operations/workshop/external/lens-correct.c:78
+ #: ../operations/workshop/external/lens-correct.c:80
+ #: ../operations/workshop/external/lens-correct.c:82
+ msgid "Correction parameters for alpha channel"
+-msgstr ""
++msgstr "Parámetros de corrección para el canal alfa"
+ 
+ #: ../operations/workshop/external/lens-correct.c:77
+ msgid "Model alpha b:"
+-msgstr ""
++msgstr "B alfa del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:79
+ msgid "Model alpha c:"
+-msgstr ""
++msgstr "C alfa del modelo:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:81
+ msgid "Model alpha d:"
+-msgstr ""
++msgstr "D alfa del modelo:"
+ 
+ #: ../operations/workshop/external/line-profile.c:25
+ msgid "X0"
+@@ -2966,16 +3610,17 @@ msgstr "X0"
+ 
+ #: ../operations/workshop/external/line-profile.c:25
+ msgid "Start x coordinate"
+-msgstr ""
++msgstr "Coordenada X inicial"
+ 
+ #: ../operations/workshop/external/line-profile.c:26
+ #: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
+ msgid "X1"
+ msgstr "X1"
+ 
+ #: ../operations/workshop/external/line-profile.c:26
+ msgid "End x coordinate"
+-msgstr ""
++msgstr "Coordenada X final"
+ 
+ #: ../operations/workshop/external/line-profile.c:27
+ msgid "Y0"
+@@ -2983,24 +3628,25 @@ msgstr "Y0"
+ 
+ #: ../operations/workshop/external/line-profile.c:27
+ msgid "Start y coordinate"
+-msgstr ""
++msgstr "Coordenada Y inicial"
+ 
+ #: ../operations/workshop/external/line-profile.c:28
+ #: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
+ msgid "Y1"
+ msgstr "Y1"
+ 
+ #: ../operations/workshop/external/line-profile.c:28
+ msgid "End y coordinate"
+-msgstr ""
++msgstr "Coordenada y final"
+ 
+ #: ../operations/workshop/external/line-profile.c:29
+ msgid "Width of plot"
+-msgstr ""
++msgstr "Anchura del punto"
+ 
+ #: ../operations/workshop/external/line-profile.c:30
+ msgid "Height of plot"
+-msgstr ""
++msgstr "Altura del punto"
+ 
+ #: ../operations/workshop/external/line-profile.c:31
+ msgid "Min"
+@@ -3008,7 +3654,7 @@ msgstr "Mín"
+ 
+ #: ../operations/workshop/external/line-profile.c:31
+ msgid "Value at bottom"
+-msgstr ""
++msgstr "Valor en la parte inferior"
+ 
+ #: ../operations/workshop/external/line-profile.c:32
+ msgid "Max"
+@@ -3016,7 +3662,7 @@ msgstr "Máx"
+ 
+ #: ../operations/workshop/external/line-profile.c:32
+ msgid "Value at top"
+-msgstr ""
++msgstr "Valor en la parte superior"
+ 
+ #: ../operations/workshop/external/line-profile.c:178
+ msgid ""
+@@ -3024,6 +3670,9 @@ msgid ""
+ "specified line in the input buffer, plotted in a buffer of the specified "
+ "size."
+ msgstr ""
++"Renderiza los perfiles de luminancia para las componentes verde y azul a lo "
++"largo de la línea especificada del búfer de entrada, dibujada en un búfer "
++"del tamaño especificado."
+ 
+ #: ../operations/workshop/fractal-trace.c:25
+ msgid "Fractal"
+@@ -3033,27 +3682,31 @@ msgstr "Fractal"
+ msgid ""
+ "Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
+ msgstr ""
++"Tipos de fractal que usar. Se puede elegir entre julia o mandelbrot. El "
++"predeterminado es mandelbrot."
+ 
+ #: ../operations/workshop/fractal-trace.c:29
+ msgid "X1 value, position"
+-msgstr ""
++msgstr "valor y posición de X1"
+ 
+ #: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
+ msgid "X2"
+ msgstr "X2"
+ 
+ #: ../operations/workshop/fractal-trace.c:31
+ #: ../operations/workshop/fractal-trace.c:33
+ msgid "X2 value, position"
+-msgstr ""
++msgstr "valor y posición de X2"
+ 
+ #: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
+ msgid "Y2"
+ msgstr "Y2"
+ 
+ #: ../operations/workshop/fractal-trace.c:35
+ msgid "Y2 value, position"
+-msgstr ""
++msgstr "valor y posición de Y2"
+ 
+ #: ../operations/workshop/fractal-trace.c:36
+ msgid "JX"
+@@ -3061,7 +3714,7 @@ msgstr "JX"
+ 
+ #: ../operations/workshop/fractal-trace.c:37
+ msgid "Julia seed X value, position"
+-msgstr ""
++msgstr "Valor y posición del valor X de semilla de Julia"
+ 
+ #: ../operations/workshop/fractal-trace.c:38
+ msgid "JY"
+@@ -3069,109 +3722,98 @@ msgstr "JY"
+ 
+ #: ../operations/workshop/fractal-trace.c:39
+ msgid "Julia seed Y value, position"
+-msgstr ""
++msgstr "Valor y posición del valor Y de semilla de Julia"
+ 
+ #: ../operations/workshop/fractal-trace.c:41
+ msgid "Depth value"
+-msgstr ""
++msgstr "Valor de profundidad"
+ 
+ #: ../operations/workshop/fractal-trace.c:42
+ msgid "Bailout"
+-msgstr ""
++msgstr "Rescate"
+ 
+ #: ../operations/workshop/fractal-trace.c:43
+ msgid "Bailout length"
+-msgstr ""
++msgstr "Longitud del rescate"
+ 
+ #: ../operations/workshop/fractal-trace.c:44
+-msgid "Background"
+-msgstr "Fondo"
++msgid "Abyss policy"
++msgstr "Política del abismo"
+ 
+ #: ../operations/workshop/fractal-trace.c:45
+-msgid ""
+-"Optional parameter to override automatic selection of wrap background. "
+-"Choices are wrap, black, white and transparent."
+-msgstr ""
++msgid "How to deal with pixels outside of the input buffer"
++msgstr "Como trabajar con píxeles fuera del búfer de entrada"
+ 
+-#: ../operations/workshop/fractal-trace.c:171
++#: ../operations/workshop/fractal-trace.c:161
+ msgid "Unsupported fractal type"
+-msgstr ""
++msgstr "Tipo de fractal no soportado"
+ 
+-#: ../operations/workshop/fractal-trace.c:321
++#: ../operations/workshop/fractal-trace.c:248
+ msgid "Performs fractal trace on the image"
+-msgstr ""
++msgstr "Efectúa una traza fractal sobre la imagen"
+ 
+ #: ../operations/workshop/generated/average.c:109
+ msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
+-msgstr ""
++msgstr "Operación de mezcla de imágenes «promedio» (<tt>c = (cA + aB)/2</tt>)"
+ 
+ #: ../operations/workshop/generated/blend-reflect.c:109
+ msgid ""
+ "Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
+ "cB)</tt>)"
+ msgstr ""
++"Operación de mezcla de imágenes «efecto de mezcla» (<tt>c = cB>=1.0?1.0:"
++"cA*cA / (1.0-cB)</tt>)"
+ 
+ #: ../operations/workshop/generated/negation.c:109
+ msgid ""
+ "Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
+ msgstr ""
++"Operación de mezcla de imágenes «negación» (<tt>c = 1.0 - fabs(1.0-cA-cB)</"
++"tt>)"
+ 
+ #: ../operations/workshop/generated/soft-burn.c:109
+ msgid ""
+ "Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
+ "cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
+ msgstr ""
++"Operación de mezcla de imágenes «quemado suave» (<tt>c = (cA+cB<1.0)?"
++"0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
+ 
+ #: ../operations/workshop/generated/soft-dodge.c:109
+ msgid ""
+ "Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
+ "cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
+ msgstr ""
++"Operación de mezcla de imágenes «máscara suave» (<tt>c = (cA+cB<1.0)?"
++"0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
+ 
+ #: ../operations/workshop/generated/subtractive.c:109
+ msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
+-msgstr ""
++msgstr "Operación de mezcla de imágenes «sustractivo» (<tt>c = cA+cB-1.0</tt>)"
+ 
+ #: ../operations/workshop/hstack.c:178
+ msgid ""
+ "Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
+ "\"input\")"
+ msgstr ""
++"Apilar las entradas horizontalmente (en la «salida» «auxiliar» se sitúa a la "
++"derecha de la «entrada»)"
+ 
+ #: ../operations/workshop/kuwahara.c:243
+ msgid "Edge preserving blur"
+-msgstr ""
+-
+-#: ../operations/workshop/linear-gradient.c:24
+-#: ../operations/workshop/radial-gradient.c:24
+-msgid "x1"
+-msgstr "x1"
+-
+-#: ../operations/workshop/linear-gradient.c:25
+-#: ../operations/workshop/radial-gradient.c:25
+-msgid "y1"
+-msgstr "y1"
+-
+-#: ../operations/workshop/linear-gradient.c:26
+-#: ../operations/workshop/radial-gradient.c:26
+-msgid "x2"
+-msgstr "x2"
+-
+-#: ../operations/workshop/linear-gradient.c:27
+-#: ../operations/workshop/radial-gradient.c:27
+-msgid "y2"
+-msgstr "y2"
++msgstr "Desenfoque que preserva los bordes"
+ 
+ #: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "Un extremo del degradado"
++
+ #: ../operations/workshop/linear-gradient.c:31
+-#: ../operations/workshop/radial-gradient.c:29
+-#: ../operations/workshop/radial-gradient.c:31
+-msgid "one end of gradient"
+-msgstr ""
++msgid "The other end of a gradient"
++msgstr "El otro extremo del degradado"
+ 
+-#: ../operations/workshop/linear-gradient.c:137
+-msgid "linear gradient renderer"
+-msgstr ""
++#: ../operations/workshop/linear-gradient.c:136
++msgid "Linear gradient renderer"
++msgstr "Renderizador de degradados lineales"
+ 
+ #: ../operations/workshop/mandelbrot.c:25
+ msgid "Real"
+@@ -3199,39 +3841,28 @@ msgstr "Nivel del agua"
+ 
+ #: ../operations/workshop/mandelbrot.c:32
+ msgid "Maximum number of iterations"
+-msgstr ""
++msgstr "Número máximo de iteraciones"
+ 
+ #: ../operations/workshop/mandelbrot.c:144
+-msgid "Mandelbrot set renderer."
+-msgstr ""
+-
+-#: ../operations/workshop/max-rgb.c:30
+-msgid "Minimal"
+-msgstr ""
+-
+-#: ../operations/workshop/max-rgb.c:31
+-msgid "Hold the minimal values instead of the maximal values"
+-msgstr ""
+-
+-#: ../operations/workshop/max-rgb.c:120
+-msgid "Reduce image to pure red, green, and blue"
+-msgstr ""
++msgid "Mandelbrot set renderer"
++msgstr "Renderizador del conjunto de Mandelbrot"
+ 
+ #: ../operations/workshop/noise-spread.c:30
+ msgid "Horizontal spread amount"
+-msgstr ""
++msgstr "Grado de dispersión horizontal"
+ 
+ #: ../operations/workshop/noise-spread.c:32
+ msgid "Vertical spread amount"
+-msgstr ""
++msgstr "Grado de dispersión vertical"
+ 
+ #: ../operations/workshop/noise-spread.c:172
+-msgid "Spread filter"
+-msgstr ""
++msgid "Noise spread filter"
++msgstr "Filtro de dispersión de ruido"
+ 
+ #: ../operations/workshop/plasma.c:34
+ msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
+ msgstr ""
++"Semilla aleatoria. Pasar -1 implica que la semilla se elige aleatoriamente."
+ 
+ #: ../operations/workshop/plasma.c:35
+ msgid "Turbulence"
+@@ -3239,15 +3870,36 @@ msgstr "Turbulencia"
+ 
+ #: ../operations/workshop/plasma.c:36
+ msgid "The value of the turbulence"
+-msgstr ""
++msgstr "Valor de la turbulencia"
+ 
+-#: ../operations/workshop/plasma.c:388
+-msgid "Performs plasma on the image."
+-msgstr ""
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr "Efectúa un efecto de plasma en la imagen"
+ 
+-#: ../operations/workshop/radial-gradient.c:129
+-msgid "radial gradient renderer"
+-msgstr ""
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Un extremo del degradado"
++
++#: ../operations/workshop/radial-gradient.c:128
++msgid "Radial gradient renderer"
++msgstr "Renderizador de degradado radial"
+ 
+ #: ../operations/workshop/rawbayer-load.c:154
+ msgid ""
+@@ -3256,64 +3908,64 @@ msgid ""
+ "the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
+ "returned 16bit numbers (the pnm loader is apparently buggy)"
+ msgstr ""
++"Cargador de imágenes en bruto, que envuelve a dcraw con tuberías, aporta la "
++"rejilla de bayer en bruto como escala de grises, si el formato de archivo "
++"es .rawbayer usará este cargador en lugar del cargador normal dcraw, si el "
++"formato de archivo es .rawbayerS intercambiará los números de 16 bit "
++"devueltos (aparentemente el cargador de pnm tiene fallos)."
+ 
+ #: ../operations/workshop/red-eye-removal.c:32
+ msgid "The value of the threshold"
+-msgstr ""
++msgstr "El valor del umbral"
+ 
+ #: ../operations/workshop/red-eye-removal.c:132
+-msgid "Performs red-eye-removal on the image."
+-msgstr ""
++msgid "Performs red-eye-removal on the image"
++msgstr "Quita los ojos rojos de la imagen"
+ 
+ #: ../operations/workshop/snn-percentile.c:30
+ msgid "Number of pairs, higher number preserves more acute features"
+-msgstr ""
++msgstr "Número de pares; un número mayor preserva detalles más precisos"
+ 
+ #: ../operations/workshop/snn-percentile.c:32
+-msgid "The percentile to return, the default value 50 is equal to the median."
++msgid "The percentile to return, the default value 50 is equal to the median"
+ msgstr ""
++"Percentil que devolver, el valor predeterminado 50 es igual a la mediana"
+ 
+ #: ../operations/workshop/snn-percentile.c:272
+ msgid ""
+ "Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
+ "Neighbours"
+ msgstr ""
++"Filtro de percentil que resalta los bordes y reduce el ruido, basado en los "
++"vecinos simétricos más próximos"
+ 
+-#: ../operations/workshop/warp.c:26
+-msgid "Strength"
+-msgstr "Fuerza"
+-
+-#: ../operations/workshop/warp.c:27 ../operations/workshop/warp.c:32
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
+ msgid "Effect Strength"
+ msgstr "Efecto de fuerza"
+ 
+-#: ../operations/workshop/warp.c:29
++#: ../operations/workshop/warp.c:38
+ msgid "Effect Size"
+ msgstr "Tamaño del efecto"
+ 
+-#: ../operations/workshop/warp.c:30
+-msgid "Harness"
+-msgstr ""
+-
+-#: ../operations/workshop/warp.c:31
+-msgid "Effect Harness"
+-msgstr ""
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Dureza del efecto"
+ 
+-#: ../operations/workshop/warp.c:32
++#: ../operations/workshop/warp.c:41
+ msgid "Stroke"
+-msgstr ""
++msgstr "Trazo"
+ 
+-#: ../operations/workshop/warp.c:33
++#: ../operations/workshop/warp.c:42
+ msgid "Behavior"
+ msgstr "Comportamiento"
+ 
+-#: ../operations/workshop/warp.c:34
++#: ../operations/workshop/warp.c:43
+ msgid "Behavior of the op"
+-msgstr ""
++msgstr "Comportamiento del operador"
+ 
+-#: ../operations/workshop/warp.c:379
++#: ../operations/workshop/warp.c:386
+ msgid "Compute a relative displacement mapping from a stroke"
+-msgstr ""
++msgstr "Calcular un mapeado de desplazamiento relativo a partir de un trazo"
+ 
+ #: ../operations/workshop/whirl-pinch.c:36
+ msgid "Whirl"
+@@ -3321,7 +3973,7 @@ msgstr "Remolino"
+ 
+ #: ../operations/workshop/whirl-pinch.c:36
+ msgid "Whirl angle (degrees)"
+-msgstr ""
++msgstr "Ángulo de remolino (grados)"
+ 
+ #: ../operations/workshop/whirl-pinch.c:38
+ msgid "Pinch"
+@@ -3329,14 +3981,30 @@ msgstr "Aspiración"
+ 
+ #: ../operations/workshop/whirl-pinch.c:38
+ msgid "Pinch amount"
+-msgstr ""
++msgstr "Grado de pellizcado"
+ 
+ #: ../operations/workshop/whirl-pinch.c:40
+ msgid ""
+ "Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
+ "the way to the corners)"
+ msgstr ""
++"Radio (1.0 el el círculo mayor inscrito en la imagen, y 2.0 llega "
++"completamente hasta las esquinas)"
+ 
+ #: ../operations/workshop/whirl-pinch.c:258
+ msgid "Applies whirling and pinching on the image"
+-msgstr ""
++msgstr "Aplica un arremolinado y pellizcado a la imagen"
++
++#~ msgid "Background"
++#~ msgstr "Fondo"
++
++#~ msgid ""
++#~ "Optional parameter to override automatic selection of wrap background. "
++#~ "Choices are wrap, black, white and transparent."
++#~ msgstr ""
++#~ "Parámetro opcional para sobreescribir la selección automática del ajuste "
++#~ "del plano de fondo. Se puede elegir entre ajustar, negro, blanco y "
++#~ "transparente."
++
++#~ msgid "Global colour saturation factor"
++#~ msgstr "Factor global de saturación de color"
+diff --git a/po/gl.po b/po/gl.po
+new file mode 100644
+index 0000000..21b176f
+--- /dev/null
++++ po/gl.po
+@@ -0,0 +1,3395 @@
++# Galician translation for gegl.
++# Copyright (C) 2012 gegl's COPYRIGHT HOLDER
++# This file is distributed under the same license as the gegl package.
++# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
++# Fran Dieguez <frandieguez at gnome.org>, 2012.
++#
++#: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
++#: ../operations/external/sdl-display.c:27
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl master\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2012-04-24 13:21+0200\n"
++"PO-Revision-Date: 2012-04-24 13:20+0200\n"
++"Last-Translator: Fran Dieguez <frandieguez at gnome.org>\n"
++"Language-Team: Galician <gnome-l10n-gl at gnome.org>\n"
++"Language: gl\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n!=1);\n"
++
++#: ../gegl/gegl-init.c:216
++msgid "babls error tolerance, a value beteen 0.2 and 0.000000001"
++msgstr ""
++
++#: ../gegl/gegl-init.c:221
++msgid "Where GEGL stores it's swap"
++msgstr ""
++
++#: ../gegl/gegl-init.c:226
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr ""
++
++#: ../gegl/gegl-init.c:231
++msgid "Default size of tiles in GeglBuffers"
++msgstr ""
++
++#: ../gegl/gegl-init.c:236
++msgid "The count of pixels to compute simultaneously"
++msgstr ""
++
++#: ../gegl/gegl-init.c:241
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr ""
++
++#: ../gegl/gegl-init.c:246
++msgid "The number of concurrent processing threads to use"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Cargado"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Fallou a carga"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Non cargado"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "Radio de desenfoque"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "Preservación de bordos"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "Cantidade de preservación de bordos"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Radio"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr ""
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Contraste"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27
++msgid "Brightness"
++msgstr "Brillo"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr "Cantidade de incremento de brillo"
++
++#: ../operations/common/brightness-contrast.c:145
++msgid "Changes the light level and contrast."
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "Localización do búfer"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "formato babl"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:127
++msgid "A GEGL buffer destination surface."
++msgstr ""
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Búfer de entrada"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr ""
++
++#: ../operations/common/buffer-source.c:116
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr "Mostras"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr ""
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++
++#: ../operations/common/c2g.c:493
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial  color "
++"differences to perform color-feature preserving grayscale  spatial contrast "
++"enhancement"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Anchura"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "Anchura horizontal para os pixeis das celas"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Altura"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "Anchura vertical das celas en pixeles"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "Desprazamento X"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Desprazamento Y"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:33
++#: ../operations/common/color-to-alpha.c:27 ../operations/common/color.c:24
++#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
++#: ../operations/common/vignette.c:25 ../operations/external/text.c:31
++#: ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Cor"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "Outra cor"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Temperatura intencionada"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:267
++msgid "Allows changing the color temperature of an image."
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:170
++msgid "Performs color-to-alpha on the image."
++msgstr ""
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "Puntos de mostra"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Curva"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr ""
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Radiou 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Radio 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr ""
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr ""
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr ""
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Opacidade"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "Desprazamento horizontal da mostra"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr ""
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr ""
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr ""
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Horizontal"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Vertical"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "Manter sinal"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "Valores de exposición"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr "Sigma do peso"
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distrubtion sigma controlling response contributions"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr ""
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alfa"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Beta"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Saturación"
++
++#: ../operations/common/fattal02.c:41
++msgid "Global color saturation factor"
++msgstr ""
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Ruido"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr "Tipo de fractal"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Esquerda"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Dereita"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Arriba"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Abaixo"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (só Julia)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "Modo de vermello"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "Modo de verde"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "Modo de azul"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "Inversión do vermello"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "Inversión do verde"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "Inversión do azul"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Cores"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Número de cores"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "Tamaño X"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Tamaño Y"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:218
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filtro"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "Ficheiro"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr ""
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr ""
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "Anchura da liña"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr ""
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "Altura da liña"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr ""
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr ""
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr ""
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Nodo"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr ""
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr ""
++
++#: ../operations/common/invert.c:91
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Operación"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr ""
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr ""
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr ""
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Escala"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr ""
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Orixe"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr ""
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr "Principal:"
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Zoom:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr "Bordo:"
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:321
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr ""
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr ""
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr ""
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr ""
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr ""
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr ""
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr ""
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:182
++msgid "Remaps the intensity range of the image"
++msgstr ""
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr ""
++
++#: ../operations/common/load.c:180
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using image magick's convert."
++msgstr ""
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:36
++msgid "Global colour saturation factor"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Detalle"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27
++msgid "Sampler used internaly"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr "Escalado"
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++
++#: ../operations/common/map-relative.c:156
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Número de iteracións"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr ""
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr ""
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr ""
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "Rotación de espello"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr ""
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "Rotación dos resultados"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Espellos"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "Número de espellos a usar"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "Centro X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "Centro Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Ampliación"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr ""
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr "Expandir"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr ""
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:26
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Vermello"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr "Cantidade de vermello"
++
++#: ../operations/common/mono-mixer.c:28
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Verde"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr "Cantidade de verde"
++
++#: ../operations/common/mono-mixer.c:30
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Azul"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr "Cantidade de azul"
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Lonxitude"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Ángulo"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr ""
++
++#: ../operations/common/noise-reduction.c:26 ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Forza"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr ""
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr ""
++
++#: ../operations/common/noise.c:31 ../operations/workshop/cubism.c:34
++#: ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr "Semilla"
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Iteración"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr ""
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr ""
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr ""
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr ""
++
++#: ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr ""
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr "Altura do bloque"
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "Ángulo de desfase"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "Ángulo "
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr "A polares"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "Seleccionar medio"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr ""
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Niveis"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr ""
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr ""
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr ""
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr "Cor que renderizar"
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adapation to colour variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr "Adaptación de luz"
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adapation to light variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++msgstr ""
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr "Amplitude"
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr "Período"
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr ""
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr ""
++
++#: ../operations/common/ripple.c:40 ../operations/common/waves.c:42
++#: ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr ""
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "Tipo de onda"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "Tipo de onda"
++
++#: ../operations/common/ripple.c:169
++msgid "Transform the buffer with a ripple pattern"
++msgstr ""
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr ""
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr ""
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr "Pares"
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Valores"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr "lista de <number>s"
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr ""
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr ""
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr ""
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr ""
++
++#: ../operations/common/threshold.c:25
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr ""
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr "Desv. Est."
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "Foma"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr ""
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr ""
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr ""
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Gamma"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr ""
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "Proporción"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Rotación"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "Ángulo de rotación"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:164
++msgid "Transform the buffer with waves"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Valor"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr ""
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr ""
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "Referenza"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr ""
++
++#: ../operations/core/clone.c:112
++msgid "Clone a buffer"
++msgstr "Clonar un búfer"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Formato de saída"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr ""
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr ""
++
++#: ../operations/core/crop.c:179
++msgid "Crop a buffer"
++msgstr "Recortar un búfer"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr ""
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr ""
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr "Fotograma"
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr "Número de fotograma"
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr ""
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr "Cargador de imaxe JPG"
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Calidade"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr "Suavizado"
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Optimizar"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Progresivo"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Escala de grises"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilon"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Niveis activos"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Rechear cor"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr ""
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr ""
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr ""
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr ""
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr ""
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr ""
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr ""
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr ""
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd"
++msgstr ""
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Transformar"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr ""
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr ""
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr ""
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr "Vecto"
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr ""
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "GdkPixbuf que usar"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr ""
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr ""
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr ""
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Compresión"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr ""
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Profundidade de bits"
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr ""
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr ""
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Formato Raw"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr ""
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr ""
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr "Localización do Pixbuf"
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr "Gardar saída en GdkPixbuf."
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr ""
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr "Ruta ao ficheiro SVG que cargar"
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr ""
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr ""
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:245
++msgid "Load an SVG file using librsvg"
++msgstr ""
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Texto"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr ""
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Familia de tipo de letra"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr ""
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Tamaño"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr ""
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr ""
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr "Axustar anchura"
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr "Xustificación"
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr ""
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr ""
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Ruta"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr "Ruta ao dispositivo v4l"
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "FPS"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr ""
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd"
++msgstr ""
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:258
++msgid "Renders a filled region"
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr ""
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr ""
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr ""
++
++#: ../operations/generated/color-burn.c:117
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/color-dodge.c:117
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/darken.c:115
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/difference.c:115
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr ""
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr ""
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr ""
++
++#: ../operations/generated/exclusion.c:115
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr ""
++
++#: ../operations/generated/hard-light.c:117
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/lighten.c:115
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr ""
++
++#: ../operations/generated/overlay.c:117
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/plus.c:115
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr ""
++
++#: ../operations/generated/screen.c:115
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr ""
++
++#: ../operations/generated/soft-light.c:119
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr ""
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr ""
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr ""
++
++#: ../operations/generated/svg-multiply.c:115
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr ""
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr ""
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr ""
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr ""
++
++#: ../operations/transform/scale.c:26
++msgid "Horizontal scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:28
++msgid "Vertical scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:33
++msgid "Scales the buffer."
++msgstr ""
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:202
++msgid "Origin-x"
++msgstr "Orixe X"
++
++#: ../operations/transform/transform-core.c:203
++msgid "X coordinate of origin"
++msgstr "Coordenada X da orixe"
++
++#: ../operations/transform/transform-core.c:210
++msgid "Origin-y"
++msgstr "Orixe Y"
++
++#: ../operations/transform/transform-core.c:211
++msgid "Y coordinate of origin"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:219
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:225
++#: ../operations/transform/transform-core.c:226
++msgid "Hard edges"
++msgstr "Bordos duros"
++
++#: ../operations/transform/transform-core.c:232
++msgid "Lanczos width"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:233
++msgid "Width of the Lanczos function"
++msgstr ""
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr ""
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr ""
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Translación horizontal"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Translación vertical"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr "Percentíl"
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr "Búfer da caché"
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:103
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Red bits"
++msgstr "Bits vermellos"
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Number of bits for red channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Green bits"
++msgstr "Bits verdes"
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Number of bits for green channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Blue bits"
++msgstr "Bits azuis"
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Number of bits for blue channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Alpha bits"
++msgstr "Bits alfa"
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Number of bits for alpha channel"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:29
++msgid "Dither"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:30
++msgid ""
++"Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
++msgstr ""
++
++#: ../operations/workshop/color-reduction.c:459
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Horario"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr "Cambiar a horario"
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "Desde:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "Até:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Ton"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr "O valor do ton"
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr "O valor da saturación"
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:385
++msgid "Rotate colors on the image"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr "Valor do elemento na posición (1,1)"
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr "Valor do elemento na posición (1,2)"
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr "Valor do elemento na posición (1,3)"
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr "Valor do elemento na posición (1,4)"
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr "Valor do elemento na posición (1,5)"
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr "Valor do elemento na posición (2,1)"
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr "Valor do elemento na posición (2,2)"
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr "Valor do elemento na posición (2,3)"
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr "Valor do elemento na posición (2,4)"
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr "Valor do elemento na posición (2,5)"
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr "Valor do elemento na posición (3,1)"
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr "Valor do elemento na posición (3,2)"
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr "Valor do elemento na posición (3,3)"
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr "Valor do elemento na posición (3,4)"
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr "Valor do elemento na posición (3,5)"
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr "Valor do elemento na posición (4,1)"
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr "Valor do elemento na posición (4,2)"
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr "Valor do elemento na posición (4,3)"
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr "Valor do elemento na posición (4,4)"
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr "Valor do elemento na posición (4,5)"
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr "Valor do elemento na posición (5,1)"
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr "Valor do elemento na posición (5,2)"
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr "Valor do elemento na posición (5,3)"
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr "Valor do elemento na posición (5,4)"
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr "Valor do elemento na posición (5,5)"
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "Normalizar"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "Se normalizar ou non"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "Canle vermella"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "Canle verde"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "Canle azul"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "Canle alfa"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr "Ponderar con alfa"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr "Ponderar con alfta"
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr "Bordo"
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose.Choices are extend, wrap, crop.Default is extend"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "Tamaño do mosaico"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr "Saturación do mosaico"
++
++#: ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Semilla aleatoria"
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr "Tamaño do bloque"
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr "Patrón Bayer"
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++
++#: ../operations/workshop/ditto.c:111
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Azimut"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr "O valor do azimut"
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr "Elevación"
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Profundidade"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr "Profundidade de pixeis"
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Taxa de bits"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr "taxa de bits obxectivo"
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr "fotogramas por segundo"
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr "Script"
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr "Valor do usuario"
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr "Marcador:"
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Cámara:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with majuscules"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "Centro"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr "Modelo vermello a:"
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr "Modelo vermello b:"
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr "Modelo vermello c:"
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr "Modelo vermello d:"
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr "Modelo verde a:"
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr "Modelo verde b:"
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr "Modelo verde c:"
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr "Modelo verde d:"
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr "Modelo azul a:"
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr "Modelo azul b:"
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr "Modelo azul c:"
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr "Modelo azul d:"
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr "Modelo alfa a:"
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr "Modelo alfa a:"
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr "Modelo alfa b:"
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr "Modelo alfa c:"
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr "Modelo alfa d:"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Min"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Máx"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr "Fractal"
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "X1 valor, posición"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "X2 valor, posición"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Y2 valor, posición"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr "Valor da profundidade"
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Background"
++msgstr "Fondo"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid ""
++"Optional parameter to override automatic selection of wrap background. "
++"Choices are wrap, black, white and transparent."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:171
++msgid "Unsupported fractal type"
++msgstr "Tipo de fractal non admitido"
++
++#: ../operations/workshop/fractal-trace.c:321
++msgid "Performs fractal trace on the image"
++msgstr "Realiza un trazado fractal da imaxe"
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr ""
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:137
++msgid "Linear gradient renderer"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "Real"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "Coordenada real"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "Imaxinaria"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Nivel"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Nivel do auga"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr ""
++
++#: ../operations/workshop/max-rgb.c:30
++msgid "Minimal"
++msgstr "Mínima"
++
++#: ../operations/workshop/max-rgb.c:31
++msgid "Hold the minimal values instead of the maximal values"
++msgstr ""
++
++#: ../operations/workshop/max-rgb.c:120
++msgid "Reduce image to pure red, green, and blue"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr ""
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr "Turbulencia"
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Un fin de gradación"
++
++#: ../operations/workshop/radial-gradient.c:129
++msgid "Radial gradient renderer"
++msgstr ""
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr "Forza do efecto"
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr "Tamaño do efecto"
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Dureza do efecto"
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr ""
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Comportamento"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr ""
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "Remuiño"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr "Aspiración"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr "Cantidade de aspiración"
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr "Aplica remuíños e aspiración na imaxe"
+diff --git a/po/it.po b/po/it.po
+new file mode 100644
+index 0000000..b78263e
+--- /dev/null
++++ po/it.po
+@@ -0,0 +1,3520 @@
++# Italian translation for the gegl package.
++# Copyright (C) 2012 Free Software Foundation, Inc.
++# This file is distributed under the same license as the gegl package.
++# Marco Ciampa <ciampix at libero.it>, 2012.
++#
++#: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
++#: ../operations/external/sdl-display.c:27
++msgid ""
++msgstr ""
++"Project-Id-Version: GEGL_0_2_0\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2012-04-25 15:33+0200\n"
++"PO-Revision-Date: 2012-04-25 20:12+0200\n"
++"Last-Translator: Marco Ciampa <ciampix at libero.it>\n"
++"Language-Team: italian <tp at lists.linux.it>\n"
++"Language: italian\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=n>1;\n"
++
++#: ../gegl/gegl-init.c:216
++msgid "babls error tolerance, a value beteen 0.2 and 0.000000001"
++msgstr "tolleranza all'errore di babl, un valore tra 0.2 e 0.000000001"
++
++#: ../gegl/gegl-init.c:221
++msgid "Where GEGL stores it's swap"
++msgstr "Dove GEGL memorizza la propria swap"
++
++#: ../gegl/gegl-init.c:226
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr "Quanta memoria usare (approssimativamente) per la cache delle immagini"
++
++#: ../gegl/gegl-init.c:231
++msgid "Default size of tiles in GeglBuffers"
++msgstr "Dimensione predefinita delle tile in GeglBuffers"
++
++#: ../gegl/gegl-init.c:236
++msgid "The count of pixels to compute simultaneously"
++msgstr "Il numero di pixel da elaborare simultaneamente"
++
++#: ../gegl/gegl-init.c:241
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr "La qualità del rendering, un valore tra 0.0(veloce) e 1.0(riferimento)"
++
++#: ../gegl/gegl-init.c:246
++msgid "The number of concurrent processing threads to use"
++msgstr "Il numero di thread concorrenti da usare"
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr "Modulo '%s' errore di caricamento: %s"
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Errore modulo"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Caricato"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Caricamento fallito"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Non caricato"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "Raggio di sfocamento"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++"Raggio della regione di pixel quadrata (larghezza e altezza saranno "
++"raggio*2+1)."
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "Mantenimento dei bordi"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "Ammontare del mantenimento dei bordi"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++"Un filtro di sfocamento salva bordi che può essere usato per ridurre i "
++"disturbi. È un filtro gaussiano dove il contributo dei pixel adiacenti sono "
++"pesati in base alla differenza di colore con il pixel centrale."
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Raggio"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++"Raggio della regione di pixel quadrata (larghezza e altezza saranno "
++"raggio*2+1)."
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr "Esegue una media di un quadrato di pixel"
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Contrasto"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr "Fattore del campo di scala"
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27
++msgid "Brightness"
++msgstr "Luminosità"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr "Quantità dell'incremento di luminosità"
++
++#: ../operations/common/brightness-contrast.c:145
++msgid "Changes the light level and contrast."
++msgstr "Cambia il livello di luce e di contrasto."
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "Posizione del buffer"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr "La posizione dove memorizzare il buffer di uscita GeglBuffer"
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "formato babl"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++"Il formato babl di GeglBuffer, NULL per usare il formato del buffer in "
++"ingresso"
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:127
++msgid "A GEGL buffer destination surface."
++msgstr "Un buffer di superficie di destinazione GEGL."
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Buffer d'ingresso"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr "Il GeglBuffer da caricare nella pipeline"
++
++#: ../operations/common/buffer-source.c:116
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr "Una sorgente che usa un in-memory GeglBuffer, per uso interno di GEGL."
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++"Tenendo conto di ciò che circonda, questo è il raggio in pixel preso in "
++"considerazione nel decidere la mappa di colori corrispondente ai valori di "
++"grigio"
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr "Campioni"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++"Numero di campioni da effettuare per l'iterazione d'aspetto del campo di "
++"colori"
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr "Iterazioni"
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++"Numero di iterazioni, con un numero elevato si ottengono risultati meno "
++"rumorosi ma ad un alto costo computazionale"
++
++#: ../operations/common/c2g.c:493
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial  color "
++"differences to perform color-feature preserving grayscale  spatial contrast "
++"enhancement"
++msgstr ""
++"Conversione di colori in scala di grigi, usa dei contenitori formati dalle "
++"differenze spaziali di colore per eseguire un aumento di contrasto spaziale "
++"in scala di grigi mantenendo le caratteristiche di colore"
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Larghezza"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "Larghezza orizzontale delle celle di pixel"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Altezza"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "Altezza verticale delle celle di pixel"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "Scostamento X"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "Scostamento orizzontale (dall'origine) per la griglia di partenza"
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Scostamento Y"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "Scostamento verticale (dall'origine) per la griglia di partenza"
++
++#: ../operations/common/checkerboard.c:33
++#: ../operations/common/color-to-alpha.c:27 ../operations/common/color.c:24
++#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
++#: ../operations/common/vignette.c:25 ../operations/external/text.c:31
++#: ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Colore"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr "Uno del colori di cella (predefinito è \"nero\")"
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "Altro colore"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr "L'altro colore di cella (predefinito è \"bianco\")"
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr "Renderizzatore a scacchiera"
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Temperatura originale"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++"Temperatura stimata della sorgente di luce in Kelvin con cui l'immagine è "
++"stata presa."
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Temperatura desiderata"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr "Stima corretta della temperatura della sorgente di luce in Kelvin."
++
++#: ../operations/common/color-temperature.c:267
++msgid "Allows changing the color temperature of an image."
++msgstr "Permette di cambiare la temperatura di colore di un'immagine."
++
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr "Il colore da rendere (predefinito è \"nero\")"
++
++#: ../operations/common/color-to-alpha.c:170
++msgid "Performs color-to-alpha on the image."
++msgstr "Esegue un'operazione colore-ad-alfa sull'immagine."
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++"Crea un buffer riempito interamente del colore specificato e lo ritaglia per "
++"ridurne le dimensioni."
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "Punti di campionamento"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr "Numero di punti di campionamento della curva. 0 per il calcolo esatto."
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Curva"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr "La curva di contrasto."
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr "Regola il contrasto dell'immagine secondo una curva."
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Raggio 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Raggio 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr ""
++"Esegue un rilievo bordi basandosi sulla differenza di due sfocature "
++"gaussiane."
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr "Tile da dare alla finestra di uscita"
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr "Mostra il buffer di ingresso in una finestra."
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Opacità"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "Scostamento orizzontale dell'ombra"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr "Scostamento verticale dell'ombra"
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Crea un effetto di proiezione ombra nel buffer in ingresso"
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr "Rilevamento bordi ad alta risoluzione"
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Orizzontale"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Verticale"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "Mantieni il segnale"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr "Speciale rilevamento bordi direzione-dipendente"
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "Valori di esposizione"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr "Brillantezza relativa per ogni esposizione in EV"
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr "Bit di discretizzazione"
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr "Log2 dei passi di discretizzazione della sorgente"
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr "Peso sigma"
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distrubtion sigma controlling response contributions"
++msgstr ""
++"Peso dei contributi alla risposta della distribuzione sigma controllata"
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr "Combina le esposizioni di più scene in un buffer a vasto campo"
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alfa"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr "Soglia del gradiente per il miglioramento dei dettagli"
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Beta"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr "Forza del miglioramento del dettaglio locale"
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Saturazione"
++
++#: ../operations/common/fattal02.c:41
++msgid "Global color saturation factor"
++msgstr "Fattore globale di saturazione del colore"
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Disturbo"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr "Soglia gradiente per abbassare l'aumento del dettaglio"
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adattare un'immagine, che potrebbe avere un elevato campo di dinamica, per "
++"una presentazione usando un campo di dinamica ridotto. Questo operatore "
++"attenua la magnitudo dei gradienti locali dell'immagine, producendo "
++"luminanza nel campo 0.0-1.0 "
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr "Tipo di frattale"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr "Tipo di un frattale"
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Sistra"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Destra"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Cima"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Fondo"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (solo Julia)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr "CY (solo Julia)"
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr "Stiramento rosso"
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr "Fattore di stiramento rosso"
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr "Stiramento verde"
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr "Fattore di stiramento verde"
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr "Stiramento blu"
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr "Fattore di stiramento blu"
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "Modalità rosso"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Modalità di applicazione del rosso (0:SEN; 1:COS; 2:NIENTE)"
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "Modalità verde"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Modalità di applicazione del verde (0:SEN; 1:COS; 2:NIENTE)"
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "Modalità blu"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Modalità di applicazione del blu (0:SEN; 1:COS; 2:NIENTE)"
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "Inversione rosso"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "Inversione verde"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "Inversione blu"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Colori"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Numero di colori"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr "Smussamento loglog"
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr "Usa lo smussamento loglog"
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr "Esploratore frattale"
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "Dimensione X"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++"Deviazione standard dell'asse orizzontale (moltiplica per ~2 per ottenere il "
++"raggio)."
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Dimensione Y"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++"Deviazione standard dell'asse verticale (moltiplica per ~2 per ottenere il "
++"raggio)."
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:218
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filtro"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++"Parametro opzionale per avere la precedenza sulla selezione automatica del "
++"filtro di sfocamento. Le scelte possibili sono fir, iir, auto"
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++"Esegue una media dei pixel adiacenti con la distribuzione normale come peso"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "File"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr "Percorso del file GeglBuffer da caricare."
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr "Caricatore file GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr "Percorso file su cui scrivere il GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr "Scrittore file GeglBuffer."
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr "Trasforma l'immagine in scala di grigi"
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "Larghezza linee"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr "Larghezza linee della griglia in pixel"
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "Altezza linee"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr "Altezza linee della griglia in pixel"
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr "Colore delle linee della griglia"
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr "Disegnatore di griglie"
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Nodo"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr "Nodo GEGL da analizzare"
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr "Visualizzatore grafo GEGL."
++
++#: ../operations/common/invert.c:91
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++"Inverte le componenti (eccetto alfa), il risultato è l'immagine "
++"corrispondente \"negativa\"."
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Operazione"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr "Operazione composita da usare"
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr "Posizione orizzontale"
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr "Posizione verticale"
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Scala"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr "Dimensione scala 1:1"
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Sorgente"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr "File dati sorgente (png, jpg, raw, svg, bmp, tif, ...)"
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr "Un livello nel senso tradizionale"
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr "Principale:"
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr "Valore principale di distorsione"
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Zoom:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr "Spigolo:"
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr "Valore spigolo di distorsione"
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr "Illumina:"
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr "Illumina l'immagine"
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr "Spostamento X:"
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr "Spostamento orizzontale"
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr "Spostamento Y:"
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr "Spostamento verticale"
++
++#: ../operations/common/lens-distortion.c:321
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr ""
++"Copia le immagini eseguendo una correzione ad una distorsione da lenti."
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr "Ingresso basso"
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr "Livello di luminanza in ingresso che diventa il più basso"
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr "Ingresso alto"
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr "Livello di luminanza di ingresso che diventa il più alto"
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr "Uscita bassa"
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr "Livello di luminanza più bassa in uscita"
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr "Uscita alta"
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr "Livello di luminanza più alta in uscita"
++
++#: ../operations/common/levels.c:182
++msgid "Remaps the intensity range of the image"
++msgstr "Rimappa il campo di intensità dell'immagine"
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr "Percorso del file da caricare."
++
++#: ../operations/common/load.c:180
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using image magick's convert."
++msgstr ""
++"Caricatore file multiuso; usa altri gestori nativi o, in mancanza di "
++"alternativa, usa il comando convert di ImageMagick."
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr "Incapsulatore di ImageMagick usando l'op. png"
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr "L'ammontare della compressione del contrasto"
++
++#: ../operations/common/mantiuk06.c:36
++msgid "Global colour saturation factor"
++msgstr "Fattore globale di saturazione del colore"
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Dettaglio"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr "Livello di enfasi sui dettagli del gradiente immagine"
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adatta un'immagine che può avere ad alta dinamica, a presentazioni a bassa "
++"dinamica. Quest'operatore limita il contrasto tramite più frequenze "
++"spaziali, producendo una luminanza nel campo 0.0-1.0"
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr "Campionatore"
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27
++msgid "Sampler used internaly"
++msgstr "Campionatore da usare internamente"
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++"campiona l'ingresso con un buffer ausiliario che contiene le coordinate "
++"assolute della sorgente"
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr "Scalatura"
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++"Fattore di scala di piazzamento, indica a quanto dovrà corrispondere il "
++"valore di mappatura relativo 1.0 di estensione spaziale del piazzamento."
++
++#: ../operations/common/map-relative.c:156
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++"campiona l'ingresso con un buffer ausiliario che contiene le coordinate "
++"relative della sorgente"
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Numero di iterazioni"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++"Dati una qualsiasi tri-mappa fornita dall'utente ed una immagine in "
++"ingresso, crea una superficie alfa in primo piano. Imposta il bianco come "
++"primo piano, nero per lo sfondo della tri-mappa. Ogni altro particolare "
++"viene trattato come sconosciuto e riempito."
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr "Umidità"
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr "Il valore rappresenta il contributo al nuovo del quadro passato."
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr "Accumulo di sfocatura movimento"
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "Rotazione speculare"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr "Rotazione applicata alle copie speculari"
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "Rotazione risultante"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr "Rotazione applicata ai risultati"
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Specchi"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "Numero di specchi da usare"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr "Spostamento X del risultato della specchiatura"
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr "Spostamento Y del risultato della specchiatura"
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "Centro X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr "Rapporto assi X per il centro della specchiatura"
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "Centro Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr "Rapporto assi Y per il centro della specchiatura"
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr "Regolazione X"
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr "Rapporto asse X per la regolazione dell'espansione dello specchio"
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr "Regolazione Y"
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr "Rapporto asse Y per la regolazione dell'espansione dello specchio"
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Zoom"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr "Fattore di scale per rendere la dimensione di rendering più grande"
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr "Espandi"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr "Ritaglia il risultato"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr "Ritaglia il risultato alla dimensione in ingresso"
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr "A capo l'ingresso"
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr "Riempimento completo area di uscita"
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr "Applica l'effetto specchio all'immagine."
++
++#: ../operations/common/mono-mixer.c:26
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Rosso"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr "Ammontare del rosso"
++
++#: ../operations/common/mono-mixer.c:28
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Verde"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr "Ammontare del verde"
++
++#: ../operations/common/mono-mixer.c:30
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Blu"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr "Ammontare del blu"
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr "Mixer canale monocromatico"
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Lunghezza"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr "Lunghezza della sfocatura in pixel"
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Angolo"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr "Angolo della sfocatura in gradi"
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr "Sfocatura lineare di movimento"
++
++#: ../operations/common/noise-reduction.c:26 ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Forza"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "Quante iterazioni far eseguire all'algoritmo"
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Scostamento Z"
++
++#: ../operations/common/noise.c:31 ../operations/workshop/cubism.c:34
++#: ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr "Seme"
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Iterazione"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr "Generatore di disturbi Perlin"
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++"Il valore di opacità generale viene sempre usato in cima all'opzionale "
++"buffer di ingresso ausiliario."
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++"Pesa l'opacità dell'ingresso sia nel valore dell'ingresso ausiliario che "
++"nella proprietà di valore globale."
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr "un file GeglBuffer su disco da aprire"
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr "Una sorgente che usa un GeglBuffer su disco."
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr "Operazione sopra Porter Duff (d = cA + cB * (1 - aA))"
++
++#: ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Larghezza blocco"
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr "Larghezza del blocco in pixel"
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr "Altezza blocco"
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr "Altezza del blocco in pixel"
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr "Semplifica un'immagine in un insieme di riquadri di colore pieno"
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr "Profondità cerchio in percentuale"
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "Angolo di spostamento"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "Angolo di spostamento."
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr "Mappa all'indietro"
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr "Parti dalla destra invece che dalla sinistra"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr "Mappa dall'alto"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr "Mette la riga in cima nel mezzo e la riga in fondo nella parte esterna"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr "A polare"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr "Mappa l'immagine in un cerchio"
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr "Punto di origine delle coordinate polari"
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "Prendi il mezzo"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr "Fa in modo che il punto di origine sia il punto di mezzo"
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr "Usa le coordinate polari sull'immagine."
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Livelli"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr "numero di livelli per componente"
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr ""
++"Riduce il numero di livelli in ogni componente di colore dell'immagine."
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr ""
++"Caricatore immagini in formato RAW, si interfaccia a dcraw tramite pipe."
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr "Estensione orizzontale"
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr "Estensione verticale"
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr "Colore da renderizzare"
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr "Una sorgente rettangolare di dimensione fissa di colore pieno"
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr "Luminosità complessiva dell'immagine"
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr "Adattamento cromatico"
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adapation to colour variation across the image"
++msgstr "Adattamento alle variazioni di colore attraverso l'immagine"
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr "Adattamento di luce"
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adapation to light variation across the image"
++msgstr "Adattamento alle variazioni di luce attraverso l'immagine"
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++msgstr ""
++"Adatta un'immagine, che può essere ad alta dinamica, ad una presentazione a "
++"dinamica ridotta. Questo è un efficiente operatore globale derivato da "
++"semplici osservazioni fisiologiche, che produce una luminanza nel campo "
++"0.0-1.0"
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++"stira i componenti di pixel individualmente basandosi su contenitori di "
++"luminanza"
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr "Ampiezza"
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr "Ampiezza dell'ondulazione"
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr "Periodo"
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr "Periodo dell'ondulazione"
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr "Spostamento di fase"
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr "Angolo in gradi"
++
++#: ../operations/common/ripple.c:40 ../operations/common/waves.c:42
++#: ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Campionatore usato internamente"
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "Tipo di onda"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "Tipologia di onda"
++
++#: ../operations/common/ripple.c:169
++msgid "Transform the buffer with a ripple pattern"
++msgstr "Trasforma il buffer con un motivo ondulatorio"
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr "Percorso del file da salvare."
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr "Salvatore di file multiuso, che utilizza altri gestori nativi."
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr "Coppie"
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr ""
++"Numero di coppie; numeri elevari preservano le caratteristiche più acute"
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Filtro sfocatura a riduzione del rumore e miglioramento dei bordi basato su "
++"Symmetric Nearest Neighbours"
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++"Vicinato preso in considerazione, per il miglioramento i valori ideali sono "
++"vicini al lunghezza maggiore dell'immagine; aumentando questo valore si "
++"aumentano i tempi di esecuzione"
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++"Numero di iterazioni, un alto numero di iterazioni produce un'immagine meno "
++"disturbata ad un maggiore costo computazionale"
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr "Sviluppo tipo retinex spazio temporale con campionamento stocastico"
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++"Scala i componenti del buffer affinché rimangano nel campo 0.0-1.0. Ciò "
++"migliora le immagini che fanno cattivo uso del contrasto disponibile (poco "
++"contrasto, immagine molto scura o molto chiara)."
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Valori"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr "elenco di <numeri>"
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr "Operazione matrice di colori SVG svg_huerotate"
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr "Operazione matrice di colori SVG svg_luminancetoalpha"
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr "Operazione matrice di colori SVG svg_matrix"
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr "Operazione matrice di colori SVG svg_saturate"
++
++#: ../operations/common/threshold.c:25
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Soglia"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++"Livello di soglia globale (usato quando non c'è un buffer di ingresso "
++"ausiliario)."
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr "Applica una soglia all'immagine  per produrre un'immagine bianco/nera basandosi sui valori globali impostati nelle proprietà del valore o per pixel dall'ingresso ausiliare."
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr "Dev. Std."
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr "Deviazione standard (fattore di scala spaziale)"
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr "Scala, forza dell'effetto"
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false match-bands around edges)"
++msgstr ""
++"Esegue una maschera di contrasto sul buffer di ingresso (aumenta il "
++"contrasto dell'immagine aggiungendo false bande intorno ai bordi)"
++
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++"Inverte solo il componente valore, il risultato è l'immagine corrispondente "
++"\"invertita\"."
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "Forma"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "Forma da usare: 0=cerchio 1=rombo 2=quadrato"
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++"Valore predefinito \"nero\"; si può usare la trasparenza per cancellare "
++"porzioni dell'immagine"
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr ""
++"Quanto deve essere lontano l'effetto vignettatura dalla metà della diagonale "
++"dell'immagine"
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr "Morbidezza"
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Gamma"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr "Linearità caduta"
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "Proporzione"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr "Quanto si è vicini alle proporzioni dell'immagine"
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr "Spremi"
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr "Rapporto dimensioni da usare, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = inf:1, ciò viene applicato dopo aver preso in considerazione le proporzioni, per usare direttamente il rapporto di schiacciamento come proporzioni, impostandole a 0.0."
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr "Centro orizzontale della vignettatura"
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr "Centro verticale della vignettatura"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Rotazione"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "Angolo di rotazione"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr "Un'operazione di vignettatura applicata all'immagine. Simula la diminuzione di luminanza e altri effetti particolari ai bordi, un fenomeno tipico dell'esposizione delle vecchie pellicole analogiche."
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr "Coordinata X del centro delle onde"
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr "Coordinata Y del centro delle onde"
++
++#: ../operations/common/waves.c:164
++msgid "Transform the buffer with waves"
++msgstr "Trasforma il buffer con onde"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Valore"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr "valore globale usato se aux non contiene dati"
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr "fonde due immagini usando i valori alfa come pesi"
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr "Scrive su un GeglBuffer esistente"
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "Riferimento"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr "Il riferimento ID usato come ingresso (per usarlo in XML)"
++
++#: ../operations/core/clone.c:112
++msgid "Clone a buffer"
++msgstr "Clona un buffer"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Formato di uscita"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr "Stringa di formato dell'uscita di Babl"
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr "Conversione dei dati nel formato specificato"
++
++#: ../operations/core/crop.c:179
++msgid "Crop a buffer"
++msgstr "Ritaglia un buffer"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr "Nessuna operazione (può essere usata come un punto di diramazione)"
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Percorso del file da caricare"
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr "Quadro"
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr "Numero di quadro"
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr "Importatore quadro video FFmpeg"
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Formato immagine JPEG 2000 conosciuto in \"%s\""
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "Impossibile aprire l'immagine JPEG 2000 in \"%s\""
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr "Impossibile creare un profilo colore di uscita per \"%s\""
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++"Impossibile convertire l'immagine nello spazio di colore sRGB mentre si "
++"elabora \"%s\""
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr "File non-RGB JPEG 2000 non supportato con %d componenti in \"%s\""
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "File JPEG 2000 non supportato con profondità di colore %d in \"%s\""
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr "I componenti nell'immagine in ingresso \"%s\" non corrispondono"
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr "Uno o più componenti R, G, o B sono mancanti da \"%s\""
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr "Uno o più componenti R, G o B hanno dati con segno in \"%s\""
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr "Errore durante la lettura della riga %d del componente %d da \"%s\""
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr "Caricatore immagini JPEG 2000"
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr "Caricatore immagini JPG"
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr "Percorso e nome file dell'obiettivo, usare \"-\" per stdout"
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Qualità"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr "Qualità compressione JPEG (tra 1 e 100)"
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr "Levigatura"
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr "Fattore di levigatura da 1 a 100; 0 disabilita la levigatura"
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Ottimizza"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr "Usa tabelle di Huffman ottimizzate"
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Progressive"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr "Crea immagini JPEG progressive"
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Scala di grigi"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr "Crea una immagine in scala di grigi (monocromatica)"
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++"Salvatore di immagini JPEG (passa il buffer, salva come effetto collaterale)"
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilon"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Registrazione della pesatura errori"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Raggio della finestra di trattamento"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr "Soglia alfa per l'elaborazione multilivello"
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr "Fattore di influenza trimap"
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr "Numero di livelli sottocampionati da usare"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Livelli attivi"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr "Numero di livelli per ottenere la soluzione"
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr "Data una tri-mappa qualsiasi fornita dall'utente e un'immagine di ingresso, crea una mat. alfa di primo piano. Imposta il bianco come selezionato, nero come non selezionato, per la tri-mappa."
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Colore di riempimento"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++"Tinta da usare per il riempimento, usare 0 opacità per disabilitare il "
++"riempimento"
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr "Colore delineatura"
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr "Tinta da usare per la delineatura"
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr "Spessore delineatura"
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr "Lo spessore del pennello usato per delineare un percorso"
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr "Opacità delineatura"
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr "L'opacità del tratto, si noti, non si comporta come l'SVG dato che, al momento, la delineatura viene effettuata usando lo strumento aerografo."
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "Durezza"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr "Durezza del pennello, 0.0 per un pennello morbido, 1.0 per uno duro"
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr "Regola di riempimento"
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd"
++msgstr "Comendeterminare cosa riempire (nonzero|paridispari"
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Trasforma"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr "Descrizione dello stile SVG della trasformazione"
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr "Riempimento opacità"
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr "Il riempimento opacità da usare"
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr "Vettore"
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr "Un GeglVector che rappresenta il percorso del tratto"
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr "Renderizza il tratto di un pennello"
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "GdkPixbuf da usare"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr "Usa il GdkPixbuf posizionato alla locazione di memoria in <em>pixbuf</em>."
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr "Caricatore immagini PNG."
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr "Nome e percorso file obiettivo, usare \"-\" per lo stdout."
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Compressione"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr "Livello di compressione PNG da 1 a 9"
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Profondità di bit"
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr "8 e 16 sono tra i valori attualmente accettati."
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++"Salvatore immagini PNG (passa il buffer, salva come effetto collaterale)."
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr "Caricatore immagini PPM."
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Formato RAW"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr "Salvatore immagini RGBE (formato radianza HDR)"
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr "Caricatore immagini RGBE (formato radianza HDR)"
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr "Salvatore di immagini RGBE (formato radianza HDR)"
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr "Posizione pixbuf"
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr "La posizione dove memorizzare il risultato di GdkPixbuf."
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr "Salva il risultato in un GdkPixbuf."
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr "Icona da usare per la finestra di uscita"
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr "Mostra il buffer in ingresso in una finestra SDL (limitata ad un solo processo di visualizzazione, a causa di problemi implementativi di SDL)."
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr "Percorso del file SVG da caricare"
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr "Larghezza dell'immagine renderizzata"
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr "Altezza dell'immagine renderizzata"
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:245
++msgid "Load an SVG file using librsvg"
++msgstr "Carica un file SVG usando librsvg"
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Testo"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr "Stringa da mostrare (utf8)"
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Famiglia del carattere"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr "Famiglia del carattere (utf8)"
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Dimensione"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr "Dimensione approssimata dell'altezza del testo in pixel."
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr "Colore del testo (il valore predefinito è \"bianco\")"
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr "Larghezza avvolgimento"
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr "Imposta la larghezza in pixel alla quale le linee lunghe vengoro riavvolte su sé stesse. Usare -1 per disabilitare l'avvolgimento."
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr "Giustificazione"
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr "Allineamento del testo su più linee (0=sinistra, 1=Centro, 2=destra)"
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr "Larghezza renderizzazione in pixel. (sola lettura)"
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr "Altezza renderizzazione in pixel. (sola lettura)"
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr "Mostra una stringa di testo usando pango e cairo."
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Percorso"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr "Percorso per il dispositivo v4l"
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++"attuale numero di quadri, può essere cambiato per innescare la ricarica "
++"dell'immagine."
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "FPS"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr "l'autoinnesco la ricarica molte volte al secondo."
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr "Ingresso video4Linux, webcam, framegrabber e dispositivi similari."
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr "Colore della tinta da usare per il riempimento."
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr "Il riempimento opacità da usare."
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr "Regola di riempimento."
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd"
++msgstr "home determinare cosa riempire (nonzero|paridispari)"
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr "descrizione della trasformazione stile svg."
++
++#: ../operations/external/vector-fill.c:258
++msgid "Renders a filled region"
++msgstr "Produce una regione riempita"
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr "Colore della tinta da usare per la delineatura."
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr "Lo spessore del pennello usato per la delineatura del tracciato."
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr "L'opacità del tratto, si noti, non si comporta come l'SVG dato che, al momento, la delineatura viene effettuata tramite lo strumento aerografo."
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr "Ottiene la delineatura di un vettoriale"
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr "Operazione matematica somma (c = c + valore)"
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr "Operazione pulitura Porter Duff (d = 0.0f)"
++
++#: ../operations/generated/color-burn.c:117
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr "Operazione fusione SVG bruciatura-colore (<code>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++
++#: ../operations/generated/color-dodge.c:117
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operazione fusione SVG schermatura-colore (<code>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/darken.c:115
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr "Operazione fusione SVG scurisci (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/difference.c:115
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr "Operazione fusione SVG differenza (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</code>)"
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr "Operazione matematica dividi (c = valore==0.0f?0.0f:c/valore)"
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr "Operazione Porter Duff dst-atop (d = cB * aA + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr "Operazione Porter Duff dst-in (d = cB * aA)"
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr "Operazione Porter Duff dst-out (d = cB * (1.0f - aA))"
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr "Operazione Porter Duff dst-over (d = cB + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr "Operazione Porter Duff dst (d = cB)"
++
++#: ../operations/generated/exclusion.c:115
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operazione di fusione SVG esclusione (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr "Operazione matematica gamma (c = powf (c, valore))"
++
++#: ../operations/generated/hard-light.c:117
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operazione di fusione SVG \"luce dura\" (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/lighten.c:115
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr "Operazione di fusione SVG \"illumina\" (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr "Operazione matematica moltiplica (c = c * valore)"
++
++#: ../operations/generated/overlay.c:117
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operazione di fusione SVG \"rivestimento\" (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/plus.c:115
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr "Operazione di fusione SVG \"più\" (<code>d = cA + cB</code>)"
++
++#: ../operations/generated/screen.c:115
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr "Operazione di fusione SVG \"schermo\" (<code>d = cA + cB - cA * cB</code>)"
++
++#: ../operations/generated/soft-light.c:119
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operazione di fusione SVG \"luce morbida\" (<code>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr "Operazione Porter Duff src-atop (d = cA * aB + cB * (1.0f - aA))"
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr "Operazione Porter Duff src-in (d = cA * aB)"
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr "Operazione Porter Duff src-out (d = cA * (1.0f - aB))"
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr "Operazione Porter Duff src-over (d = cA + cB * (1.0f - aA))"
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr "Operazione Porter Duff src (d = cA)"
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr "Operazione matematica sottrai (c = c - valore)"
++
++#: ../operations/generated/svg-multiply.c:115
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr "Operazione di fusione SVG \"moltiplica\" (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr "Operazione Porter Duff xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr "Componente X della direzione del vettore"
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr "Componente Y della direzione del vettore"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Angolo di rotazione (orario)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Ruota il buffer attorno all'origine specificata."
++
++#: ../operations/transform/scale.c:26
++msgid "Horizontal scale factor"
++msgstr "Fattore di scala orizzontale"
++
++#: ../operations/transform/scale.c:28
++msgid "Vertical scale factor"
++msgstr "Fattore di scala verticale"
++
++#: ../operations/transform/scale.c:33
++msgid "Scales the buffer."
++msgstr "Scala il buffer."
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Quantità dell'inclinazione orizzontale"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Quantità dell'inclinazione verticale"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Inclina il buffer"
++
++#: ../operations/transform/transform-core.c:202
++msgid "Origin-x"
++msgstr "X origine"
++
++#: ../operations/transform/transform-core.c:203
++msgid "X coordinate of origin"
++msgstr "Coordinata X dell'origine"
++
++#: ../operations/transform/transform-core.c:210
++msgid "Origin-y"
++msgstr "Y origine"
++
++#: ../operations/transform/transform-core.c:211
++msgid "Y coordinate of origin"
++msgstr "Coordinata Y dell'origine"
++
++#: ../operations/transform/transform-core.c:219
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Tipo filtro (più vicino, lineare, lanczos, cubico, lohalo)"
++
++#: ../operations/transform/transform-core.c:225
++#: ../operations/transform/transform-core.c:226
++msgid "Hard edges"
++msgstr "Bordi netti"
++
++#: ../operations/transform/transform-core.c:232
++msgid "Lanczos width"
++msgstr "Larghezza Lanczos"
++
++#: ../operations/transform/transform-core.c:233
++msgid "Width of the Lanczos function"
++msgstr "Larghezza della funzione Lanczos"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Stringa di trasformazione"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr "Trasforma il gruppo (usato da svg)."
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Traslazione orizzontale"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Traslazione verticale"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr "Riposiziona il buffer (con precisione subpixel), se le coordinate intere sono passate da una scorciatoia senza usare il ricampionamento"
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr "Raggio della regione pixel quadrata (larghezza e altezza saranno raggio*2+1)"
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr "Imposta il pixel obiettivo al valore massimo trovato in un quadrato circostante il pixel stesso"
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr "Imposta il pixel obiettivo al valore minimo trovato in un quadrato circostante il pixel stesso"
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr "Percentile"
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr "La percentile da calcolare, il valore predefinito è 50, che corrisponde ad un filtro mediano"
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr "Imposta il pixel obiettivo al colore corrispondente ad una data percentile quando i colori sono ordinati per luminanza"
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr "Cache buffer"
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr "Il GeglBuffer dove viene effettato il caching"
++
++#: ../operations/workshop/buffer-cache.c:103
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr "Memorizza temporaneamente il buffer in ingresso internamente; i processi successivi utilizzeranno questo buffer come ingresso."
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Red bits"
++msgstr "Bit rossi"
++
++#: ../operations/workshop/color-reduction.c:25
++msgid "Number of bits for red channel"
++msgstr "Numero di bit del canale rosso"
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Green bits"
++msgstr "Bit verdi"
++
++#: ../operations/workshop/color-reduction.c:26
++msgid "Number of bits for green channel"
++msgstr "Numero di bit del canale verde"
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Blue bits"
++msgstr "Bit blu"
++
++#: ../operations/workshop/color-reduction.c:27
++msgid "Number of bits for blue channel"
++msgstr "Numero di bit del canale blu"
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Alpha bits"
++msgstr "Bit alfa"
++
++#: ../operations/workshop/color-reduction.c:28
++msgid "Number of bits for alpha channel"
++msgstr "Numero di bit del canale alfa"
++
++#: ../operations/workshop/color-reduction.c:29
++msgid "Dither"
++msgstr "Dither"
++
++#: ../operations/workshop/color-reduction.c:30
++msgid ""
++"Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
++msgstr "Strategia del dithering (nessuno, casuale, covariante-casuale, Bayer, Floyd-Steinberg)"
++
++#: ../operations/workshop/color-reduction.c:459
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr "Riduce il numero di bit per canale (colore e alfa), con dithering opzionale"
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Senso orario"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr "Passa a senso orario"
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "Da:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr "Angolo iniziale della rotazione del colore"
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "A:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr "Angolo finale della rotazione del colore"
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr "Scegliere in caso di immagini in scala di grigi"
++
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Tonalità"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr "Il valore della tonalità"
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr "Il valore della saturazione"
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr "Cambia/elabora a questo"
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr "Il valore della soglia del grigio"
++
++#: ../operations/workshop/color-rotate.c:385
++msgid "Rotate colors on the image"
++msgstr "Ruota i colori dell'immagine"
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr "Valore dell'elemento alla posizione (1,1)"
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr "Valore dell'elemento alla posizione (1,2)"
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr "Valore dell'elemento alla posizione (1,3)"
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr "Valore dell'elemento alla posizione (1,4)"
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr "Valore dell'elemento alla posizione (1,5)"
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr "Valore dell'elemento alla posizione (2,1)"
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr "Valore dell'elemento alla posizione (2,2)"
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr "Valore dell'elemento alla posizione (2,3)"
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr "Valore dell'elemento alla posizione (2,4)"
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr "Valore dell'elemento alla posizione (2,5)"
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr "Valore dell'elemento alla posizione (3,1)"
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr "Valore dell'elemento alla posizione (3,2)"
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr "Valore dell'elemento alla posizione (3,3)"
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr "Valore dell'elemento alla posizione (3,4)"
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr "Valore dell'elemento alla posizione (3,5)"
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr "Valore dell'elemento alla posizione (4,1)"
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr "Valore dell'elemento alla posizione (4,2)"
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr "Valore dell'elemento alla posizione (4,3)"
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr "Valore dell'elemento alla posizione (4,4)"
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr "Valore dell'elemento alla posizione (4,5)"
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr "Valore dell'elemento alla posizione (5,1)"
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr "Valore dell'elemento alla posizione (5,2)"
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr "Valore dell'elemento alla posizione (5,3)"
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr "Valore dell'elemento alla posizione (5,4)"
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr "Valore dell'elemento alla posizione (5,5)"
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr "Divisore:"
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr "Il valore del divisore"
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr "Spostamento:"
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr "Il valore dello spostamento"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "Normalizza"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "Normalizza o no"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "Canale del rosso"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "Canale del verde"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "Canale del blu"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "Canale alfa"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr "Peso-alfa"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr "Peso alfa"
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr "Bordo"
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose.Choices are extend, wrap, crop.Default is extend"
++msgstr ""
++"Tipo di bordo da scegliere. Le possibilità sono esteso, avvolto o "
++"ritagliato. Il valore predefinito è esteso"
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr "Crea l'immagine impostando manualmente la matrice di convoluzione"
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "Dimensione della mattonella"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr "Saturazione della mattonella"
++
++#: ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Seme casuale"
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr "Un filtro che in qualche modo somiglia allo stile di pittura cubista"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "Pari/Dispari"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr "Mantieni i campi pari/dispari"
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr "Orizzontale/Verticale"
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr "Scegli orizzontale o verticale"
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr "Dimensione blocco"
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr "Dimensione del blocco del deinterlacciamento righe/colonne"
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr "Deinterlaccia un'immagine"
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr "Motivo Bayer"
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++"Viene usato il motivo Bayer, 0 sembra funzionare bene per i file Nikon, 2 "
++"per i file Fuji."
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++"Esegue una demosaicizzazione scala di grigi a colore, usando la "
++"interpolazione bimediana."
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++"Esegue una semplice demosaicizzazione da scala di grigi a colore di "
++"un'immagine, senza interpolazione."
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++"Il percentile da calcolare, il valore predefinito è 50, che corrisponde ad "
++"un filtro mediano."
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++"Imposta il pixel obiettivo al colore corrispondente al dato percentile "
++"quando i colori sono ordinati per luminanza."
++
++#: ../operations/workshop/ditto.c:111
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++"Operazione di test per fare una mappa 1:1 dell'ingresso sull'uscita, durante "
++"il campionamento"
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Azimut"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr "Il valore dell'azimut"
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr "Elevazione"
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr "Il valore dell'elevazione"
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Profondità"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr "Profondità di pixel"
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++"Parametro opzionale per prevaricare la selezione automatica del filtro "
++"rilievo. Le scelte sono: rilievo e mappa-sfocatura"
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr "Simula l'effetto goffratura sull'immagine"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Bitrate"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr "bitrate dell'obiettivo"
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr "quadri al secondo"
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr "Ricezione uscita video FFmpeg"
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr "Script"
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr "Lo script lua contenente l'implementazione di questa operazione."
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr "uno script lua memorizzato su disco che implementa un'operazione."
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr "Valore utente"
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr "(appare nella variabile globale \"user_value\" in lua."
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++"Una implementazione proxy di un filtro/compositore di uso generale per il "
++"linguaggio di programmazione lua."
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr "Creatore:"
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr "Scrive il marcatore lente correttamente"
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Apparecchio:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr "Scrivere il nome dell'apparecchio correttamente "
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr "Obiettivo:"
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with majuscules"
++msgstr "Scrivere il modello dell'obiettivo con le maiuscole"
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr "Focale dell'apparecchio"
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr "Calcola il valore b dalla focale"
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "Centra"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr "Se si vuole centrare"
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr "Centro x dell'obiettivo"
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr "Coordinate del centro dell'obiettivo"
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr "Centro y dell'obiettivo"
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr "Scala dell'immagine"
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr "Valori di autocorrezione d"
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr "Valori di autocorrezione d per i modelli di obiettivo."
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr "Modello rosso a:"
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr "Parametri di correzione per ogni canale di colore"
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr "Modello rosso b:"
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr "Modello rosso c:"
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr "Modello rosso d:"
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr "Modello verde a:"
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr "Modello verde b:"
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr "Modello verde c:"
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr "Modello verde d:"
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr "Modello blu a:"
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr "Modello blu b:"
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr "Modello blu c:"
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr "Modello blu d:"
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr "Modello alfa a:"
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr "Parametri di correzione per il canale alfa"
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr "Modello alfa b:"
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr "Modello alfa c:"
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr "Modello alfa d:"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr "Coordinata x di inizio"
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr "Coordinata x di fine"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr "Coordinata y di inizio"
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr "Coordinata y di fine"
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr "Larghezza del disegno"
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr "Altezza del disegno"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Min"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr "Valore in fondo"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Max"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr "Valore in cima"
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++"Resa dei profili di luminanza per le componenti rossa, verde e blu lungo la "
++"linea specificata nel buffer di ingresso, disegnati in un buffer della "
++"dimensione specificata."
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr "Frattale"
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++"Tipo di frattale da usare. Le scelte possibili sono Julia e Mandelbrot. Il "
++"predefinito è Mandelbrot."
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "Valore X1, posizione"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "Valore X2, posizione"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Valore Y2, posizione"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr "Valore del seme X di Julia, posizione"
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr "Valore del seme Y di Julia, posizione"
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr "Valore di profondità"
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr "Bailout"
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr "Lunghezza Bailout"
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Background"
++msgstr "Sfondo"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid ""
++"Optional parameter to override automatic selection of wrap background. "
++"Choices are wrap, black, white and transparent."
++msgstr ""
++"Parametro opzionale per avere la precedenza sulla selezione automatica dello "
++"sfondo avvolto. Le scelte possibili sono avvolto, nero, bianco e trasparente."
++
++#: ../operations/workshop/fractal-trace.c:171
++msgid "Unsupported fractal type"
++msgstr "Tipo di frattale non supportato"
++
++#: ../operations/workshop/fractal-trace.c:321
++msgid "Performs fractal trace on the image"
++msgstr "Esegue una delineatura frattale sull'immagine"
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr ""
++"Operazione di fusione dell'immagine \"media\" (<tt>c = (cA + aB)/2</tt>)"
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++"Operazione di fusione dell'immagine \"riflessione-fusa\" (<tt>c = cB>=1.0?"
++"1.0:cA*cA / (1.0-cB)</tt>)"
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++"Operazione di fusione dell'immagine \"negazione\" (<tt>c = 1.0 - fabs(1.0-cA-"
++"cB)</tt>)"
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr "Operazione di fusione immagine \"bruciatura leggera\" (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr "Operazione di fusione immagine \"schermatura leggera\" (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr "Operazione di fusione immagine \"sottrattiva\" (<tt>c = cA+cB-1.0</tt>)"
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr "Impila gli ingressi orizzontalmente, (in \"uscita\" \"aux\" viene piazzato alla destra dell'\"ingresso\")"
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr "Sfocatura con conservazione dei bordi"
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "Un capo del gradiente"
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr "L'altro capo del gradiente"
++
++#: ../operations/workshop/linear-gradient.c:137
++msgid "Linear gradient renderer"
++msgstr "Renderizzatore di gradiente lineare"
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "Reale"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "Coordinate reali"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "Immaginario"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr "Coordinate immaginarie"
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Livello"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Livello dell'acqua"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr "Numero massimo di iterazioni"
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr "Renderizzatore dell'insieme di Mandelbrot"
++
++#: ../operations/workshop/max-rgb.c:30
++msgid "Minimal"
++msgstr "Minimale"
++
++#: ../operations/workshop/max-rgb.c:31
++msgid "Hold the minimal values instead of the maximal values"
++msgstr "Mantiene i valori minimi invece di quelli massimi"
++
++#: ../operations/workshop/max-rgb.c:120
++msgid "Reduce image to pure red, green, and blue"
++msgstr "Riduce l'immagine a solo rosso, verde e blu"
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr "Quantità di diffusione orizzontale"
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr "Quantità di diffusione verticale"
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr "Filtro diffusione disturbo"
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr "Seme casuale. Passando il valore -1 si implica che il seme viene scelto casualmente."
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr "Turbolenza"
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr "Il valore della turbolenza"
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr "Esegue un effetto plasma sull'immagine"
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Un capo del gradiente"
++
++#: ../operations/workshop/radial-gradient.c:129
++msgid "Radial gradient renderer"
++msgstr "Renderizzatore di gradiente radiale"
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr "Caricatore di immagini RAW, che si interfaccia con dcraw tramite pipe. Fornisce una griglia bayer grazza come scala di grigi, se il formato di file è .rawbayer, che userà questo caricatore invece del normale caricatore dcraw. Se il formato file è .rawbayerS, scambierà i numeri a 16 bit restituiti (sembra che il caricatore pnm abbia qualche baco)"
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr "Il valore della soglia"
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr "Esegue una operazione di rimozione dell'effetto occhi rossi sull'immagine"
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr "Numero di paia, i numeri elevati conservano maggiormente le caratteristiche più minute"
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr "La percentile ritornata, il valore predefinito di 50 corrisponde alla mediana"
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr "Filtro percentile di riduzione del rumore e aumento del contrasto basato su Symmetric Nearest Neighbours"
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr "Forza dell'effetto"
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr "Dimensione dell'effetto"
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Durezza dell'effetto"
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr "Tratto"
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Comportamento"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr "Comportamento dell'operazione"
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr "Calcola la mappatura di uno spostamento relativo da un tratto"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "Vortice"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr "Angolo vortice (gradi)"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr "Pizzico"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr "Quantità di pizzico"
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr "Raggio (1.0 è il più largo cerchio che entra nell'immagine, mentre 2.0 va sugli spigoli)"
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr "Applica vortice e pizzico all'immagine"
+diff --git a/po/ko.po b/po/ko.po
+new file mode 100644
+index 0000000..d0a32bc
+--- /dev/null
++++ po/ko.po
+@@ -0,0 +1,3399 @@
++# Korean translation for gegl.
++# Copyright (C) 2012 gegl's COPYRIGHT HOLDER
++# This file is distributed under the same license as the gegl package.
++# sebul <sebuls at gmail.com>, 2012.
++#
++#: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
++#: ../operations/external/sdl-display.c:27
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl master\n"
++"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
++"product=gegl&keywords=I18N+L10N&component=general\n"
++"POT-Creation-Date: 2012-05-10 12:21+0000\n"
++"PO-Revision-Date: 2012-05-05 19:56+0900\n"
++"Last-Translator: 세벌 <sebuls at gmail.com>\n"
++"Language-Team: Korean <gnome-kr at googlegroups.com>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=1; plural=0;\n"
++"X-Poedit-Language: Korean\n"
++"X-Poedit-Country: KOREA, REPUBLIC OF\n"
++"X-Poedit-SourceCharset: utf-8\n"
++
++#: ../gegl/gegl-init.c:216
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr ""
++
++#: ../gegl/gegl-init.c:221
++msgid "Where GEGL stores its swap"
++msgstr ""
++
++#: ../gegl/gegl-init.c:226
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr ""
++
++#: ../gegl/gegl-init.c:231
++msgid "Default size of tiles in GeglBuffers"
++msgstr ""
++
++#: ../gegl/gegl-init.c:236
++msgid "The count of pixels to compute simultaneously"
++msgstr ""
++
++#: ../gegl/gegl-init.c:241
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr ""
++
++#: ../gegl/gegl-init.c:246
++msgid "The number of concurrent processing threads to use"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "모듈 에러"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "로드 됨"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "로드 실패"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "로드 안 됨"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "블러 반지름"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "경계 유지"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "경계 유지 양"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "반지름"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr ""
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27
++msgid "Brightness"
++msgstr "밝기"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:145
++msgid "Changes the light level and contrast."
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "버퍼 위치"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "babl 형식"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:127
++msgid "A GEGL buffer destination surface."
++msgstr "GEGL 버터 대상 표면."
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "입력 버퍼"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr ""
++
++#: ../operations/common/buffer-source.c:177
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr "예제"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr "반복"
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++
++#: ../operations/common/c2g.c:493
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial  color "
++"differences to perform color-feature preserving grayscale  spatial contrast "
++"enhancement"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "너비"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "셀의 수평 너비 픽셀"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "높이"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "셀의수직 너비 픽셀"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "X 오프셋"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "격자 시작을 위한 수평 오프셋(원점으로부터)"
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Y 오프셋"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "격자 시작을 위한 수직 오프셋(원점으로부터)"
++
++#: ../operations/common/checkerboard.c:33 ../operations/common/color.c:24
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/grid.c:36
++#: ../operations/common/rectangle.c:37 ../operations/common/vignette.c:25
++#: ../operations/external/text.c:31 ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "색"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr "셀 색 중 하나 (기본값 '검정')"
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "다른 색"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr "The other cell color (defaults to 'white')"
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr ""
++
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr "빨강 비트"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr "초록 비트"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr "파랑 비트"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr "알파 비트"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:39
++msgid "The dithering strategy to use"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:478
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "원래 온도"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "의도하는 온도"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:267
++msgid "Allows changing the color temperature of an image."
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:176
++msgid "Performs color-to-alpha on the image."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "표본점"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "곡선"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr ""
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "반지름 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "반지름 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr ""
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr "출력창에 주어진 타이틀"
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr "창에 입력 버퍼 표시"
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "불투명도"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "수평 그림자 오프셋"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr "수직 그림자 오프셋"
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "입력 버퍼에 드롭섀도 효과 만들기"
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr "고해상도 경계 검출"
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "수평"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "수직"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "신호 유지"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "노출 값"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr "이산화 비트"
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distribution sigma controlling response contributions"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr ""
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "알파"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "베타"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "채도"
++
++#: ../operations/common/fattal02.c:41
++msgid "Global color saturation factor"
++msgstr "전역 색 채도 인자"
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr ""
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "왼쪽"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "오른쪽"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "꼭대기"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "바닥"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (only Julia)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr "CY (only Julia)"
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr "빨강 늘림"
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr "빨강 늘리기 인수"
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr "초록 늘림"
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr "초록 늘리기 인수"
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr "파랑 늘림"
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr "파랑 늘리기 인수"
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "빨강 모드"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "초록 모드"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "파랑 모드"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "빨강 반전"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "초록 반전"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "파랑 반전"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "수"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "색 수"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr "프랙털 탐색기"
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "크기 X"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "크기 Y"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:218
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "필터"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "파일"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr ""
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr "이미지 그레이스케일 전환"
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "선 너비"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr "격자 선 너비"
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "선 높이"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr "격자선의 높이 픽셀"
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr "격자선의 색"
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr ""
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Node"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr ""
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr ""
++
++#: ../operations/common/invert.c:86
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "연산"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr "사용할 연산 조합"
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr "수평 위치"
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr "수직 위치"
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr ""
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr ""
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr ""
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr ""
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:321
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr ""
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr ""
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr ""
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr ""
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr ""
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr ""
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr ""
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:182
++msgid "Remaps the intensity range of the image"
++msgstr ""
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr "로드할 파일 경로."
++
++#: ../operations/common/load.c:180
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using image magick's convert."
++msgstr ""
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:36
++msgid "Global colour saturation factor"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "상세"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr ""
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++
++#: ../operations/common/map-relative.c:156
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "반복 회수"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr ""
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr ""
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr ""
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "거울 회전"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr ""
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "결과 회전"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "거울"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "사용할 거울 수"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "중심 X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "중심 Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr ""
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr ""
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr ""
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr ""
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:26
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "빨강"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr "빨강의 양"
++
++#: ../operations/common/mono-mixer.c:28
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "초록"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr "초록의 양"
++
++#: ../operations/common/mono-mixer.c:30
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "파랑"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr "파랑의 양"
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "각"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr ""
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Z 오프셋"
++
++#: ../operations/common/noise.c:31 ../operations/workshop/cubism.c:34
++#: ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr ""
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "반복"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr ""
++
++#: ../operations/common/noise-reduction.c:26 ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr ""
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr ""
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr ""
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr ""
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr ""
++
++#: ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr ""
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr ""
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "오프셋 각"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "오프셋 각."
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "중심 선택"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr ""
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr ""
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr ""
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr ""
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr ""
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr ""
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adapation to colour variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adapation to light variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range 0.0-"
++"1.0"
++msgstr ""
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr ""
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr ""
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr ""
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr ""
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "물결 유형"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "물결의 유형"
++
++#: ../operations/common/ripple.c:169
++msgid "Transform the buffer with a ripple pattern"
++msgstr ""
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr "저장할 파일의 경로."
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr ""
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr ""
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "값"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr "list of <number>s"
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr ""
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr ""
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr ""
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr ""
++
++#: ../operations/common/threshold.c:25
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr ""
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "모양"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "사용할 모양: 0=원1=다이아몬드 2=정사각형"
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr ""
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr ""
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "감마"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr ""
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "비율"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "회전"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "회전 각"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:164
++msgid "Transform the buffer with waves"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "값"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr ""
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr ""
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr ""
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr ""
++
++#: ../operations/core/clone.c:112
++msgid "Clone a buffer"
++msgstr "버퍼 복제"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "출력 형식"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr ""
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr ""
++
++#: ../operations/core/crop.c:179
++msgid "Crop a buffer"
++msgstr "버퍼 자르기"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr ""
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr ""
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr ""
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr ""
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr ""
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "최적화"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "그레이스케일"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "색 채우기"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr ""
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr ""
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr ""
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr ""
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr ""
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "경도"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr ""
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr ""
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr ""
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "변환"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr ""
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr "불투명 채우기"
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr ""
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr ""
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr ""
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr ""
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr ""
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr ""
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr ""
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr ""
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr ""
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr ""
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr ""
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr ""
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr ""
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr ""
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr ""
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr ""
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr ""
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr ""
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr ""
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:245
++msgid "Load an SVG file using librsvg"
++msgstr ""
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr ""
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr "표현할 문자열(utf8)"
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr ""
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr ""
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr ""
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr ""
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr ""
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr ""
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr ""
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr ""
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr ""
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr ""
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr ""
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "FPS"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr ""
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr ""
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:258
++msgid "Renders a filled region"
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr ""
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr ""
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr ""
++
++#: ../operations/generated/color-burn.c:117
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/color-dodge.c:117
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/darken.c:115
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/difference.c:115
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr ""
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr ""
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr ""
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/exclusion.c:115
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr ""
++
++#: ../operations/generated/hard-light.c:117
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/lighten.c:115
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr ""
++
++#: ../operations/generated/overlay.c:117
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/plus.c:115
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr ""
++
++#: ../operations/generated/screen.c:115
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr ""
++
++#: ../operations/generated/soft-light.c:119
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr ""
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr ""
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr ""
++
++#: ../operations/generated/svg-multiply.c:115
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr ""
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr ""
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "회전할 각(시계방향)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr ""
++
++#: ../operations/transform/scale.c:29 ../operations/transform/scale-ratio.c:26
++msgid "Horizontal scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:31 ../operations/transform/scale-ratio.c:28
++msgid "Vertical scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr ""
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr ""
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "수평 크기"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "수직 크기"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr ""
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "수평 전단량"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "수직 전단량"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "버퍼 전단"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr ""
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr ""
++
++#: ../operations/transform/transform-core.c:202
++msgid "Origin-x"
++msgstr "원점-x"
++
++#: ../operations/transform/transform-core.c:203
++msgid "X coordinate of origin"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:210
++msgid "Origin-y"
++msgstr "Origin-y"
++
++#: ../operations/transform/transform-core.c:211
++msgid "Y coordinate of origin"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:219
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:225
++#: ../operations/transform/transform-core.c:226
++msgid "Hard edges"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:232
++msgid "Lanczos width"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:233
++msgid "Width of the Lanczos function"
++msgstr ""
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr ""
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr ""
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:103
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "시계방향"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr "시계방향으로 교체"
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr "색 회전 시작 각"
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr "색 회전 끝 각"
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:385
++msgid "Rotate colors on the image"
++msgstr "이미지 위의 색 회전"
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr "나눗수:"
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr "오프셋:"
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "정규화"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "정규화 여부"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "빨강 채널"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "초록 채널"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "파랑 채널"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "알파 채널"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "타일 크기"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr "타일 채도"
++
++#: ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "짝/홀"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr "수평/수직"
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++
++#: ../operations/workshop/ditto.c:111
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "깊이"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with uppercase letters"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr "카메라의 촛점"
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "중심"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr "중심을 원하면"
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "최소"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "최대"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Background"
++msgstr "배경"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid ""
++"Optional parameter to override automatic selection of wrap background. "
++"Choices are wrap, black, white and transparent."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:171
++msgid "Unsupported fractal type"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:321
++msgid "Performs fractal trace on the image"
++msgstr ""
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr ""
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "그라디언트의 한 끝"
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr "그라디언트의 다른 끝"
++
++#: ../operations/workshop/linear-gradient.c:137
++msgid "Linear gradient renderer"
++msgstr "선형 그라디언트 렌더러"
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "실수"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "실수 좌표"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "허수"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr "허수 좌표"
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr ""
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "그라디언트의 한쪽 끝"
++
++#: ../operations/workshop/radial-gradient.c:129
++msgid "Radial gradient renderer"
++msgstr ""
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr ""
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr ""
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr ""
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr ""
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr ""
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr ""
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "소용돌이"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr "소용돌이 각 (도)"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr ""
+diff --git a/po/lv.po b/po/lv.po
+new file mode 100644
+index 0000000..6e1f8d8
+--- /dev/null
++++ po/lv.po
+@@ -0,0 +1,3950 @@
++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the PACKAGE package.
++#
++#: ../operations/common/display.c:23 ../operations/external/sdl-display.c:25
++#: ../operations/external/sdl-display.c:27
++# Rūdolfs Mazurs <rudolfs.mazurs at gmail.com>, 2012.
++msgid ""
++msgstr ""
++"Project-Id-Version: \n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2012-09-29 14:31+0300\n"
++"PO-Revision-Date: 2012-09-29 15:11+0300\n"
++"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs at gmail.com>\n"
++"Language-Team: Latvian <lata-l10n at googlegroups.com>\n"
++"Language: lv\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
++"2);\n"
++"X-Generator: Lokalize 1.4\n"
++
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++"lietojums: %s [opcijas] <datne | -- [op [op] ..]>\n"
++"\n"
++"  Opcijas:\n"
++"     -h, --help      šī palīdzības informācija\n"
++"\n"
++"     -i, --file      ielasīt xml no nosauktās datnes\n"
++"\n"
++"     -x, --xml       izmantot xml, ko norādīja nākamais parametrs\n"
++"\n"
++"     --dot           izvada graphviz grafa aprakstu\n"
++"\n"
++"     -o, --output    izvada ģenerēto attēlu uz nosaukto dati, tipu nosaka\n"
++"                     paplašinājums.\n"
++"\n"
++"     -p              palielina kadru skaitītājus dažādiem elementiem, kad ir\n"
++"                     pabeigta apstrāde.\n"
++"\n"
++"     -X              izvada XML, kas tika ielasīts\n"
++"\n"
++"     -v, --verbose   darbības laikā izvadīt diagnostikas informāciju\n"
++"\n"
++"Visi parametri, kas seko --, tiek uzskatīti par opcijām, kas ir sasaistītas\n"
++"kopā mazā kompozīcija, nevis izmantojot xml datni; tas ļauj viegli testēt\n"
++"filtrus. Ņemiet vērā, ka noklusējuma vērtība tiks izmantota visām īpašībām\n"
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr "KĻŪDA — “%s” sagaidīja parametru\n"
++
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr "Rādīt uz ekrāna"
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr "Drukāt XML"
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr "Izvadīt datnē"
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
++msgstr "Parādīt palīdzības informāciju"
++
++#: ../bin/gegl-options.c:124 ../bin/gegl.c:257
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr "Nezināms GeglOption režīms — %d"
++
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
++msgstr "nezināms režīms"
++
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++"Parsētā komandrinda:\n"
++"\trežīms:       %s\n"
++"\tdatne:        %s\n"
++"\txml:          %s\n"
++"\tizvade:       %s\n"
++"\tatlikušais:   %s\n"
++"\t\n"
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
++msgstr ""
++"\n"
++"\n"
++"nezināms parametrs “%s”; tā vietā dod palīdzību\n"
++"\n"
++"\n"
++
++#: ../bin/gegl.c:147
++#, c-format
++msgid "Unable to read file: %s"
++msgstr "Nevar nolasīt datni — %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr "Nederīgs grafs, aptur.\n"
++
++#: ../gegl/gegl-init.c:205
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "babl kļūdu tolerance — vērtība starp 0.2 un 0.000000001"
++
++#: ../gegl/gegl-init.c:210
++msgid "Where GEGL stores its swap"
++msgstr "Kur ir GEGL maiņvieta"
++
++#: ../gegl/gegl-init.c:215
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr "Aptuveni cik atmiņas izmantot attēlu pieglabāšanai"
++
++#: ../gegl/gegl-init.c:220
++msgid "Default size of tiles in GeglBuffers"
++msgstr "Noklusējuma izmērs flīzēm iekš GeglBuffers"
++
++#: ../gegl/gegl-init.c:225
++msgid "The count of pixels to compute simultaneously"
++msgstr "Vienlaicīgi aprēķināmo pikseļu skaits"
++
++#: ../gegl/gegl-init.c:230
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr "Renderēšanas kvalitāte — vērtība starp 0.0(ātri) un 1.0(atsauce)"
++
++#: ../gegl/gegl-init.c:235
++msgid "The number of concurrent processing threads to use"
++msgstr "Vienlaicīgi izmantojamo vienlaicīgo apstrādes pavedienu skaits"
++
++#: ../gegl/gegl-init.c:240
++msgid "Use OpenCL"
++msgstr "Lietot OpenCL"
++
++#: ../gegl/gegl-init.c:245
++msgid "Maximum number of entries in the file tile backend's writer queue"
++msgstr "Maksimālais ierakstu skaits datņu flīžu aizmugures rakstītāja rindā"
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr "Moduļa “%s” ielādes kļūda — %s"
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Kļūda modulī"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Ielādēts"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Ielādes kļūda"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Nav ielādēts"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "Aizmiglošanas rādiuss"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++"Kvadrāta pikseļa reģiona rādiuss (platums un augstums būs rādiuss*2+1)."
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "Malu saglabāšana"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "Malu saglabāšanas apjoms"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++"Malu saglabāšanas aizmiglošanas filtrs, ko var izmantot trokšņu "
++"samazināšanai. Tā ir Gausa aizmiglošana, kur pienesums no blakus pikseļiem "
++"tiek svērts pret krāsu atšķirību no centrālā pikseļa."
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Rādiuss"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr "Kvadrāta pikseļa reģiona rādiuss (platums un augstums būs rādiuss*2+1)"
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr "Izrēķina vidējo vērtību pikseļu kvadrāta kastei"
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Kontrasts"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr "Apgabala mēroga koeficients"
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27 ../operations/common/softglow.c:27
++msgid "Brightness"
++msgstr "Spilgtums"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr "Apjoms, par kādu palielināt spilgtumu"
++
++#: ../operations/common/brightness-contrast.c:159
++msgid "Changes the light level and contrast."
++msgstr "Maina gaismas līmeni un kontrastu."
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "Bufera atrašanās vieta"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr "Vieta, kur saglabāt izvadi no GeglBuffer"
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "babl formāts"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr "babl formāts GeglBuffer izvadei. NULL, lai izmantotu ievades formātu"
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:132
++msgid "A GEGL buffer destination surface."
++msgstr "GEGL bufera mērķa virsma."
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Ievades buferis"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr "GeglBuffer, ko ielādēt konveijerā"
++
++#: ../operations/common/buffer-source.c:177
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++"Avots, kas izmanto atmiņā esošu GeglBuffer, izmantojams iekšēji ar GEGL."
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++"Apkārtne tiek ņemta vērā. Šis ir rādiuss pikseļos, kas jāņem vērā, kad "
++"nosaka, kādas krāsas ir jāattēlo uz kurām pelēkajām vērtībām."
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr "Paraugi"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr "Paraugu skaits, kas jāņem katrā iterācijā, meklējot krāsu apgabalu."
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr "Iterācijas"
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++"Iterāciju skaits. Lielāks iterāciju skaits dod mazāk trokšņainu rezultātu, "
++"bet ir ilgāk jāskaitļo"
++
++#: ../operations/common/c2g.c:493
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial color "
++"differences to perform color-feature preserving grayscale spatial contrast "
++"enhancement"
++msgstr ""
++"Pārveidošanā no krāsām uz pelēktoņiem tiek izmantotas aploksnes no telpiskām "
++"krāsu atšķirībām, lai veiktu krāsu pazīmju saglabāšanu pelēktoņu telpiskā "
++"kontrasta uzlabošanu"
++
++#: ../operations/common/cartoon.c:25
++msgid "Mask radius"
++msgstr "Maksas rādiuss"
++
++#: ../operations/common/cartoon.c:27
++msgid "Percent black"
++msgstr "Procenti melns"
++
++#: ../operations/common/cartoon.c:376
++msgid "Cartoon effect"
++msgstr "Karikatūras efekts"
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Platums"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "Šūnu horizontālais platums pikseļos"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Augstums"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "Šūnu vertikālais platums pikseļos"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "X nobīde"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "Horizontālā nobīde (no izcelsmes) režģa sākumam"
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Y nobīde"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "Vertikālā nobīde (no izcelsmes) režģa sākumam"
++
++#: ../operations/common/checkerboard.c:33
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:24
++#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
++#: ../operations/common/vignette.c:25 ../operations/external/text.c:31
++#: ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Krāsa"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr "Viena no šūnas krāsām (noklusējuma vērtība ir “black”)"
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "Otra krāsa"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr "Otra šūnas krāsa (noklusējuma vērtība ir “white”)"
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr "Dambretes galdiņa atveidojums"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr "Sarkanie biti"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr "Bitu skaits sarkanajā kanālā"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr "Zaļie biti"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr "Bitu skaits zaļajā kanālā"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr "Zilie biti"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr "Bitu skaits zilajā kanālā"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr "Alfa biti"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr "Bitu skaits alfa kanālā"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr "Pustoņu imitēšanas stratēģija"
++
++#: ../operations/common/color-reduction.c:39
++msgid "The dithering strategy to use"
++msgstr "Izmantojamā pustoņu imitēšanas stratēģija"
++
++#: ../operations/common/color-reduction.c:495
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++"Samazina bitu skaitu kanālā (krāsu un alfas) ar neobligātu pustoņu imitēšanu"
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Oriģināla temperatūra"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++"Gaismas avota novērtētā temperatūra kelvinos, kādā tika uzņemts attēls."
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Vēlamā temperatūra"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr "Gaismas avota temperatūras labotais novērtējums kelvinos."
++
++#: ../operations/common/color-temperature.c:280
++msgid "Allows changing the color temperature of an image."
++msgstr "Ļauj mainīt attēla krāsu temperatūru."
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr "Krāsa, kuru atveidot (noklusējuma vērtība ir “white”)"
++
++#: ../operations/common/color-to-alpha.c:197
++msgid "Performs color-to-alpha on the image."
++msgstr "Veic krāsa-uz-alfa pārveidošanu attēlam."
++
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr "Krāsa, kuru atveidot (noklusējuma vērtība ir “black”)"
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++"Izveidot buferi, kas ir pilnībā aizpildīts ar norādīto krāsu. Apcērtiet to, "
++"lai samazinātu izmērus."
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "Paraugpunkti"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr "Līknes paraugpunktu skaits. 0 — precīzai aprēķināšanai."
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Līkne"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr "Kontrasta līkne."
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr "Pielāgo attēla kontrastu, vadoties pēc līknes."
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Rādiuss 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Rādiuss 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr ""
++"Veic malu noteikšanu, balstoties uz atšķirību starp diviem Gausa "
++"aizmiglojumiem."
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr "Virsraksts, ko dot izvades logam"
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr "Rādīt ievades buferi logā."
++
++#: ../operations/common/dot.c:26 ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Bloku platums"
++
++#: ../operations/common/dot.c:27
++msgid "Size of each block in pixels"
++msgstr "Katra bloka platums pikseļos"
++
++#: ../operations/common/dot.c:28
++msgid "Dot size ratio"
++msgstr "Punkta izmēra koeficients"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr "Izmēra koeficients punktam katrā blokā"
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr "Vienkāršot attēlu par vienkrāsainu punktu masīvu"
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Blīvums"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "Horizontālā ēnas nobīde"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr "Vertikālā ēnas nobīde"
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Izveido krītošas ēnas efektu ievades buferī"
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr "Augstas izšķirtspējas malu noteikšana"
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Horizontāls"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Vertikāls"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "Paturēt signālu"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr "Specializēta, no virziena neatkarīga, robežu noteikšana"
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "Ekspozīcijas vērtības"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr "Relatīvais spilgtums katrai ekspozīcijai, izteikta ar EV"
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr "Diskretizēšanas biti"
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr "Log2 no avota diskretizēšanas soļiem"
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr "Svara sigma"
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distribution sigma controlling response contributions"
++msgstr "Svara sadalījuma sigma, kas kontrolē atbildes pienesumu"
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr "Apvienot vairāku ainu ekspozīcijas vienā augta apgabala buferī"
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise-rgb.c:37
++#: ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alfa"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr "Krāsu pārejas slieksnis, detaļu uzlabošanai"
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Beta"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr "Lokālo detaļu uzlabošanas spēks"
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/common/noise-hsv.c:31
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Piesātinājums"
++
++#: ../operations/common/fattal02.c:41 ../operations/common/mantiuk06.c:36
++msgid "Global color saturation factor"
++msgstr "Globālais krāsu piesātināšanas koeficients"
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Troksnis"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr "Krāsu pārejas slieksnis, detaļu uzlabošanas samazināšanai"
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adaptēt attēlu, kam var būt augsts dinamiskais apgabals, prezentēšanai, "
++"izmantojot zemu dinamisko apgabalu. Šis operators vājina lokālā attēla krāsu "
++"pāreju lielumu, veidojot spilgtumu apgabalā 0.0-1.0"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr "Fraktāļa tips"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr "Fraktāļa tips"
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Kreisais"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Labais"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Augšējais"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Apakšējais"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (tiki Džuliana)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr "CY (tiki Džuliana)"
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr "Sarkanais izvērsums"
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr "Sarkanā izvērsuma koeficients"
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr "Zaļais izvērsums"
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr "Zaļā izvērsuma koeficients"
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr "Zilais izvērsums"
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr "Zilā izvērsuma koeficients"
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "Sarkanais režīms"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Sarkanais lietotnes režīms (0:SIN; 1:COS; 2:NEKĀDS)"
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "Zaļais režīms"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Zaļais lietotnes režīms (0:SIN; 1:COS; 2:NEKĀDS)"
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "Zilais režīms"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Zilais lietotnes režīms (0:SIN; 1:COS; 2:NEKĀDS)"
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "Sarkanā inversija"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "Zaļā inversija"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "Zilā inversija"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Krāsas"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Krāsu skaits"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr "Loglog gludināšana"
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr "Lietot loglog gludināšanu"
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr "Fraktāļu pārlūks"
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "Izmērs X"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++"Starndartnovirze horizontālajai asij (reiziniet ar ~2, lai iegūt rādiusu)."
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Izmērs Y"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++"Starndartnovirze vertikālajai asij (reiziniet ar ~2, lai iegūt rādiusu)."
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filtrs"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++"Neobligāts parametrs, lai pārrakstītu automātisko aizmiglošanas filtra "
++"izvēli. Var izvēlēties fir, iir, auto"
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++"Izrēķina vidējo vērtību pikseļu apkaimei ar normālo sadalījumu kā svērumu"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "Datne"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr "Ceļš uz ielādējamo GeglBuffer datni."
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr "GeglBuffer datnes ielādētājs."
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr "Mērķa datnes ceļš, kurā rakstīt GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr "GeglBuffer datnes rakstītājs."
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr "Pārvērš attēlu pelēktoņos"
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "Līnijas platums"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr "Līniju platums pikseļos"
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "Līnijas augstums"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr "Līniju augstums pikseļos"
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr "Režģa līniju krāsa"
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr "Režģa attēlotājs"
++
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr "Nepareizie pikseļi"
++
++#: ../operations/common/image-compare.c:26
++msgid "Number of differing pixels."
++msgstr "Atšķirīgo pikseļu skaits."
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Maksimālā atšķirība"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "Maksimālā atšķirība starp diviem pikseļiem."
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr "Vidējā atšķirība (nepareizie)"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr "Vidējā atšķirība starp nepareizajiem pikseļiem."
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr "Vidējā atšķirība (kopā)"
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr "Vidējā atšķirība starp visiem pikseļiem."
++
++#: ../operations/common/image-compare.c:177
++msgid ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
++msgstr ""
++"Salīdzina, vai ievades un aux buferi ir dažādi. Rezultāti tiek saglabāti "
++"īpašībās."
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Mezgls"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr "GeglNode mezgls, ko izmeklēt"
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr "GEGL grafa vizualizators."
++
++#: ../operations/common/invert.c:86
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++"Invertē komponentes (izņemot alfa), rezultāts ir atbilstošais attēla "
++"“negatīvs”."
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Darbība"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr "Izmantojamā salikšanas darbība"
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr "Horizontālais novietojums"
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr "Vertikālais novietojums"
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Mērogs"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr "Mērogs 1:1 izmērs"
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Avots"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr "Avota datu datne (png, jpg, raw, svg, bmp, tif, ...)"
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr "Slānis parastajā izpratnē"
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr "Galvenā:"
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr "Kropļojumu galvenā vērtība"
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Mērogs:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr "Mala:"
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr "Kropļojumu malas vērtība"
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr "Padarīt spožāku:"
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr "Padarīt attēlu spožāku"
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr "X nobīde:"
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr "Nobīde horizontāli"
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr "Y nobīde:"
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr "Nobīde vertikāli"
++
++#: ../operations/common/lens-distortion.c:338
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr "Kopē attēlu, veicot lēcas kropļojumu korekciju."
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr "Zemā ievade"
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr "Ievades spīduma līmenis, kas kļūst par zemāko izvadi"
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr "Augstā ievade"
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr "Ievades spīduma līmenis, kas kļūst par balto."
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr "Zemā izvade"
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr "Zemākais spīduma līmenis izvadē"
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr "Augstā izvade"
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr "Augstākais spīduma līmenis izvadē"
++
++#: ../operations/common/levels.c:198
++msgid "Remaps the intensity range of the image"
++msgstr "Maina attēla intensitātes apgabala karti"
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr "Ceļš uz datni, ko ielādēt."
++
++#: ../operations/common/load.c:180
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using Image Magick's convert."
++msgstr ""
++"Vairāku datņu ielādētājs, kas izmanto vietējos apstrādātājus, un atkāpšanās "
++"pārveidošana, izmantojot Image Magick konvertu."
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr "Attēla Magick ietinums, izmantojot png op."
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr "Kontrasta kompensēšanas apjoms"
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Detaļas"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr "Līmenis uzsvaram uz attēla krāsu pāreju detaļām"
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adaptēt attēlu, kam var būt augsts dinamiskais apgabals, prezentēšanai, "
++"izmantojot zemu dinamisko apgabalu. Šis operators ierobežo kontrastu "
++"vairākās telpiskās frekvencēs, veidojot spilgtumu apgabalā 0.0-1.0"
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr "Paraugs"
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Iekšēji lietots paraugs"
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr "parauga ievade ar palīgbuferi, kas satur absolūtas avota koordinātas"
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr "Mērogošana"
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++"novietojuma maiņas mēroga koeficients; norāda, cik lielai telpiskajai "
++"nobīdei atbilst 1.0, attiecībā pret attēlojuma vērtību."
++
++#: ../operations/common/map-relative.c:173
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr "parauga ievade ar palīgbuferi, kas satur relatīvas avota koordinātas"
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Iterāciju skaits"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++"Ja lietotājs ir devis trūcīgu tri-karti un ievades attēlu, izveidot "
++"priekšplāna alfas matējumu. Iestatiet balto kā priekšplānu un melno kā fonu "
++"tri-kartei. Viss pārējais tiks uzskatīts par nezināmu un tiks aizpildīts."
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr "Mitrums"
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr "Vērtība, kas apzīmē pienesumu no pagātnes jaunajam kadram."
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr "Uzkrājošais kustības izplūdums"
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "Spoguļa pagrieziens"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr "Pagrieziens, kas attiecināts uz spoguļiem"
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "Rezultāta pagrieziens"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr "Pagrieziens, kas attiecināts uz rezultāta"
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Spoguļi"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "Izmantojamo spoguļu skaits"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr "X nobīde spoguļošanas rezultātam"
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr "Y nobīde spoguļošanas rezultātam"
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "Centrs X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr "X ass attiecība centra spoguļošanai"
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "Centrs Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr "Y ass attiecība centra spoguļošanai"
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr "Apgriezt X"
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr "X ass attiecība spoguļa plašumu apgriešanai"
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr "Apgriezt Y"
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr "Y ass attiecība spoguļa plašumu apgriešanai"
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Tuvināt"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr "Mēroga koeficients, lai padarītu renderēšanas izmēru lielāku"
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr "Izvērst"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr "Apcirst rezultātu"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr "Apcirst rezultātu līdz ievades izmēram"
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr "Aplauzt ievadi"
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr "Aizpildīt pilnībā izvades laukumu"
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr "Attēlam pielieto spoguļošanas efektu."
++
++#: ../operations/common/mono-mixer.c:26 ../operations/common/noise-rgb.c:31
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Sarkans"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr "Sarkanā apjoms"
++
++#: ../operations/common/mono-mixer.c:28 ../operations/common/noise-rgb.c:33
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Zaļš"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr "Zaļā apjoms"
++
++#: ../operations/common/mono-mixer.c:30 ../operations/common/noise-rgb.c:35
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Zils"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr "Zilā apjoms"
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr "Vienkrāsaina kanāla mikseris"
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Garums"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr "Pikseļu aizmiglošanas garums"
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Leņķis"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr "Aizmiglošanas leņķis grādos"
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr "Lineārs kustības izplūdums"
++
++#: ../operations/common/noise-cielch.c:25 ../operations/common/noise-hsv.c:27
++msgid "Holdness"
++msgstr "Noturība"
++
++#: ../operations/common/noise-cielch.c:27
++msgid "Lightness"
++msgstr "Gaišums"
++
++#: ../operations/common/noise-cielch.c:29
++msgid "Chroma"
++msgstr "Piesātinājums"
++
++#: ../operations/common/noise-cielch.c:31 ../operations/common/noise-hsv.c:29
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Tonis"
++
++#: ../operations/common/noise-cielch.c:160
++msgid "Randomize lightness, chroma and hue independently"
++msgstr "Sajaukt gaišumu, piesātinājumu un toni neatkarīgi"
++
++#: ../operations/common/noise-hsv.c:33
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Vērtība"
++
++#: ../operations/common/noise-hsv.c:164
++msgid "Randomize hue, saturation and value independently"
++msgstr "Sajaukt toni, piesātinājumu un vērtību neatkarīgi"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/noise.c:31
++#: ../operations/common/shift.c:29 ../operations/common/wind.c:33
++#: ../operations/workshop/cubism.c:34 ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr "Sēkla"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33 ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Nejaušības sēkla"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization (%)"
++msgstr "Nejaušība (%)"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization"
++msgstr "Nejaušība"
++
++#: ../operations/common/noise-hurl.c:34 ../operations/common/noise-pick.c:34
++#: ../operations/common/noise-slur.c:37
++msgid "Repeat"
++msgstr "Atkārtot"
++
++#: ../operations/common/noise-hurl.c:135
++msgid "Completely randomize a fraction of pixels"
++msgstr "Pilnībā sajaukt pikseļu daļas"
++
++#: ../operations/common/noise-pick.c:192
++msgid "Randomly interchange some pixels with neighbors"
++msgstr "Nejauši mainīt vietām dažus pikseļus ar kaimiņiem"
++
++#: ../operations/common/noise-reduction.c:26 ../operations/common/wind.c:30
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Stiprums"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "Ar cik iterācijām darbināt algoritmu"
++
++#: ../operations/common/noise-rgb.c:27
++msgid "Correlated noise"
++msgstr "Savstarpēji saistīts troksnis"
++
++#: ../operations/common/noise-rgb.c:29
++msgid "Independent RGB"
++msgstr "Neatkarīgs RGB"
++
++#: ../operations/common/noise-rgb.c:164
++msgid "Distort colors by random amounts."
++msgstr "Sagroza krāsas nejaušā apjomā."
++
++#: ../operations/common/noise-slur.c:178
++msgid "Randomly slide some pixels downward (similar to melting)"
++msgstr "Nejauši noslidināt lejup dažus pikseļus (līdzīgi kušanai)"
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Z nobīde"
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Iterācija"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr "Perlin trokšņa veidotājs"
++
++#: ../operations/common/oilify.c:27 ../operations/common/photocopy.c:25
++#: ../operations/common/photocopy.c:26
++msgid "Mask Radius"
++msgstr "Maksas rādiuss"
++
++#: ../operations/common/oilify.c:28
++msgid "Radius of circle around pixel"
++msgstr "Riņķa rādiuss ap pikseli"
++
++#: ../operations/common/oilify.c:30 ../operations/common/oilify.c:31
++msgid "Exponent"
++msgstr "Kāpinātājs"
++
++#: ../operations/common/oilify.c:33
++msgid "Intensity Mode"
++msgstr "Intensitātes režīms"
++
++#: ../operations/common/oilify.c:34
++msgid "Use pixel luminance values"
++msgstr "Lietot pikseļa spilgtuma vērtības"
++
++#: ../operations/common/oilify.c:309
++msgid "Emulate an oil painting"
++msgstr "Imitēt eļļas gleznu"
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++"Globāla blīvuma vērtība, kas vienmēr tiek izmantota uz neobligāta ievades "
++"palīgbufera."
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++"Izsver ievades blīvumu gan no aux ievades vērtības, gan arī globālās "
++"vērtības īpašības."
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr "atveramais GeglBuffer uz diska"
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr "Avots, kas izmanto uz diska esošu GeglBuffer."
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr "Porter Duff operācija: virs (d = cA + cB * (1 - aA))"
++
++#: ../operations/common/photocopy.c:28 ../operations/common/photocopy.c:29
++#: ../operations/common/softglow.c:29
++msgid "Sharpness"
++msgstr "Asums"
++
++#: ../operations/common/photocopy.c:31 ../operations/common/photocopy.c:32
++msgid "Percent Black"
++msgstr "Procenti melns"
++
++#: ../operations/common/photocopy.c:34 ../operations/common/photocopy.c:35
++msgid "Percent White"
++msgstr "Procenti balts"
++
++#: ../operations/common/photocopy.c:395
++msgid "Photocopy effect"
++msgstr "Fotokopijas efekts"
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr "Bloku platums pikseļos"
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr "Bloku augstums"
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr "Bloku augstums pikseļos"
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr "Vienkāršot attēlu par vienkrāsainu kvadrātu masīvu"
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr "Riņķa dziļums procentos"
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "Nobīdes leņķis"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "Nobīdes leņķis."
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr "Kartēt atmuguriski"
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr "Sākt no labās nevis no kreisās"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr "Kartēt no augšas"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr "Novietot augšējo rindu vidū un apakšējo rindu ārpusē"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr "Uz polāro"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr "Kartēt attēlu uz apli"
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr "Sākuma punkts polārajām koordinātām"
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "Izvēlēties vidu"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr "Ļaut sākuma punktam būt viduspunktam"
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr "Veic polāro koordināšu pārveidošanu attēlam."
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Līmeņi"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr "līmeņu skaits katrai komponentei"
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr "Samazina līmeņu skaitu katrai krāsu komponentei attēlā."
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr "Jēlu (raw) attēlu ielādētājs, ietin dcraw ar konveijeriem."
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr "Horizontālais apjoms"
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr "Vertikālais apjoms"
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr "Krāsa, ko attēlot"
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr "Taisnstūra avots ar fiksētu izmēru un viendabīgu krāsu"
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr "Kopējais attēla gaišums"
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr "Hromatiskā adaptācija"
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adaptation to color variation across the image"
++msgstr "Krāsu variāciju adaptācija viscaur attēlam"
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr "Gaismas adaptācija"
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adaptation to light variation across the image"
++msgstr "Gaismas variāciju adaptācija viscaur attēlam"
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++msgstr ""
++"Adaptēt attēlu, kam var būt augsts dinamiskais apgabals, prezentēšanai, "
++"izmantojot zemu dinamisko apgabalu. Šis ir efektīvs globāls operators, kas "
++"atvasināts no vienkāršiem psiholoģiskiem novērojumiem, veidojot spilgtumu "
++"apgabalā 0.0-1.0"
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++"izstiept pikseļu komponentes individuāli, balsoties uz spilgtuma aploksnēm"
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr "Amplitūda"
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr "Sīku vilnīšu amplitūda"
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr "Periods"
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr "Sīku vilnīšu periods"
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr "Fāžu nobīde"
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr "Leņķis grādos"
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "Vilnīša tips"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "Vilnīša tips"
++
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr "Flīzējams"
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr "Paturēt flīzējamību"
++
++#: ../operations/common/ripple.c:175
++msgid "Transform the buffer with a ripple pattern"
++msgstr "Pārveidot buferi ar vilnīšu rakstu"
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr "Ceļš uz datni, ko saglabāt."
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr "Vairāku datņu saglabātājs, kas izmanto vietējos apstrādātājus."
++
++#: ../operations/common/shift.c:26
++msgid "Shift"
++msgstr "Nobīde"
++
++#: ../operations/common/shift.c:27
++msgid "Maximum amount to shift"
++msgstr "Maksimālais nobīdes apjoms"
++
++#: ../operations/common/shift.c:36
++msgid "Direction"
++msgstr "Virziens"
++
++#: ../operations/common/shift.c:37
++msgid "Shift direction"
++msgstr "Nobīdes virziens"
++
++#: ../operations/common/shift.c:231
++msgid "Shift by a random number of pixels"
++msgstr "Nobīde par nejaušu pikseļu skaitu"
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr "Pāri"
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr "Pāru skaits. Lielāks skaits saglabā precīzākas iezīmes"
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Trokšņu mazinošs, malu uzlabojošs, aizmiglošanas filtrs, kas balstīts uz "
++"Simetriskā Tuvākā Apkaime"
++
++#: ../operations/common/softglow.c:25
++msgid "Glow radius"
++msgstr "Spīduma rādiuss"
++
++#: ../operations/common/softglow.c:224
++msgid "Softglow effect"
++msgstr "Maigā spīduma efekts"
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++"Apkaime, kas tiek ņemta vērā, lai uzlabotu ideālās vērtības, kas ir tuvas "
++"attēla garākajai malai; tā palielināšana paildzinās darbības laiku"
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++"Iterāciju skaits. Lielāks iterāciju skaits dod mazāk trokšņainu attēlojumu, "
++"bet ir ilgāk jāskaitļo"
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr "Telpiska pagaidu tīklenes-veida aploksne ar stohastisku paraugu nolasi"
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++"Mērogo bufera komponentes, lai būtu apgabalā 0.0-1.0. Tas uzlabo attēlu, kas "
++"pilnībā neizmanto pieejamo kontrastu (mazs kontrasts, ļoti tumšs vai ļoti "
++"gaišs attēls)."
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Vērtības"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr "saraksts ar <skaitļ>iem"
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr "SVG krāsu matricas operācija svg_huerotate"
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr "SVG krāsu matricas operācija svg_luminancetoalpha"
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr "SVG krāsu matricas operācija svg_matrix"
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr "SVG krāsu matricas operācija svg_saturate"
++
++#: ../operations/common/threshold.c:25 ../operations/common/wind.c:26
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Slieksnis"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++"Globālais sliekšņa līmenis (tiek izmantots, kad nav ievades papildbufera)"
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++"Pārveido attēlu uz melnbaltu pēc sliekšņa, balstoties vai nu uz globālām "
++"vērtībām vērtību īpašībās, vai uz pikseli no aux ievades."
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr "Standartnovirze"
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr "Standartnovirze (telpisks mēroga koeficients)"
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr "Mērogs, efekta stiprums"
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++"Ievades buferim uzklāj izplūduma maskas filtru (uzasina attēlu, pievienojot "
++"neīstus atbilstošus apmales ap kontūrām)"
++
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++"Invertē tikai vērtības komponenti; rezultāts ir atbilstošs “invertētais” "
++"attēls."
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "Forma"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "Figūra, ko izmantot: 0=aplis 1=rombs 2=kvadrāts"
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++"Noklusējuma vērtība ir “black”; jūs varat šeit izmantot caurspīdīgumu, lai "
++"izdzēstu daļu attēla"
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr "Cik tālu iet vinjete, izteikta kā daļa no attēla diagonāles puses"
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr "Mīkstums"
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Gamma"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr "Krituma linearitāte"
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "Proporcija"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr "Cik tuvu esam attēla proporcijām"
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr "Saspiest"
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++"Izmantojamā izmēru attiecība, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf "
++"1.0 = inf:1, šo pielieto pēc tam, kad tiek ņemtas vērā proporcijas. Lai "
++"tieši izmantotu saspiešanas koeficientu kā proporcijas, iestatiet "
++"proporcijas uz 0.0."
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr "Vinjetes horizontālais vidus"
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr "Vinjetes vertikālais vidus"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Pagrieziens"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "Pagrieziena leņķis"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++"Vinješu operācija — attēlam pielieto vinjeti. Imitē gaišuma samazināšanos "
++"eksponētās filmiņas malās un dažus citus efektus, kas var dabiski gadīties "
++"analogajā fotografēšanā."
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr "Vilnīšu vidus X koordināta"
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr "Vilnīšu vidus Y koordināta"
++
++#: ../operations/common/waves.c:44
++msgid "Clamp deformation"
++msgstr "Ierobežot deformācijas"
++
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr "Ierobežot deformācijas attēla apgabalā."
++
++#: ../operations/common/waves.c:169
++msgid "Transform the buffer with waves"
++msgstr "Pārveidot buferi ar vilnīšiem"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr "globāla vērtība, ja aux nesatur datus"
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr "sapludināt divus attēlus, izmantojot alfa vērtību kā svaru"
++
++#: ../operations/common/wind.c:27
++msgid "Higher values restrict the effect to fewer areas of the image"
++msgstr "Lielākas vērtības ierobežo efektu uz mazākiem attēla laukumiem"
++
++#: ../operations/common/wind.c:31
++msgid "Higher values increase the magnitude of the effect"
++msgstr "Lielāka vērtība palielina efekta apjomu"
++
++#: ../operations/common/wind.c:367
++msgid "Wind-like bleed effect"
++msgstr "Vējam līdzīgs asiņošanas efekts"
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr "Rakstīt jau esošā GeglBuffer"
++
++#: ../operations/common/write-buffer.c:28
++msgid "Flush buffer"
++msgstr "Nopludināšanas buferis"
++
++#: ../operations/common/write-buffer.c:29
++msgid "Flush buffer after writing"
++msgstr "Nopludināt buferi pēc rakstīšanas"
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "Atsauce"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr "Atsauces ID, ko izmantot kā ievadi (izmanto XML)"
++
++#: ../operations/core/clone.c:110
++msgid "Clone a buffer"
++msgstr "Klonēt buferi"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Izvades formāts"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr "Babl izvades formāta virkne"
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr "Pārveidot datus uz norādīto formātu"
++
++#: ../operations/core/crop.c:194
++msgid "Crop a buffer"
++msgstr "Apcirst buferi"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr "Nav operācijas (var izmantot ar maršrutēšanas punktu)"
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Ceļš uz datni, ko ielādēt"
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr "Ietvars"
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr "Ietvara numurs"
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr "FFmpeg video ietvara importētājs"
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Nezināms JPEG 2000 attēla formāts iekš “%s“"
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "Nevar atvērt JPEG 2000 attēlu iekš “%s”"
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr "Nevar izveidot “%s” izvades krāsu profilu"
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr "Nevar pārveidot attēlu uz sRGB krāsu telpu, apstrādājot “%s”"
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr "Neatbalstīta ne-RGB JPEG 2000 datne ar %d komponentēm iekš “%s”"
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "Neatbalstīta JPEG 2000 datne ar dziļumu %d iekš “%s”"
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr "Komponentes ievades attēlam “%s” nesakrīt"
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr "No “%s” trūkst viena vai vairākas R, G, B komponentes"
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr "Vienai vai vairākām R, G, B komponentēm ir parakstīti dati iekš “%s”"
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr "Kļūda, nolasot rindas %d komponenti %d no “%s”"
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr "JPEG 2000 attēlu ielādētājs"
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr "JPG attēlu ielādētājs"
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr "Mērķa ceļš un datnes nosaukums, izmanto “-” standarta izvadei"
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Kvalitāte"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr "JPEG saspiešanas kvalitāte (starp 1 un 100)"
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr "Nogludināšana"
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr "Gludināšanas pakāpe no 1 līdz 100; 0 izslēdz gludināšanu"
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Optimizēt"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr "Lietot optimizētas huffman tabulas"
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Progresīvs"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr "Izveidot progresīvus JPEG attēlus"
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Pelēktoņu"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr "Izveidot pelēktoņu (vienkrāsainu) attēlu"
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr "JPEG attēla saglabātājs (iziet cauri buferim, saglabā kā blakusefektu)"
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilons"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Izsvērtā logaritma kļūda"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Apstrādes loga rādius"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr "Alfa slieksnis vairāku līmeņu apstrādei"
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr "Trimap ietekmes koeficients"
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr "Izmantojamo samazināto paraugu lasījumu līmeņu skaits"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Aktīvie līmeņi"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr "Līmeņu skaits, lai veiktu risināšanu"
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++"Ja lietotājs ir devis trūcīgu tri-karti un ievades attēlu, izveidot "
++"priekšplāna alfas matējumu. Iestatiet balto kā izvēlētu un melno kā "
++"neizvēlētu tri-kartei."
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Aizpildījuma krāsa"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++"Krāsa, ar ko aizpildīt, izmantojiet 0 blīvumu, lai deaktivētu aizpildīšanu"
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr "Vilkuma krāsa"
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr "Krāsa, kādā ir otas vilkums"
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr "Vilkuma platums"
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr "Platums otai, ar ko tiek vilkts gar ceļu"
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr "Vilkuma blīvums"
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++"Vilkuma blīvums. Ņemiet vērā, uzvedība nav kā SVG, jo pašlaik vilkšana tiek "
++"veikta ar aerogrāfa rīku"
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "Stingrums"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr "Otas stingrums. 0.0 ir mīksta ota, 1.0 ir cieta ota"
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr "Aizpildīšanas kārtula"
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr "Kā noteikt, ko aizpildīt (nonzero|evenodd)"
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Pārveidot"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr "SVG stila apraksts, ko pārveidot"
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr "Aizpildījuma blīvums"
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr "Aizpildījuma blīvums, ko izmantot"
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr "Vektors"
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr "GeglVector, kas reprezentē vilkuma ceļu"
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr "Attēlo otas vilkumu"
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "GdkPixbuf, ko izmantot"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr "Izmanto GdkPixbuf, kas atrodas atmiņā iekš <em>pixbuf</em>."
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr "PNG attēlu ielādētājs."
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr "Mērķa ceļš un datnes nosaukums, izmanto “-” standarta izvadei."
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Saspiešana"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr "PNG saspiešanas līmenis no 1 līdz 9"
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Bitu dziļums"
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr "8 un 16 ir starp pašlaik pieņemtajām vērtībām."
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr "PNG attēla saglabātājs (iziet cauri buferim, saglabā kā blakusefektu)."
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr "PPM attēlu ielādētājs."
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Jēls (raw) formāts"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr "PPM attēlu saglabātājs (portējamas pikseļu kartes saglabātājs)."
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr "RGBE attēla ielādētājs (Radiance HDR formāts)."
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr "RGBE attēla saglabātājs (Radiance HDR formāts)"
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr "Pixbuf vieta"
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr "Vieta, kur saglabāt izvadi no GdkPixbuf."
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr "Saglabāt izvadu iekš GdkPixbuf."
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr "Ikona, ko izmantot izvades logam"
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++"Attēlot ievades buferi SDL logā (SDL implementācijas ierobežojumu dēļ tas ir "
++"ierobežots uz vienu displeja darbības procesu)."
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr "Ceļš uz SVG datni, ko ielādēt"
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr "Attēlotā attēla platums"
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr "Attēlotā attēla augstums"
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:239
++msgid "Load an SVG file using librsvg"
++msgstr "Ielādēt SVG datni, izmantojot librsvg"
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Teksts"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr "Virkne, ko attēlot (utf8)"
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Fontu saime"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr "Fontu saime (utf8)"
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Izmērs"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr "Aptuvenais teksta augstums pikseļos."
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr "Teksta krāsa (noklusējuma ir “white”)"
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr "Aplaušanas platums"
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++"Iestata platumu pikseļos, pie kuriem garas rindas tiks aplauztas. Lietojiet "
++"-1, lai neaplauztu."
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr "Izlīdzināšana"
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr "Vairāku rindu teksta līdzinājums (0=Kreisais, 1=Vidus, 2=Labais)"
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr "Attēlotais platums pikseļos. (tikai lasāms)"
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr "Attēlotais augstums pikseļos. (tikai lasāms)"
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr "Attēlot teksta virkni, izmantojot pango un cairo."
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Ceļš"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr "Ceļš uz v4l ierīci"
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr "pašreizējā kadra numurs, var mainīt, lai izraisītu attēla pārlādēšanu."
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "Kadri/sek"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr "automātiski izraisīt pārlādi tik reizes sekundē."
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++"Video4Linux ievade, tīmekļa kameras, kadru tvērēji un līdzīgas ierīces."
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr "Krāsa, kādā ir aizpildījums."
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr "Aizpildījuma blīvums, ko izmantot."
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr "Aizpildīšanas kārtula."
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr "kā noteikt, ko aizpildīt (nonzero|evenodd)"
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr "svg stila apraksts, ko pārveidot."
++
++#: ../operations/external/vector-fill.c:268
++msgid "Renders a filled region"
++msgstr "Attēlo aizpildīto apgabalu"
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr "Krāsa, kādā ir otas vilkums."
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr "Platums otai, ar ko tiek vilkts gar ceļu."
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++"Vilkuma blīvums. Ņemiet vērā, uzvedība nav kā SVG, jo pašlaik vilkšana tiek "
++"veikta ar aerogrāfa rīku."
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr "Attēlo vektora vilkumu"
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr "Matemātikas operācija: saskaitīšana (c = c + vērtība)"
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr "Porter Duff operācija: nullēt (d = 0.0f)"
++
++#: ../operations/generated/color-burn.c:165
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: krāsas aptumšošana (<code>ja cA * aB + cB * aA "
++"<= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) citādi: d = (cA == 0 ? 1 : (aA "
++"* (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</"
++"code>)"
++
++#: ../operations/generated/color-dodge.c:165
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: krāsas izgaismošana (<code>ja cA * aB + cB * "
++"aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) citādi: d = (cA "
++"== aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 "
++"- aA)</code>)"
++
++#: ../operations/generated/darken.c:163
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: aptumšot (<code>d = MIN (cA * aB, cB * aA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/difference.c:163
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: starpība (<code>d = cA + cB - 2 * (MIN (cA * "
++"aB, cB * aA))</code>)"
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr "Matemātikas operācija: salīšana (c = value==0.0f?0.0f:c/vērtība)"
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr "Porter Duff operācija: dst-atop (d = cB * aA + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr "Porter Duff operācija: dst-in (d = cB * aA)"
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr "Porter Duff operācija: dst-out (d = cB * (1.0f - aA))"
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr "Porter Duff operācija: dst-over (d = cB + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr "Porter Duff operācija: dst (d = cB)"
++
++#: ../operations/generated/exclusion.c:163
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: izslēgšana (<code>d = (cA * aB + cB * aA - 2 * "
++"cA * cB) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr "Matemātikas operācija: gamma (c = powf (c, vērtība))"
++
++#: ../operations/generated/hard-light.c:165
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: cieta gaisma (<code>ja 2 * cA < aA: d = 2 * cA "
++"* cB + cA * (1 - aB) + cB * (1 - aA) citādi: d = aA * aB - 2 * (aB - cB) * "
++"(aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/lighten.c:163
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: padarīt gaišāku (<code>d = MAX (cA * aB, cB * "
++"aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr "Matemātikas operācija: reizināt (c = c * vērtība)"
++
++#: ../operations/generated/overlay.c:165
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: pārklāt (<code>ja 2 * cB > aB: d = 2 * cA * cB "
++"+ cA * (1 - aB) + cB * (1 - aA) citādi: d = aA * aB - 2 * (aB - cB) * (aA - "
++"cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/plus.c:163
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr "SVG sapludināšanas operācija: pluss (<code>d = cA + cB</code>)"
++
++#: ../operations/generated/screen.c:163
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: aizsegs (<code>d = cA + cB - cA * cB</code>)"
++
++#: ../operations/generated/soft-light.c:167
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: mīksta gaisma (<code>ja 2 * cA < aA: d = cB * "
++"(aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 "
++"- aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA "
++"- aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); "
++"citādi: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - "
++"aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr "Porter Duff operācija: src-atop (d = cA * aB + cB * (1.0f - aA))"
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr "Porter Duff operācija: src-in (d = cA * aB)"
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr "Porter Duff operācija: src-out (d = cA * (1.0f - aB))"
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr "Porter Duff operācija: src-over (d = cA + cB * (1.0f - aA))"
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr "Porter Duff operācija: src (d = cA)"
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr "Matemātikas operācija: atņemšana (c = c - vērtība)"
++
++#: ../operations/generated/svg-multiply.c:163
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++"SVG sapludināšanas operācija: reizināšana (<code>d = cA * cB +  cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr "Porter Duff operācija: xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr "Virziena vektora X komponente"
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr "Virziena vektora Y komponente"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Pagriešanas leņķis (pa pulksteni)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Pagriezt buferi ap norādīto sākumu."
++
++#: ../operations/transform/scale-ratio.c:26 ../operations/transform/scale.c:29
++msgid "Horizontal scale factor"
++msgstr "Horizontālā mēroga koeficients"
++
++#: ../operations/transform/scale-ratio.c:28 ../operations/transform/scale.c:31
++msgid "Vertical scale factor"
++msgstr "Vertikālā mēroga koeficients"
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr "Mērogo buferi, vadoties pēc koeficienta."
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Horizontālais izmērs"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Vertikālais izmērs"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr "Mērogo buferi, vadoties pēc izmēra."
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr "Mērogo buferi."
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Horizontālās šķiebšanas apmērs"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Vertikālās šķiebšanas apmērs"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Sašķiebj buferi"
++
++#: ../operations/transform/transform-core.c:200
++msgid "Origin-x"
++msgstr "Pirmavots x"
++
++#: ../operations/transform/transform-core.c:201
++msgid "X coordinate of origin"
++msgstr "Pirmavota X koordināta"
++
++#: ../operations/transform/transform-core.c:208
++msgid "Origin-y"
++msgstr "Pirmavots y"
++
++#: ../operations/transform/transform-core.c:209
++msgid "Y coordinate of origin"
++msgstr "Pirmavota Y koordināta"
++
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Filtra tips (tuvākais, lineārs, lanczos, kubisks, lohalo)"
++
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++msgid "Hard edges"
++msgstr "Cietas malas"
++
++#: ../operations/transform/transform-core.c:230
++msgid "Lanczos width"
++msgstr "Lanczos platums"
++
++#: ../operations/transform/transform-core.c:231
++msgid "Width of the Lanczos function"
++msgstr "Lanczos funkcijas platums"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Pārveidošanas virkne"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr "Pārveido grupu (izmanto svg)."
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Horizontālā translācija"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Vertikālā translācija"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++"Maina bufera pozīciju (ar precizitāti līdz apakšpikseļiem), ja veselu "
++"skaitļu koordinātas ir padotas pa ātro ceļu, neizmantojot atkārtotu paraugu "
++"ņemšanu"
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr "Kvadrāta pikseļa reģiona rādiuss (platums un augstums būs rādiuss*2+1)"
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Iestata mērķa pikseli uz vērtību, kas ir maksimālā vērtība kastē, kas "
++"ieskauj pikseli"
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Iestata mērķa pikseli uz vērtību, kas ir minimālā vērtība kastē, kas ieskauj "
++"pikseli"
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr "Procentīle"
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr ""
++"Procentīle, ko izskaitļot; noklusējuma vērtība ir 50, kas ir vidējais filtrs"
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++"Iestata mērķa pikselim krāsu, kas atbilst dotajai procentīlei, kas krāsas ir "
++"sakārtotas pēc spīduma"
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr "Kešatmiņas buferis"
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr "GeglBuffer, kur notiek pieglabāšana"
++
++#: ../operations/workshop/buffer-cache.c:96
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++"Pieglabāt ievades buferi iekšēji, turpmākais process ņem šo buferi kā ievadi."
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Pulksteņrādītāja virzienā"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr "Pāriet uz pulksteņrādītāja virzienu"
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "No:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr "Sākuma leņķis krāsu pagriešanai"
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "Līdz:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr "Beigu leņķis krāsu pagriešanai"
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr "Izvēlieties, ja ir pelēktoņu attēli"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr "Toņa vērtība"
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr "Piesātinājuma vērtība"
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr "Mainīt uz šo"
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr "Pelēkā sliekšņa vērtība"
++
++#: ../operations/workshop/color-rotate.c:383
++msgid "Rotate colors on the image"
++msgstr "Pagriezt attēla krāsas"
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr "Vērtība elementam pozīcijā (1,1)"
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr "Vērtība elementam pozīcijā (1,2)"
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr "Vērtība elementam pozīcijā (1,3)"
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr "Vērtība elementam pozīcijā (1,4)"
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr "Vērtība elementam pozīcijā (1,5)"
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr "Vērtība elementam pozīcijā (2,1)"
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr "Vērtība elementam pozīcijā (2,2)"
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr "Vērtība elementam pozīcijā (2,3)"
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr "Vērtība elementam pozīcijā (2,4)"
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr "Vērtība elementam pozīcijā (2,5)"
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr "Vērtība elementam pozīcijā (3,1)"
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr "Vērtība elementam pozīcijā (3,2)"
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr "Vērtība elementam pozīcijā (3,3)"
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr "Vērtība elementam pozīcijā (3,4)"
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr "Vērtība elementam pozīcijā (3,5)"
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr "Vērtība elementam pozīcijā (4,1)"
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr "Vērtība elementam pozīcijā (4,2)"
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr "Vērtība elementam pozīcijā (4,3)"
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr "Vērtība elementam pozīcijā (4,4)"
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr "Vērtība elementam pozīcijā (4,5)"
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr "Vērtība elementam pozīcijā (5,1)"
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr "Vērtība elementam pozīcijā (5,2)"
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr "Vērtība elementam pozīcijā (5,3)"
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr "Vērtība elementam pozīcijā (5,4)"
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr "Vērtība elementam pozīcijā (5,5)"
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr "Dalītājs: "
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr "Dalītāja vērtība"
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr "Nobīde: "
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr "Nobīdes vērtība"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "Normalizēt"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "Normalizēt vai nē"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "Sarkanais kanāls"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "Zaļais kanāls"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "Zilais kanāls"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "Alfa kanāls"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr "Alfa svēršana"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr "Alfa svēršana"
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr "Mala"
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++msgstr ""
++"Malas veids, ko izvēlēties. Iespējas ir — extend, wrap, crop. Noklusējuma ir "
++"extend."
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr "Izveido attēlus, manuāli iestatot konvolūcijas matricu"
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "Flīzes izmērs"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr "Flīzes piesātinājums"
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr "Filtrs, kas kaut kādā mērā atgādina kubistu gleznošanas stilu"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "Pāra/nepāra"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr "Paturēt pāra/nepāra laukus"
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr "Horizontāls/vertikāls"
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr "Izvēlieties horizontālo vai vertikālo"
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr "Bloka izmērs"
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr "Bloka izmērs rindu/kolonnu rindpārleces novēršanai"
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr "Novērš rindpārleci attēlam"
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr "Bayer raksts"
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++"Izmantotais Bayer raksts. 0 strādā uz dažām nikon datnēm, 2 dažām Fuji "
++"datnēm."
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++"Veic pelēktoņi-uz-krāsa attēla mozaīkas novēršanu, izmantojot bimediāna "
++"interpolāciju."
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++"Veic naivo pelēktoņi-uz-krāsa attēla mozaīkas novēršanu, bez interpolācijas."
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++"Procentīle, ko izskaitļot; noklusējuma vērtība ir 50, kas ir vidējais filtrs."
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++"Iestata mērķa pikselim krāsu, kas atbilst dotajai procentīlei, kas krāsas ir "
++"sakārtotas pēc spīduma."
++
++#: ../operations/workshop/ditto.c:112
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++"Testa darbība, lai veiktu 1:1 attēlojumu no ievades uz izvadi, nolasot "
++"paraugus"
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Azimuts"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr "Azimuta vērtība"
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr "Augstums"
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr "Augstuma vērtība"
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Dziļums"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr "Pikseļu dziļums"
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++"Neobligāti parametri, lai pārrakstītu automātisko izvēli grofēšanas filtram. "
++"Izvēles iespējas ir emboss, blur-map"
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr "Imitē attēlu, ko iegūst ar gofrēšanu"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Bitu ātrums"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr "mērķa bitu ātrums"
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr "kadri sekundē"
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr "FFmpeg video izvades savācējs"
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr "Skripts"
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr "Lua skripts, kas satur šīs operācija implementāciju."
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr "uz diska saglabāts lua skripts, kas implementē operāciju."
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr "Lietotāja vērtība"
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr "(parādās lua globālajā mainīgajā “user_value”."
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++"Universāls filtru/veidotāju implementācijas spraudnis lua programmēšanas "
++"valodai."
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr "Ražotājs:"
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr "Ierakstiet lēcas ražotāju pareizi"
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Fotoaparāts:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr "Ierakstiet ražotāja nosaukumu pareizi"
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr "Lēca:"
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with uppercase letters"
++msgstr "Ievadiet savas lēcas modeli ar lielajiem burtiem"
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr "Lēcas fokusa garums"
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr "Aprēķināt b vērtību no fokusa"
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "Vidus"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr "Ja vēlaties vidu"
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr "Lēcas vidus x"
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr "Lēcas vidus koordinātas"
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr "Lēcas vidus y"
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr "Attēla mērogs"
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr "Automātiski labot d vērtības"
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr "Automātiski labot D vērtības lēcu koriģēšanas modeļiem."
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr "Modeļa sarkanais a:"
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr "Labošanas parametrs karam krāsu kanālam"
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr "Modeļa sarkanais b:"
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr "Modeļa sarkanais c:"
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr "Modeļa sarkanais d:"
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr "Modeļa zaļais a:"
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr "Modeļa zaļais b:"
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr "Modeļa zaļais c:"
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr "Modeļa zaļais d:"
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr "Modeļa zilais a:"
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr "Modeļa zilais b:"
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr "Modeļa zilais c:"
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr "Modeļa zilais d:"
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr "Modeļa alfa a:"
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr "Labošanas parametrs alfa kanālam"
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr "Modeļa alfa b:"
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr "Modeļa alfa c:"
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr "Modeļa alfa d:"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr "Sākuma x koordināta"
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr "Beigu x koordināta"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr "Sākuma y koordināta"
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr "Beigu y koordināta"
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr "Lauciņa platums"
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr "Lauciņa augstums"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Min"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr "Vērtība apakšā"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Maks"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr "Vērtība augšā"
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++"Attēlo spīduma profilus sarkanajām un zilajām komponentēm gar norādīto "
++"līniju ievades buferī, kas atlikts norādītā izmēra buferī."
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr "Fraktālis"
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++"Fraktāļa veids, ko izmantot. Iespējamās vērtības ir julia, mandelbrot. "
++"Noklusējuma vērtība ir mandelbrot."
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "X1 vērtība, novietojums"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "X2 vērtība, novietojums"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Y2 vērtība, novietojums"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr "Džuliāna sēklas X vērtība, novietojums"
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr "Džuliāna sēklas Y vērtība, novietojums"
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr "Dziļuma vērtība"
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr "Izbēgšana"
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr "Izbēgšanas garums"
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Abyss policy"
++msgstr "Bezdibeņa politika"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid "How to deal with pixels outside of the input buffer"
++msgstr "Kā tikt galā ar pikseļiem ārpus ievades bufera"
++
++#: ../operations/workshop/fractal-trace.c:161
++msgid "Unsupported fractal type"
++msgstr "Neatbalstīts fraktāļa tips"
++
++#: ../operations/workshop/fractal-trace.c:248
++msgid "Performs fractal trace on the image"
++msgstr "Veic fraktāļa izsekošanu attēlam"
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr "Attēla sapludināšanas operācija: vidējais (<tt>c = (cA + aB)/2</tt>)"
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++"Attēla sapludināšanas operācija: saplūduma-atspulgs (<tt>c = cB>=1.0?1.0:"
++"cA*cA / (1.0-cB)</tt>)"
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++"Attēla sapludināšanas operācija: negācija (<tt>c = 1.0 - fabs(1.0-cA-cB)</"
++"tt>)"
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++"Attēla sapludināšanas operācija: mīksta aptumšošana (<tt>c = (cA+cB<1.0)?"
++"0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++"Attēla sapludināšanas operācija: mīksta izgaismošana ((<tt>c = (cA+cB<1.0)?"
++"0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr "Attēla sapludināšanas operācija: atņemošs (<tt>c = cA+cB-1.0</tt>)"
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++"Horizontāli saliktas ievades, (iekš “output” “aux” ir novietots pa labi no "
++"“input”)"
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr "Malu saglabājoša aizmiglošana"
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "Krāsu pārejas viena mala"
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr "Krāsu pārejas otra mala"
++
++#: ../operations/workshop/linear-gradient.c:136
++msgid "Linear gradient renderer"
++msgstr "Lineāras krāsu pārejas attēlotājs"
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "Reālā"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "Reālā koordināta"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "Imaginārā"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr "Imaginārā koordināta"
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Līmenis"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Ūdens līmenis"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr "Maksimālais iterāciju skaits"
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr "Mandelbrota kopas attēlotājs"
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr "Horizontālās izklāšanas apmērs"
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr "Vertikālās izklāšanas apmērs"
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr "Trokšņa izklāšanas filtrs"
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr "Nejauša sēkla. -1 padošana nozīmē, ka sēklu izvēlas nejauši."
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr "Turbulence"
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr "Turbulences vērtība"
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr "Uz attēla veic plazmas efektu"
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Viens krāsu pārejas gals"
++
++#: ../operations/workshop/radial-gradient.c:128
++msgid "Radial gradient renderer"
++msgstr "Radiālas krāsu pārejas attēlotājs"
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++"Jēlu attēlu ielādētājs, ietin dcraw ar konveijeriem; nodrošina jēlu bayer "
++"režģi kā pelēktoņus; ja datnes formāts ir .rawbayer, tiks izmantots šis "
++"ielādētājs, nevis parastais dcraw ielādētājs; ja datnes formāts ir ."
++"rawbayerS, tiks apmainīti atgrieztie 16 bitu skaitļi (acīmredzot, pnm "
++"ielādētājs ir kļūdains)"
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr "Sliekšņa vērtība"
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr "Novērš sarkano acu efektu attēlā"
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr "Pāru skaits. Lielāks skaits saglabā precīzākas iezīmes"
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr ""
++"Procentīle, ko atgriezt; noklusējuma vērtība ir 50, kas ir vienāda ar vidējo"
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Trokšņu mazinošs, malu uzlabojošs, procentīles filtrs, kas balstīts uz "
++"Simetriskā Tuvākā Apkaime"
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr "Efekta stiprums"
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr "Efekta izmērs"
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Efekta stingrums"
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr "Vilkums"
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Uzvedība"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr "Operācijas uzvedība"
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr "Izskaitļot relatīvo pārvietojuma kartējumu no vilkuma"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "Sagriezt"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr "Sagriešanas leņķis grādos"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr "Savilkt"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr "Savilkšanas apjoms"
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++"Rādiuss (1.0 ir garākais aplis, kas iekļaujas attēlā, un 2.0 iet līdz pašam "
++"stūrim)"
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr "Veic sagriešanu un savilkšanu attēlam"
++
++#~ msgid "Global colour saturation factor"
++#~ msgstr "Globālais krāsu piesātināšanas koeficients"
++
++#~ msgid "Background"
++#~ msgstr "Fons"
++
++#~ msgid ""
++#~ "Optional parameter to override automatic selection of wrap background. "
++#~ "Choices are wrap, black, white and transparent."
++#~ msgstr ""
++#~ "Neobligāts parametrs, lai pārrakstītu automātisko aplaušanas fona izvēli. "
++#~ "Var izvēlēties wrap, black, white un transparent."
+diff --git a/po/pl.po b/po/pl.po
+index 93c27cc..90f9898 100644
+--- po/pl.po
++++ po/pl.po
+@@ -17,8 +17,8 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: gegl\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2012-03-31 16:02+0200\n"
+-"PO-Revision-Date: 2012-03-31 16:03+0200\n"
++"POT-Creation-Date: 2012-09-23 17:49+0200\n"
++"PO-Revision-Date: 2012-09-23 17:50+0200\n"
+ "Last-Translator: Piotr Drąg <piotrdrag at gmail.com>\n"
+ "Language-Team: Polish <gnomepl at aviary.pl>\n"
+ "Language: pl\n"
+@@ -30,41 +30,177 @@ msgstr ""
+ "X-Poedit-Language: Polish\n"
+ "X-Poedit-Country: Poland\n"
+ 
+-#: ../gegl/gegl-init.c:216
+-msgid "babls error tolerance, a value beteen 0.2 and 0.000000001"
+-msgstr ""
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++"użycie: %s [opcje] <plik | -- [op [op] ..]>\n"
++"\n"
++"  Opcje:\n"
++"     -h, --help      wyświetla ten komunikat pomocy\n"
++"\n"
++"     -i, --file      odczytuje kod XML z podanego pliku\n"
++"\n"
++"     -x, --xml       używa kodu XML podanego w następnym parametrze\n"
++"\n"
++"     --dot           wyświetla opis wykresu Graphviz\n"
++"\n"
++"     -o, --output    umieszcza utworzony obraz w podanym pliku, typ oparty\n"
++"                     na rozszerzeniu.\n"
++"\n"
++"     -p              zwiększa liczbę klatek różnych elementów po\n"
++"                     ukończeniu przetwarzania.\n"
++"\n"
++"     -X              wyświetla odczytywany kod XML\n"
++"\n"
++"     -v, --verbose   wyświetla informacje diagnostyczne podczas działania\n"
++"\n"
++"Wszystkie parametry podane po -- są uznawane za instrukcje łączone w małe\n"
++"kombinacje zamiast używania pliku XML, co umożliwia łatwe testowanie\n"
++"filtrów. Proszę pamiętać, że używana będzie domyślna wartość dla wszystkich\n"
++"właściwości.\n"
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr "BŁĄD: opcja \"%s\" wymaga parametru\n"
++
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr "Wyświetla na ekranie"
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr "Wyświetla kod XML"
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr "Umieszcza w pliku"
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
++msgstr "Wyświetla informacje o pomocy"
+ 
+-#: ../gegl/gegl-init.c:221
+-msgid "Where GEGL stores it's swap"
++#: ../bin/gegl-options.c:124 ../bin/gegl.c:257
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr "Nieznany tryb GeglOption: %d"
++
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
++msgstr "nieznany tryb"
++
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++"Przetworzony wiersz poleceń:\n"
++"\ttryb:      %s\n"
++"\tplik:      %s\n"
++"\txml:       %s\n"
++"\twyjście:   %s\n"
++"\tpozostałe: %s\n"
++"\t\n"
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
+ msgstr ""
++"\n"
++"\n"
++"nieznany parametr \"%s\", wyświetlanie pomocy zamiast tego\n"
++"\n"
++"\n"
++
++#: ../bin/gegl.c:147
++#, c-format
++msgid "Unable to read file: %s"
++msgstr "Nie można odczytać pliku: %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr "Nieprawidłowy wykres, przerywanie.\n"
++
++#: ../gegl/gegl-init.c:205
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "tolerancja błędów biblioteki babl, wartość między 0.2 a 0.000000001"
+ 
+-#: ../gegl/gegl-init.c:226
++#: ../gegl/gegl-init.c:210
++msgid "Where GEGL stores its swap"
++msgstr "Gdzie biblioteka GEGL przechowuje obszar wymiany"
++
++#: ../gegl/gegl-init.c:215
+ msgid "How much memory to (approximately) use for caching imagery"
+-msgstr ""
++msgstr "Ile pamięci (około) do użycia do pamięci tymczasowej obrazów"
+ 
+-#: ../gegl/gegl-init.c:231
++#: ../gegl/gegl-init.c:220
+ msgid "Default size of tiles in GeglBuffers"
+-msgstr ""
++msgstr "Domyślny rozmiar kafla w GeglBuffer"
+ 
+-#: ../gegl/gegl-init.c:236
+-msgid "The count of pixels to compute simulantous"
+-msgstr ""
++#: ../gegl/gegl-init.c:225
++msgid "The count of pixels to compute simultaneously"
++msgstr "Liczba pikseli do jednoczesnego obliczania"
+ 
+-#: ../gegl/gegl-init.c:241
++#: ../gegl/gegl-init.c:230
+ msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
+-msgstr ""
++msgstr "Jakość wyświetlania, wartość między 0.0 (szybkie) a 1.0 (standardowe)"
+ 
+-#: ../gegl/gegl-init.c:246
+-#, fuzzy
+-msgid "The number of concurrent processing threads to use."
+-msgstr "Liczba wykorzystywanych kierunków (tzn. pędzli)"
++#: ../gegl/gegl-init.c:235
++msgid "The number of concurrent processing threads to use"
++msgstr "Liczba jednocześnie używanych wątków przetwarzania"
++
++#: ../gegl/gegl-init.c:240
++msgid "Use OpenCL"
++msgstr "Użycie OpenGL"
++
++#: ../gegl/gegl-init.c:245
++msgid "Maximum number of entries in the file tile backend's writer queue"
++msgstr "Maksymalna liczba wpisów w kolejce zapisu mechanizmu kafla pliku"
+ 
+ #: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
+ #: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
+ #: ../gegl/module/geglmodule.c:393
+ #, c-format
+ msgid "Module '%s' load error: %s"
+-msgstr "Błąd wczytywania modułu \"%s\": %s"
++msgstr "Błąd podczas wczytywania modułu \"%s\": %s"
+ 
+ #: ../gegl/module/geglmodule.c:369
+ msgid "Module error"
+@@ -80,135 +216,14 @@ msgstr "Wczytanie się nie powiodło"
+ 
+ #: ../gegl/module/geglmodule.c:372
+ msgid "Not loaded"
+-msgstr "Niewczytano"
+-
+-#: ../operations/affine/affine.c:200
+-#, fuzzy
+-msgid "Origin-x"
+-msgstr "Oryginał"
+-
+-#: ../operations/affine/affine.c:201
+-#, fuzzy
+-msgid "X-coordinate of origin"
+-msgstr "Współrzędna górnego lewego rogu na osi X"
+-
+-#: ../operations/affine/affine.c:208
+-#, fuzzy
+-msgid "Origin-y"
+-msgstr "Oryginał"
+-
+-#: ../operations/affine/affine.c:209
+-#, fuzzy
+-msgid "Y-coordinate of origin"
+-msgstr "Współrzędna górnego lewego rogu na osi Y"
+-
+-#: ../operations/affine/affine.c:216 ../operations/common/gaussian-blur.c:34
+-#: ../operations/workshop/emboss.c:31
+-msgid "Filter"
+-msgstr "Filtr"
+-
+-#: ../operations/affine/affine.c:217
+-msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:223
+-#, fuzzy
+-msgid "Hard-edges"
+-msgstr "Twarda krawędź"
+-
+-#: ../operations/affine/affine.c:224
+-#, fuzzy
+-msgid "Hard edges"
+-msgstr "Twarda krawędź"
+-
+-#: ../operations/affine/affine.c:230
+-msgid "Lanczos-width"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:231
+-#, fuzzy
+-msgid "Width of lanczos function"
+-msgstr "Szerokość zaznaczenia"
+-
+-#: ../operations/affine/reflect.c:29
+-#, fuzzy
+-msgid "Direction vector's x component"
+-msgstr "Wektor kierunku"
+-
+-#: ../operations/affine/reflect.c:31
+-#, fuzzy
+-msgid "Direction vector's y component"
+-msgstr "Wektor kierunku"
+-
+-#: ../operations/affine/rotate.c:26
+-msgid "Angle to rotate (clockwize)"
+-msgstr ""
+-
+-#: ../operations/affine/rotate.c:31
+-msgid "Rotate the buffer around the specified origin."
+-msgstr ""
+-
+-#: ../operations/affine/scale.c:25
+-#, fuzzy
+-msgid "Horizontal scale factor."
+-msgstr "Kolor poziomy"
+-
+-#: ../operations/affine/scale.c:26
+-#, fuzzy
+-msgid "Vertical scale factor."
+-msgstr "Kolor pionowy"
+-
+-#: ../operations/affine/scale.c:31
+-#, fuzzy
+-msgid "Scales the buffer."
+-msgstr "Skalowanie barwy:"
+-
+-#: ../operations/affine/shear.c:26
+-#, fuzzy
+-msgid "Horizontal shear amount."
+-msgstr "Poziomy gradient"
+-
+-#: ../operations/affine/shear.c:28
+-#, fuzzy
+-msgid "Vertical shear amount."
+-msgstr "Pionowy gradient"
+-
+-#: ../operations/affine/shear.c:33
+-#, fuzzy
+-msgid "Shears the buffer."
+-msgstr "Wk_lej bufor"
+-
+-#: ../operations/affine/transform.c:25
+-#, fuzzy
+-msgid "Transformation string"
+-msgstr "Przekształcenie macierzowe"
+-
+-#: ../operations/affine/transform.c:30
+-msgid "Transforms the group (used by svg)."
+-msgstr ""
+-
+-#: ../operations/affine/translate.c:26
+-#, fuzzy
+-msgid "Horizontal translation."
+-msgstr "Poziomy gradient"
+-
+-#: ../operations/affine/translate.c:28
+-#, fuzzy
+-msgid "Vertical translation."
+-msgstr "Pionowy gradient"
+-
+-#: ../operations/affine/translate.c:33
+-msgid ""
+-"Repositions the buffer (with subpixel precision), if integer coordinates are "
+-"passed a fast-path without resampling is used."
+-msgstr ""
++msgstr "Nie wczytano"
+ 
+ #: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
+ msgid "Blur radius"
+ msgstr "Promień rozmycia"
+ 
+ #: ../operations/common/bilateral-filter.c:28
+-#: ../operations/common/box-blur.c:25
+ msgid "Radius of square pixel region, (width and height will be radius*2+1)."
+ msgstr ""
+ 
+@@ -221,7 +236,7 @@ msgstr "Wykrywanie krawędzi"
+ msgid "Amount of edge preservation"
+ msgstr ""
+ 
+-#: ../operations/common/bilateral-filter.c:185
++#: ../operations/common/bilateral-filter.c:315
+ msgid ""
+ "An edge preserving blur filter that can be used for noise reduction. It is a "
+ "gaussian blur where the contribution of neighbourhood pixels are weighted by "
+@@ -231,9 +246,9 @@ msgstr ""
+ #: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
+ #: ../operations/common/difference-of-gaussians.c:26
+ #: ../operations/common/difference-of-gaussians.c:28
+-#: ../operations/common/dropshadow.c:30
+-#: ../operations/common/matting-global.c:28 ../operations/common/snn-mean.c:26
+-#: ../operations/common/stress.c:27 ../operations/external/matting-levin.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
+ #: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
+ #: ../operations/workshop/box-percentile.c:27
+ #: ../operations/workshop/disc-percentile.c:26
+@@ -243,8 +258,12 @@ msgstr ""
+ msgid "Radius"
+ msgstr "Promień"
+ 
+-#: ../operations/common/box-blur.c:413
+-msgid "Performs an averaging of a square box of pixels."
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
+ msgstr ""
+ 
+ #. ... are the properties of the filter, these are all scalar values
+@@ -261,7 +280,7 @@ msgid "Range scale factor"
+ msgstr ""
+ 
+ #: ../operations/common/brightness-contrast.c:31
+-#: ../operations/common/reinhard05.c:27
++#: ../operations/common/reinhard05.c:27 ../operations/common/softglow.c:27
+ msgid "Brightness"
+ msgstr "Jasność"
+ 
+@@ -270,7 +289,7 @@ msgstr "Jasność"
+ msgid "Amount to increase brightness"
+ msgstr "Dostosowuje jasność podglądu"
+ 
+-#: ../operations/common/brightness-contrast.c:198
++#: ../operations/common/brightness-contrast.c:159
+ #, fuzzy
+ msgid "Changes the light level and contrast."
+ msgstr "Zmienia wymiary zawartości warstwy"
+@@ -296,7 +315,7 @@ msgid ""
+ msgstr ""
+ 
+ #: ../operations/common/buffer-sink.c:83
+-#: ../operations/common/write-buffer.c:87
++#: ../operations/common/write-buffer.c:132
+ msgid "A GEGL buffer destination surface."
+ msgstr ""
+ 
+@@ -308,14 +327,14 @@ msgstr ""
+ msgid "The GeglBuffer to load into the pipeline"
+ msgstr ""
+ 
+-#: ../operations/common/buffer-source.c:116
++#: ../operations/common/buffer-source.c:177
+ msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
+ msgstr ""
+ 
+ #: ../operations/common/c2g.c:28
+ msgid ""
+-"Neighbourhood taken into account, this is the radius in pixels taken into "
+-"account when deciding which colors map to which gray values."
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
+ msgstr ""
+ 
+ #: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
+@@ -323,27 +342,42 @@ msgid "Samples"
+ msgstr "Próbki"
+ 
+ #: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
+-msgid "Number of samples to do per iteration looking for the range of colors."
++msgid "Number of samples to do per iteration looking for the range of colors"
+ msgstr ""
+ 
+ #: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
+-#: ../operations/common/stress.c:31 ../operations/workshop/mandelbrot.c:31
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
+ msgid "Iterations"
+ msgstr "Iteracje"
+ 
+ #: ../operations/common/c2g.c:32
+ msgid ""
+-"Number of iterations, a higher number of iterations provides a less noisy "
+-"results at computational cost."
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
+ msgstr ""
+ 
+-#: ../operations/common/c2g.c:193
++#: ../operations/common/c2g.c:493
+ msgid ""
+-"Color to grayscale conversion, uses envelopes formed from spatial  color "
+-"differences to perform color-feature preserving grayscale  spatial contrast "
+-"enhancement."
++"Color to grayscale conversion, uses envelopes formed from spatial color "
++"differences to perform color-feature preserving grayscale spatial contrast "
++"enhancement"
+ msgstr ""
+ 
++#: ../operations/common/cartoon.c:25
++#, fuzzy
++msgid "Mask radius"
++msgstr "Promień rozmycia"
++
++#: ../operations/common/cartoon.c:27
++#, fuzzy
++msgid "Percent black"
++msgstr "Kafelek procentu:"
++
++#: ../operations/common/cartoon.c:376
++msgid "Cartoon effect"
++msgstr "Efekt kreskówki"
++
+ #: ../operations/common/checkerboard.c:25
+ #: ../operations/common/fractal-explorer.c:30
+ #: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
+@@ -356,7 +390,7 @@ msgstr "Szerokość"
+ 
+ #: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
+ #, fuzzy
+-msgid "Horizontal width of cells pixels."
++msgid "Horizontal width of cells pixels"
+ msgstr "Poziome odstępy pomiędzy liniami siatki."
+ 
+ #: ../operations/common/checkerboard.c:27
+@@ -371,35 +405,33 @@ msgstr "Wysokość"
+ 
+ #: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
+ #, fuzzy
+-msgid "Vertical width of cells in pixels."
++msgid "Vertical width of cells in pixels"
+ msgstr "Pionowe odstępy pomiędzy liniami siatki."
+ 
+ #: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
+ #: ../operations/common/mirrors.c:36
+-#, fuzzy
+ msgid "X offset"
+-msgstr "Przesunięcie _X:"
++msgstr "Przesunięcie X"
+ 
+ #: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
+ #, fuzzy
+-msgid "Horizontal offset (from origin) for start of grid."
++msgid "Horizontal offset (from origin) for start of grid"
+ msgstr "Poziome przesunięcie dla rozmieszczania"
+ 
+ #: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
+ #: ../operations/common/mirrors.c:38
+-#, fuzzy
+ msgid "Y offset"
+-msgstr "Przesunięcie _Y:"
++msgstr "Przesunięcie Y"
+ 
+ #: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
+ #, fuzzy
+-msgid "Vertical offset (from origin) for start of grid."
++msgid "Vertical offset (from origin) for start of grid"
+ msgstr "Pionowe przesunięcie dla rozmieszczania"
+ 
+ #: ../operations/common/checkerboard.c:33
+-#: ../operations/common/color-to-alpha.c:27 ../operations/common/color.c:24
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:24
+ #: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
+-#: ../operations/common/vignette.c:24 ../operations/external/text.c:31
++#: ../operations/common/vignette.c:25 ../operations/external/text.c:31
+ #: ../operations/external/vector-fill.c:27
+ #: ../operations/external/vector-stroke.c:27
+ #: ../operations/workshop/linear-gradient.c:28
+@@ -414,9 +446,8 @@ msgstr ""
+ #: ../operations/common/checkerboard.c:35
+ #: ../operations/workshop/linear-gradient.c:30
+ #: ../operations/workshop/radial-gradient.c:30
+-#, fuzzy
+ msgid "Other color"
+-msgstr "Kolor sfery"
++msgstr "Inne kolory"
+ 
+ #: ../operations/common/checkerboard.c:36
+ msgid "The other cell color (defaults to 'white')"
+@@ -427,19 +458,87 @@ msgstr ""
+ msgid "Checkerboard renderer"
+ msgstr "Szachownica"
+ 
+-#: ../operations/common/color-temperature.c:266
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr "Czerwone bity"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr "Liczba bitów dla kanału czerwieni"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr "Zielone bity"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr "Liczba bitów dla kanału zieleni"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr "Niebieskie bity"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr "Liczba bitów dla kanału niebieskiego"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr "Bity alfy"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr "Liczba bitów dla kanału alfy"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:39
++#, fuzzy
++msgid "The dithering strategy to use"
++msgstr "_Biała (bez przezroczystości)"
++
++#: ../operations/common/color-reduction.c:495
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Pierwotna temperatura"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:280
+ msgid "Allows changing the color temperature of an image."
+ msgstr ""
+ 
+-#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:25
+-msgid "The color to render (defaults to 'black')"
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
+ msgstr ""
+ 
+-#: ../operations/common/color-to-alpha.c:170
++#: ../operations/common/color-to-alpha.c:197
+ #, fuzzy
+ msgid "Performs color-to-alpha on the image."
+ msgstr "Ustawia profil kolorów na obrazie"
+ 
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr ""
++
+ #: ../operations/common/color.c:88
+ msgid ""
+ "Generates a buffer entirely filled with the specified color, crop it to get "
+@@ -456,17 +555,16 @@ msgid "Number of curve sampling points.  0 for exact calculation."
+ msgstr ""
+ 
+ #: ../operations/common/contrast-curve.c:27
+-#, fuzzy
+ msgid "Curve"
+-msgstr "Krzywe"
++msgstr "Krzywa"
+ 
+ #: ../operations/common/contrast-curve.c:27
+ msgid "The contrast curve."
+-msgstr ""
++msgstr "Krzywa kontrastu."
+ 
+ #: ../operations/common/contrast-curve.c:125
+ msgid "Adjusts the contrast of the image according to a curve."
+-msgstr ""
++msgstr "Dostosowuje kontrast obrazu zgodnie z krzywą."
+ 
+ #: ../operations/common/difference-of-gaussians.c:25
+ msgid "Radius 1"
+@@ -488,6 +586,29 @@ msgstr ""
+ msgid "Display the input buffer in a window."
+ msgstr ""
+ 
++#: ../operations/common/dot.c:26 ../operations/common/pixelize.c:25
++#, fuzzy
++msgid "Block Width"
++msgstr "Rozmiar bloku"
++
++#: ../operations/common/dot.c:27
++#, fuzzy
++msgid "Size of each block in pixels"
++msgstr "Szerokość obręczy"
++
++#: ../operations/common/dot.c:28
++#, fuzzy
++msgid "Dot size ratio"
++msgstr "Iteracja"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr ""
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr ""
++
+ #: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
+ #: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
+ #: ../operations/external/vector-fill.c:30
+@@ -496,37 +617,32 @@ msgid "Opacity"
+ msgstr "Krycie"
+ 
+ #: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
+-#: ../operations/common/rectangle.c:29 ../operations/common/waves.c:26
+-#: ../operations/core/crop.c:25
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
+ msgid "X"
+ msgstr "X"
+ 
+ #: ../operations/common/dropshadow.c:27
+ #, fuzzy
+-msgid "Horizontal shadow offset."
++msgid "Horizontal shadow offset"
+ msgstr "Przesunięcie cienia X"
+ 
+ #: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
+-#: ../operations/common/rectangle.c:31 ../operations/common/waves.c:29
+-#: ../operations/core/crop.c:26
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
+ msgid "Y"
+ msgstr "Y"
+ 
+ #: ../operations/common/dropshadow.c:29
+ #, fuzzy
+-msgid "Vertical shadow offset."
++msgid "Vertical shadow offset"
+ msgstr "Przesunięcie cienia X"
+ 
+-#: ../operations/common/dropshadow.c:31
+-#, fuzzy
+-msgid "Blur radius."
+-msgstr "Promień rozmycia"
+-
+ #: ../operations/common/dropshadow.c:82
+-msgid "Creates a dropshadow effect on the input buffer."
++msgid "Creates a dropshadow effect on the input buffer"
+ msgstr ""
+ 
+-#: ../operations/common/edge-laplace.c:245
++#: ../operations/common/edge-laplace.c:521
+ msgid "High-resolution edge detection"
+ msgstr "Wykrywanie krawędzi wysokiej rozdzielczości"
+ 
+@@ -545,7 +661,7 @@ msgstr "Pionowo"
+ msgid "Keep Signal"
+ msgstr "Zachowanie oryginału"
+ 
+-#: ../operations/common/edge-sobel.c:203
++#: ../operations/common/edge-sobel.c:352
+ msgid "Specialized direction-dependent edge detection"
+ msgstr "Wyspecjalizowane wykrywanie krawędzi zależne od kierunku"
+ 
+@@ -574,14 +690,15 @@ msgid "Weight Sigma"
+ msgstr "Waga"
+ 
+ #: ../operations/common/exp-combine.c:32
+-msgid "Weight distrubtion sigma controlling response contributions"
++msgid "Weight distribution sigma controlling response contributions"
+ msgstr ""
+ 
+ #: ../operations/common/exp-combine.c:1293
+ msgid "Combine multiple scene exposures into one high range buffer"
+ msgstr ""
+ 
+-#: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/common/fattal02.c:33 ../operations/common/noise-rgb.c:37
++#: ../operations/common/noise.c:25
+ #: ../operations/workshop/convolution-matrix.c:86
+ msgid "Alpha"
+ msgstr "Alfa"
+@@ -599,13 +716,15 @@ msgid "Strength of local detail enhancement"
+ msgstr ""
+ 
+ #: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/common/noise-hsv.c:31
+ #: ../operations/workshop/color-rotate.c:50
+ msgid "Saturation"
+ msgstr "Nasycenie"
+ 
+ #: ../operations/common/fattal02.c:41 ../operations/common/mantiuk06.c:36
+-msgid "Global colour saturation factor"
+-msgstr ""
++#, fuzzy
++msgid "Global color saturation factor"
++msgstr "Współczynnik wygładzania JPEG:"
+ 
+ #: ../operations/common/fattal02.c:42
+ msgid "Noise"
+@@ -627,8 +746,8 @@ msgid "Fractal type"
+ msgstr "Typ fraktala"
+ 
+ #: ../operations/common/fractal-explorer.c:35
+-msgid "Fractal Type"
+-msgstr "Typ fraktala"
++msgid "Type of a fractal"
++msgstr ""
+ 
+ #: ../operations/common/fractal-explorer.c:37
+ msgid "Left"
+@@ -693,27 +812,24 @@ msgid "Blue stretching factor"
+ msgstr "Automatyczne rozciąganie kontrastu"
+ 
+ #: ../operations/common/fractal-explorer.c:54
+-#, fuzzy
+ msgid "Red mode"
+-msgstr "Tryb gradientu"
++msgstr "Tryb czerwieni"
+ 
+ #: ../operations/common/fractal-explorer.c:55
+ msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
+ msgstr ""
+ 
+ #: ../operations/common/fractal-explorer.c:56
+-#, fuzzy
+ msgid "Green mode"
+-msgstr "Tryb gradientu"
++msgstr "Tryb zieleni"
+ 
+ #: ../operations/common/fractal-explorer.c:57
+ msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
+ msgstr ""
+ 
+ #: ../operations/common/fractal-explorer.c:58
+-#, fuzzy
+ msgid "Blue mode"
+-msgstr "Tryb gradientu"
++msgstr "Tryb niebieskiego"
+ 
+ #: ../operations/common/fractal-explorer.c:59
+ msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
+@@ -721,21 +837,18 @@ msgstr ""
+ 
+ #: ../operations/common/fractal-explorer.c:61
+ #: ../operations/common/fractal-explorer.c:62
+-#, fuzzy
+ msgid "Red inversion"
+-msgstr "Inwersja"
++msgstr "Inwersja czerwieni"
+ 
+ #: ../operations/common/fractal-explorer.c:63
+ #: ../operations/common/fractal-explorer.c:64
+-#, fuzzy
+ msgid "Green inversion"
+-msgstr "Inwersja"
++msgstr "Inwersja zieleni"
+ 
+ #: ../operations/common/fractal-explorer.c:65
+ #: ../operations/common/fractal-explorer.c:66
+-#, fuzzy
+ msgid "Blue inversion"
+-msgstr "Inwersja"
++msgstr "Inwersja niebieskiego"
+ 
+ #: ../operations/common/fractal-explorer.c:68
+ msgid "Colors"
+@@ -758,9 +871,8 @@ msgid "Fractal Explorer"
+ msgstr "Przeglądarka fraktali"
+ 
+ #: ../operations/common/gaussian-blur.c:30
+-#, fuzzy
+ msgid "Size X"
+-msgstr "Rozmiar"
++msgstr "Rozmiar X"
+ 
+ #: ../operations/common/gaussian-blur.c:31
+ msgid ""
+@@ -768,25 +880,30 @@ msgid ""
+ msgstr ""
+ 
+ #: ../operations/common/gaussian-blur.c:32
+-#, fuzzy
+ msgid "Size Y"
+-msgstr "Rozmiar"
++msgstr "Rozmiar Y"
+ 
+ #: ../operations/common/gaussian-blur.c:33
+ msgid ""
+ "Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
+ msgstr ""
+ 
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filtr"
++
+ #: ../operations/common/gaussian-blur.c:35
+ msgid ""
+ "Optional parameter to override the automatic selection of blur filter. "
+ "Choices are fir, iir, auto"
+ msgstr ""
+ 
+-#: ../operations/common/gaussian-blur.c:496
++#: ../operations/common/gaussian-blur.c:731
+ msgid ""
+-"Performs an averaging of neighbouring pixels with the normal distribution as "
+-"weighting."
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
+ msgstr ""
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:24
+@@ -821,7 +938,7 @@ msgstr ""
+ msgid "GeglBuffer file writer."
+ msgstr ""
+ 
+-#: ../operations/common/grey.c:79
++#: ../operations/common/grey.c:104
+ msgid "Turns the image greyscale"
+ msgstr "Konwertuje obraz do odcieni szarości"
+ 
+@@ -831,7 +948,7 @@ msgstr "Szerokość linii"
+ 
+ #: ../operations/common/grid.c:33
+ #, fuzzy
+-msgid "Width of grid lines in pixels."
++msgid "Width of grid lines in pixels"
+ msgstr "Promień zaokrąglania w pikselach"
+ 
+ #: ../operations/common/grid.c:34
+@@ -840,7 +957,7 @@ msgstr "Wysokość linii"
+ 
+ #: ../operations/common/grid.c:35
+ #, fuzzy
+-msgid "Height of grid lines in pixels."
++msgid "Height of grid lines in pixels"
+ msgstr "Promień zaokrąglania w pikselach"
+ 
+ #: ../operations/common/grid.c:37
+@@ -852,19 +969,58 @@ msgstr "Profil kolorów"
+ msgid "Grid renderer"
+ msgstr ""
+ 
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr "Błędne piksele"
++
++#: ../operations/common/image-compare.c:26
++#, fuzzy
++msgid "Number of differing pixels."
++msgstr "_Maksymalna liczba kolorów:"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Maksymalna różnica"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "Maksymalna różnica między dwoma pikselami."
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr "Średnia różnica (błędna)"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr "Średnia różnica między błędnymi pikselami."
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr "Średnia różnica (całkowita)"
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr "Średnia różnica między wszystkimi pikselami."
++
++#: ../operations/common/image-compare.c:177
++msgid ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
++msgstr ""
++
+ #: ../operations/common/introspect.c:26
+ msgid "Node"
+ msgstr "Węzeł"
+ 
+ #: ../operations/common/introspect.c:26
+ msgid "GeglNode to introspect"
+-msgstr ""
++msgstr "GeglNode do zbadania"
+ 
+ #: ../operations/common/introspect.c:160
+ msgid "GEGL graph visualizer."
+ msgstr ""
+ 
+-#: ../operations/common/invert.c:130
++#: ../operations/common/invert.c:86
+ msgid ""
+ "Inverts the components (except alpha), the result is the corresponding "
+ "\"negative\" image."
+@@ -889,15 +1045,16 @@ msgstr "Kolor poziomy"
+ msgid "Vertical position"
+ msgstr "Kolor pionowy"
+ 
+-#: ../operations/common/layer.c:38
+-#, fuzzy
+-msgid "scale"
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
+ msgstr "Skalowanie"
+ 
+ #: ../operations/common/layer.c:39
+ #, fuzzy
+ msgid "Scale 1:1 size"
+-msgstr "Sk_ala 1:"
++msgstr "Skala 1:1"
+ 
+ #: ../operations/common/layer.c:40
+ msgid "Source"
+@@ -905,11 +1062,11 @@ msgstr "Źródło"
+ 
+ #: ../operations/common/layer.c:41
+ msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
+-msgstr ""
++msgstr "Źródłowy plik danych (png, jpg, raw, svg, bmp, tif...)"
+ 
+ #: ../operations/common/layer.c:267
+-msgid "A layer in the traditional sense."
+-msgstr ""
++msgid "A layer in the traditional sense"
++msgstr "Warstwa w tradycyjnym rozumieniu"
+ 
+ #: ../operations/common/lens-distortion.c:33
+ msgid "Main:"
+@@ -917,9 +1074,8 @@ msgstr "Główne:"
+ 
+ #: ../operations/common/lens-distortion.c:34
+ #: ../operations/common/lens-distortion.c:36
+-#, fuzzy
+ msgid "Main value of distortion"
+-msgstr "Zniekształcenie soczewki"
++msgstr "Główna wartość zniekształcenia"
+ 
+ #: ../operations/common/lens-distortion.c:35
+ msgid "Zoom:"
+@@ -947,18 +1103,18 @@ msgid "X shift:"
+ msgstr "Przesunięcie X:"
+ 
+ #: ../operations/common/lens-distortion.c:42
+-msgid "Shift vertical"
+-msgstr "Przesunięcie pionowe"
++msgid "Shift horizontal"
++msgstr "Przesunięcie poziome"
+ 
+ #: ../operations/common/lens-distortion.c:43
+ msgid "Y shift:"
+ msgstr "Przesunięcie Y:"
+ 
+ #: ../operations/common/lens-distortion.c:44
+-msgid "Shift horizontal"
+-msgstr "Przesunięcie poziome"
++msgid "Shift vertical"
++msgstr "Przesunięcie pionowe"
+ 
+-#: ../operations/common/lens-distortion.c:321
++#: ../operations/common/lens-distortion.c:338
+ #: ../operations/workshop/external/lens-correct.c:476
+ msgid "Copies image performing lens distortion correction."
+ msgstr ""
+@@ -998,24 +1154,22 @@ msgstr ""
+ msgid "Highest luminance level in output"
+ msgstr ""
+ 
+-#: ../operations/common/levels.c:103
++#: ../operations/common/levels.c:198
+ #, fuzzy
+ msgid "Remaps the intensity range of the image"
+ msgstr "Zmienia wymiary warstwy do wymiarów obrazu"
+ 
+ #: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
+-#: ../operations/common/raw-load.c:27 ../operations/external/ff-load.c:25
+-#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
+-#: ../operations/external/png-load.c:27 ../operations/external/ppm-load.c:25
+-#: ../operations/external/rgbe-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
+ #: ../operations/workshop/rawbayer-load.c:25
+ msgid "Path of file to load."
+-msgstr ""
++msgstr "Ścieżka pliku do wczytania."
+ 
+ #: ../operations/common/load.c:180
+ msgid ""
+ "Multipurpose file loader, that uses other native handlers, and fallback "
+-"conversion using image magick's convert."
++"conversion using Image Magick's convert."
+ msgstr ""
+ 
+ #: ../operations/common/magick-load.c:136
+@@ -1049,10 +1203,10 @@ msgid "Sampler"
+ msgstr "Próbka"
+ 
+ #: ../operations/common/map-absolute.c:23
+-#: ../operations/common/map-relative.c:27
+-#, fuzzy
+-msgid "Sampler used internaly"
+-msgstr "Menu punktów wzorcowych"
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Wewnętrznie używana próbka"
+ 
+ #: ../operations/common/map-absolute.c:148
+ msgid ""
+@@ -1070,89 +1224,32 @@ msgid ""
+ "relative mapping value of 1.0 corresponds to."
+ msgstr ""
+ 
+-#: ../operations/common/map-relative.c:156
++#: ../operations/common/map-relative.c:173
+ msgid ""
+ "sample input with an auxiliary buffer that contain relative source "
+ "coordinates"
+ msgstr ""
+ 
+-#: ../operations/common/matting-global.c:25
+-#: ../operations/external/matting-levin.c:25
+-msgid "Epsilon"
+-msgstr ""
++#: ../operations/common/matting-global.c:26
++#, fuzzy
++msgid "Number of iterations"
++msgstr "_Maksymalna liczba kolorów:"
+ 
+-#: ../operations/common/matting-global.c:27
+-#: ../operations/external/matting-levin.c:27
+-msgid "Log of the error weighting"
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
+ msgstr ""
+ 
+-#: ../operations/common/matting-global.c:30
+-#: ../operations/external/matting-levin.c:30
++#: ../operations/common/mblur.c:25
+ #, fuzzy
+-msgid "Radius of the processing window"
+-msgstr "Promień zmiękczania"
++msgid "Dampness"
++msgstr "Losowość"
+ 
+-#: ../operations/common/matting-global.c:31
+-#: ../operations/common/threshold.c:25
+-#: ../operations/external/matting-levin.c:31
+-#: ../operations/workshop/color-rotate.c:54
+-#: ../operations/workshop/red-eye-removal.c:31
+-msgid "Threshold"
+-msgstr "Progowanie"
+-
+-#: ../operations/common/matting-global.c:33
+-#: ../operations/external/matting-levin.c:33
+-msgid "Alpha threshold for multilevel processing"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:34
+-#: ../operations/external/matting-levin.c:34
+-msgid "Lambda"
+-msgstr "Lambda"
+-
+-#: ../operations/common/matting-global.c:35
+-#: ../operations/external/matting-levin.c:35
+-msgid "Trimap influence factor"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:36
+-#: ../operations/common/posterize.c:25
+-#: ../operations/external/matting-levin.c:36
+-msgid "Levels"
+-msgstr "Poziomy"
+-
+-#: ../operations/common/matting-global.c:38
+-#: ../operations/external/matting-levin.c:38
+-#, fuzzy
+-msgid "Number of downsampled levels to use"
+-msgstr "_Liczba cofnięć (1 - 99):"
+-
+-#: ../operations/common/matting-global.c:39
+-#: ../operations/external/matting-levin.c:39
+-msgid "Active Levels"
+-msgstr "Aktywne poziomy"
+-
+-#: ../operations/common/matting-global.c:41
+-#: ../operations/external/matting-levin.c:41
+-#, fuzzy
+-msgid "Number of levels to perform solving"
+-msgstr "Liczba skrętów"
+-
+-#: ../operations/common/matting-global.c:554
+-#: ../operations/external/matting-levin.c:1428
+-msgid ""
+-"Given a sparse user supplied tri-map and an input image, create a foreground "
+-"alpha mat. Set white as selected, black as unselected, for the tri-map."
+-msgstr ""
+-
+-#: ../operations/common/mblur.c:25
+-#, fuzzy
+-msgid "Dampness"
+-msgstr "Losowość"
+-
+-#: ../operations/common/mblur.c:26
+-msgid "The value represents the contribution of the past to the new frame."
+-msgstr ""
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr ""
+ 
+ #: ../operations/common/mblur.c:144
+ msgid "Accumulating motion blur"
+@@ -1262,36 +1359,34 @@ msgstr "Z obszarami przezroczystymi"
+ msgid "Applies mirroring effect on the image."
+ msgstr "Zastosowuje różne efekty świetlne do obrazu"
+ 
+-#: ../operations/common/mono-mixer.c:26
++#: ../operations/common/mono-mixer.c:26 ../operations/common/noise-rgb.c:31
+ #: ../operations/workshop/convolution-matrix.c:83
+ msgid "Red"
+ msgstr "Czerwony"
+ 
+ #: ../operations/common/mono-mixer.c:27
+-#, fuzzy
+ msgid "Amount of red"
+-msgstr "Ilość"
++msgstr "Ilość czerwieni"
+ 
+-#: ../operations/common/mono-mixer.c:28
++#: ../operations/common/mono-mixer.c:28 ../operations/common/noise-rgb.c:33
+ #: ../operations/workshop/convolution-matrix.c:84
+ msgid "Green"
+ msgstr "Zielony"
+ 
+ #: ../operations/common/mono-mixer.c:29
+ msgid "Amount of green"
+-msgstr ""
++msgstr "Ilość zieleni"
+ 
+-#: ../operations/common/mono-mixer.c:30
++#: ../operations/common/mono-mixer.c:30 ../operations/common/noise-rgb.c:35
+ #: ../operations/workshop/convolution-matrix.c:85
+ msgid "Blue"
+ msgstr "Niebieski"
+ 
+ #: ../operations/common/mono-mixer.c:31
+-#, fuzzy
+ msgid "Amount of blue"
+-msgstr "Ilość"
++msgstr "Ilość niebieskiego"
+ 
+-#: ../operations/common/mono-mixer.c:108
++#: ../operations/common/mono-mixer.c:104
+ msgid "Monochrome channel mixer"
+ msgstr ""
+ 
+@@ -1311,31 +1406,144 @@ msgstr "Kąt"
+ msgid "Angle of blur in degrees"
+ msgstr ""
+ 
+-#: ../operations/common/motion-blur.c:174
++#: ../operations/common/motion-blur.c:349
+ #, fuzzy
+ msgid "Linear motion blur"
+ msgstr "Rozmycie ruchu"
+ 
+-#: ../operations/common/noise.c:27 ../operations/common/unsharp-mask.c:26
+-#: ../operations/workshop/external/lens-correct.c:43
+-msgid "Scale"
+-msgstr "Skalowanie"
++#: ../operations/common/noise-cielch.c:25 ../operations/common/noise-hsv.c:27
++#, fuzzy
++msgid "Holdness"
++msgstr "Twardość"
+ 
+-#: ../operations/common/noise.c:29
+-msgid "Z offset"
+-msgstr "Przesunięcie Z"
++#: ../operations/common/noise-cielch.c:27
++#, fuzzy
++msgid "Lightness"
++msgstr "Jasność"
++
++#: ../operations/common/noise-cielch.c:29
++msgid "Chroma"
++msgstr ""
++
++#: ../operations/common/noise-cielch.c:31 ../operations/common/noise-hsv.c:29
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Odcień"
++
++#: ../operations/common/noise-cielch.c:160
++msgid "Randomize lightness, chroma and hue independently"
++msgstr ""
+ 
+-#: ../operations/common/noise.c:31 ../operations/workshop/cubism.c:34
+-#: ../operations/workshop/plasma.c:33
++#: ../operations/common/noise-hsv.c:33
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Wartość"
++
++#: ../operations/common/noise-hsv.c:164
++msgid "Randomize hue, saturation and value independently"
++msgstr ""
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/noise.c:31
++#: ../operations/common/shift.c:29 ../operations/common/wind.c:33
++#: ../operations/workshop/cubism.c:34 ../operations/workshop/plasma.c:33
+ msgid "Seed"
+ msgstr "Ziarno"
+ 
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33 ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Ziarno losowości"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization (%)"
++msgstr ""
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++#, fuzzy
++msgid "Randomization"
++msgstr "obrót"
++
++#: ../operations/common/noise-hurl.c:34 ../operations/common/noise-pick.c:34
++#: ../operations/common/noise-slur.c:37
++msgid "Repeat"
++msgstr ""
++
++#: ../operations/common/noise-hurl.c:135
++msgid "Completely randomize a fraction of pixels"
++msgstr ""
++
++#: ../operations/common/noise-pick.c:192
++msgid "Randomly interchange some pixels with neighbors"
++msgstr ""
++
++#: ../operations/common/noise-reduction.c:26 ../operations/common/wind.c:30
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Siła"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr ""
++
++#: ../operations/common/noise-rgb.c:27
++msgid "Correlated noise"
++msgstr ""
++
++#: ../operations/common/noise-rgb.c:29
++msgid "Independent RGB"
++msgstr ""
++
++#: ../operations/common/noise-rgb.c:164
++msgid "Distort colors by random amounts."
++msgstr ""
++
++#: ../operations/common/noise-slur.c:178
++msgid "Randomly slide some pixels downward (similar to melting)"
++msgstr ""
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Przesunięcie Z"
++
+ #: ../operations/common/noise.c:33
+ msgid "Iteration"
+ msgstr "Iteracja"
+ 
+ #: ../operations/common/noise.c:111
+-msgid "Perlin noise generator."
++msgid "Perlin noise generator"
++msgstr ""
++
++#: ../operations/common/oilify.c:27 ../operations/common/photocopy.c:25
++#: ../operations/common/photocopy.c:26
++#, fuzzy
++msgid "Mask Radius"
++msgstr "Promień"
++
++#: ../operations/common/oilify.c:28
++msgid "Radius of circle around pixel"
++msgstr ""
++
++#: ../operations/common/oilify.c:30 ../operations/common/oilify.c:31
++msgid "Exponent"
++msgstr ""
++
++#: ../operations/common/oilify.c:33
++msgid "Intensity Mode"
++msgstr ""
++
++#: ../operations/common/oilify.c:34
++#, fuzzy
++msgid "Use pixel luminance values"
++msgstr "Paleta zoptymalizowana dla stron WWW"
++
++#: ../operations/common/oilify.c:309
++msgid "Emulate an oil painting"
+ msgstr ""
+ 
+ #: ../operations/common/opacity.c:25
+@@ -1344,7 +1552,7 @@ msgid ""
+ "input buffer."
+ msgstr ""
+ 
+-#: ../operations/common/opacity.c:224
++#: ../operations/common/opacity.c:153
+ msgid ""
+ "Weights the opacity of the input both the value of the aux input and the "
+ "global value property."
+@@ -1358,43 +1566,53 @@ msgstr ""
+ msgid "A source that uses an on-disk GeglBuffer."
+ msgstr ""
+ 
+-#: ../operations/common/over.c:200
++#: ../operations/common/over.c:153
+ msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
+ msgstr ""
+ 
+-#: ../operations/common/pixelise.c:25
++#: ../operations/common/photocopy.c:28 ../operations/common/photocopy.c:29
++#: ../operations/common/softglow.c:29
+ #, fuzzy
+-msgid "Block Width"
+-msgstr "Rozmiar bloku"
++msgid "Sharpness"
++msgstr "Losowość"
++
++#: ../operations/common/photocopy.c:31 ../operations/common/photocopy.c:32
++#, fuzzy
++msgid "Percent Black"
++msgstr "Kafelek procentu:"
+ 
+-#: ../operations/common/pixelise.c:26
++#: ../operations/common/photocopy.c:34 ../operations/common/photocopy.c:35
++#, fuzzy
++msgid "Percent White"
++msgstr "Kafelek procentu:"
++
++#: ../operations/common/photocopy.c:395
++msgid "Photocopy effect"
++msgstr ""
++
++#: ../operations/common/pixelize.c:26
+ #, fuzzy
+ msgid "Width of blocks in pixels"
+ msgstr "Szerokość obręczy"
+ 
+-#: ../operations/common/pixelise.c:27
++#: ../operations/common/pixelize.c:27
+ #, fuzzy
+ msgid "Block Height"
+ msgstr "Wysokość"
+ 
+-#: ../operations/common/pixelise.c:28
++#: ../operations/common/pixelize.c:28
+ #, fuzzy
+ msgid "Height of blocks in pixels"
+ msgstr "Wysokość zaznaczenia"
+ 
+-#: ../operations/common/pixelise.c:182
+-#, fuzzy
+-msgid "Pixelise filter"
+-msgstr "Rozmiar piksela"
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr ""
+ 
+ #: ../operations/common/polar-coordinates.c:34
+-#, fuzzy
+-msgid "Circle depth in percent"
+-msgstr "_Głębia okręgu w procentach:"
+-
+ #: ../operations/common/polar-coordinates.c:35
+ #, fuzzy
+-msgid "Circle depth in percent."
++msgid "Circle depth in percent"
+ msgstr "_Głębia okręgu w procentach:"
+ 
+ #: ../operations/common/polar-coordinates.c:36
+@@ -1413,15 +1631,18 @@ msgid "Map backwards"
+ msgstr "O_dwzorowanie odwrotne"
+ 
+ #: ../operations/common/polar-coordinates.c:38
+-#, fuzzy
+-msgid "Map backwards."
+-msgstr "O_dwzorowanie odwrotne"
++msgid "Start from the right instead of the left"
++msgstr ""
+ 
+ #: ../operations/common/polar-coordinates.c:39
+ #, fuzzy
+ msgid "Map from top"
+ msgstr "Odwzorowanie o_d góry"
+ 
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++
+ #: ../operations/common/polar-coordinates.c:40
+ #, fuzzy
+ msgid "To polar"
+@@ -1429,8 +1650,8 @@ msgstr "_Rozwinięcie"
+ 
+ #: ../operations/common/polar-coordinates.c:40
+ #, fuzzy
+-msgid "To polar."
+-msgstr "_Rozwinięcie"
++msgid "Map the image to a circle"
++msgstr "Konwertuje obraz do odcieni szarości"
+ 
+ #: ../operations/common/polar-coordinates.c:41
+ msgid "X:"
+@@ -1460,6 +1681,11 @@ msgstr ""
+ msgid "Performs polar-coordinates on the image."
+ msgstr "Ustawia profil kolorów na obrazie"
+ 
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Poziomy"
++
+ #: ../operations/common/posterize.c:26
+ #, fuzzy
+ msgid "number of levels per component"
+@@ -1504,7 +1730,7 @@ msgstr "Nasycenie chromowania"
+ 
+ #: ../operations/common/reinhard05.c:32
+ #, fuzzy
+-msgid "Adapation to colour variation across the image"
++msgid "Adaptation to color variation across the image"
+ msgstr "Zastosowanie profilu kolorów na obrazie"
+ 
+ #: ../operations/common/reinhard05.c:33
+@@ -1514,7 +1740,7 @@ msgstr "Ki_erunek światła:"
+ 
+ #: ../operations/common/reinhard05.c:35
+ #, fuzzy
+-msgid "Adapation to light variation across the image"
++msgid "Adaptation to light variation across the image"
+ msgstr "Zmniejsza jaśniejsze obszary obrazu"
+ 
+ #: ../operations/common/reinhard05.c:274
+@@ -1558,21 +1784,24 @@ msgstr "_Przesunięcie fazy:"
+ msgid "Angle in degree"
+ msgstr "Oświetlenie (kąt)"
+ 
+-#: ../operations/common/ripple.c:40 ../operations/common/waves.c:42
+-#: ../operations/workshop/ditto.c:28
+-msgid "Sampler used internally"
+-msgstr ""
+-
+-#: ../operations/common/ripple.c:42
++#: ../operations/common/ripple.c:47
+ #, fuzzy
+ msgid "Wave type"
+ msgstr "Typ fali"
+ 
+-#: ../operations/common/ripple.c:43
++#: ../operations/common/ripple.c:48
+ msgid "Type of wave"
+ msgstr ""
+ 
+-#: ../operations/common/ripple.c:164
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr ""
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr ""
++
++#: ../operations/common/ripple.c:175
+ #, fuzzy
+ msgid "Transform the buffer with a ripple pattern"
+ msgstr "Tworzy obraz wypełniony wirującym deseniem"
+@@ -1585,46 +1814,71 @@ msgstr ""
+ msgid "Multipurpose file saver, that uses other native handlers."
+ msgstr ""
+ 
+-#: ../operations/common/snn-mean.c:27
+-msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++#: ../operations/common/shift.c:26
++msgid "Shift"
++msgstr "Przesunięcie"
++
++#: ../operations/common/shift.c:27
++msgid "Maximum amount to shift"
+ msgstr ""
+ 
++#: ../operations/common/shift.c:36
++msgid "Direction"
++msgstr "Kierunek"
++
++#: ../operations/common/shift.c:37
++msgid "Shift direction"
++msgstr "Kierunek przesunięcia"
++
++#: ../operations/common/shift.c:231
++msgid "Shift by a random number of pixels"
++msgstr "Przesuwa o losową liczbę pikseli"
++
+ #: ../operations/common/snn-mean.c:28
+ #: ../operations/workshop/snn-percentile.c:29
+ msgid "Pairs"
+-msgstr ""
++msgstr "Pary"
+ 
+ #: ../operations/common/snn-mean.c:29
+ msgid "Number of pairs; higher number preserves more acute features"
+ msgstr ""
+ 
+-#: ../operations/common/snn-mean.c:228
++#: ../operations/common/snn-mean.c:436
+ msgid ""
+ "Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
+ "Neighbours"
+ msgstr ""
+ 
+-#: ../operations/common/stretch-contrast.c:162
+-msgid ""
+-"Scales the components of the buffer to be in the 0.0-1.0 range. This "
+-"improves images that make poor use of the available contrast (little "
+-"contrast, very dark, or very bright images)."
++#: ../operations/common/softglow.c:25
++#, fuzzy
++msgid "Glow radius"
++msgstr "Promień rozmycia"
++
++#: ../operations/common/softglow.c:224
++msgid "Softglow effect"
+ msgstr ""
+ 
+ #: ../operations/common/stress.c:28
+ msgid ""
+-"Neighbourhood taken into account, for enhancement ideal values are close to "
+-"the longest side of the image, increasing this increases the runtime."
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
+ msgstr ""
+ 
+ #: ../operations/common/stress.c:32
+ msgid ""
+ "Number of iterations, a higher number of iterations provides a less noisy "
+-"rendering at computational cost."
++"rendering at a computational cost"
+ msgstr ""
+ 
+ #: ../operations/common/stress.c:191
+-msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling."
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
+ msgstr ""
+ 
+ #: ../operations/common/svg-huerotate.c:27
+@@ -1655,11 +1909,18 @@ msgstr ""
+ msgid "SVG color matrix operation svg_saturate"
+ msgstr ""
+ 
++#: ../operations/common/threshold.c:25 ../operations/common/wind.c:26
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Progowanie"
++
+ #: ../operations/common/threshold.c:26
+ msgid "Global threshold level (used when there is no auxiliary input buffer)."
+ msgstr ""
+ 
+-#: ../operations/common/threshold.c:192
++#: ../operations/common/threshold.c:123
+ msgid ""
+ "Thresholds the image to white/black based on either the global value set in "
+ "the value property, or per pixel from the aux input."
+@@ -1674,103 +1935,91 @@ msgid "Standard deviation (spatial scale factor)"
+ msgstr ""
+ 
+ #: ../operations/common/unsharp-mask.c:27
+-msgid "Scale, strength of effect."
++msgid "Scale, strength of effect"
+ msgstr ""
+ 
+ #: ../operations/common/unsharp-mask.c:73
+ msgid ""
+ "Performs an unsharp mask on the input buffer (sharpens an image by adding "
+-"false mach-bands around edges)."
++"false mach-bands around edges)"
+ msgstr ""
+ 
+-#: ../operations/common/value-invert.c:218
++#: ../operations/common/value-invert.c:190
+ msgid ""
+ "Inverts just the value component, the result is the corresponding `inverted' "
+ "image."
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:23
+-msgid "shape"
++#: ../operations/common/vignette.c:24
++msgid "Shape"
+ msgstr "kształt"
+ 
+-#: ../operations/common/vignette.c:23
+-msgid "shape to use 0=circle 1=diamond 2=square"
+-msgstr ""
+-
+ #: ../operations/common/vignette.c:24
+-msgid ""
+-"defaults to 'black', you can use transparency here to erase portions of an "
+-"image"
++msgid "Shape to use: 0=circle 1=diamond 2=square"
+ msgstr ""
+ 
+ #: ../operations/common/vignette.c:25
+-msgid "radius"
+-msgstr "promień"
+-
+-#: ../operations/common/vignette.c:25
+-msgid "how far out vignetting goes as portion of half image diagonal"
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
+ msgstr ""
+ 
+ #: ../operations/common/vignette.c:26
+-msgid "softness"
++msgid "How far out vignetting goes as portion of half image diagonal"
+ msgstr ""
+ 
+ #: ../operations/common/vignette.c:27
+-msgid "gamma"
+-msgstr "gamma"
+-
+-#: ../operations/common/vignette.c:27
+-msgid "falloff linearity"
++msgid "Softness"
+ msgstr ""
+ 
+ #: ../operations/common/vignette.c:28
+ #, fuzzy
+-msgid "proportion"
+-msgstr "Złożenie:"
++msgid "Gamma"
++msgstr "gamma"
+ 
+ #: ../operations/common/vignette.c:28
+-msgid "how close we are to image proportions"
++msgid "Falloff linearity"
+ msgstr ""
+ 
+ #: ../operations/common/vignette.c:29
+-msgid "squeeze"
+-msgstr ""
++#, fuzzy
++msgid "Proportion"
++msgstr "Złożenie:"
+ 
+ #: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
+ msgid ""
+ "Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
+ "inf:1, this is applied after proportion is taken into account, to directly "
+ "use squeeze factor as proportions, set proportion to 0.0."
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:31
+-msgid "x"
+-msgstr "x"
+-
+-#: ../operations/common/vignette.c:31
++#: ../operations/common/vignette.c:32
+ #, fuzzy
+ msgid "Horizontal center of vignetting"
+ msgstr "Rozmieszczenie poziomych środków"
+ 
+-#: ../operations/common/vignette.c:32
+-msgid "y"
+-msgstr "y"
+-
+-#: ../operations/common/vignette.c:32
++#: ../operations/common/vignette.c:33
+ #, fuzzy
+ msgid "Vertical center of vignetting"
+ msgstr "Rozmieszczenie pionowych środków"
+ 
+-#: ../operations/common/vignette.c:33
+-msgid "rotation"
+-msgstr "obrót"
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Obrót"
+ 
+-#: ../operations/common/vignette.c:33
+-#, fuzzy
++#: ../operations/common/vignette.c:34
+ msgid "Rotation angle"
+-msgstr "Kąt obrotu:"
++msgstr "Kąt obrotu"
+ 
+-#: ../operations/common/vignette.c:220
++#: ../operations/common/vignette.c:386
+ msgid ""
+ "A vignetting op, applies a vignette to an image. Simulates the luminance "
+ "fall off at edge of exposed film, and some other fuzzier border effects that "
+@@ -1786,7 +2035,16 @@ msgstr "Współrzędna górnego lewego rogu na osi X"
+ msgid "Coordinate y of the center of the waves"
+ msgstr ""
+ 
+-#: ../operations/common/waves.c:164
++#: ../operations/common/waves.c:44
++#, fuzzy
++msgid "Clamp deformation"
++msgstr "Działanie"
++
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr ""
++
++#: ../operations/common/waves.c:169
+ #, fuzzy
+ msgid "Transform the buffer with waves"
+ msgstr "Zniekształca obraz za pomocą fal"
+@@ -1794,12 +2052,6 @@ msgstr "Zniekształca obraz za pomocą fal"
+ #: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
+ #: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
+ #: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
+-msgid "Value"
+-msgstr "Wartość"
+-
+-#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
+-#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
+-#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
+ msgid "global value used if aux doesn't contain data"
+ msgstr ""
+ 
+@@ -1808,10 +2060,31 @@ msgstr ""
+ msgid "blend two images using alpha values as weights"
+ msgstr "Łączy dwa obrazy używając map głębi (buforów Z)"
+ 
++#: ../operations/common/wind.c:27
++msgid "Higher values restrict the effect to fewer areas of the image"
++msgstr ""
++
++#: ../operations/common/wind.c:31
++msgid "Higher values increase the magnitude of the effect"
++msgstr ""
++
++#: ../operations/common/wind.c:367
++msgid "Wind-like bleed effect"
++msgstr ""
++
+ #: ../operations/common/write-buffer.c:26
+ msgid "Write to an existing GeglBuffer"
+ msgstr ""
+ 
++#: ../operations/common/write-buffer.c:28
++#, fuzzy
++msgid "Flush buffer"
++msgstr "Skalowanie barwy:"
++
++#: ../operations/common/write-buffer.c:29
++msgid "Flush buffer after writing"
++msgstr ""
++
+ #: ../operations/core/clone.c:25
+ #, fuzzy
+ msgid "Reference"
+@@ -1821,7 +2094,7 @@ msgstr "Preferencje"
+ msgid "The reference ID used as input (for use in XML)."
+ msgstr ""
+ 
+-#: ../operations/core/clone.c:112
++#: ../operations/core/clone.c:110
+ #, fuzzy
+ msgid "Clone a buffer"
+ msgstr "Bufor globalny"
+@@ -1841,7 +2114,7 @@ msgstr "Formatowanie danych"
+ msgid "Convert the data to the specified format"
+ msgstr "Konwertuje obraz do przestrzeni kolorów RGB"
+ 
+-#: ../operations/core/crop.c:179
++#: ../operations/core/crop.c:194
+ #, fuzzy
+ msgid "Crop a buffer"
+ msgstr "Kadrowanie warstwy"
+@@ -1850,27 +2123,33 @@ msgstr "Kadrowanie warstwy"
+ msgid "No operation (can be used as a routing point)"
+ msgstr ""
+ 
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++#, fuzzy
++msgid "Path of file to load"
++msgstr "Utworzenie zaznaczenia ze ścieżki"
++
+ #: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
+ msgid "Frame"
+-msgstr "Ramka"
++msgstr "Klatka"
+ 
+ #: ../operations/external/ff-load.c:26
+-msgid "frame number"
+-msgstr ""
++msgid "Frame number"
++msgstr "Liczba klatek"
+ 
+ #: ../operations/external/ff-load.c:471
+-msgid "FFmpeg video frame importer."
+-msgstr ""
++msgid "FFmpeg video frame importer"
++msgstr "Importer klatek wideo FFmpeg"
+ 
+ #: ../operations/external/jp2-load.c:70
+ #, c-format
+-msgid "Unknown JPEG-2000 image format in '%s'"
+-msgstr ""
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Nieznany format obrazu JPEG 2000 w \"%s\""
+ 
+ #: ../operations/external/jp2-load.c:77
+ #, c-format
+-msgid "Unable to open JPEG-2000 image in '%s'"
+-msgstr "Nie można otworzyć pliku JPEG-2000 w \"%s\""
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "Nie można otworzyć pliku JPEG 2000 w \"%s\""
+ 
+ #: ../operations/external/jp2-load.c:84
+ #, fuzzy, c-format
+@@ -1883,15 +2162,15 @@ msgid "Unable to convert image to sRGB color space when processing '%s'"
+ msgstr ""
+ 
+ #: ../operations/external/jp2-load.c:100
+-#, c-format
+-msgid "Unsupported non-RGB JPEG-2000 file with %d components in '%s'"
+-msgstr ""
+-
+-#: ../operations/external/jp2-load.c:111
+ #, fuzzy, c-format
+-msgid "Unsupported JPEG-2000 file with depth %d in '%s'"
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
+ msgstr "Nieobsługiwana głębia kolorów: %d"
+ 
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "Nieobsługiwany plik JPEG 2000 z głębią kolorów %d w \"%s\""
++
+ #: ../operations/external/jp2-load.c:124
+ #, c-format
+ msgid "Components of input image '%s' don't match"
+@@ -1914,7 +2193,7 @@ msgstr "Błąd podczas odczytywania nagłówka pliku BMP z \"%s\""
+ 
+ #: ../operations/external/jp2-load.c:397
+ #, fuzzy
+-msgid "JPEG-2000 image loader."
++msgid "JPEG 2000 image loader"
+ msgstr "Obraz JPEG 2000"
+ 
+ #: ../operations/external/jpg-load.c:223
+@@ -1922,10 +2201,8 @@ msgstr "Obraz JPEG 2000"
+ msgid "JPG image loader"
+ msgstr "Obraz JPEG"
+ 
+-#: ../operations/external/jpg-save.c:26 ../operations/external/png-save.c:27
+-#: ../operations/external/ppm-save.c:26 ../operations/external/rgbe-save.c:27
+-#: ../operations/workshop/external/ff-save.c:30
+-msgid "Target path and filename, use '-' for stdout."
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
+ msgstr ""
+ 
+ #: ../operations/external/jpg-save.c:27
+@@ -1974,7 +2251,52 @@ msgid "Create a grayscale (monochrome) image"
+ msgstr "Tworzy macierz kopii obrazu"
+ 
+ #: ../operations/external/jpg-save.c:192
+-msgid "JPEG image saver (passes the buffer through, saves as a side-effect.)"
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:30
++#, fuzzy
++msgid "Radius of the processing window"
++msgstr "Promień zmiękczania"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:38
++#, fuzzy
++msgid "Number of downsampled levels to use"
++msgstr "_Liczba cofnięć (1 - 99):"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Aktywne poziomy"
++
++#: ../operations/external/matting-levin.c:41
++#, fuzzy
++msgid "Number of levels to perform solving"
++msgstr "Liczba skrętów"
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
+ msgstr ""
+ 
+ #: ../operations/external/path.c:27
+@@ -1982,26 +2304,28 @@ msgid "Fill Color"
+ msgstr "Wypełnienie kolorem"
+ 
+ #: ../operations/external/path.c:28
+-msgid "Color of paint to use for filling, use 0 opacity to disable filling."
+-msgstr ""
++#, fuzzy
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr "Nie można otworzyć pliku \"%s\" do zapisania."
+ 
+ #: ../operations/external/path.c:29
+ #, fuzzy
+ msgid "Stroke Color"
+ msgstr "Kolor źródłowy"
+ 
+-#: ../operations/external/path.c:30 ../operations/external/vector-stroke.c:28
+-msgid "Color of paint to use for stroking."
+-msgstr ""
++#: ../operations/external/path.c:30
++#, fuzzy
++msgid "Color of paint to use for stroking"
++msgstr "Nie można otworzyć pliku \"%s\" do zapisania."
+ 
+ #: ../operations/external/path.c:32
+ #, fuzzy
+ msgid "Stroke width"
+ msgstr "Rysuj wzdłuż ścieżki"
+ 
+-#: ../operations/external/path.c:33 ../operations/external/vector-stroke.c:31
++#: ../operations/external/path.c:33
+ #, fuzzy
+-msgid "The width of the brush used to stroke the path."
++msgid "The width of the brush used to stroke the path"
+ msgstr "Względna gęstość pociągnięć pędzla"
+ 
+ #: ../operations/external/path.c:35
+@@ -2009,27 +2333,27 @@ msgstr "Względna gęstość pociągnięć pędzla"
+ msgid "Stroke opacity"
+ msgstr "Rysuj wzdłuż ścieżki"
+ 
+-#: ../operations/external/path.c:36 ../operations/external/vector-stroke.c:34
++#: ../operations/external/path.c:36
+ msgid ""
+ "Opacity of stroke, note, does not behave like SVG since at the moment "
+-"stroking is done using an airbrush tool."
++"stroking is done using an airbrush tool"
+ msgstr ""
+ 
+-#: ../operations/external/path.c:38
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
+ msgid "Hardness"
+ msgstr "Twardość"
+ 
+ #: ../operations/external/path.c:39
+-msgid "hardness of brush, 0.0 for soft brush 1.0 for hard brush."
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
+ msgstr ""
+ 
+-#: ../operations/external/path.c:41 ../operations/external/vector-fill.c:33
++#: ../operations/external/path.c:41
+ #, fuzzy
+-msgid "Fill rule."
++msgid "Fill rule"
+ msgstr "Kąt wypełnienia"
+ 
+-#: ../operations/external/path.c:42 ../operations/external/vector-fill.c:34
+-msgid "how to determine what to fill (nonzero|evenodd"
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
+ msgstr ""
+ 
+ #: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
+@@ -2037,10 +2361,9 @@ msgstr ""
+ msgid "Transform"
+ msgstr "Przekształcenie"
+ 
+-#: ../operations/external/path.c:45 ../operations/external/vector-fill.c:37
+-#: ../operations/external/vector-stroke.c:37
++#: ../operations/external/path.c:45
+ #, fuzzy
+-msgid "svg style description of transform."
++msgid "SVG style description of transform"
+ msgstr "Kierunek przekształcenia"
+ 
+ #: ../operations/external/path.c:47
+@@ -2048,16 +2371,15 @@ msgstr "Kierunek przekształcenia"
+ msgid "Fill opacity"
+ msgstr "_Krycie wypełnienia:"
+ 
+-#: ../operations/external/path.c:48 ../operations/external/vector-fill.c:31
++#: ../operations/external/path.c:48
+ #, fuzzy
+-msgid "The fill opacity to use."
++msgid "The fill opacity to use"
+ msgstr "_Biała (bez przezroczystości)"
+ 
+ #: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
+ #: ../operations/external/vector-stroke.c:39
+-#, fuzzy
+ msgid "Vector"
+-msgstr "Wektory"
++msgstr "Wektor"
+ 
+ #: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
+ #: ../operations/external/vector-stroke.c:40
+@@ -2071,12 +2393,11 @@ msgstr "Rysowanie pociągnięcia"
+ 
+ #: ../operations/external/pixbuf.c:25
+ msgid "Pixbuf"
+-msgstr ""
++msgstr "Bufor pikseli"
+ 
+ #: ../operations/external/pixbuf.c:25
+-#, fuzzy
+ msgid "GdkPixbuf to use"
+-msgstr "Gradient do użycia"
++msgstr "GdkPixbuf do użycia"
+ 
+ #: ../operations/external/pixbuf.c:103
+ msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
+@@ -2087,14 +2408,19 @@ msgstr ""
+ msgid "PNG image loader."
+ msgstr "Obraz PNG"
+ 
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr ""
++
+ #: ../operations/external/png-save.c:28
+ msgid "Compression"
+ msgstr "Kompresja"
+ 
+ #: ../operations/external/png-save.c:29
+-#, fuzzy
+ msgid "PNG compression level from 1 to 9"
+-msgstr "Stopień kompresji PNG:"
++msgstr "Poziom kompresji PNG od 1 do 9"
+ 
+ #: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
+ #, fuzzy
+@@ -2116,9 +2442,8 @@ msgid "PPM image loader."
+ msgstr "Obraz PPM"
+ 
+ #: ../operations/external/ppm-save.c:27
+-#, fuzzy
+ msgid "Raw format"
+-msgstr "Format obrazu"
++msgstr "Surowy format"
+ 
+ #: ../operations/external/ppm-save.c:190
+ msgid "PPM image saver (Portable pixmap saver.)"
+@@ -2133,9 +2458,8 @@ msgid "RGBE image saver (Radiance HDR format)"
+ msgstr ""
+ 
+ #: ../operations/external/save-pixbuf.c:28
+-#, fuzzy
+ msgid "Pixbuf location"
+-msgstr "Położenie zawinięcia"
++msgstr "Położenie bufora pikseli"
+ 
+ #: ../operations/external/save-pixbuf.c:29
+ msgid "The location where to store the output GdkPixbuf."
+@@ -2170,7 +2494,7 @@ msgid "Height for rendered image"
+ msgstr ""
+ 
+ #. not hidden because it has extra API
+-#: ../operations/external/svg-load.c:245
++#: ../operations/external/svg-load.c:239
+ msgid "Load an SVG file using librsvg"
+ msgstr ""
+ 
+@@ -2180,7 +2504,7 @@ msgstr "Tekst"
+ 
+ #: ../operations/external/text.c:26
+ msgid "String to display (utf8)"
+-msgstr ""
++msgstr "Ciąg do wyświetlenia (UTF-8)"
+ 
+ #: ../operations/external/text.c:27
+ msgid "Font family"
+@@ -2190,7 +2514,7 @@ msgstr "Rodzina czcionki"
+ msgid "Font family (utf8)"
+ msgstr "Rodzina czcionki (UTF-8)"
+ 
+-#: ../operations/external/text.c:29 ../operations/workshop/warp.c:28
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
+ msgid "Size"
+ msgstr "Rozmiar"
+ 
+@@ -2232,7 +2556,7 @@ msgstr ""
+ 
+ #: ../operations/external/text.c:301
+ msgid "Display a string of text using pango and cairo."
+-msgstr ""
++msgstr "Wyświetla ciąg tekstowy używając biblioteki Pango i cairo."
+ 
+ #: ../operations/external/v4l.c:26
+ msgid "Path"
+@@ -2264,11 +2588,46 @@ msgstr ""
+ msgid "Color of paint to use for filling."
+ msgstr "Nie można otworzyć pliku \"%s\" do zapisania."
+ 
+-#: ../operations/external/vector-fill.c:258
++#: ../operations/external/vector-fill.c:31
++#, fuzzy
++msgid "The fill opacity to use."
++msgstr "_Biała (bez przezroczystości)"
++
++#: ../operations/external/vector-fill.c:33
++#, fuzzy
++msgid "Fill rule."
++msgstr "Kąt wypełnienia"
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr ""
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++#, fuzzy
++msgid "svg style description of transform."
++msgstr "Kierunek przekształcenia"
++
++#: ../operations/external/vector-fill.c:268
+ #, fuzzy
+ msgid "Renders a filled region"
+ msgstr "Renderuje błyski soczewki"
+ 
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:31
++#, fuzzy
++msgid "The width of the brush used to stroke the path."
++msgstr "Względna gęstość pociągnięć pędzla"
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++
+ #: ../operations/external/vector-stroke.c:280
+ #, fuzzy
+ msgid "Renders a vector stroke"
+@@ -2282,30 +2641,30 @@ msgstr ""
+ msgid "Porter Duff operation clear (d = 0.0f)"
+ msgstr ""
+ 
+-#: ../operations/generated/color-burn.c:117
++#: ../operations/generated/color-burn.c:165
+ msgid ""
+-"SVG blend operation color-burn (<tt>if cA * aB + cB * aA <= aA * aB: d = cA "
+-"* (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB "
+-"* aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</tt>)"
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
+ msgstr ""
+ 
+-#: ../operations/generated/color-dodge.c:117
++#: ../operations/generated/color-dodge.c:165
+ msgid ""
+-"SVG blend operation color-dodge (<tt>if cA * aB + cB * aA >= aA * aB: d = aA "
+-"* aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
+-"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+-#: ../operations/generated/darken.c:115
++#: ../operations/generated/darken.c:163
+ msgid ""
+-"SVG blend operation darken (<tt>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + "
+-"cB * (1 - aA)</tt>)"
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+-#: ../operations/generated/difference.c:115
++#: ../operations/generated/difference.c:163
+ msgid ""
+-"SVG blend operation difference (<tt>d = cA + cB - 2 * (MIN (cA * aB, cB * "
+-"aA))</tt>)"
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/divide.c:125
+@@ -2332,56 +2691,56 @@ msgstr ""
+ msgid "Porter Duff operation dst (d = cB)"
+ msgstr ""
+ 
+-#: ../operations/generated/exclusion.c:115
++#: ../operations/generated/exclusion.c:163
+ msgid ""
+-"SVG blend operation exclusion (<tt>d = (cA * aB + cB * aA - 2 * cA * cB) + "
+-"cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/gamma.c:125
+ msgid "Math operation gamma (c = powf (c, value))"
+ msgstr ""
+ 
+-#: ../operations/generated/hard-light.c:117
++#: ../operations/generated/hard-light.c:165
+ msgid ""
+-"SVG blend operation hard-light (<tt>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
+ "(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
+-"+ cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+-#: ../operations/generated/lighten.c:115
++#: ../operations/generated/lighten.c:163
+ msgid ""
+-"SVG blend operation lighten (<tt>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) "
+-"+ cB * (1 - aA)</tt>)"
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/multiply.c:125
+ msgid "Math operation multiply (c = c * value)"
+ msgstr ""
+ 
+-#: ../operations/generated/overlay.c:117
++#: ../operations/generated/overlay.c:165
+ msgid ""
+-"SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - "
+-"aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA "
+-"* (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+-#: ../operations/generated/plus.c:115
+-msgid "SVG blend operation plus (<tt>d = cA + cB</tt>)"
++#: ../operations/generated/plus.c:163
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
+ msgstr ""
+ 
+-#: ../operations/generated/screen.c:115
+-msgid "SVG blend operation screen (<tt>d = cA + cB - cA * cB</tt>)"
++#: ../operations/generated/screen.c:163
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
+ msgstr ""
+ 
+-#: ../operations/generated/soft-light.c:119
++#: ../operations/generated/soft-light.c:167
+ msgid ""
+-"SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == "
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
+ "0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
+ "* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
+ "== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
+ "(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
+-"(1 - aB) + cB * (1 - aA)</tt>)"
++"(1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/src-atop.c:116
+@@ -2408,16 +2767,149 @@ msgstr ""
+ msgid "Math operation subtract (c = c - value)"
+ msgstr ""
+ 
+-#: ../operations/generated/svg-multiply.c:114
++#: ../operations/generated/svg-multiply.c:163
+ msgid ""
+-"SVG blend operation svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 "
+-"- aA)</tt>)"
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/xor.c:116
+ msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
+ msgstr ""
+ 
++#: ../operations/transform/reflect.c:29
++#, fuzzy
++msgid "Direction vector's X component"
++msgstr "Wektor kierunku"
++
++#: ../operations/transform/reflect.c:31
++#, fuzzy
++msgid "Direction vector's Y component"
++msgstr "Wektor kierunku"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr ""
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr ""
++
++#: ../operations/transform/scale-ratio.c:26 ../operations/transform/scale.c:29
++#, fuzzy
++msgid "Horizontal scale factor"
++msgstr "Kolor poziomy"
++
++#: ../operations/transform/scale-ratio.c:28 ../operations/transform/scale.c:31
++#, fuzzy
++msgid "Vertical scale factor"
++msgstr "Kolor pionowy"
++
++#: ../operations/transform/scale-ratio.c:33
++#, fuzzy
++msgid "Scales the buffer according to a ratio."
++msgstr "Skalowanie barwy:"
++
++#: ../operations/transform/scale-size.c:26
++#, fuzzy
++msgid "Horizontal size"
++msgstr "Poziomo"
++
++#: ../operations/transform/scale-size.c:28
++#, fuzzy
++msgid "Vertical size"
++msgstr "Pionowo"
++
++#: ../operations/transform/scale-size.c:33
++#, fuzzy
++msgid "Scales the buffer according to a size."
++msgstr "Skalowanie barwy:"
++
++#: ../operations/transform/scale.c:36
++#, fuzzy
++msgid "Scales the buffer."
++msgstr "Skalowanie barwy:"
++
++#: ../operations/transform/shear.c:26
++#, fuzzy
++msgid "Horizontal shear amount"
++msgstr "Poziomy gradient"
++
++#: ../operations/transform/shear.c:28
++#, fuzzy
++msgid "Vertical shear amount"
++msgstr "Pionowy gradient"
++
++#: ../operations/transform/shear.c:33
++#, fuzzy
++msgid "Shears the buffer"
++msgstr "Wk_lej bufor"
++
++#: ../operations/transform/transform-core.c:200
++#, fuzzy
++msgid "Origin-x"
++msgstr "Oryginał"
++
++#: ../operations/transform/transform-core.c:201
++#, fuzzy
++msgid "X coordinate of origin"
++msgstr "Współrzędna górnego lewego rogu na osi X"
++
++#: ../operations/transform/transform-core.c:208
++#, fuzzy
++msgid "Origin-y"
++msgstr "Oryginał"
++
++#: ../operations/transform/transform-core.c:209
++#, fuzzy
++msgid "Y coordinate of origin"
++msgstr "Współrzędna górnego lewego rogu na osi Y"
++
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++#, fuzzy
++msgid "Hard edges"
++msgstr "Twarda krawędź"
++
++#: ../operations/transform/transform-core.c:230
++#, fuzzy
++msgid "Lanczos width"
++msgstr "Szerokość linii"
++
++#: ../operations/transform/transform-core.c:231
++#, fuzzy
++msgid "Width of the Lanczos function"
++msgstr "Szerokość zaznaczenia"
++
++#: ../operations/transform/transform.c:25
++#, fuzzy
++msgid "Transformation string"
++msgstr "Przekształcenie macierzowe"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr ""
++
++#: ../operations/transform/translate.c:26
++#, fuzzy
++msgid "Horizontal translation"
++msgstr "Poziomy gradient"
++
++#: ../operations/transform/translate.c:28
++#, fuzzy
++msgid "Vertical translation"
++msgstr "Pionowy gradient"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++
+ #: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
+ #: ../operations/workshop/box-percentile.c:28
+ #: ../operations/workshop/disc-percentile.c:27
+@@ -2429,13 +2921,13 @@ msgstr ""
+ #: ../operations/workshop/box-max.c:198
+ msgid ""
+ "Sets the target pixel to the value of the maximum value in a box surrounding "
+-"the pixel."
++"the pixel"
+ msgstr ""
+ 
+ #: ../operations/workshop/box-min.c:198
+ msgid ""
+ "Sets the target pixel to the value of the minimum value in a box surrounding "
+-"the pixel."
++"the pixel"
+ msgstr ""
+ 
+ #: ../operations/workshop/box-percentile.c:29
+@@ -2446,86 +2938,28 @@ msgid "Percentile"
+ msgstr "Kafelek procentu:"
+ 
+ #: ../operations/workshop/box-percentile.c:30
+-#: ../operations/workshop/disc-percentile.c:29
+-msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgid "The percentile to compute, defaults to 50, which is a median filter"
+ msgstr ""
+ 
+ #: ../operations/workshop/box-percentile.c:230
+-#: ../operations/workshop/disc-percentile.c:234
+ msgid ""
+ "Sets the target pixel to the color corresponding to a given percentile when "
+-"colors are sorted by luminance."
++"colors are sorted by luminance"
+ msgstr ""
+ 
+ #: ../operations/workshop/buffer-cache.c:25
+-#, fuzzy
+ msgid "Cache buffer"
+-msgstr "Wk_lej bufor"
++msgstr "Bufor pamięci podręcznej"
+ 
+ #: ../operations/workshop/buffer-cache.c:26
+ msgid "The GeglBuffer where the caching is done"
+ msgstr ""
+ 
+-#: ../operations/workshop/buffer-cache.c:103
++#: ../operations/workshop/buffer-cache.c:96
+ msgid ""
+ "Cache the input buffer internally, further process take this buffer as input."
+ msgstr ""
+ 
+-#: ../operations/workshop/color-reduction.c:25
+-#, fuzzy
+-msgid "Red bits"
+-msgstr "16 bitów"
+-
+-#: ../operations/workshop/color-reduction.c:25
+-#, fuzzy
+-msgid "Number of bits for red channel"
+-msgstr "Liczba kanałów:"
+-
+-#: ../operations/workshop/color-reduction.c:26
+-#, fuzzy
+-msgid "Green bits"
+-msgstr "Zielony"
+-
+-#: ../operations/workshop/color-reduction.c:26
+-#, fuzzy
+-msgid "Number of bits for green channel"
+-msgstr "Liczba kanałów:"
+-
+-#: ../operations/workshop/color-reduction.c:27
+-#, fuzzy
+-msgid "Blue bits"
+-msgstr "16 bitów"
+-
+-#: ../operations/workshop/color-reduction.c:27
+-#, fuzzy
+-msgid "Number of bits for blue channel"
+-msgstr "Liczba kanałów:"
+-
+-#: ../operations/workshop/color-reduction.c:28
+-#, fuzzy
+-msgid "Alpha bits"
+-msgstr "Alfa"
+-
+-#: ../operations/workshop/color-reduction.c:28
+-#, fuzzy
+-msgid "Number of bits for alpha channel"
+-msgstr "Liczba kanałów:"
+-
+-#: ../operations/workshop/color-reduction.c:29
+-msgid "Dither"
+-msgstr "Dithering"
+-
+-#: ../operations/workshop/color-reduction.c:30
+-msgid ""
+-"Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:459
+-msgid ""
+-"Reduces the number of bits per channel (colors and alpha), with optional "
+-"dithering."
+-msgstr ""
+-
+ #: ../operations/workshop/color-rotate.c:33
+ #: ../operations/workshop/color-rotate.c:39
+ msgid "Clockwise"
+@@ -2564,10 +2998,6 @@ msgstr "Proszę wprowadzić nazwę dla ustawień"
+ msgid "Choose in case of grayscale images"
+ msgstr "Wtyczka %s obsługuje tylko obrazy w odcieniach szarości"
+ 
+-#: ../operations/workshop/color-rotate.c:48
+-msgid "Hue"
+-msgstr "Odcień"
+-
+ #: ../operations/workshop/color-rotate.c:49
+ msgid "The value of hue"
+ msgstr ""
+@@ -2588,9 +3018,9 @@ msgstr "Zmiana na wybrany"
+ msgid "The value of gray threshold"
+ msgstr "Poruszenie myszą zmieni próg"
+ 
+-#: ../operations/workshop/color-rotate.c:385
++#: ../operations/workshop/color-rotate.c:383
+ #, fuzzy
+-msgid "Rotate colors on the image."
++msgid "Rotate colors on the image"
+ msgstr "Użycie koloru obrazu"
+ 
+ #: ../operations/workshop/convolution-matrix.c:25
+@@ -2599,7 +3029,7 @@ msgstr "(1,1) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:26
+ msgid "Value of the element in position (1,1)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (1,1)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:27
+ msgid "(1,2) "
+@@ -2607,7 +3037,7 @@ msgstr "(1,2) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:28
+ msgid "Value of the element in position (1,2)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (1,2)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:29
+ msgid "(1,3) "
+@@ -2615,7 +3045,7 @@ msgstr "(1,3) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:30
+ msgid "Value of the element in position (1,3)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (1,3)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:31
+ msgid "(1,4) "
+@@ -2623,7 +3053,7 @@ msgstr "(1,4) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:32
+ msgid "Value of the element in position (1,4)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (1,4)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:33
+ msgid "(1,5) "
+@@ -2631,7 +3061,7 @@ msgstr "(1,5) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:34
+ msgid "Value of the element in position (1,5)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (1,5)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:35
+ msgid "(2,1) "
+@@ -2639,7 +3069,7 @@ msgstr "(2,1) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:36
+ msgid "Value of the element in position (2,1)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (2,1)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:37
+ msgid "(2,2) "
+@@ -2647,7 +3077,7 @@ msgstr "(2,2) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:38
+ msgid "Value of the element in position (2,2)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (2,2)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:39
+ msgid "(2,3) "
+@@ -2655,7 +3085,7 @@ msgstr "(2,3) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:40
+ msgid "Value of the element in position (2,3)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (2,3)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:41
+ msgid "(2,4) "
+@@ -2663,7 +3093,7 @@ msgstr "(2,4) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:42
+ msgid "Value of the element in position (2,4)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (2,4)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:43
+ msgid "(2,5) "
+@@ -2671,7 +3101,7 @@ msgstr "(2,5) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:44
+ msgid "Value of the element in position (2,5)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (2,5)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:45
+ msgid "(3,1) "
+@@ -2679,7 +3109,7 @@ msgstr "(3,1) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:46
+ msgid "Value of the element in position (3,1)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (3,1)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:47
+ msgid "(3,2) "
+@@ -2687,7 +3117,7 @@ msgstr "(3,2) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:48
+ msgid "Value of the element in position (3,2)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (3,2)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:49
+ msgid "(3,3) "
+@@ -2695,7 +3125,7 @@ msgstr "(3,3) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:50
+ msgid "Value of the element in position (3,3)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (3,3)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:51
+ msgid "(3,4) "
+@@ -2703,7 +3133,7 @@ msgstr "(3,4) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:52
+ msgid "Value of the element in position (3,4)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (3,4)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:53
+ msgid "(3,5) "
+@@ -2711,7 +3141,7 @@ msgstr "(3,5) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:54
+ msgid "Value of the element in position (3,5)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (3,5)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:55
+ msgid "(4,1) "
+@@ -2719,7 +3149,7 @@ msgstr "(4,1) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:56
+ msgid "Value of the element in position (4,1)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (4,1)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:57
+ msgid "(4,2) "
+@@ -2727,7 +3157,7 @@ msgstr "(4,2) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:58
+ msgid "Value of the element in position (4,2)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (4,2)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:59
+ msgid "(4,3) "
+@@ -2735,7 +3165,7 @@ msgstr "(4,3) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:60
+ msgid "Value of the element in position (4,3)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (4,3)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:61
+ msgid "(4,4) "
+@@ -2743,7 +3173,7 @@ msgstr "(4,4) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:62
+ msgid "Value of the element in position (4,4)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (4,4)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:63
+ msgid "(4,5) "
+@@ -2751,7 +3181,7 @@ msgstr "(4,5) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:64
+ msgid "Value of the element in position (4,5)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (4,5)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:65
+ msgid "(5,1) "
+@@ -2759,7 +3189,7 @@ msgstr "(5,1) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:66
+ msgid "Value of the element in position (5,1)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (5,1)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:67
+ msgid "(5,2) "
+@@ -2767,7 +3197,7 @@ msgstr "(5,2) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:68
+ msgid "Value of the element in position (5,2)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (5,2)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:69
+ msgid "(5,3) "
+@@ -2775,7 +3205,7 @@ msgstr "(5,3) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:70
+ msgid "Value of the element in position (5,3)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (5,3)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:71
+ msgid "(5,4) "
+@@ -2783,7 +3213,7 @@ msgstr "(5,4) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:72
+ msgid "Value of the element in position (5,4)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (5,4)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:73
+ msgid "(5,5) "
+@@ -2791,7 +3221,7 @@ msgstr "(5,5) "
+ 
+ #: ../operations/workshop/convolution-matrix.c:74
+ msgid "Value of the element in position (5,5)"
+-msgstr ""
++msgstr "Wartość elementu w położeniu (5,5)"
+ 
+ #: ../operations/workshop/convolution-matrix.c:76
+ msgid "Divisor: "
+@@ -2799,7 +3229,7 @@ msgstr "Podzielnik:"
+ 
+ #: ../operations/workshop/convolution-matrix.c:77
+ msgid "The value of the divisor"
+-msgstr ""
++msgstr "Wartość podzielnika"
+ 
+ #: ../operations/workshop/convolution-matrix.c:78
+ msgid "Offset: "
+@@ -2807,12 +3237,11 @@ msgstr "Przesunięcie:"
+ 
+ #: ../operations/workshop/convolution-matrix.c:79
+ msgid "The value of the offset"
+-msgstr ""
++msgstr "Wartość przesunięcia"
+ 
+ #: ../operations/workshop/convolution-matrix.c:81
+-#, fuzzy
+ msgid "Normalize"
+-msgstr "_Normalizuj"
++msgstr "Normalizuj"
+ 
+ #: ../operations/workshop/convolution-matrix.c:81
+ #, fuzzy
+@@ -2820,19 +3249,16 @@ msgid "Normalize or not"
+ msgstr "_Normalizuj"
+ 
+ #: ../operations/workshop/convolution-matrix.c:83
+-#, fuzzy
+ msgid "Red channel"
+-msgstr "Nowy kanał"
++msgstr "Kanał czerwieni"
+ 
+ #: ../operations/workshop/convolution-matrix.c:84
+-#, fuzzy
+ msgid "Green channel"
+-msgstr "Nowy kanał"
++msgstr "Kanał zieleni"
+ 
+ #: ../operations/workshop/convolution-matrix.c:85
+-#, fuzzy
+ msgid "Blue channel"
+-msgstr "Nowy kanał"
++msgstr "Kanał niebieskiego"
+ 
+ #: ../operations/workshop/convolution-matrix.c:86
+ msgid "Alpha channel"
+@@ -2854,11 +3280,11 @@ msgstr "Brzeg"
+ 
+ #: ../operations/workshop/convolution-matrix.c:91
+ msgid ""
+-"Type of border to choose.Choices are extend, wrap, crop.Default is extend"
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
+ msgstr ""
+ 
+ #: ../operations/workshop/convolution-matrix.c:433
+-msgid "Creates image by manually set convolution matrix."
++msgid "Creates image by manually set convolution matrix"
+ msgstr ""
+ 
+ #: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
+@@ -2869,12 +3295,8 @@ msgstr "Rozmiar kafla"
+ msgid "Tile saturation"
+ msgstr "Nasycenie kafla"
+ 
+-#: ../operations/workshop/cubism.c:35
+-msgid "Random seed"
+-msgstr "Ziarno losowości"
+-
+ #: ../operations/workshop/cubism.c:595
+-msgid "Filter that somehow resembels a cubist painting style."
++msgid "A filter that somehow resembles a cubist painting style"
+ msgstr ""
+ 
+ #: ../operations/workshop/deinterlace.c:30
+@@ -2905,7 +3327,7 @@ msgstr ""
+ 
+ #: ../operations/workshop/deinterlace.c:309
+ #, fuzzy
+-msgid "Performs deinterlace on the image."
++msgid "Performs deinterlace on the image"
+ msgstr "Powiększa jaśniejsze obszary obrazu"
+ 
+ #: ../operations/workshop/demosaic-bimedian.c:26
+@@ -2932,7 +3354,17 @@ msgid ""
+ "Performs a naive grayscale2color demosaicing of an image, no interpolation."
+ msgstr ""
+ 
+-#: ../operations/workshop/ditto.c:111
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++
++#: ../operations/workshop/ditto.c:112
+ msgid "Test op to do a 1:1 map of input to output, while sampling"
+ msgstr ""
+ 
+@@ -2942,16 +3374,15 @@ msgstr "Azymut"
+ 
+ #: ../operations/workshop/emboss.c:26
+ msgid "The value of azimuth"
+-msgstr ""
++msgstr "Wartość azymutu"
+ 
+ #: ../operations/workshop/emboss.c:27
+ msgid "Elevation"
+ msgstr "Wysokość"
+ 
+ #: ../operations/workshop/emboss.c:28
+-#, fuzzy
+ msgid "The value of elevation"
+-msgstr "Kanał na zaznaczenie"
++msgstr "Wartość wysokości"
+ 
+ #: ../operations/workshop/emboss.c:29
+ #: ../operations/workshop/fractal-trace.c:40
+@@ -2959,9 +3390,8 @@ msgid "Depth"
+ msgstr "Głębia"
+ 
+ #: ../operations/workshop/emboss.c:30
+-#, fuzzy
+ msgid "Pixel depth"
+-msgstr "_Szerokość piksela:"
++msgstr "Głębia pikseli"
+ 
+ #: ../operations/workshop/emboss.c:32
+ msgid ""
+@@ -2971,7 +3401,7 @@ msgstr ""
+ 
+ #: ../operations/workshop/emboss.c:248
+ #, fuzzy
+-msgid "Simulates an image created by embossing."
++msgid "Simulates an image created by embossing"
+ msgstr "Symuluje obraz utworzony przez wytłaczanie"
+ 
+ #: ../operations/workshop/external/ff-save.c:31
+@@ -2985,7 +3415,7 @@ msgstr ""
+ 
+ #: ../operations/workshop/external/ff-save.c:32
+ msgid "frames per second"
+-msgstr ""
++msgstr "klatki na sekundę"
+ 
+ #: ../operations/workshop/external/ff-save.c:889
+ msgid "FFmpeg video output sink"
+@@ -3004,9 +3434,8 @@ msgid "a stored lua script on disk implementing an operation."
+ msgstr ""
+ 
+ #: ../operations/workshop/external/gluas.c:44
+-#, fuzzy
+ msgid "User value"
+-msgstr "Użycie średniej wartości"
++msgstr "Wartość użytkownika"
+ 
+ #: ../operations/workshop/external/gluas.c:45
+ msgid "(appears in the global variable 'user_value' in lua."
+@@ -3040,7 +3469,7 @@ msgid "Lens:"
+ msgstr ""
+ 
+ #: ../operations/workshop/external/lens-correct.c:33
+-msgid "Write your lens model with majuscules"
++msgid "Write your lens model with uppercase letters"
+ msgstr ""
+ 
+ #: ../operations/workshop/external/lens-correct.c:34
+@@ -3194,6 +3623,7 @@ msgstr "Współrzędne polarne"
+ 
+ #: ../operations/workshop/external/line-profile.c:26
+ #: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
+ msgid "X1"
+ msgstr "X1"
+ 
+@@ -3213,6 +3643,7 @@ msgstr "Współrzędne polarne"
+ 
+ #: ../operations/workshop/external/line-profile.c:28
+ #: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
+ msgid "Y1"
+ msgstr "Y1"
+ 
+@@ -3273,6 +3704,7 @@ msgid "X1 value, position"
+ msgstr "Współrzędne XY:"
+ 
+ #: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
+ msgid "X2"
+ msgstr "X2"
+ 
+@@ -3283,6 +3715,7 @@ msgid "X2 value, position"
+ msgstr "Współrzędne XY:"
+ 
+ #: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
+ msgid "Y2"
+ msgstr "Y2"
+ 
+@@ -3322,20 +3755,18 @@ msgid "Bailout length"
+ msgstr "Długość słupka"
+ 
+ #: ../operations/workshop/fractal-trace.c:44
+-msgid "Background"
+-msgstr "Tło"
++msgid "Abyss policy"
++msgstr ""
+ 
+ #: ../operations/workshop/fractal-trace.c:45
+-msgid ""
+-"Optional parameter to override automatic selection of wrap background. "
+-"Choices are wrap, black, white and transparent."
++msgid "How to deal with pixels outside of the input buffer"
+ msgstr ""
+ 
+-#: ../operations/workshop/fractal-trace.c:171
++#: ../operations/workshop/fractal-trace.c:161
+ msgid "Unsupported fractal type"
+ msgstr "Nieobsługiwany typ fraktala"
+ 
+-#: ../operations/workshop/fractal-trace.c:321
++#: ../operations/workshop/fractal-trace.c:248
+ #, fuzzy
+ msgid "Performs fractal trace on the image"
+ msgstr "Zniekształca klatkę, aby zniekształcić obraz"
+@@ -3381,37 +3812,19 @@ msgstr ""
+ msgid "Edge preserving blur"
+ msgstr ""
+ 
+-#: ../operations/workshop/linear-gradient.c:24
+-#: ../operations/workshop/radial-gradient.c:24
+-msgid "x1"
+-msgstr "x1"
+-
+-#: ../operations/workshop/linear-gradient.c:25
+-#: ../operations/workshop/radial-gradient.c:25
+-msgid "y1"
+-msgstr "y1"
+-
+-#: ../operations/workshop/linear-gradient.c:26
+-#: ../operations/workshop/radial-gradient.c:26
+-msgid "x2"
+-msgstr "x2"
+-
+-#: ../operations/workshop/linear-gradient.c:27
+-#: ../operations/workshop/radial-gradient.c:27
+-msgid "y2"
+-msgstr "y2"
+-
+ #: ../operations/workshop/linear-gradient.c:29
++#, fuzzy
++msgid "One end of a agradient"
++msgstr "Gradient ciągły"
++
+ #: ../operations/workshop/linear-gradient.c:31
+-#: ../operations/workshop/radial-gradient.c:29
+-#: ../operations/workshop/radial-gradient.c:31
+ #, fuzzy
+-msgid "one end of gradient"
++msgid "The other end of a gradient"
+ msgstr "Gradient ciągły"
+ 
+-#: ../operations/workshop/linear-gradient.c:137
++#: ../operations/workshop/linear-gradient.c:136
+ #, fuzzy
+-msgid "linear gradient renderer"
++msgid "Linear gradient renderer"
+ msgstr "Odwrócony gradient otoczki"
+ 
+ #: ../operations/workshop/mandelbrot.c:25
+@@ -3449,22 +3862,9 @@ msgstr "_Maksymalna liczba kolorów:"
+ 
+ #: ../operations/workshop/mandelbrot.c:144
+ #, fuzzy
+-msgid "Mandelbrot set renderer."
++msgid "Mandelbrot set renderer"
+ msgstr "Parametry Mandelbrota"
+ 
+-#: ../operations/workshop/max-rgb.c:30
+-#, fuzzy
+-msgid "Minimal"
+-msgstr "M_inimalna wartość:"
+-
+-#: ../operations/workshop/max-rgb.c:31
+-msgid "Hold the minimal values instead of the maximal values"
+-msgstr ""
+-
+-#: ../operations/workshop/max-rgb.c:120
+-msgid "Reduce image to pure red, green, and blue"
+-msgstr "Redukuje obraz do samej czerwieni, zielonego i niebieskiego"
+-
+ #: ../operations/workshop/noise-spread.c:30
+ #, fuzzy
+ msgid "Horizontal spread amount"
+@@ -3477,7 +3877,7 @@ msgstr "Pionowy gradient"
+ 
+ #: ../operations/workshop/noise-spread.c:172
+ #, fuzzy
+-msgid "Spread filter"
++msgid "Noise spread filter"
+ msgstr "Rozrzucanie"
+ 
+ #: ../operations/workshop/plasma.c:34
+@@ -3490,16 +3890,38 @@ msgstr "Turbulencje"
+ 
+ #: ../operations/workshop/plasma.c:36
+ msgid "The value of the turbulence"
+-msgstr ""
++msgstr "Wartość turbulencji"
+ 
+-#: ../operations/workshop/plasma.c:388
++#: ../operations/workshop/plasma.c:389
+ #, fuzzy
+-msgid "Performs plasma on the image."
++msgid "Performs plasma effect on the image"
+ msgstr "Ustawia profil kolorów na obrazie"
+ 
+-#: ../operations/workshop/radial-gradient.c:129
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++#, fuzzy
++msgid "One end of gradient"
++msgstr "Gradient ciągły"
++
++#: ../operations/workshop/radial-gradient.c:128
+ #, fuzzy
+-msgid "radial gradient renderer"
++msgid "Radial gradient renderer"
+ msgstr "Gradient promienisty:"
+ 
+ #: ../operations/workshop/rawbayer-load.c:154
+@@ -3511,20 +3933,20 @@ msgid ""
+ msgstr ""
+ 
+ #: ../operations/workshop/red-eye-removal.c:32
+-#, fuzzy
+ msgid "The value of the threshold"
+-msgstr "Poruszenie myszą zmieni próg"
++msgstr "Wartość progu"
+ 
+ #: ../operations/workshop/red-eye-removal.c:132
+-msgid "Performs red-eye-removal on the image."
+-msgstr ""
++#, fuzzy
++msgid "Performs red-eye-removal on the image"
++msgstr "Powiększa jaśniejsze obszary obrazu"
+ 
+ #: ../operations/workshop/snn-percentile.c:30
+ msgid "Number of pairs, higher number preserves more acute features"
+ msgstr ""
+ 
+ #: ../operations/workshop/snn-percentile.c:32
+-msgid "The percentile to return, the default value 50 is equal to the median."
++msgid "The percentile to return, the default value 50 is equal to the median"
+ msgstr ""
+ 
+ #: ../operations/workshop/snn-percentile.c:272
+@@ -3533,44 +3955,32 @@ msgid ""
+ "Neighbours"
+ msgstr ""
+ 
+-#: ../operations/workshop/warp.c:26
+-msgid "Strength"
+-msgstr "Siła"
+-
+-#: ../operations/workshop/warp.c:27 ../operations/workshop/warp.c:32
+-#, fuzzy
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
+ msgid "Effect Strength"
+-msgstr "S_iła:"
++msgstr "Siła efektu"
+ 
+-#: ../operations/workshop/warp.c:29
+-#, fuzzy
++#: ../operations/workshop/warp.c:38
+ msgid "Effect Size"
+-msgstr "Obraz _efektów:"
+-
+-#: ../operations/workshop/warp.c:30
+-#, fuzzy
+-msgid "Harness"
+-msgstr "Twardość"
++msgstr "Rozmiar efektu"
+ 
+-#: ../operations/workshop/warp.c:31
++#: ../operations/workshop/warp.c:40
+ #, fuzzy
+-msgid "Effect Harness"
++msgid "Effect Hardness"
+ msgstr "Kanał efektów"
+ 
+-#: ../operations/workshop/warp.c:32
++#: ../operations/workshop/warp.c:41
+ msgid "Stroke"
+ msgstr "Promyki"
+ 
+-#: ../operations/workshop/warp.c:33
++#: ../operations/workshop/warp.c:42
+ msgid "Behavior"
+ msgstr "Zachowanie"
+ 
+-#: ../operations/workshop/warp.c:34
+-#, fuzzy
++#: ../operations/workshop/warp.c:43
+ msgid "Behavior of the op"
+-msgstr "Ciążenie ołówka"
++msgstr "Zachowanie instrukcji"
+ 
+-#: ../operations/workshop/warp.c:379
++#: ../operations/workshop/warp.c:386
+ msgid "Compute a relative displacement mapping from a stroke"
+ msgstr ""
+ 
+diff --git a/po/pt_BR.po b/po/pt_BR.po
+new file mode 100644
+index 0000000..3936186
+--- /dev/null
++++ po/pt_BR.po
+@@ -0,0 +1,3974 @@
++# Brazilian Portuguese translation for gegl.
++# Copyright (C) 2012 gegl's COPYRIGHT HOLDER
++# This file is distributed under the same license as the gegl package.
++# Vanessa Gomes de Lima <vane.gomesl at gmail.com>, 2012.
++# Mateus Gondim <gondim.mateus at gmail.com>, 2012.
++# Renato Oliveira <renatooliveira.cin at gmail.com>, 2012.
++#  Rafael Ferreira <rafael.f.f1 at gmail.com>, 2012.
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl master\n"
++"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
++"product=gegl&keywords=I18N+L10N&component=general\n"
++"POT-Creation-Date: 2012-11-05 09:33+0000\n"
++"PO-Revision-Date: 2012-10-19 03:44-0300\n"
++"Last-Translator: Rafael Ferreira <rafael.f.f1 at gmail.com>\n"
++"Language-Team: Brazilian Portuguese <gnome-pt_br-list at gnome.org>\n"
++"Language: pt_BR\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n > 1);\n"
++"X-Generator: Virtaal 0.5.2\n"
++
++#: ../bin/gegl.c:147
++#, c-format
++msgid "Unable to read file: %s"
++msgstr "Não foi possível ler o arquivo: %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr "Gráfico inválido, abortar.\n"
++
++#: ../bin/gegl.c:257 ../bin/gegl-options.c:124
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr "Modo de GeglOption desconhecido: %d"
++
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++"uso: %s [opções] <arquivo | -- [op [op] ..]>\n"
++"\n"
++"  Opções:\n"
++"     -h, --help      esta informação de ajuda\n"
++"\n"
++"     -i, --file      lê o xml do arquivo informado\n"
++"\n"
++"     -x, --xml       usa o xml fornecido no argumento seguinte\n"
++"\n"
++"     --dot           imprime uma descrição de gráfico de graphviz\n"
++"\n"
++"     -o, --output    imprime imagem gerada para o arquivo informado, com "
++"tipo\n"
++"                     baseado na extensão\n"
++"\n"
++"     -p              aumenta os contadores de quadros de vários elementos "
++"ao\n"
++"                     terminar o processamento\n"
++"\n"
++"     -X              imprime o XML que foi lido\n"
++"\n"
++"     -v, --verbose   exibe diagnósticos enquanto está em execução\n"
++"\n"
++"Todos os parâmetros após -- são considerados opções a serem encadeados em\n"
++"composições menores ao invés de usar um arquivo xml, isso permite que sejam\n"
++"realizados testes de filtros. Fique sabendo que o valor padrão será usado "
++"para\n"
++"todas as propriedades.\n"
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr "ERRO: opção \"%s\" esperava um argumento\n"
++
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr "Exibir na tela"
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr "Imprimir XML"
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr "Saída para um arquivo"
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
++msgstr "Exibe informação de ajuda"
++
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
++msgstr "modo desconhecido"
++
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++"Linha de comando analisada:\n"
++"\tmodo:    %s\n"
++"\tarquivo: %s\n"
++"\txml:     %s\n"
++"\tsaída:   %s\n"
++"\tresto:   %s\n"
++"\t\n"
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
++msgstr ""
++"\n"
++"\n"
++"parâmetro desconhecido \"%s\" e, portanto, exibindo a ajuda\n"
++"\n"
++"\n"
++
++#: ../gegl/gegl-init.c:205
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "Tolerância de erro babls, um valor entre 0.2 e 0.000000001"
++
++#: ../gegl/gegl-init.c:210
++msgid "Where GEGL stores its swap"
++msgstr "Onde o GEGL armazena suas operações de swap"
++
++#: ../gegl/gegl-init.c:215
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr "Quantidade de memória (aproximada) disponível para cache "
++
++#: ../gegl/gegl-init.c:220
++#, fuzzy
++msgid "Default size of tiles in GeglBuffers"
++msgstr "Tamanho padrão dos (tiles) no GeglBuffers"
++
++#: ../gegl/gegl-init.c:225
++msgid "The count of pixels to compute simultaneously"
++msgstr "Quantidade de pixels para computar simultaneamente"
++
++#: ../gegl/gegl-init.c:230
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr ""
++"A quantidade de renderização de um valor entre 0.0 (rápido) e 1.0 "
++"(referência)"
++
++#: ../gegl/gegl-init.c:235
++msgid "The number of concurrent processing threads to use"
++msgstr "Quantidade de threads de processamento simultâneos para uso"
++
++#: ../gegl/gegl-init.c:240
++msgid "Use OpenCL"
++msgstr "Usar OpenCL"
++
++#: ../gegl/gegl-init.c:245
++#, fuzzy
++msgid "Maximum number of entries in the file tile backend's writer queue"
++msgstr ""
++"Número máximo de entradas na fila de gravação do backend do arquivo de (tile)"
++
++#: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274 ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr "Erro ao carregar módulo \"%s\": %s"
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Erro de módulo"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Carregado"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Falha ao carregar"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Não carregado"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr "Raio de desfoque"
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr "Raio da região quadrada de pixels, (largura e altura serão raio*2 +1)"
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr "Preservação da borda"
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr "Quantidade de preservação da borda"
++
++#: ../operations/common/bilateral-filter.c:315
++msgid ""
++"An edge preserving blur filter that can be used for noise reduction. It is a "
++"gaussian blur where the contribution of neighbourhood pixels are weighted by "
++"the color difference from the center pixel."
++msgstr ""
++"Um filtro de desfoque de preservação da borda que pode ser usado para "
++"redução de ruído. É um desfoque gaussiano onde a contribuição dos pixels "
++"vizinhos são medidos pela diferença de cor a partir do pixel central."
++
++#: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Raio"
++
++#: ../operations/common/box-blur.c:25 ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr "Raio da região quadrada de pixels, (largura e altura serão raio*2 +1)"
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr "Realiza uma média da caixa quadrada de pixels"
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Contraste"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr "Fator de escala de alcançe"
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27 ../operations/common/softglow.c:27
++msgid "Brightness"
++msgstr "Brilho"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr "Quantidade de aumento do brilho"
++
++#: ../operations/common/brightness-contrast.c:159
++msgid "Changes the light level and contrast."
++msgstr "Altera o nível de luz e contraste."
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr "Localização do buffer"
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr "Local onde armazenar a saída do GeglBuffer"
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr "formato babl"
++
++#: ../operations/common/buffer-sink.c:28
++msgid ""
++"The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++"O formato babl da saída do GeglBuffer, NULL para usar o formato do buffer de "
++"entrada"
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:132
++msgid "A GEGL buffer destination surface."
++msgstr "Superfície de destino do buffer GEGL."
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Buffer de entrada"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr "Carregar o GeglBuffer no pipeline"
++
++#: ../operations/common/buffer-source.c:177
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++"Uma fonte que usa a memória interna do GeglBuffer, para uso interno do GEGL."
++
++#: ../operations/common/c2g.c:28
++msgid ""
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
++msgstr ""
++"Vizinhança levada em conta, esse é o raio dos pixels levados em conta ao "
++"decidir quais cores mapear para quais valores de cinza"
++
++#: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
++msgid "Samples"
++msgstr "Amostras"
++
++#: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++"Número de amostras a fazer por iteração examinando o intervalo de cores."
++
++#: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr "Iterações"
++
++#: ../operations/common/c2g.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
++msgstr ""
++"Número de iterações, um maior número de iterações fornece menos resultados "
++"ruidosos, a um custo computacional"
++
++#: ../operations/common/c2g.c:493
++msgid ""
++"Color to grayscale conversion, uses envelopes formed from spatial color "
++"differences to perform color-feature preserving grayscale spatial contrast "
++"enhancement"
++msgstr ""
++"Cor para conversão em escala de cinza, usa envelopes formados a partir de "
++"diferenças de cor especiais para executar a cor característica de "
++"preservação em escala de cinza do contraste espacial"
++
++#: ../operations/common/cartoon.c:25
++msgid "Mask radius"
++msgstr "Raio da máscara"
++
++#: ../operations/common/cartoon.c:27
++msgid "Percent black"
++msgstr "Percentagem de negro"
++
++#: ../operations/common/cartoon.c:376
++msgid "Cartoon effect"
++msgstr "Efeito de cartoon"
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31 ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33 ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27 ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27 ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Largura"
++
++#: ../operations/common/checkerboard.c:26 ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr "Largura horizontal das células em pixels"
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33 ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35 ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29 ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Altura"
++
++#: ../operations/common/checkerboard.c:28 ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr "Largura vertical das células em pixels"
++
++#: ../operations/common/checkerboard.c:29 ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr "Deslocamento X"
++
++#: ../operations/common/checkerboard.c:30 ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr "Deslocamento horizontal (da origem) para o início da grade"
++
++#: ../operations/common/checkerboard.c:31 ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr "Deslocamento Y"
++
++#: ../operations/common/checkerboard.c:32 ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr "Deslocamento vertical (da origem) para o início da grade"
++
++#: ../operations/common/checkerboard.c:33 ../operations/common/color.c:24
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/grid.c:36
++#: ../operations/common/rectangle.c:37 ../operations/common/vignette.c:25
++#: ../operations/external/text.c:31 ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Cor"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr "Uma das cores das células (o padrão é \"preto\")"
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr "Outra cor"
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr "Outra cor da célula (o padrão é \"branco\")"
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr "Renderização quadriculada"
++
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr "A cor para renderizar (padrão \"preto\")"
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++"Gera um buffer inteiramente preenchido com a cor específica, corte para "
++"obter dimensões menores."
++
++#: ../operations/common/color-reduction.c:35
++msgid "Red bits"
++msgstr "Bits vermelhos"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for red channel"
++msgstr "Quantidade de bits para o canal vermelho"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Green bits"
++msgstr "Bits verdes"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for green channel"
++msgstr "Quantidade de bits para o canal verde"
++
++#: ../operations/common/color-reduction.c:37
++msgid "Blue bits"
++msgstr "Bits azuis"
++
++#: ../operations/common/color-reduction.c:37
++msgid "Number of bits for blue channel"
++msgstr "Quantidade de bits para o canal azul"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Alpha bits"
++msgstr "Bits alfa"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Number of bits for alpha channel"
++msgstr "Quantidade de bits para o canal alfa"
++
++#: ../operations/common/color-reduction.c:40
++msgid "Dithering Strategy"
++msgstr "Estratégia de estremecimento"
++
++#: ../operations/common/color-reduction.c:41
++msgid "The dithering strategy to use"
++msgstr "A estratégia de estremecimento para usar"
++
++#: ../operations/common/color-reduction.c:553
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++"Reduz a quantidade de bits por canal (cores e alfa), com estremecimento "
++"opcional"
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr "Temperatura original"
++
++#: ../operations/common/color-temperature.c:27
++msgid ""
++"Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++"Temperatura estimada da fonte de luz em Kelvin em que a imagem foi tirada."
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr "Temperatura prevista"
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr "Estimativa correta da temperatura da fonte de luz em Kelvin."
++
++#: ../operations/common/color-temperature.c:280
++msgid "Allows changing the color temperature of an image."
++msgstr "Permite alteração na temperatura da cor de uma imagem."
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr "A cor para renderizar (padrão \"branco\")"
++
++#: ../operations/common/color-to-alpha.c:197
++msgid "Performs color-to-alpha on the image."
++msgstr "Executa cor-para-alfa na imagem."
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "Pontos de amostra"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr "Número de pontos de amostragem da curva. 0 para cálculo exato."
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Curva"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr "A curva de contraste."
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr "Ajusta o contraste da imagem de acordo com a curva."
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Raio 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Raio 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr ""
++"Faz uma detecção de borda baseada na diferença de dois desfoques gaussianos."
++
++#: ../operations/common/display.c:24 ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr "Título a ser dado a janela de saída."
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr "Exibe o buffer de entrada em uma janela."
++
++#: ../operations/common/dot.c:26 ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Largura de bloco"
++
++#: ../operations/common/dot.c:27
++msgid "Size of each block in pixels"
++msgstr "Tamanho de bloco em pixels"
++
++#: ../operations/common/dot.c:28
++msgid "Dot size ratio"
++msgstr "Relação tamanho e ponto"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr "A razão de tamanho de um ponto dentro de cada bloco"
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr "Simplificar imagem em uma matriz com pontos de cores sólidas"
++
++#: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Opacidade"
++
++#: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26 ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr "Offset do sombreamento horizontal"
++
++#: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29 ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr "Offset do sombreamento vertical"
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Cria um efeito dropshadow no buffer de entrada"
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr "Detecção de bordas de alta resolução"
++
++#: ../operations/common/edge-sobel.c:28 ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Horizontal"
++
++#: ../operations/common/edge-sobel.c:31 ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Vertical"
++
++#: ../operations/common/edge-sobel.c:34 ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr "Manter o sinal"
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr "Detecção especializada de bordas dependentes de direção"
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr "Valores de exposição"
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr "Brilho relativo de cada exposição em EV"
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr "Bits de discretização"
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr "Log2 dos passos de discretização da origem"
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr "Expessura sigma"
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distribution sigma controlling response contributions"
++msgstr "Altura da distribuição sigma controlando as contribuições de resposta"
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr "Combine exposições de múltiplas cenas em um buffer de intervalo longo"
++
++#: ../operations/common/fattal02.c:33 ../operations/common/noise.c:25
++#: ../operations/common/noise-rgb.c:37
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alfa"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr "Limite de gradiente para aprimoramento de detalhes"
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Beta"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr "Força de realce de detalhe local"
++
++#: ../operations/common/fattal02.c:39 ../operations/common/mantiuk06.c:34
++#: ../operations/common/noise-hsv.c:31
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Saturação"
++
++#: ../operations/common/fattal02.c:41 ../operations/common/mantiuk06.c:36
++msgid "Global color saturation factor"
++msgstr "Fator de saturação de cor global"
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Ruído"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr "Limite de gradiente para diminuir o aprimoramento de detalhes"
++
++#: ../operations/common/fattal02.c:1325
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator attenuates the magnitudes of local image "
++"gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adapta uma imagem, que pode ter um alto intervalo dinâmico, para "
++"apresentação usando um baixo intervalo dinâmico. Este operador atenua a "
++"magnitude dos gradientes das imagens locais produzindo lumiância dentro do "
++"intervalo 0.0-1.0"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr "Tipo fractal"
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr "Tipo de um fractal"
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Esquerda"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Direita"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr "Topo"
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr "Base"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr "CX"
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr "CX (apenas Julia)"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr "CY"
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr "CY (only Julia)\t"
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr "Alongamento vermelho"
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr "Fator de alongamento vermelho"
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr "Alongamento verde"
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr "Fator de alongamento verde"
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr "Alongamento azul"
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr "Fator de alongamento azul"
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr "Modo vermelho"
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Modo de aplicação vermelha (0:SENO; 1:COSSENO; 2:NENHUM)"
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr "Modo verde"
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Modo de aplicação verde (0:SENO; 1:COSSENO; 2:NENHUM)"
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr "Modo azul"
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr "Modo de aplicação azul (0:SENO; 1:COSSENO; 2:NENHUM)"
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr "Inversão vermelha"
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr "Inversão verde"
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr "Inversão azul"
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Cores"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Número de cores"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr "Suavização loglog"
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr "Usar suavização loglog"
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr "Explorador de fractais"
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "Tamanho X"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid ""
++"Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++"Desvio padrão para o eixo horizontal. (multiplicar por 2 para obter raio)"
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Tamanho Y"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid ""
++"Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++"Desvio padrão para o eixo vertical. (multiplicar por 2 para obter raio.)"
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filtro"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid ""
++"Optional parameter to override the automatic selection of blur filter. "
++"Choices are fir, iir, auto"
++msgstr ""
++"Parâmetro opcional para substituir a seleção automática de filtro de "
++"desfoque. Opções são fir, iir, auto"
++
++#: ../operations/common/gaussian-blur.c:731
++msgid ""
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
++msgstr ""
++"Executa uma média de pixels vizinhos com a distribuição normal como peso"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25 ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25 ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25 ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25 ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26 ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26 ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "Arquivo"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr "Caminho do arquivo GeglBuffer para carregamento."
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr "Carregador do arquivo GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr "Caminho do arquivo de destino para gravar GeglBuffer."
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr "Gravador do arquivo GeglBuffer."
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr "Transforma a imagem em escala de cinza"
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr "Largura da linha"
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr "Largura de linhas de grade em pixels"
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr "Altura da linha"
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr "Altura de linhas de grade em pixels"
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr "Cor das linhas de grade"
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr "Renderizador de grade"
++
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr "Pixels incorretos"
++
++#: ../operations/common/image-compare.c:26
++msgid "Number of differing pixels."
++msgstr "Quantidade de pixels de estremecimento."
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Diferença máxima"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "O máximo de diferença entre dois pixels."
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr "Diferença média (incorretos)"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr "A média de diferença entre dois pixels incorretos."
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr "Diferença média (total)"
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr "A média de diferença entre todos pixels."
++
++#: ../operations/common/image-compare.c:177
++msgid ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
++msgstr ""
++"Compara se buffers de entrada e auxiliar são diferentes. Os resultados são "
++"salvos nas propriedades."
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr "Nó"
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr "GeglNode para introspecção"
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr "Visualizador gráfico GEGL."
++
++#: ../operations/common/invert.c:86
++msgid ""
++"Inverts the components (except alpha), the result is the corresponding "
++"\"negative\" image."
++msgstr ""
++"Inverte os componenentes (exceto alfa), o resultado é a imagem \"negativa\" "
++"correspondente."
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr "Operação"
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr "Operação de composição para uso"
++
++#: ../operations/common/layer.c:35 ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr "Posição horizontal"
++
++#: ../operations/common/layer.c:37 ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr "Posição vertical"
++
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Escala"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr "Tamanho de escala 1:1"
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Origem"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr "Arquivo de origem (png, jpg, raw, svg, bmp, tif, ...)"
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr "Camada no sentido tradicional"
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr "Menu:"
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr "Valor principal de distorção"
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr "Zoom:"
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr "Borda:"
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr "Valor de distorção da borda"
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr "Clarear:"
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr "Clarear a imagem"
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr "Deslocamento X:"
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr "Deslocamento horizontal"
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr "Deslocamento y:"
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr "Deslocar verticalmente"
++
++#: ../operations/common/lens-distortion.c:338
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr "Executar correção da distorção de lente nas cópias da imagem"
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr "Entrada baixa"
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr "Nivel de entrada de luminosidade para tornar as saídas menores"
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr "Entrada alta"
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr "Nivel de entrada de luminosidade para se tornar branco"
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr "Entrada baixa"
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr "Nível de luminosidade baixa na saída"
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr "Saída alta"
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr "Nível de luminosidade alta na saída"
++
++#: ../operations/common/levels.c:198
++msgid "Remaps the intensity range of the image"
++msgstr "Remapeia o intervalo de intensidade da imagem"
++
++#: ../operations/common/load.c:25 ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27 ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25 ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr "Caminho do arquivo para carregar."
++
++#: ../operations/common/load.c:180
++msgid ""
++"Multipurpose file loader, that uses other native handlers, and fallback "
++"conversion using Image Magick's convert."
++msgstr ""
++"Carregador de arquivo multi-funções, que usa outros manipuladores nativos, e "
++"retorna a conversão usando o conversor Image Magick."
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr "Empacotador mágico de imagens usando op. png."
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr "Quantidade de compressão do contraste"
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr "Detalhe"
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr "Nível de ênfase nos detalhes do degradê da imagem"
++
++#: ../operations/common/mantiuk06.c:1639
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This operator constrains contrasts across multiple "
++"spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++"Adaptar uma imagem, que pode ter um alto intervalo dinâmico, para "
++"apresentação usando um baixo intervalo dinâmico. Este operador restringe os "
++"contrastes em múltiplas frequências espaciais, produzindo luminosidade "
++"dentro da faixa de 0.0-1.0"
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26 ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41 ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr "Modelo"
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Modelo usado internamente"
++
++#: ../operations/common/map-absolute.c:148
++msgid ""
++"sample input with an auxiliary buffer that contain absolute source "
++"coordinates"
++msgstr ""
++"amostra de entrado com um buffer auxiliar que contém a fonte absoluta das "
++"coordenadas"
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr "Escalar"
++
++#: ../operations/common/map-relative.c:24
++msgid ""
++"scaling factor of displacement, indicates how large spatial displacement a "
++"relative mapping value of 1.0 corresponds to."
++msgstr ""
++"Fator escalar de deslocamento, indica como o deslocamento espacial cresce "
++"relativo ao valor correspondente a 1.0."
++
++#: ../operations/common/map-relative.c:173
++msgid ""
++"sample input with an auxiliary buffer that contain relative source "
++"coordinates"
++msgstr ""
++"amostra de entrada com um buffer auxiliar que contêm coordenadas de origem "
++"relativas"
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Quantidade de iterações"
++
++#: ../operations/common/matting-global.c:482
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
++msgstr ""
++"Dado ao um usuário um tri-map e uma imagem de entrada, cria um plano alfa "
++"fosco. Define como plano branco, preto como plano de fundo para o tri-map. "
++"Todo o resto será tratado como desconhecido e será preenchido."
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr "Umidade"
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr "O valor representa a contribuição do passado para o novo quadro."
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr "Acumulando desfoque de movimento"
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr "Rotação reflexiva"
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr "Rotação aplicada às reflexões."
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr "Rotação resultante"
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr "Rotação aplicada ao resultado"
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Reflexões"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr "Quantidade de reflexões para utilizar"
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr "Deslocamento X do resultado da reflexão"
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr "Deslocamento Y do resultado da reflexão"
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr "Centro X"
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr "Relação de eixo X para o centro da reflexão"
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr "Centro Y"
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr "Relação de eixo Y para o centro da reflexão"
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr "Compactar X"
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr "Relação de eixo X para compactar a expansão da reflexão"
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr "Compactar Y"
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr "Relação de eixo Y para compactar a expansão da reflexão"
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr "Zoom"
++
++#: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr "Fator de escala para aumentar a renderização"
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr "Expandir"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr "Grampear resultado"
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr "Grampear resultado do tamanho da entrada"
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr "Ajustar entrada"
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr "Preencher totalmente a área de saída"
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr "Aplica efeito de reflexão na imagem."
++
++#: ../operations/common/mono-mixer.c:26 ../operations/common/noise-rgb.c:31
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Vermelho"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr "Quantidade de vermelho"
++
++#: ../operations/common/mono-mixer.c:28 ../operations/common/noise-rgb.c:33
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Verde"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr "Quantidade de verde"
++
++#: ../operations/common/mono-mixer.c:30 ../operations/common/noise-rgb.c:35
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Azul"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr "Quantidade de azul"
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr "Canal mixer monocromático "
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Comprimento"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr "Comprimento do desfoque em pixels"
++
++#: ../operations/common/motion-blur.c:29 ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Ângulo"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr "Ângulo do desfoque em graus"
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr "Desfoque de movimento linear"
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Deslocamento Z"
++
++#: ../operations/common/noise.c:31 ../operations/common/noise-hurl.c:30
++#: ../operations/common/noise-pick.c:30 ../operations/common/noise-slur.c:33
++#: ../operations/common/shift.c:29 ../operations/common/wind.c:33
++#: ../operations/workshop/cubism.c:34 ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr "Semente"
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Iteração"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr "Geração de ruído Perlin"
++
++# http://gimp.open-source-solution.org/manual/plug-in-hsv-noise.html
++#: ../operations/common/noise-cielch.c:25 ../operations/common/noise-hsv.c:27
++#, fuzzy
++#| msgid "Hardness"
++msgid "Holdness"
++msgstr "Folga"
++
++#: ../operations/common/noise-cielch.c:27
++msgid "Lightness"
++msgstr "Luminosidade"
++
++#: ../operations/common/noise-cielch.c:29
++msgid "Chroma"
++msgstr "Croma"
++
++#: ../operations/common/noise-cielch.c:31 ../operations/common/noise-hsv.c:29
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Matiz"
++
++#: ../operations/common/noise-cielch.c:160
++msgid "Randomize lightness, chroma and hue independently"
++msgstr "Aleatorizar luminosidade, croma e matiz independentemente"
++
++#: ../operations/common/noise-hsv.c:33
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Valor"
++
++#: ../operations/common/noise-hsv.c:164
++msgid "Randomize hue, saturation and value independently"
++msgstr "Aleatorizar matiz, saturação e valor independentemente"
++
++#: ../operations/common/noise-hurl.c:30 ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33 ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33 ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Semente aleatória"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization (%)"
++msgstr "Aleatorização (%)"
++
++#: ../operations/common/noise-hurl.c:32 ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization"
++msgstr "Randomização"
++
++#: ../operations/common/noise-hurl.c:34 ../operations/common/noise-pick.c:34
++#: ../operations/common/noise-slur.c:37
++msgid "Repeat"
++msgstr "Repetir"
++
++#: ../operations/common/noise-hurl.c:135
++msgid "Completely randomize a fraction of pixels"
++msgstr "Aleatorizar completamente uma fração de pixels"
++
++#: ../operations/common/noise-pick.c:192
++msgid "Randomly interchange some pixels with neighbors"
++msgstr "Trocar aleatoriamente alguns pixels com vizinhos"
++
++#: ../operations/common/noise-reduction.c:26 ../operations/common/wind.c:30
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Força"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "Quantas iterações para executar com o algoritmo"
++
++#: ../operations/common/noise-rgb.c:27
++msgid "Correlated noise"
++msgstr "Ruído correlato"
++
++#: ../operations/common/noise-rgb.c:29
++msgid "Independent RGB"
++msgstr "RGB independente"
++
++#: ../operations/common/noise-rgb.c:164
++msgid "Distort colors by random amounts."
++msgstr "Cores distorcidas por amostras randômicas."
++
++#: ../operations/common/noise-slur.c:178
++msgid "Randomly slide some pixels downward (similar to melting)"
++msgstr ""
++"Deslizar aleatoriamente alguns pixels para baixo (similar a derretimento)"
++
++#: ../operations/common/oilify.c:27 ../operations/common/photocopy.c:25
++#: ../operations/common/photocopy.c:26
++msgid "Mask Radius"
++msgstr "Raio da máscara"
++
++#: ../operations/common/oilify.c:28
++msgid "Radius of circle around pixel"
++msgstr "O raio do círculo em volta do pixel"
++
++#: ../operations/common/oilify.c:30 ../operations/common/oilify.c:31
++msgid "Exponent"
++msgstr "Exponente"
++
++#: ../operations/common/oilify.c:33
++msgid "Intensity Mode"
++msgstr "Modo de intensidade"
++
++#: ../operations/common/oilify.c:34
++msgid "Use pixel luminance values"
++msgstr "Usa valores de luminosidade de pixels"
++
++#: ../operations/common/oilify.c:309
++msgid "Emulate an oil painting"
++msgstr "Emular uma pintura a óleo"
++
++#: ../operations/common/opacity.c:25
++msgid ""
++"Global opacity value that is always used on top of the optional auxiliary "
++"input buffer."
++msgstr ""
++"Valor de opacidade global que é sempre usado no topo do buffer de entrada "
++"auxiliar opcional"
++
++#: ../operations/common/opacity.c:153
++msgid ""
++"Weights the opacity of the input both the value of the aux input and the "
++"global value property."
++msgstr ""
++"Pesa a opacidade da entrada pelo valor da entrada aux e pela propriedade do "
++"valor global."
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr "um GeglBuffer em disco para abrir"
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr "Uma fonte que usa o GeglBuffer em disco."
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr "Operação Porter Duff sobre (d = cA + cB * (1 - aA))"
++
++#: ../operations/common/photocopy.c:28 ../operations/common/photocopy.c:29
++#: ../operations/common/softglow.c:29
++msgid "Sharpness"
++msgstr "Nitidez"
++
++#: ../operations/common/photocopy.c:31 ../operations/common/photocopy.c:32
++msgid "Percent Black"
++msgstr "Percentagem negro"
++
++#: ../operations/common/photocopy.c:34 ../operations/common/photocopy.c:35
++msgid "Percent White"
++msgstr "Percentagem branco"
++
++#: ../operations/common/photocopy.c:395
++msgid "Photocopy effect"
++msgstr "Efeito de fotocópia"
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr "Largura de bloco em pixels"
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr "Altura de bloco"
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr "Altura de bloco em pixels"
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr "Simplificar imagem em uma matriz com quadrados de cores sólidas"
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr "Profundidade de círculo em porcentagem"
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr "Ângulo de deslocamento"
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr "Ângulo de deslocamento."
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr "Mapear para trás"
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr "Iniciar da direita ao invés da esquerda"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr "Mapear do topo"
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr "Colocar a linha do topo no centro e a linha de baixo no lado de fora"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr "Para polar"
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr "Mapear a imagem para um círculo"
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr "Ponto de origem para as coordenadas polares"
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr "Escolher centro"
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr "Faz ponto de origem ser o ponto do centro"
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr "Executa coordenadas polares na imagem"
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Níveis"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr "número de níveis por componente"
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr "Reduz o número de níveis em cada componente de cor da imagem."
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr "Carregador de imagem não processado, ajustando dcraw com pipes."
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr "Extensão horizontal"
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr "Extensão vertical"
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr "Cor para renderizar"
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr "Uma fonte retangular de tamanho fixo com uma cor sólida"
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr "Brilho geral da imagem"
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr "Adaptação cromática"
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adaptation to color variation across the image"
++msgstr "Adaptação à variação de cor ao longo da imagem"
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr "Adaptação de luz"
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adaptation to light variation across the image"
++msgstr "Adaptação à variação de luz ao longo da imagem"
++
++#: ../operations/common/reinhard05.c:274
++msgid ""
++"Adapt an image, which may have a high dynamic range, for presentation using "
++"a low dynamic range. This is an efficient global operator derived from "
++"simple physiological observations, producing luminance within the range "
++"0.0-1.0"
++msgstr ""
++"Adapta uma imagem, que pode ter um alto intervalo dinâmico, para "
++"apresentação usando um baixo intervalo dinâmico. Este é um operador global "
++"eficiente derivado de observações fisiológicas simples, produzindo "
++"luminância no intervalo 0.0-1.0"
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++"alonga componentes de pixels individualmente baseado em envelopes de "
++"luminância"
++
++#: ../operations/common/ripple.c:27 ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr "Amplitude"
++
++#: ../operations/common/ripple.c:28 ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr "Amplitude da ondulação"
++
++#: ../operations/common/ripple.c:30 ../operations/common/waves.c:35
++msgid "Period"
++msgstr "Período"
++
++#: ../operations/common/ripple.c:31 ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr "Período da ondulação"
++
++#: ../operations/common/ripple.c:33 ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38 ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr "Deslocamento de fase"
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr "Ângulo em grau"
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr "Tipo de ondulação"
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr "Tipo de ondulação"
++
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr ""
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr ""
++
++#: ../operations/common/ripple.c:175
++msgid "Transform the buffer with a ripple pattern"
++msgstr "Transforma o buffer com um padrão de ondulação"
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr "Caminho do arquivo para salvar."
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr "Protetor de arquivos multiuso, que usa outros manuseadores nativos"
++
++#: ../operations/common/shift.c:26
++msgid "Shift"
++msgstr "Deslocamento"
++
++#: ../operations/common/shift.c:27
++msgid "Maximum amount to shift"
++msgstr "Quantidade máxima para deslocar"
++
++#: ../operations/common/shift.c:36
++msgid "Direction"
++msgstr "Direção"
++
++#: ../operations/common/shift.c:37
++msgid "Shift direction"
++msgstr "Direção do deslocamento"
++
++#: ../operations/common/shift.c:231
++msgid "Shift by a random number of pixels"
++msgstr "Deslocar um número randômico de pixels"
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr "Pares"
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr "Número de pares; Números maiores preservam características mais agudas"
++
++#: ../operations/common/snn-mean.c:436
++msgid ""
++"Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Filtro de desfoque de destacamento de borda e redução de ruído baseado nos "
++"vizinhos simétricos mais próximos"
++
++#: ../operations/common/softglow.c:25
++msgid "Glow radius"
++msgstr "Raio de brilho"
++
++#: ../operations/common/softglow.c:224
++msgid "Softglow effect"
++msgstr "Efeito de brilho suave"
++
++#: ../operations/common/stress.c:28
++msgid ""
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
++msgstr ""
++", para o realce os valores ideais estão perto do maior lado da imagem, "
++"aumentar isto aumenta o tempo de execução"
++
++#: ../operations/common/stress.c:32
++msgid ""
++"Number of iterations, a higher number of iterations provides a less noisy "
++"rendering at a computational cost"
++msgstr ""
++"Número de iterações, um número maior de iterações fornece uma menor "
++"renderização de ruídos em um custo computacional"
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr "Envelope espaço-temporal tipo Retinex com amostragem estocástica."
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
++msgstr ""
++"Escala o componente do buffer para estar no range de 0.0-1.0. Isto melhora "
++"as imagens que fazem mau uso do contraste disponível (pouco contraste, muito "
++"escuro, ou imagens muito brilhantes)"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Valores"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27 ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr "lista de <number>s"
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr "Operação matriz SVG colorida svg_huerotate"
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr "Operação matriz SVG colorida svg_luminancetoalpha"
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr "Operação matriz SVG colorida svg_matrix"
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr "Operação matriz SVG colorida svg_saturate"
++
++#: ../operations/common/threshold.c:25 ../operations/common/wind.c:26
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Limiar"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++"Nível limiar global (usado quando não existe buffer de entrada auxiliar)."
++
++#: ../operations/common/threshold.c:123
++msgid ""
++"Thresholds the image to white/black based on either the global value set in "
++"the value property, or per pixel from the aux input."
++msgstr ""
++"Limita a imagem para branco/preto baseada em cada valor global definido na "
++"propriedade valor, ou por pixel da entrada aux."
++
++#: ../operations/common/tile.c:109
++msgid "Infinitely repeats the input image."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr "Desv. Pad."
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr "Desvio padrão (fator de escala espacial)"
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr "Escala, força de efeito"
++
++#: ../operations/common/unsharp-mask.c:73
++msgid ""
++"Performs an unsharp mask on the input buffer (sharpens an image by adding "
++"false mach-bands around edges)"
++msgstr ""
++"Executa uma máscara de desfoque no buffer de entrada (Foca uma imagem "
++"adicionando falsas bandas de mach em torno das bordas)"
++
++#: ../operations/common/value-invert.c:190
++msgid ""
++"Inverts just the value component, the result is the corresponding `inverted' "
++"image."
++msgstr ""
++"Inverte só o componente de valor, o resultado é a imagem \"invertida\" "
++"correspondente."
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr "Forma"
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "Formas para usar: 0=círculo 1=diamante 2=quadrado"
++
++#: ../operations/common/vignette.c:25
++msgid ""
++"Defaults to 'black', you can use transparency here to erase portions of an "
++"image"
++msgstr ""
++"Padrão para \"preto\", você pode usar transparência aqui para apagar porções "
++"de uma imagem"
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr "O quão distante a vinheta vai como porção da metade da imagem diagonal"
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr "Suavidade"
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Gama"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr "Queda de linearidade"
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr "Proporção"
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr "Quão perto estamos das proporções da imagem"
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr "Compressão"
++
++#: ../operations/common/vignette.c:30
++msgid ""
++"Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
++"inf:1, this is applied after proportion is taken into account, to directly "
++"use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++"Relação de aspecto para usar, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf "
++"1.0 = inf:1, isto é aplicado após tomadas as proporções na conta, para "
++"utilizar diretamente o fator de compressão como proporções, defina "
++"proporções para 0.0"
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr "Centro horizontal da vinheta"
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr "Centro vertical da vinheta"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr "Rotação"
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr "Ângulo de rotação"
++
++#: ../operations/common/vignette.c:386
++msgid ""
++"A vignetting op, applies a vignette to an image. Simulates the luminance "
++"fall off at edge of exposed film, and some other fuzzier border effects that "
++"can naturally occur with analoge photograpy."
++msgstr ""
++"Operação de vinheta, aplica uma vinheta a uma imagem. Simula a queda de "
++"luminância na borda de um filme exposto, e alguns outros efeitos de borda "
++"mais indefinidos que podem ocorrer naturalmente com fotografias analógicas."
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr "Coordenada X do centro das ondas"
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr "Coordenada y do centro das ondas"
++
++#: ../operations/common/waves.c:44
++msgid "Clamp deformation"
++msgstr "Segurar deformação"
++
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr "Limita a deformação da área da imagem."
++
++#: ../operations/common/waves.c:169
++msgid "Transform the buffer with waves"
++msgstr "Transforma o buffer com ondas"
++
++#: ../operations/common/weighted-blend.c:25 ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29 ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29 ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr "Valor global usado se aux não contem dados"
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr "misturar duas imagens usando valores alfa como pesos"
++
++#: ../operations/common/wind.c:27
++msgid "Higher values restrict the effect to fewer areas of the image"
++msgstr "Valores mais altos restringem o efeito para áreas menores da imagem"
++
++#: ../operations/common/wind.c:31
++msgid "Higher values increase the magnitude of the effect"
++msgstr "Valores mais altos aumentam a magnitude do efeito"
++
++#: ../operations/common/wind.c:367
++msgid "Wind-like bleed effect"
++msgstr "Efeito de mistura similar a vento"
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr "Escrever para um GeglBuffer existente"
++
++#: ../operations/common/write-buffer.c:28
++msgid "Flush buffer"
++msgstr "Descarregar buffer"
++
++#: ../operations/common/write-buffer.c:29
++msgid "Flush buffer after writing"
++msgstr "Descarrega buffer após gravação"
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "referência"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr "O ID referência usado como imput (para uso em XML)."
++
++#: ../operations/core/clone.c:110
++msgid "Clone a buffer"
++msgstr "Clonar um buffer"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Formato de saída"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr "Formato de sequência de caracteres de saída Babl"
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr "Converte o dado para o formato específico"
++
++#: ../operations/core/crop.c:194
++msgid "Crop a buffer"
++msgstr "Apara um buffer"
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr "Sem operação (pode ser usada como um ponto de roteamento)"
++
++#: ../operations/external/ff-load.c:25 ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Caminho do arquivo para carregar"
++
++#: ../operations/external/ff-load.c:26 ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr "Quadro"
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr "Número de quadro"
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr "Importador de quadro de video FFmpeg"
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr "Formato de imagem JPEG 2000 desconhecido em \"%s\""
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr "Incapaz de abrir imagem JPEG 2000 em \"%s\""
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr "Incapaz de criar perfil de cor de saída para \"%s\""
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++"Incapaz de converter imagem para espaço de cor sRGB ao processar \"%s\""
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr ""
++"Não tem suporte a arquivos não-RGB JPEG 2000 com %d compontentes em \"%s\""
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr "Arquivo JPEG 2000 não suportado com profundidade %d em \"%s\""
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr "Componentes da imagem de entrada \"%s\" não correspondem"
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr "Um ou mais dos componentes R, G, B estão faltando de \"%s\""
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr "Um ou mais dos componentes R, G, B assinaram dados em \"%s\""
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr "Erro ao ler linha %d componente %d de \"%s\""
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr "Carregador de imagem JPEG 2000"
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr "Carregador de imagem JPG"
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr "Caminho destino e nome do arquivo, usam '-' para saída padrão"
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Qualidade"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr "Qualidade de compressão JPEG (entre 1 e 100)"
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr "Suavização"
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr "Fator de suavização de 1 a 100; 0 desabilita a suavização"
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Otimiza"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr "Usa tabelas de huffman otimizadas"
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Progressivo"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr "Cria imagens JPEG progressivas"
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Escala de cinza"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr "Cria uma imagem em escala de cinza (monocromático)"
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++"Protetor de imagens JPEG (passa pelo buffer, salva como um efeito colateral)"
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilon"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Log do erro"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Raio da janela de processamento"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr "Limiar alfa para processamento multinível"
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr "Fator de influência Trimap"
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr "Número de níveis de amostras reduzidas para usar"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Niveis ativos"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr "Número de níveis para executar a resolução"
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++"Dado um tri-map esparso fornecido pelo usuário e uma imagem de entrada, cria "
++"um primeiro plano alfa embaraçado. Define branco como marcado, preto como "
++"desmarcado, para o trimap"
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr "Preencher cor"
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++"Cor de tinta para usar para preenchimento, use opacidade 0 para desabilitar "
++"preenchimento"
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr "Cor do risco"
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr "Cor de tinta para usar o riscado"
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr "Largura do risco"
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr "Largura do pincel usado para riscar o caminho"
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr "Opacidade do risco"
++
++#: ../operations/external/path.c:36
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool"
++msgstr ""
++"Opacidade do risco, note, não se comporta como SVG pois no momento do risco "
++"é usada uma ferramenta aerógrafa"
++
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "Dureza"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr "Dureza do pincel, 0.0 para um pincel suave, 1.0 para um pincel duro"
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr "Preencher regra"
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr "Como determinar o que preencher (não nulo|par-ímpar)"
++
++#: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Transformar"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr "Descrição do estilo SVG de transformação"
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr "Preencher opacidade"
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr "A opacidade de preenchimento para usar"
++
++#: ../operations/external/path.c:50 ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr "Vetor"
++
++#: ../operations/external/path.c:51 ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr "Um GeglVector representando o caminho do contorno"
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr "Renderiza um contorno de pincel"
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "GdkPixbuf para usar"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr "Usa o GdkPixbuf localizado no local de memória em <em>pixbuf</em>."
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr "Carregador de imagem PNG."
++
++#: ../operations/external/png-save.c:27 ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr "Caminho de destino e nome do arquivo, use \"-\" para stdout."
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Compressão"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr "Nível de compressão PNG de 1 a 9"
++
++#: ../operations/external/png-save.c:30 ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Profundidade de bits"
++
++#: ../operations/external/png-save.c:31 ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr "8 e 16 são os valores atualmente aceitos."
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++"Protetor de imagem PNG (passa o buffer, salva como um efeito colateral.)"
++
++#: ../operations/external/ppm-load.c:350
++msgid "PPM image loader."
++msgstr "Carregador de imagem PPM."
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Formato não processado"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr "Protetor de imagem PPM (protetor pixmap portátil.)"
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr "Carregador de imagem RGBE (Formato HDR)."
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr "Protetor de imagem RGBE (Formato HDR)"
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr "Local do Pixbuf"
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr "Local onde armazenar a saída do GdkPixbuf."
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr "Salvar saída em um GdkPixbuf"
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr "Ícone a ser utilizado para janela de saída"
++
++#: ../operations/external/sdl-display.c:181
++msgid ""
++"Displays the input buffer in an SDL window (restricted to one display op/"
++"process, due to SDL implementation issues)."
++msgstr ""
++"Exibe o buffer de entrada em uma janela SDL (restringida a uma exibição de "
++"operação por processo, devido a questões de implementação do SDL)."
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr "Caminho do arquivo SVG para carregar"
++
++#: ../operations/external/svg-load.c:28 ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr "Largura para imagem renderizada"
++
++#: ../operations/external/svg-load.c:30 ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr "Altura para imagem renderizada"
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:239
++msgid "Load an SVG file using librsvg"
++msgstr "Carregar um arquivo SVG utilizando librsvg"
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Texto"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr "String para exibir (utf8)"
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Fonte"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr "Fonte (utf8)"
++
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Tamanho"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr "Altura aproximada de texto em pixels."
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr "Cor para o texto (padrão branco)"
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr "Ajusta largura"
++
++#: ../operations/external/text.c:34
++msgid ""
++"Sets the width in pixels at which long lines will wrap. Use -1 for no "
++"wrapping."
++msgstr ""
++"Define a largura em pixels em que linhas longas irão ajustar-se. Use -1 para "
++"não ajustar."
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr "Justificação"
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr ""
++"Alinhamento para texto de várias linhas (0=Esquerda, 1=Centro, 2=Direita)"
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr "Largura renderizada em pixels. (apenas leitura)"
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr "Altura renderizada em pixels. (apenas leitura)"
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr "Exibe uma string de texto usando pango e cairo."
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Caminho"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr "Caminho para o dispositivo v4l"
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++"número do quadro atual, pode ser alterado para disparar um recarregamento da "
++"imagem."
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "FPS"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr "gatilho automático recarrega isto várias vezes por segundo."
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++"Entrada Video4Linux, capturadores de quadros de webcams e dispositivos "
++"semelhantes."
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr "Cor de pintura para usar para preenchimento."
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr "A opacidade de preenchimento para usar."
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr "Preencher regra."
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr "como determinar o que preencher (não nulo|par-ímpar)"
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr "Descrição do estilo SVG de transformação."
++
++#: ../operations/external/vector-fill.c:268
++msgid "Renders a filled region"
++msgstr "Renderiza uma região preenchida"
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr "Cor de pintura para usar para contorno."
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr "A largura do pincel usado para contornar o caminho."
++
++#: ../operations/external/vector-stroke.c:34
++msgid ""
++"Opacity of stroke, note, does not behave like SVG since at the moment "
++"stroking is done using an airbrush tool."
++msgstr ""
++"Opacidade do contorno, note, não comporta-se como SVG já que no momento o "
++"contorno é feito usando uma ferramenta aerógrafa."
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr "Renderiza um contorno vetorial"
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr "Operação matemática de adição (c = c + value)"
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr "Operação Porter Duff de Limpar (d = 0.0f)"
++
++#: ../operations/generated/color-burn.c:165
++msgid ""
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++"Operação de mistura SVG de super-exposição de cor (<tt>if cA * aB + cB * aA "
++"<= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : "
++"(aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</"
++"tt>)"
++
++#: ../operations/generated/color-dodge.c:165
++msgid ""
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Operação de mistura SVG de sub-exposição de cor (<tt>if cA * aB + cB * aA >= "
++"aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == "
++"aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - "
++"aA)</tt>)"
++
++#: ../operations/generated/darken.c:163
++msgid ""
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
++msgstr ""
++"Operação de mistura SVG de escurecimento (<tt>d = MIN (cA * aB, cB * aA) + "
++"cA * (1 - aB) + cB * (1 - aA)</tt>)"
++
++#: ../operations/generated/difference.c:163
++msgid ""
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
++msgstr ""
++"Operação de mistura SVG de diferença (<tt>d = cA + cB - 2 * (MIN (cA * aB, "
++"cB * aA))</tt>)"
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr "Operação matemática de divisão (c = value==0.0f?0.0f:c/value)"
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr "Operação Porter Duff dst-atop (d = cB * aA + cA * (1.0f - aB))"
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr "Operação Porter Duff dst (d = cB)"
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr "Operação Porter Duff dst-in (d = cB * aA)"
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr "Operação Porter Duff dst-out (d = cB * (1.0f - aA))"
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr "Operação Porter Duff dst-over (d = cB + cA * (1.0f - aB))"
++
++#: ../operations/generated/exclusion.c:163
++msgid ""
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Operação de mistura SVG de exclusão (<tt>d = (cA * aB + cB * aA - 2 * cA * "
++"cB) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr "Operação matemática gama (c = powf (c, value))"
++
++#: ../operations/generated/hard-light.c:165
++msgid ""
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Operação de mistura SVG de luz dura (<tt>if 2 * cA < aA: d = 2 * cA * cB + "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - "
++"cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
++
++#: ../operations/generated/lighten.c:163
++msgid ""
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Operação de mistura SVG de clareamento (<tt>d = MAX (cA * aB, cB * aA) + cA "
++"* (1 - aB) + cB * (1 - aA)</tt>)"
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr "Operação matemática de multiplicação (c = c * value)"
++
++#: ../operations/generated/overlay.c:165
++msgid ""
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Operação de mistura SVG de sobreposição (<tt>if 2 * cB > aB: d = 2 * cA * cB "
++"+ cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA "
++"- cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
++
++#: ../operations/generated/plus.c:163
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr "Operação de mistura SVG de adição (<tt>d = cA + cB</tt>)"
++
++#: ../operations/generated/screen.c:163
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr "Operação de mistura SVG de tela (<tt>d = cA + cB - cA * cB</tt>)"
++
++#: ../operations/generated/soft-light.c:167
++msgid ""
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
++"0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
++"* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
++"== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
++"(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
++"(1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++"Operação de mistura SVG de luz suave (<tt>if 2 * cA < aA: d = cB * (aA - (aB "
++"== 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if "
++"8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * "
++"(aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: "
++"d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + "
++"cA * (1 - aB) + cB * (1 - aA)</tt>)"
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr "Operação Porter Duff src-atop (d = cA * aB + cB * (1.0f - aA))"
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr "Operação Porter Duff src (d = cA)"
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr "Operação Porter Duff src-in (d = cA * aB)"
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr "Operação Porter Duff src-out (d = cA * (1.0f - aB))"
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr "Operação Porter Duff src-over (d = cA + cB * (1.0f - aA))"
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr "Operação matemática de subtração (c = c - value)"
++
++#: ../operations/generated/svg-multiply.c:163
++msgid ""
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
++msgstr ""
++"Operação de mistura SVG svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB "
++"* (1 - aA)</tt>)"
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr "Operação Porter Duff xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr "Componente X do vetor de direção"
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr "Componente Y do vetor de direção"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Ângulo para rotacionar (sentido horário)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Rotacionar o buffer ao redor da origem especificada"
++
++#: ../operations/transform/scale.c:29 ../operations/transform/scale-ratio.c:26
++msgid "Horizontal scale factor"
++msgstr "Fator de escala horizontal"
++
++#: ../operations/transform/scale.c:31 ../operations/transform/scale-ratio.c:28
++msgid "Vertical scale factor"
++msgstr "Fator de escala vertical"
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr "Escala o buffer."
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr "Escala o buffer de acordo com a razão."
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Tamanho horizontal"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Tamanho vertical"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr "Escala o buffer de acordo com o tamanho"
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Quantidade de cisalhamento horizontal"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Quantidade de cisalhamento vertical"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Cisalha o buffer"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Cadeia de transformação"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr "Transforma o grupo (usada por svg)."
++
++#: ../operations/transform/transform-core.c:200
++msgid "Origin-x"
++msgstr "X-Origem"
++
++#: ../operations/transform/transform-core.c:201
++msgid "X coordinate of origin"
++msgstr "Coordenada X da origem"
++
++#: ../operations/transform/transform-core.c:208
++msgid "Origin-y"
++msgstr "Y-Origem"
++
++#: ../operations/transform/transform-core.c:209
++msgid "Y coordinate of origin"
++msgstr "Coordenada Y da origem"
++
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Tipo de filtro (o mais próximo, linear, lanczos, cúbico, lohalo)"
++
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++msgid "Hard edges"
++msgstr "Borda dura"
++
++#: ../operations/transform/transform-core.c:230
++msgid "Lanczos width"
++msgstr "Largura do Lanczos"
++
++#: ../operations/transform/transform-core.c:231
++msgid "Width of the Lanczos function"
++msgstr "Largura da função Lanczos"
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Translação horizontal"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Translação vertical"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++"Reposiciona o buffer (com precisão de subpixel), se as coordenadas interas "
++"são passadas, um caminho-rápido sem reamostragem é usado"
++
++#: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr "Raio da região quadrada de pixels (largura e altura serão raio*2 +1)"
++
++#: ../operations/workshop/box-max.c:198
++msgid ""
++"Sets the target pixel to the value of the maximum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Define o valor do pixel de destino para o valor máximo da caixa em torno do "
++"pixel"
++
++#: ../operations/workshop/box-min.c:198
++msgid ""
++"Sets the target pixel to the value of the minimum value in a box surrounding "
++"the pixel"
++msgstr ""
++"Define o valor do pixel de destino para o valor mínimo da caixa em torno do "
++"pixel"
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr "Percentil"
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr "O percentil para computar, padrão para 50, que é um filtro mediano"
++
++#: ../operations/workshop/box-percentile.c:230
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance"
++msgstr ""
++"Define o pixel de destino com a cor correspondente a um percentil "
++"determinado quando as cores são classificadas pela luminusidade"
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr "GeglBuffer"
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr "O GeglBuffer onde o cache é feito"
++
++#: ../operations/workshop/buffer-cache.c:96
++msgid ""
++"Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++"Efetuar cache no buffer de entrada internamente, o processo ainda pode tomar "
++"esse buffer como entrada."
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr "Sentido horário"
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr "Mudar para sentido horário"
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "A partir de:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr "Iniciando ângulo para a rotação da cor"
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "Para:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr "Ângulo final para a rotação da cor"
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr "Escolha em caso de imagens em escala de cinza"
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr "Valor de matiz"
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr "Valor de saturação"
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr "Alterar/tratar para isso"
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr "Valor do limiar cinza"
++
++#: ../operations/workshop/color-rotate.c:383
++msgid "Rotate colors on the image"
++msgstr "Rotacionar cores na imagem"
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr "Valor do elemento na posição (1,1)"
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr "Valor do elemento na posição (1,2)"
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr "Valor do elemento na posição (1,3)"
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr "Valor do elemento na posição (1,4)"
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr "Valor do elemento na posição (1,5)"
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr "Valor do elemento na posição (2,1)"
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr "Valor do elemento na posição (2,2)"
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr "Valor do elemento na posição (2,3)"
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr "Valor do elemento na posição (2,4)"
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr "Valor do elemento na posição (2,5)"
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr "Valor do elemento na posição (3,1)"
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr "Valor do elemento na posição (3,2)"
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr "Valor do elemento na posição (3,3)"
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr "Valor do elemento na posição (3,4)"
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr "Valor do elemento na posição (3,5)"
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr "Valor do elemento na posição (4,1)"
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr "Valor do elemento na posição (4,2)"
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr "Valor do elemento na posição (4,3)"
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr "Valor do elemento na posição (4,4)"
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr "Valor do elemento na posição (4,5)"
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr "Valor do elemento na posição (5,1)"
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr "Valor do elemento na posição (5,2)"
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr "Valor do elemento na posição (5,3)"
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr "Valor do elemento na posição (5,4)"
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr "Valor do elemento na posição (5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr "Divisor: "
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr "O valor do divisor"
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr "Deslocamento:"
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr "O valor do deslocamento"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr "Normalizar"
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr "Normalizar ou não"
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr "Canal vermelho"
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr "Canal verde"
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr "Canal azul"
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr "Canal alfa"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr "Pesos do canal alfa"
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr "Pesos do canal alfa"
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr "Borda"
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid ""
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++msgstr ""
++"Tipo de borda a ser escolhida. Opções são estender, ajustar, aparar. O "
++"padrão é estender"
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr "Cria imagem a partir de matriz de convolução definida manualmente"
++
++#: ../operations/workshop/cubism.c:30 ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr "Tamanho do azulejo"
++
++#: ../operations/workshop/cubism.c:32 ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr "Saturação do azulejo"
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr ""
++"Um filtro que de alguma forma assemelha-se a um estilo de pintura cubista"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "Par/Ímpar"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr "Manter campos pares/ímpares"
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr "Horizontal/Vertical"
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr "Escolha horizontal ou vertical"
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr "Tamanho do bloco"
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr "Tamanho do bloco de linhas/colunas desentrelaçadas"
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr "Executa desentrelaçamento na imagem"
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr "Padrão Bayer"
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid ""
++"Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji "
++"files."
++msgstr ""
++"Padrão Bayer usado, 0 parece funcionar com alguns arquivos nikon, 2 com "
++"alguns arquivos Fuji."
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid ""
++"Performs a grayscale2color demosaicing of an image, using bimedian "
++"interpolation."
++msgstr ""
++"Executa uma remoção do mosaico de escala de cinza para cor de uma imagem, "
++"usando interpolação mediana."
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid ""
++"Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++"Executa uma remoção do mosaico de escala de cinza escuro para cor de uma "
++"imagem, sem interpolação."
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++"O percentil para computar, definido por padão como 50, que é um filtro de "
++"mediana."
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid ""
++"Sets the target pixel to the color corresponding to a given percentile when "
++"colors are sorted by luminance."
++msgstr ""
++"Define o pixel alvo com a cor correspondente a um dado percentil quando "
++"cores são ordenadas por luminância."
++
++#: ../operations/workshop/ditto.c:112
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++"Testa op para fazer um mapa 1:1 de entrada para saída, enquanto realizando "
++"amostragem"
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Azimute"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr "O valor de azimute"
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr "Elevação"
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr "O valor de elevação"
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Profundidade"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr "Profundidade de pixel"
++
++#: ../operations/workshop/emboss.c:32
++msgid ""
++"Optional parameter to override automatic selection of emboss filter. Choices "
++"are emboss, blur-map"
++msgstr ""
++"Parâmetro opcional para substituir seleção automática de filtro de relevo. "
++"Opções são relevo, mapa de desfoque"
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr "Simula uma imagem criada por gravação em relevo"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Taxa de bits"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr "taxa de bits alvo"
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr "quadros por segundo"
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr "Canal de saída de Video FFmpeg "
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr "Script"
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr "O script lua contendo a implementação desta operação."
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr "Um script lua armazenado em disco implementando uma operação"
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr "Valor de usuário"
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr "(aparece na variável global \"user_value\" em lua."
++
++#: ../operations/workshop/external/gluas.c:984
++msgid ""
++"A general purpose filter/composer implementation proxy for the lua "
++"programming language."
++msgstr ""
++"Uma implementação de proxy filtro/compositor de propósito geral para a "
++"linguagem de programação lua."
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr "Criador:"
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr "Escreve criador de lentes corretamente"
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Câmera:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr "Escreve o nome da câmera corretamente"
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr "Lente:"
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with uppercase letters"
++msgstr "Escreve o modelo da sua câmera com letras em maiúsculo"
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr "Focal da câmera"
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr "Calcula valor b do foco"
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr "Centro"
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr "Se você quer o centro"
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr "Centro da lente x"
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr "Coordenadas do centro da lente"
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr "Centro da lente y"
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr "Escala da imagem"
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr "Autocorrige valores d"
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr "Autocorrige valores D para modelos de lentes de correção."
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr "Modelo vermelho a:"
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr "Correção de parâmetros para cada canal de cor"
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr "Modelo vermelho b:"
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr "Modelo vermelho c:"
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr "Modelo vermelho d:"
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr "Modelo verde a:"
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr "Modelo verde b:"
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr "Modelo verde c:"
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr "Modelo verde d:"
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr "Modelo azul a:"
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr "Modelo azul b:"
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr "Modelo azul c:"
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr "Modelo azul d:"
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr "Modelo alfa a:"
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr "Coleção de parâmetros para canal alfa"
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr "Modelo alfa b:"
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr "Modelo alfa c:"
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr "Modelo alfa d:"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr "Começo da coordenada x"
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr "Fim da coordenada x"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr "Começo da coordenada Y"
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr "Fim da coordenada y"
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr "Largura do gráfico"
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr "Altura do gráfico"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Min"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr "Valor da base"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Max"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr "Valor do topo"
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid ""
++"Renders luminance profiles for red green and blue components along the "
++"specified line in the input buffer, plotted in a buffer of the specified "
++"size."
++msgstr ""
++"Renderiza perfis de luminosidade para componentes vermelhos, verdes e azuis "
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr "Fractal"
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid ""
++"Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++"Tipo de fractal para usar. As escolhas são julia, mandelbrot. O padrão é "
++"mandelbrot"
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr "Valor X1, posição"
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr "Valor X2, posição"
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr "Valor Y2, posição"
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr "Julia semeou o valor X, posição"
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr "Julia semeou o valor Y, posição"
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr "Valor de profundidade"
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr "Resgate"
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr "Comprimento de resgate"
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Abyss policy"
++msgstr "Política de abismo"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid "How to deal with pixels outside of the input buffer"
++msgstr "Como lidar com pixels fora do buffer de entrada"
++
++#: ../operations/workshop/fractal-trace.c:161
++msgid "Unsupported fractal type"
++msgstr "Tipo de fractal não suportado"
++
++#: ../operations/workshop/fractal-trace.c:248
++msgid "Performs fractal trace on the image"
++msgstr "Executa traço fractal na imagem"
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr "Operação de mistura de imagem \"médio\" (<tt>c = (cA + aB)/2</tt>)"
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid ""
++"Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-"
++"cB)</tt>)"
++msgstr ""
++"Operação de mistura de imagem \"misturar-refletir\" (<tt>c = cB>=1.0?1.0:"
++"cA*cA / (1.0-cB)</tt>)"
++
++#: ../operations/workshop/generated/negation.c:109
++msgid ""
++"Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++"Operação de mistura de imagem \"negação\" (<tt>c = 1.0 - fabs(1.0-cA-cB)</"
++"tt>)"
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid ""
++"Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - "
++"cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++"Operação de mistura de imagem \"queimadura-suave\" <tt>c = (cA+cB<1.0)?"
++"0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid ""
++"Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - "
++"cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++"Operação de mistura de imagem \"rodeo-suave\" (<tt>c = (cA+cB<1.0)?0.5*cA / "
++"(1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr "Operação de mistura de imagem \"subitrativa\" (<tt>c = cA+cB-1.0</tt>)"
++
++#: ../operations/workshop/hstack.c:178
++msgid ""
++"Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of "
++"\"input\")"
++msgstr ""
++"Entradas horizontais na pilha, (em \"saída\" \"aux\" é movido para a direita "
++"da \"entrada\")"
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr "Desfoque de preservação de borda"
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "Uma extremidade de um gradiente"
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr "Outra extremidade de um gradiente"
++
++#: ../operations/workshop/linear-gradient.c:136
++msgid "Linear gradient renderer"
++msgstr "Renderizador de gradiente linear"
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr "Real"
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr "Coordenada real"
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr "Imaginário"
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr "Coordenada imaginária"
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Nível"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Nível de água"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr "Número máximo de iterações"
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr "renderizador de conjunto de Mandelbrot"
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr "Quantidade de propagação horizontal"
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr "Quantidade de propagação vertical"
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr "Filtro de propagação de ruído"
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr ""
++"Semente aleatória. Passando -1 implica que a semente foi escolhida "
++"randomicamente."
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr "Turbulência"
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr "O Valor da turbulência"
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr "Executa efeito plasma na imagem"
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Uma extremidade do gradiente"
++
++#: ../operations/workshop/radial-gradient.c:128
++msgid "Radial gradient renderer"
++msgstr "Renderizador de gradiente radial"
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid ""
++"Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as "
++"grayscale, if the fileformat is .rawbayer it will use this loader instead of "
++"the normal dcraw loader, if the fileformat is .rawbayerS it will swap the "
++"returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++"Carregador de imagem bruta, envolve tubos dcraw, fornece o grid de bayer "
++"bruto como escala de cinza, se o formato do arquivo é .rawbayer usará o "
++"carregador em vez do carregador dcraw normal, se o formato do arquivo é ."
++"rawbayerS trocará os números de 16bit retornados (o carregador pnm está "
++"aparentemente com bugs)."
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr "O valor do limiar"
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr "Executa redutor de olhos vermelhos na imagem"
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr "Número de pares, números maiores preservam características mais agudas"
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr "O percentual para retornar, o valor padrão 50 é igual a mediana"
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid ""
++"Noise reducing edge enhancing percentile filter based on Symmetric Nearest "
++"Neighbours"
++msgstr ""
++"Filtro de percentual de destacamento de borda e redução de ruído baseado nos "
++"vizinhos simétricos mais próximos"
++
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr "Força do efeito"
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr "Tamanho do efeito"
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr "Dureza do efeito"
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr "Risco"
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Comportamento"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr "Comportamento do op"
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr "Computa um deslocamento relativo ao risco"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr "Rodopio"
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr "Ângulo de rodopio (graus)"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr "Aperto"
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr "Quantidade de aperto"
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid ""
++"Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all "
++"the way to the corners)"
++msgstr ""
++"Raio (1.0 é o maior círculo que cabe na imagem, e 2.0 vai todo o caminho até "
++"os cantos)"
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr "Aplica-se rodopiando e apertando a imagem"
++
+diff --git a/po/ru.po b/po/ru.po
+index 640bbc7..04ee072 100644
+--- po/ru.po
++++ po/ru.po
+@@ -10,10 +10,10 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: GEGL 0.2.0\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2012-04-01 11:40+0400\n"
+-"PO-Revision-Date: 2012-04-01 12:03+0400\n"
++"POT-Creation-Date: 2012-08-13 05:07+0400\n"
++"PO-Revision-Date: 2012-08-13 05:06+0400\n"
+ "Last-Translator: Александр Прокудин <alexandre.prokoudine at gmail.com>\n"
+-"Language-Team: русский <gnome-cyr at lists.gnome.org>\n"
++"Language-Team: русский <>\n"
+ "Language: \n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+@@ -22,32 +22,124 @@ msgstr ""
+ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 10<=4 && (n%100<10 || n"
+ "%100>=20) ? 1 : 2);\n"
+ 
+-#: ../gegl/gegl-init.c:216
+-msgid "babls error tolerance, a value beteen 0.2 and 0.000000001"
++#: ../bin/gegl.c:147
++#, c-format
++msgid "Unable to read file: %s"
++msgstr "Невозможно прочитать файл: %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr ""
++
++#: ../bin/gegl.c:257 ../bin/gegl-options.c:124
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr ""
++
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr ""
++
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr ""
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr ""
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr ""
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
+ msgstr ""
+ 
+-#: ../gegl/gegl-init.c:221
+-msgid "Where GEGL stores it's swap"
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
+ msgstr ""
+ 
+-#: ../gegl/gegl-init.c:226
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
++msgstr ""
++
++#: ../gegl/gegl-init.c:203
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr ""
++
++#: ../gegl/gegl-init.c:208
++msgid "Where GEGL stores its swap"
++msgstr ""
++
++#: ../gegl/gegl-init.c:213
+ msgid "How much memory to (approximately) use for caching imagery"
+ msgstr ""
+ 
+-#: ../gegl/gegl-init.c:231
++#: ../gegl/gegl-init.c:218
+ msgid "Default size of tiles in GeglBuffers"
+ msgstr ""
+ 
+-#: ../gegl/gegl-init.c:236
+-msgid "The count of pixels to compute simulantous"
++#: ../gegl/gegl-init.c:223
++msgid "The count of pixels to compute simultaneously"
+ msgstr ""
+ 
+-#: ../gegl/gegl-init.c:241
++#: ../gegl/gegl-init.c:228
+ msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
+ msgstr ""
+ 
+-#: ../gegl/gegl-init.c:246
+-msgid "The number of concurrent processing threads to use."
++#: ../gegl/gegl-init.c:233
++msgid "The number of concurrent processing threads to use"
+ msgstr ""
+ 
+ #: ../gegl/module/geglmodule.c:147 ../gegl/module/geglmodule.c:165
+@@ -73,106 +165,8 @@ msgstr ""
+ msgid "Not loaded"
+ msgstr ""
+ 
+-#: ../operations/affine/affine.c:200
+-msgid "Origin-x"
+-msgstr "Центр по X"
+-
+-#: ../operations/affine/affine.c:201
+-msgid "X-coordinate of origin"
+-msgstr "Координата центра вращения по X"
+-
+-#: ../operations/affine/affine.c:208
+-msgid "Origin-y"
+-msgstr "Центр по Y"
+-
+-#: ../operations/affine/affine.c:209
+-msgid "Y-coordinate of origin"
+-msgstr "Координата центра вращения по Y"
+-
+-#: ../operations/affine/affine.c:216 ../operations/common/gaussian-blur.c:34
+-#: ../operations/workshop/emboss.c:31
+-msgid "Filter"
+-msgstr "Фильтр"
+-
+-#: ../operations/affine/affine.c:217
+-msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:223 ../operations/affine/affine.c:224
+-msgid "Hard edges"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:230
+-msgid "Lanczos-width"
+-msgstr "Ширина по Ланцошу"
+-
+-#: ../operations/affine/affine.c:231
+-msgid "Width of the Lanczos function"
+-msgstr "Ширина функции Ланцоша"
+-
+-#: ../operations/affine/reflect.c:29
+-msgid "Direction vector's X component"
+-msgstr ""
+-
+-#: ../operations/affine/reflect.c:31
+-msgid "Direction vector's Y component"
+-msgstr ""
+-
+-#: ../operations/affine/rotate.c:26
+-msgid "Angle to rotate (clockwise)"
+-msgstr "Угол вращения (по часовой стрелке)"
+-
+-#: ../operations/affine/rotate.c:31
+-msgid "Rotate the buffer around the specified origin."
+-msgstr ""
+-
+-#: ../operations/affine/scale.c:25
+-msgid "Horizontal scale factor"
+-msgstr "Коэффициент масштабирования по горизонтали"
+-
+-#: ../operations/affine/scale.c:26
+-msgid "Vertical scale factor"
+-msgstr "Коэффициент масштабирования по вертикали"
+-
+-#: ../operations/affine/scale.c:31
+-msgid "Scales the buffer."
+-msgstr ""
+-
+-#: ../operations/affine/shear.c:26
+-msgid "Horizontal shear amount"
+-msgstr "Величина наклона по горизонтали"
+-
+-#: ../operations/affine/shear.c:28
+-msgid "Vertical shear amount"
+-msgstr "Величина наклона по вертикали"
+-
+-#: ../operations/affine/shear.c:33
+-msgid "Shears the buffer"
+-msgstr "Наклон буфера"
+-
+-#: ../operations/affine/transform.c:25
+-msgid "Transformation string"
+-msgstr ""
+-
+-#: ../operations/affine/transform.c:30
+-msgid "Transforms the group (used by svg)."
+-msgstr ""
+-
+-#: ../operations/affine/translate.c:26
+-msgid "Horizontal translation"
+-msgstr "Перемещение по горизонтали"
+-
+-#: ../operations/affine/translate.c:28
+-msgid "Vertical translation"
+-msgstr "Перемещение по вертикали"
+-
+-#: ../operations/affine/translate.c:33
+-msgid ""
+-"Repositions the buffer (with subpixel precision), if integer coordinates are "
+-"passed a fast-path without resampling is used"
+-msgstr ""
+-
+ #: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
+ msgid "Blur radius"
+ msgstr "Радиус размывания"
+ 
+@@ -188,7 +182,7 @@ msgstr "Сохранение краёв"
+ msgid "Amount of edge preservation"
+ msgstr ""
+ 
+-#: ../operations/common/bilateral-filter.c:185
++#: ../operations/common/bilateral-filter.c:315
+ msgid ""
+ "An edge preserving blur filter that can be used for noise reduction. It is a "
+ "gaussian blur where the contribution of neighbourhood pixels are weighted by "
+@@ -198,9 +192,8 @@ msgstr ""
+ #: ../operations/common/box-blur.c:24 ../operations/common/c2g.c:27
+ #: ../operations/common/difference-of-gaussians.c:26
+ #: ../operations/common/difference-of-gaussians.c:28
+-#: ../operations/common/dropshadow.c:30
+-#: ../operations/common/matting-global.c:28 ../operations/common/snn-mean.c:26
+-#: ../operations/common/stress.c:27 ../operations/common/vignette.c:25
++#: ../operations/common/dropshadow.c:30 ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27 ../operations/common/vignette.c:26
+ #: ../operations/external/matting-levin.c:28
+ #: ../operations/workshop/box-max.c:25 ../operations/workshop/box-min.c:25
+ #: ../operations/workshop/box-percentile.c:27
+@@ -215,7 +208,7 @@ msgstr "Радиус"
+ msgid "Radius of square pixel region, (width and height will be radius*2+1)"
+ msgstr ""
+ 
+-#: ../operations/common/box-blur.c:413
++#: ../operations/common/box-blur.c:423
+ msgid "Performs an averaging of a square box of pixels"
+ msgstr "Выполнить усреднение прямоугольника пикселов"
+ 
+@@ -241,7 +234,7 @@ msgstr "Яркость"
+ msgid "Amount to increase brightness"
+ msgstr "Величина изменения яркости"
+ 
+-#: ../operations/common/brightness-contrast.c:198
++#: ../operations/common/brightness-contrast.c:159
+ msgid "Changes the light level and contrast."
+ msgstr ""
+ 
+@@ -264,7 +257,7 @@ msgid ""
+ msgstr ""
+ 
+ #: ../operations/common/buffer-sink.c:83
+-#: ../operations/common/write-buffer.c:126
++#: ../operations/common/write-buffer.c:127
+ msgid "A GEGL buffer destination surface."
+ msgstr ""
+ 
+@@ -276,14 +269,14 @@ msgstr ""
+ msgid "The GeglBuffer to load into the pipeline"
+ msgstr ""
+ 
+-#: ../operations/common/buffer-source.c:116
++#: ../operations/common/buffer-source.c:177
+ msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
+ msgstr ""
+ 
+ #: ../operations/common/c2g.c:28
+ msgid ""
+-"Neighbourhood taken into account, this is the radius in pixels taken into "
+-"account when deciding which colors map to which gray values."
++"Neighborhood taken into account, this is the radius in pixels taken into "
++"account when deciding which colors map to which gray values"
+ msgstr ""
+ 
+ #: ../operations/common/c2g.c:29 ../operations/common/stress.c:29
+@@ -291,25 +284,26 @@ msgid "Samples"
+ msgstr "Сэмплов"
+ 
+ #: ../operations/common/c2g.c:30 ../operations/common/stress.c:30
+-msgid "Number of samples to do per iteration looking for the range of colors."
++msgid "Number of samples to do per iteration looking for the range of colors"
+ msgstr ""
+ 
+ #: ../operations/common/c2g.c:31 ../operations/common/fractal-explorer.c:42
+-#: ../operations/common/stress.c:31 ../operations/workshop/mandelbrot.c:31
++#: ../operations/common/matting-global.c:25 ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
+ msgid "Iterations"
+ msgstr "Итераций"
+ 
+ #: ../operations/common/c2g.c:32
+ msgid ""
+-"Number of iterations, a higher number of iterations provides a less noisy "
+-"results at computational cost."
++"Number of iterations, a higher number of iterations provides less noisy "
++"results at a computational cost"
+ msgstr ""
+ 
+-#: ../operations/common/c2g.c:193
++#: ../operations/common/c2g.c:493
+ msgid ""
+ "Color to grayscale conversion, uses envelopes formed from spatial  color "
+ "differences to perform color-feature preserving grayscale  spatial contrast "
+-"enhancement."
++"enhancement"
+ msgstr ""
+ 
+ #: ../operations/common/checkerboard.c:25
+@@ -358,11 +352,10 @@ msgstr "Смещение по Y"
+ msgid "Vertical offset (from origin) for start of grid"
+ msgstr ""
+ 
+-#: ../operations/common/checkerboard.c:33
+-#: ../operations/common/color-to-alpha.c:27 ../operations/common/color.c:24
+-#: ../operations/common/grid.c:36 ../operations/common/rectangle.c:37
+-#: ../operations/common/vignette.c:24 ../operations/external/text.c:31
+-#: ../operations/external/vector-fill.c:27
++#: ../operations/common/checkerboard.c:33 ../operations/common/color.c:24
++#: ../operations/common/color-to-alpha.c:28 ../operations/common/grid.c:36
++#: ../operations/common/rectangle.c:37 ../operations/common/vignette.c:25
++#: ../operations/external/text.c:31 ../operations/external/vector-fill.c:27
+ #: ../operations/external/vector-stroke.c:27
+ #: ../operations/workshop/linear-gradient.c:28
+ #: ../operations/workshop/radial-gradient.c:28
+@@ -387,6 +380,62 @@ msgstr ""
+ msgid "Checkerboard renderer"
+ msgstr ""
+ 
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/color.c:88
++msgid ""
++"Generates a buffer entirely filled with the specified color, crop it to get "
++"smaller dimensions."
++msgstr ""
++
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:39
++msgid "The dithering strategy to use"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:495
++msgid ""
++"Reduces the number of bits per channel (colors and alpha), with optional "
++"dithering"
++msgstr ""
++
+ #: ../operations/common/color-temperature.c:27
+ msgid "Original temperature"
+ msgstr "Исходная температура"
+@@ -404,24 +453,18 @@ msgstr "Конечная температура"
+ msgid "Corrected estimation of the temperature of the light source in Kelvin."
+ msgstr ""
+ 
+-#: ../operations/common/color-temperature.c:266
++#: ../operations/common/color-temperature.c:280
+ msgid "Allows changing the color temperature of an image."
+ msgstr ""
+ 
+-#: ../operations/common/color-to-alpha.c:28 ../operations/common/color.c:25
+-msgid "The color to render (defaults to 'black')"
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
+ msgstr ""
+ 
+-#: ../operations/common/color-to-alpha.c:170
++#: ../operations/common/color-to-alpha.c:197
+ msgid "Performs color-to-alpha on the image."
+ msgstr ""
+ 
+-#: ../operations/common/color.c:88
+-msgid ""
+-"Generates a buffer entirely filled with the specified color, crop it to get "
+-"smaller dimensions."
+-msgstr ""
+-
+ #: ../operations/common/contrast-curve.c:25
+ msgid "Sample points"
+ msgstr ""
+@@ -462,6 +505,26 @@ msgstr ""
+ msgid "Display the input buffer in a window."
+ msgstr ""
+ 
++#: ../operations/common/dot.c:26 ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Ширина блока"
++
++#: ../operations/common/dot.c:27
++msgid "Size of each block in pixels"
++msgstr "Размер каждого блока в пикселах"
++
++#: ../operations/common/dot.c:28
++msgid "Dot size ratio"
++msgstr "Коэффициент размера"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr "Коэффициент размера точки внутри каждого блока"
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr ""
++
+ #: ../operations/common/dropshadow.c:25 ../operations/common/layer.c:32
+ #: ../operations/common/layer.c:33 ../operations/common/opacity.c:24
+ #: ../operations/external/vector-fill.c:30
+@@ -470,34 +533,30 @@ msgid "Opacity"
+ msgstr "Непрозрачность"
+ 
+ #: ../operations/common/dropshadow.c:26 ../operations/common/layer.c:34
+-#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:31
++#: ../operations/common/rectangle.c:29 ../operations/common/vignette.c:32
+ #: ../operations/common/waves.c:26 ../operations/core/crop.c:25
+ msgid "X"
+ msgstr "X"
+ 
+ #: ../operations/common/dropshadow.c:27
+-msgid "Horizontal shadow offset."
+-msgstr ""
++msgid "Horizontal shadow offset"
++msgstr "Смещение тени по горизонтали"
+ 
+ #: ../operations/common/dropshadow.c:28 ../operations/common/layer.c:36
+-#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:32
++#: ../operations/common/rectangle.c:31 ../operations/common/vignette.c:33
+ #: ../operations/common/waves.c:29 ../operations/core/crop.c:26
+ msgid "Y"
+ msgstr "Y"
+ 
+ #: ../operations/common/dropshadow.c:29
+-msgid "Vertical shadow offset."
+-msgstr ""
+-
+-#: ../operations/common/dropshadow.c:31
+-msgid "Blur radius."
+-msgstr "Радиус размывания"
++msgid "Vertical shadow offset"
++msgstr "Смещение тени по вертикали"
+ 
+ #: ../operations/common/dropshadow.c:82
+-msgid "Creates a dropshadow effect on the input buffer."
++msgid "Creates a dropshadow effect on the input buffer"
+ msgstr ""
+ 
+-#: ../operations/common/edge-laplace.c:245
++#: ../operations/common/edge-laplace.c:521
+ msgid "High-resolution edge detection"
+ msgstr ""
+ 
+@@ -515,7 +574,7 @@ msgstr "Вертикальное"
+ msgid "Keep Signal"
+ msgstr "Сохранять знак результата"
+ 
+-#: ../operations/common/edge-sobel.c:203
++#: ../operations/common/edge-sobel.c:352
+ msgid "Specialized direction-dependent edge detection"
+ msgstr ""
+ 
+@@ -540,7 +599,7 @@ msgid "Weight Sigma"
+ msgstr ""
+ 
+ #: ../operations/common/exp-combine.c:32
+-msgid "Weight distrubtion sigma controlling response contributions"
++msgid "Weight distribution sigma controlling response contributions"
+ msgstr ""
+ 
+ #: ../operations/common/exp-combine.c:1293
+@@ -570,8 +629,8 @@ msgid "Saturation"
+ msgstr "Насыщенность"
+ 
+ #: ../operations/common/fattal02.c:41 ../operations/common/mantiuk06.c:36
+-msgid "Global colour saturation factor"
+-msgstr "Глобальный коэффициент насыщенности цвета"
++msgid "Global color saturation factor"
++msgstr "Глобальный коэффициент насыщенности"
+ 
+ #: ../operations/common/fattal02.c:42
+ msgid "Noise"
+@@ -593,7 +652,7 @@ msgid "Fractal type"
+ msgstr "Тип фрактала"
+ 
+ #: ../operations/common/fractal-explorer.c:35
+-msgid "Fractal Type"
++msgid "Type of a fractal"
+ msgstr "Тип фрактала"
+ 
+ #: ../operations/common/fractal-explorer.c:37
+@@ -733,16 +792,22 @@ msgstr ""
+ "Стандартное отклонение по вертикальной оси (умножить в ~2 раза для получения "
+ "радиуса)"
+ 
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Фильтр"
++
+ #: ../operations/common/gaussian-blur.c:35
+ msgid ""
+ "Optional parameter to override the automatic selection of blur filter. "
+ "Choices are fir, iir, auto"
+ msgstr ""
+ 
+-#: ../operations/common/gaussian-blur.c:496
++#: ../operations/common/gaussian-blur.c:731
+ msgid ""
+-"Performs an averaging of neighbouring pixels with the normal distribution as "
+-"weighting."
++"Performs an averaging of neighboring pixels with the normal distribution as "
++"weighting"
+ msgstr ""
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:24
+@@ -777,7 +842,7 @@ msgstr ""
+ msgid "GeglBuffer file writer."
+ msgstr ""
+ 
+-#: ../operations/common/grey.c:79
++#: ../operations/common/grey.c:104
+ msgid "Turns the image greyscale"
+ msgstr ""
+ 
+@@ -805,6 +870,44 @@ msgstr "Цвет линий сетки"
+ msgid "Grid renderer"
+ msgstr ""
+ 
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr ""
++
++#: ../operations/common/image-compare.c:26
++msgid "Number of differing pixels."
++msgstr ""
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Максимальная разница"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "Максимальная разница между двумя пикселами"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr ""
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr ""
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr ""
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr ""
++
++#: ../operations/common/image-compare.c:168
++msgid ""
++"Compares if input and aux buffers are different. Results are saved in the "
++"properties."
++msgstr ""
++
+ #: ../operations/common/introspect.c:26
+ msgid "Node"
+ msgstr "Узел"
+@@ -817,7 +920,7 @@ msgstr ""
+ msgid "GEGL graph visualizer."
+ msgstr "Визуализатор графов GEGL"
+ 
+-#: ../operations/common/invert.c:130
++#: ../operations/common/invert.c:86
+ msgid ""
+ "Inverts the components (except alpha), the result is the corresponding "
+ "\"negative\" image."
+@@ -839,9 +942,11 @@ msgstr "Положение по горизонтали"
+ msgid "Vertical position"
+ msgstr "Положение по вертикали"
+ 
+-#: ../operations/common/layer.c:38
+-msgid "scale"
+-msgstr ""
++#: ../operations/common/layer.c:38 ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Масштаб"
+ 
+ #: ../operations/common/layer.c:39
+ msgid "Scale 1:1 size"
+@@ -856,7 +961,7 @@ msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
+ msgstr ""
+ 
+ #: ../operations/common/layer.c:267
+-msgid "A layer in the traditional sense."
++msgid "A layer in the traditional sense"
+ msgstr ""
+ 
+ #: ../operations/common/lens-distortion.c:33
+@@ -904,7 +1009,7 @@ msgstr "Смещение по Y:"
+ msgid "Shift vertical"
+ msgstr "Смещение по вертикали"
+ 
+-#: ../operations/common/lens-distortion.c:321
++#: ../operations/common/lens-distortion.c:338
+ #: ../operations/workshop/external/lens-correct.c:476
+ msgid "Copies image performing lens distortion correction."
+ msgstr ""
+@@ -941,7 +1046,7 @@ msgstr ""
+ msgid "Highest luminance level in output"
+ msgstr ""
+ 
+-#: ../operations/common/levels.c:103
++#: ../operations/common/levels.c:198
+ msgid "Remaps the intensity range of the image"
+ msgstr ""
+ 
+@@ -988,9 +1093,10 @@ msgid "Sampler"
+ msgstr "Интерполяция"
+ 
+ #: ../operations/common/map-absolute.c:23
+-#: ../operations/common/map-relative.c:27
+-msgid "Sampler used internaly"
+-msgstr ""
++#: ../operations/common/map-relative.c:27 ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42 ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr "Используемый тип интерполяции"
+ 
+ #: ../operations/common/map-absolute.c:148
+ msgid ""
+@@ -1008,76 +1114,21 @@ msgid ""
+ "relative mapping value of 1.0 corresponds to."
+ msgstr ""
+ 
+-#: ../operations/common/map-relative.c:156
++#: ../operations/common/map-relative.c:173
+ msgid ""
+ "sample input with an auxiliary buffer that contain relative source "
+ "coordinates"
+ msgstr ""
+ 
+-#: ../operations/common/matting-global.c:25
+-#: ../operations/external/matting-levin.c:25
+-msgid "Epsilon"
+-msgstr ""
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Количество итераций"
+ 
+-#: ../operations/common/matting-global.c:27
+-#: ../operations/external/matting-levin.c:27
+-msgid "Log of the error weighting"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:30
+-#: ../operations/external/matting-levin.c:30
+-msgid "Radius of the processing window"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:31
+-#: ../operations/common/threshold.c:25
+-#: ../operations/external/matting-levin.c:31
+-#: ../operations/workshop/color-rotate.c:54
+-#: ../operations/workshop/red-eye-removal.c:31
+-msgid "Threshold"
+-msgstr "Порог"
+-
+-#: ../operations/common/matting-global.c:33
+-#: ../operations/external/matting-levin.c:33
+-msgid "Alpha threshold for multilevel processing"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:34
+-#: ../operations/external/matting-levin.c:34
+-msgid "Lambda"
+-msgstr "Лямбда"
+-
+-#: ../operations/common/matting-global.c:35
+-#: ../operations/external/matting-levin.c:35
+-msgid "Trimap influence factor"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:36
+-#: ../operations/common/posterize.c:25
+-#: ../operations/external/matting-levin.c:36
+-msgid "Levels"
+-msgstr "Уровней"
+-
+-#: ../operations/common/matting-global.c:38
+-#: ../operations/external/matting-levin.c:38
+-msgid "Number of downsampled levels to use"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:39
+-#: ../operations/external/matting-levin.c:39
+-msgid "Active Levels"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:41
+-#: ../operations/external/matting-levin.c:41
+-msgid "Number of levels to perform solving"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:554
+-#: ../operations/external/matting-levin.c:1428
++#: ../operations/common/matting-global.c:482
+ msgid ""
+ "Given a sparse user supplied tri-map and an input image, create a foreground "
+-"alpha mat. Set white as selected, black as unselected, for the tri-map."
++"alpha matte. Set white as foreground, black as background for the tri-map. "
++"Everything else will be treated as unknown and filled in."
+ msgstr ""
+ 
+ #: ../operations/common/mblur.c:25
+@@ -1094,7 +1145,7 @@ msgstr ""
+ 
+ #: ../operations/common/mirrors.c:30
+ msgid "Mirror rotation"
+-msgstr ""
++msgstr "Вращение зеркала"
+ 
+ #: ../operations/common/mirrors.c:30
+ msgid "Rotation applied to the mirrors"
+@@ -1102,7 +1153,7 @@ msgstr ""
+ 
+ #: ../operations/common/mirrors.c:32
+ msgid "Result rotation"
+-msgstr ""
++msgstr "Вращение результата"
+ 
+ #: ../operations/common/mirrors.c:32
+ msgid "Rotation applied to the result"
+@@ -1110,7 +1161,7 @@ msgstr ""
+ 
+ #: ../operations/common/mirrors.c:34
+ msgid "Mirrors"
+-msgstr ""
++msgstr "Количество зеркал"
+ 
+ #: ../operations/common/mirrors.c:34
+ msgid "Number of mirrors to use"
+@@ -1126,7 +1177,7 @@ msgstr ""
+ 
+ #: ../operations/common/mirrors.c:40
+ msgid "Center X"
+-msgstr ""
++msgstr "Центр по X"
+ 
+ #: ../operations/common/mirrors.c:40
+ msgid "X axis ratio for the center of mirroring"
+@@ -1134,7 +1185,7 @@ msgstr ""
+ 
+ #: ../operations/common/mirrors.c:42
+ msgid "Center Y"
+-msgstr ""
++msgstr "Центр по Y"
+ 
+ #: ../operations/common/mirrors.c:42
+ msgid "Y axis ratio for the center of mirroring"
+@@ -1158,7 +1209,7 @@ msgstr ""
+ 
+ #: ../operations/common/mirrors.c:48
+ msgid "Zoom"
+-msgstr ""
++msgstr "Масштаб"
+ 
+ #: ../operations/common/mirrors.c:48 ../operations/common/mirrors.c:50
+ msgid "Scale factor to make rendering size bigger"
+@@ -1166,15 +1217,15 @@ msgstr ""
+ 
+ #: ../operations/common/mirrors.c:50
+ msgid "Expand"
+-msgstr ""
++msgstr "Коэффициент масштаба"
+ 
+ #: ../operations/common/mirrors.c:52
+ msgid "Clip result"
+-msgstr ""
++msgstr "Обрезать до исходного размера"
+ 
+ #: ../operations/common/mirrors.c:52
+ msgid "Clip result to input size"
+-msgstr ""
++msgstr "Обрезать конечное изображение до размера исходного фрагмента"
+ 
+ #: ../operations/common/mirrors.c:54
+ msgid "Wrap input"
+@@ -1215,7 +1266,7 @@ msgstr "Синий"
+ msgid "Amount of blue"
+ msgstr "Количество синего"
+ 
+-#: ../operations/common/mono-mixer.c:108
++#: ../operations/common/mono-mixer.c:104
+ msgid "Monochrome channel mixer"
+ msgstr "Монохромный микшер каналов"
+ 
+@@ -1235,15 +1286,10 @@ msgstr "Угол"
+ msgid "Angle of blur in degrees"
+ msgstr "Угол размывания в градусах"
+ 
+-#: ../operations/common/motion-blur.c:174
++#: ../operations/common/motion-blur.c:349
+ msgid "Linear motion blur"
+ msgstr "Линейное размывание движением"
+ 
+-#: ../operations/common/noise.c:27 ../operations/common/unsharp-mask.c:26
+-#: ../operations/workshop/external/lens-correct.c:43
+-msgid "Scale"
+-msgstr "Масштаб"
+-
+ #: ../operations/common/noise.c:29
+ msgid "Z offset"
+ msgstr "Смещение по Z"
+@@ -1261,11 +1307,11 @@ msgstr "Итерация"
+ msgid "Perlin noise generator"
+ msgstr ""
+ 
+-#: ../operations/common/noise-reduction.c:21 ../operations/workshop/warp.c:26
++#: ../operations/common/noise-reduction.c:26 ../operations/workshop/warp.c:35
+ msgid "Strength"
+ msgstr "Сила"
+ 
+-#: ../operations/common/noise-reduction.c:21
++#: ../operations/common/noise-reduction.c:26
+ msgid "How many iteratarions to run the algorithm with"
+ msgstr "Количество итераций выполнения алгоритма"
+ 
+@@ -1275,7 +1321,7 @@ msgid ""
+ "input buffer."
+ msgstr ""
+ 
+-#: ../operations/common/opacity.c:224
++#: ../operations/common/opacity.c:153
+ msgid ""
+ "Weights the opacity of the input both the value of the aux input and the "
+ "global value property."
+@@ -1289,14 +1335,10 @@ msgstr ""
+ msgid "A source that uses an on-disk GeglBuffer."
+ msgstr ""
+ 
+-#: ../operations/common/over.c:200
++#: ../operations/common/over.c:153
+ msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
+ msgstr ""
+ 
+-#: ../operations/common/pixelize.c:25
+-msgid "Block Width"
+-msgstr "Ширина блока"
+-
+ #: ../operations/common/pixelize.c:26
+ msgid "Width of blocks in pixels"
+ msgstr "Ширина блока в пикселах"
+@@ -1309,7 +1351,7 @@ msgstr "Высота блока"
+ msgid "Height of blocks in pixels"
+ msgstr "Высота блока в пикселах"
+ 
+-#: ../operations/common/pixelize.c:182
++#: ../operations/common/pixelize.c:338
+ msgid "Simplify image into an array of solid-colored squares"
+ msgstr ""
+ 
+@@ -1330,14 +1372,26 @@ msgstr "Угол смещения"
+ msgid "Map backwards"
+ msgstr "Развернуть"
+ 
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr ""
++
+ #: ../operations/common/polar-coordinates.c:39
+ msgid "Map from top"
+ msgstr "Отобразить сверху"
+ 
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++
+ #: ../operations/common/polar-coordinates.c:40
+ msgid "To polar"
+ msgstr "В полярное"
+ 
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr ""
++
+ #: ../operations/common/polar-coordinates.c:41
+ msgid "X:"
+ msgstr "X:"
+@@ -1363,6 +1417,11 @@ msgstr ""
+ msgid "Performs polar-coordinates on the image."
+ msgstr ""
+ 
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Уровней"
++
+ #: ../operations/common/posterize.c:26
+ msgid "number of levels per component"
+ msgstr ""
+@@ -1448,20 +1507,23 @@ msgstr "Смещение фазы"
+ msgid "Angle in degree"
+ msgstr "Угол в градусах"
+ 
+-#: ../operations/common/ripple.c:40 ../operations/common/waves.c:42
+-#: ../operations/workshop/ditto.c:28
+-msgid "Sampler used internally"
+-msgstr "Используемый тип интерполяции"
+-
+-#: ../operations/common/ripple.c:42
++#: ../operations/common/ripple.c:47
+ msgid "Wave type"
+ msgstr "Тип волны"
+ 
+-#: ../operations/common/ripple.c:43
++#: ../operations/common/ripple.c:48
+ msgid "Type of wave"
+ msgstr "Тип волны"
+ 
+-#: ../operations/common/ripple.c:164
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr ""
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr ""
++
++#: ../operations/common/ripple.c:175
+ msgid "Transform the buffer with a ripple pattern"
+ msgstr ""
+ 
+@@ -1482,33 +1544,33 @@ msgstr ""
+ msgid "Number of pairs; higher number preserves more acute features"
+ msgstr ""
+ 
+-#: ../operations/common/snn-mean.c:228
++#: ../operations/common/snn-mean.c:436
+ msgid ""
+ "Noise reducing edge enhancing blur filter based  on Symmetric Nearest "
+ "Neighbours"
+ msgstr ""
+ 
+-#: ../operations/common/stretch-contrast.c:162
+-msgid ""
+-"Scales the components of the buffer to be in the 0.0-1.0 range. This "
+-"improves images that make poor use of the available contrast (little "
+-"contrast, very dark, or very bright images)."
+-msgstr ""
+-
+ #: ../operations/common/stress.c:28
+ msgid ""
+-"Neighbourhood taken into account, for enhancement ideal values are close to "
+-"the longest side of the image, increasing this increases the runtime."
++"Neighborhood taken into account, for enhancement ideal values are close to "
++"the longest side of the image, increasing this increases the runtime"
+ msgstr ""
+ 
+ #: ../operations/common/stress.c:32
+ msgid ""
+ "Number of iterations, a higher number of iterations provides a less noisy "
+-"rendering at computational cost."
++"rendering at a computational cost"
+ msgstr ""
+ 
+ #: ../operations/common/stress.c:191
+-msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling."
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++
++#: ../operations/common/stretch-contrast.c:162
++msgid ""
++"Scales the components of the buffer to be in the 0.0-1.0 range. This "
++"improves images that make poor use of the available contrast (little "
++"contrast, very dark, or very bright images)."
+ msgstr ""
+ 
+ #: ../operations/common/svg-huerotate.c:27
+@@ -1539,11 +1601,18 @@ msgstr ""
+ msgid "SVG color matrix operation svg_saturate"
+ msgstr ""
+ 
++#: ../operations/common/threshold.c:25
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Порог"
++
+ #: ../operations/common/threshold.c:26
+ msgid "Global threshold level (used when there is no auxiliary input buffer)."
+ msgstr ""
+ 
+-#: ../operations/common/threshold.c:192
++#: ../operations/common/threshold.c:123
+ msgid ""
+ "Thresholds the image to white/black based on either the global value set in "
+ "the value property, or per pixel from the aux input."
+@@ -1567,78 +1636,78 @@ msgid ""
+ "false mach-bands around edges)"
+ msgstr ""
+ 
+-#: ../operations/common/value-invert.c:218
++#: ../operations/common/value-invert.c:190
+ msgid ""
+ "Inverts just the value component, the result is the corresponding `inverted' "
+ "image."
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:23
++#: ../operations/common/vignette.c:24
+ msgid "Shape"
+ msgstr "Фигура"
+ 
+-#: ../operations/common/vignette.c:23
++#: ../operations/common/vignette.c:24
+ msgid "Shape to use: 0=circle 1=diamond 2=square"
+ msgstr "Используемая фигура: 0=круг 1=ромб 2=квадрат"
+ 
+-#: ../operations/common/vignette.c:24
++#: ../operations/common/vignette.c:25
+ msgid ""
+ "Defaults to 'black', you can use transparency here to erase portions of an "
+ "image"
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:25
++#: ../operations/common/vignette.c:26
+ msgid "How far out vignetting goes as portion of half image diagonal"
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:26
++#: ../operations/common/vignette.c:27
+ msgid "Softness"
+ msgstr "Мягкость"
+ 
+-#: ../operations/common/vignette.c:27
++#: ../operations/common/vignette.c:28
+ msgid "Gamma"
+ msgstr "Гамма"
+ 
+-#: ../operations/common/vignette.c:27
++#: ../operations/common/vignette.c:28
+ msgid "Falloff linearity"
+ msgstr "Линейность спада"
+ 
+-#: ../operations/common/vignette.c:28
++#: ../operations/common/vignette.c:29
+ msgid "Proportion"
+ msgstr "Пропорция"
+ 
+-#: ../operations/common/vignette.c:28
++#: ../operations/common/vignette.c:29
+ msgid "How close we are to image proportions"
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:29
++#: ../operations/common/vignette.c:30
+ msgid "Squeeze"
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:29
++#: ../operations/common/vignette.c:30
+ msgid ""
+ "Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = "
+ "inf:1, this is applied after proportion is taken into account, to directly "
+ "use squeeze factor as proportions, set proportion to 0.0."
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:31
++#: ../operations/common/vignette.c:32
+ msgid "Horizontal center of vignetting"
+ msgstr "Центр виньетирования по горизонтали"
+ 
+-#: ../operations/common/vignette.c:32
++#: ../operations/common/vignette.c:33
+ msgid "Vertical center of vignetting"
+ msgstr "Центр виньетирования по вертикали"
+ 
+-#: ../operations/common/vignette.c:33
++#: ../operations/common/vignette.c:34
+ msgid "Rotation"
+ msgstr "Вращение"
+ 
+-#: ../operations/common/vignette.c:33
++#: ../operations/common/vignette.c:34
+ msgid "Rotation angle"
+ msgstr ""
+ 
+-#: ../operations/common/vignette.c:220
++#: ../operations/common/vignette.c:386
+ msgid ""
+ "A vignetting op, applies a vignette to an image. Simulates the luminance "
+ "fall off at edge of exposed film, and some other fuzzier border effects that "
+@@ -1653,7 +1722,15 @@ msgstr ""
+ msgid "Coordinate y of the center of the waves"
+ msgstr ""
+ 
+-#: ../operations/common/waves.c:164
++#: ../operations/common/waves.c:44
++msgid "Clamp deformation"
++msgstr ""
++
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr ""
++
++#: ../operations/common/waves.c:169
+ msgid "Transform the buffer with waves"
+ msgstr ""
+ 
+@@ -1685,7 +1762,7 @@ msgstr ""
+ msgid "The reference ID used as input (for use in XML)."
+ msgstr ""
+ 
+-#: ../operations/core/clone.c:112
++#: ../operations/core/clone.c:110
+ msgid "Clone a buffer"
+ msgstr "Склонировать буфер"
+ 
+@@ -1701,7 +1778,7 @@ msgstr ""
+ msgid "Convert the data to the specified format"
+ msgstr ""
+ 
+-#: ../operations/core/crop.c:179
++#: ../operations/core/crop.c:194
+ msgid "Crop a buffer"
+ msgstr ""
+ 
+@@ -1794,7 +1871,7 @@ msgstr "Качество"
+ 
+ #: ../operations/external/jpg-save.c:28
+ msgid "JPEG compression quality (between 1 and 100)"
+-msgstr ""
++msgstr "Качество сжатия JPEG (между 1 и 100)"
+ 
+ #: ../operations/external/jpg-save.c:29
+ msgid "Smoothing"
+@@ -1833,6 +1910,48 @@ msgstr ""
+ msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
+ msgstr ""
+ 
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Лямбда"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:1428
++msgid ""
++"Given a sparse user supplied tri-map and an input image, create a foreground "
++"alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++
+ #: ../operations/external/path.c:27
+ msgid "Fill Color"
+ msgstr "Цвет заливки"
+@@ -1867,7 +1986,7 @@ msgid ""
+ "stroking is done using an airbrush tool"
+ msgstr ""
+ 
+-#: ../operations/external/path.c:38 ../operations/workshop/warp.c:30
++#: ../operations/external/path.c:38 ../operations/workshop/warp.c:39
+ msgid "Hardness"
+ msgstr ""
+ 
+@@ -1880,7 +1999,7 @@ msgid "Fill rule"
+ msgstr "Правило заливки"
+ 
+ #: ../operations/external/path.c:42
+-msgid "How to determine what to fill (nonzero|evenodd"
++msgid "How to determine what to fill (nonzero|evenodd)"
+ msgstr ""
+ 
+ #: ../operations/external/path.c:44 ../operations/external/vector-fill.c:36
+@@ -2011,9 +2130,9 @@ msgid "Height for rendered image"
+ msgstr ""
+ 
+ #. not hidden because it has extra API
+-#: ../operations/external/svg-load.c:245
++#: ../operations/external/svg-load.c:239
+ msgid "Load an SVG file using librsvg"
+-msgstr ""
++msgstr "Загрузить файл SVG с помощью"
+ 
+ #: ../operations/external/text.c:25
+ msgid "Text"
+@@ -2031,7 +2150,7 @@ msgstr "Гарнитура"
+ msgid "Font family (utf8)"
+ msgstr "Гарнитура (UTF-8)"
+ 
+-#: ../operations/external/text.c:29 ../operations/workshop/warp.c:28
++#: ../operations/external/text.c:29 ../operations/workshop/warp.c:37
+ msgid "Size"
+ msgstr "Размер"
+ 
+@@ -2111,7 +2230,7 @@ msgid "Fill rule."
+ msgstr ""
+ 
+ #: ../operations/external/vector-fill.c:34
+-msgid "how to determine what to fill (nonzero|evenodd"
++msgid "how to determine what to fill (nonzero|evenodd)"
+ msgstr ""
+ 
+ #: ../operations/external/vector-fill.c:37
+@@ -2119,7 +2238,7 @@ msgstr ""
+ msgid "svg style description of transform."
+ msgstr ""
+ 
+-#: ../operations/external/vector-fill.c:258
++#: ../operations/external/vector-fill.c:268
+ msgid "Renders a filled region"
+ msgstr ""
+ 
+@@ -2151,28 +2270,28 @@ msgstr ""
+ 
+ #: ../operations/generated/color-burn.c:117
+ msgid ""
+-"SVG blend operation color-burn (<tt>if cA * aB + cB * aA <= aA * aB: d = cA "
+-"* (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB "
+-"* aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</tt>)"
++"SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = "
++"cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + "
++"cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/color-dodge.c:117
+ msgid ""
+-"SVG blend operation color-dodge (<tt>if cA * aB + cB * aA >= aA * aB: d = aA "
+-"* aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
+-"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = "
++"aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * "
++"aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/darken.c:115
+ msgid ""
+-"SVG blend operation darken (<tt>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + "
+-"cB * (1 - aA)</tt>)"
++"SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) "
++"+ cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/difference.c:115
+ msgid ""
+-"SVG blend operation difference (<tt>d = cA + cB - 2 * (MIN (cA * aB, cB * "
+-"aA))</tt>)"
++"SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * "
++"aA))</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/divide.c:125
+@@ -2183,6 +2302,10 @@ msgstr ""
+ msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
+ msgstr ""
+ 
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr ""
++
+ #: ../operations/generated/dst-in.c:116
+ msgid "Porter Duff operation dst-in (d = cB * aA)"
+ msgstr ""
+@@ -2195,14 +2318,10 @@ msgstr ""
+ msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
+ msgstr ""
+ 
+-#: ../operations/generated/dst.c:116
+-msgid "Porter Duff operation dst (d = cB)"
+-msgstr ""
+-
+ #: ../operations/generated/exclusion.c:115
+ msgid ""
+-"SVG blend operation exclusion (<tt>d = (cA * aB + cB * aA - 2 * cA * cB) + "
+-"cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/gamma.c:125
+@@ -2211,15 +2330,15 @@ msgstr ""
+ 
+ #: ../operations/generated/hard-light.c:117
+ msgid ""
+-"SVG blend operation hard-light (<tt>if 2 * cA < aA: d = 2 * cA * cB + cA * "
++"SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * "
+ "(1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) "
+-"+ cA * (1 - aB) + cB * (1 - aA)</tt>)"
++"+ cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/lighten.c:115
+ msgid ""
+-"SVG blend operation lighten (<tt>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) "
+-"+ cB * (1 - aA)</tt>)"
++"SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - "
++"aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/multiply.c:125
+@@ -2228,33 +2347,37 @@ msgstr ""
+ 
+ #: ../operations/generated/overlay.c:117
+ msgid ""
+-"SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - "
+-"aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA "
+-"* (1 - aB) + cB * (1 - aA)</tt>)"
++"SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 "
++"- aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + "
++"cA * (1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/plus.c:115
+-msgid "SVG blend operation plus (<tt>d = cA + cB</tt>)"
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/screen.c:115
+-msgid "SVG blend operation screen (<tt>d = cA + cB - cA * cB</tt>)"
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/soft-light.c:119
+ msgid ""
+-"SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == "
++"SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == "
+ "0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 "
+ "* cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB "
+ "== 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = "
+ "(aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * "
+-"(1 - aB) + cB * (1 - aA)</tt>)"
++"(1 - aB) + cB * (1 - aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/src-atop.c:116
+ msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
+ msgstr ""
+ 
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr ""
++
+ #: ../operations/generated/src-in.c:125
+ msgid "Porter Duff operation src-in (d = cA * aB)"
+ msgstr ""
+@@ -2267,24 +2390,131 @@ msgstr ""
+ msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
+ msgstr ""
+ 
+-#: ../operations/generated/src.c:116
+-msgid "Porter Duff operation src (d = cA)"
+-msgstr ""
+-
+ #: ../operations/generated/subtract.c:125
+ msgid "Math operation subtract (c = c - value)"
+ msgstr ""
+ 
+-#: ../operations/generated/svg-multiply.c:114
++#: ../operations/generated/svg-multiply.c:115
+ msgid ""
+-"SVG blend operation svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 "
+-"- aA)</tt>)"
++"SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - "
++"aA)</code>)"
+ msgstr ""
+ 
+ #: ../operations/generated/xor.c:116
+ msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
+ msgstr ""
+ 
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr ""
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr ""
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Угол вращения (по часовой стрелке)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr ""
++
++#: ../operations/transform/scale.c:29 ../operations/transform/scale-ratio.c:26
++msgid "Horizontal scale factor"
++msgstr "Коэффициент масштабирования по горизонтали"
++
++#: ../operations/transform/scale.c:31 ../operations/transform/scale-ratio.c:28
++msgid "Vertical scale factor"
++msgstr "Коэффициент масштабирования по вертикали"
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr ""
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr ""
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Размер по горизонтали"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Размер по вертикали"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr ""
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Величина наклона по горизонтали"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Величина наклона по вертикали"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Наклон буфера"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr ""
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr ""
++
++#: ../operations/transform/transform-core.c:200
++msgid "Origin-x"
++msgstr "Центр по X"
++
++#: ../operations/transform/transform-core.c:201
++msgid "X coordinate of origin"
++msgstr "Координата начала по оси X"
++
++#: ../operations/transform/transform-core.c:208
++msgid "Origin-y"
++msgstr "Центр по Y"
++
++#: ../operations/transform/transform-core.c:209
++msgid "Y coordinate of origin"
++msgstr "Координата начала по оси Y"
++
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++msgid "Hard edges"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:230
++msgid "Lanczos width"
++msgstr "Ширина по Ланцошу"
++
++#: ../operations/transform/transform-core.c:231
++msgid "Width of the Lanczos function"
++msgstr "Ширина функции Ланцоша"
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Перемещение по горизонтали"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Перемещение по вертикали"
++
++#: ../operations/transform/translate.c:33
++msgid ""
++"Repositions the buffer (with subpixel precision), if integer coordinates are "
++"passed a fast-path without resampling is used"
++msgstr ""
++
+ #: ../operations/workshop/box-max.c:26 ../operations/workshop/box-min.c:26
+ #: ../operations/workshop/box-percentile.c:28
+ #: ../operations/workshop/disc-percentile.c:27
+@@ -2329,58 +2559,11 @@ msgstr "Буфер кэша"
+ msgid "The GeglBuffer where the caching is done"
+ msgstr ""
+ 
+-#: ../operations/workshop/buffer-cache.c:103
++#: ../operations/workshop/buffer-cache.c:96
+ msgid ""
+ "Cache the input buffer internally, further process take this buffer as input."
+ msgstr ""
+ 
+-#: ../operations/workshop/color-reduction.c:25
+-msgid "Red bits"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:25
+-msgid "Number of bits for red channel"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:26
+-msgid "Green bits"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:26
+-msgid "Number of bits for green channel"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:27
+-msgid "Blue bits"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:27
+-msgid "Number of bits for blue channel"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:28
+-msgid "Alpha bits"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:28
+-msgid "Number of bits for alpha channel"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:29
+-msgid "Dither"
+-msgstr "Подмешивание шума"
+-
+-#: ../operations/workshop/color-reduction.c:30
+-msgid ""
+-"Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:459
+-msgid ""
+-"Reduces the number of bits per channel (colors and alpha), with optional "
+-"dithering"
+-msgstr ""
+-
+ #: ../operations/workshop/color-rotate.c:33
+ #: ../operations/workshop/color-rotate.c:39
+ msgid "Clockwise"
+@@ -2436,10 +2619,9 @@ msgstr ""
+ msgid "The value of gray threshold"
+ msgstr "Значение порога серого"
+ 
+-#: ../operations/workshop/color-rotate.c:385
+-#, fuzzy
++#: ../operations/workshop/color-rotate.c:383
+ msgid "Rotate colors on the image"
+-msgstr "Вращать тона изображения"
++msgstr ""
+ 
+ #: ../operations/workshop/convolution-matrix.c:25
+ msgid "(1,1) "
+@@ -2695,7 +2877,7 @@ msgstr ""
+ 
+ #: ../operations/workshop/convolution-matrix.c:91
+ msgid ""
+-"Type of border to choose.Choices are extend, wrap, crop.Default is extend"
++"Type of border to choose. Choices are extend, wrap, crop. Default is extend"
+ msgstr ""
+ 
+ #: ../operations/workshop/convolution-matrix.c:433
+@@ -2779,7 +2961,7 @@ msgid ""
+ "colors are sorted by luminance."
+ msgstr ""
+ 
+-#: ../operations/workshop/ditto.c:111
++#: ../operations/workshop/ditto.c:112
+ msgid "Test op to do a 1:1 map of input to output, while sampling"
+ msgstr ""
+ 
+@@ -2881,7 +3063,7 @@ msgid "Lens:"
+ msgstr "Объектив:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:33
+-msgid "Write your lens model with majuscules"
++msgid "Write your lens model with uppercase letters"
+ msgstr ""
+ 
+ #: ../operations/workshop/external/lens-correct.c:34
+@@ -3021,6 +3203,7 @@ msgstr ""
+ 
+ #: ../operations/workshop/external/line-profile.c:26
+ #: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
+ msgid "X1"
+ msgstr ""
+ 
+@@ -3038,6 +3221,7 @@ msgstr ""
+ 
+ #: ../operations/workshop/external/line-profile.c:28
+ #: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
+ msgid "Y1"
+ msgstr ""
+ 
+@@ -3090,6 +3274,7 @@ msgid "X1 value, position"
+ msgstr ""
+ 
+ #: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
+ msgid "X2"
+ msgstr ""
+ 
+@@ -3099,6 +3284,7 @@ msgid "X2 value, position"
+ msgstr ""
+ 
+ #: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
+ msgid "Y2"
+ msgstr ""
+ 
+@@ -3193,34 +3379,15 @@ msgstr ""
+ msgid "Edge preserving blur"
+ msgstr ""
+ 
+-#: ../operations/workshop/linear-gradient.c:24
+-#: ../operations/workshop/radial-gradient.c:24
+-msgid "x1"
+-msgstr ""
+-
+-#: ../operations/workshop/linear-gradient.c:25
+-#: ../operations/workshop/radial-gradient.c:25
+-msgid "y1"
+-msgstr ""
+-
+-#: ../operations/workshop/linear-gradient.c:26
+-#: ../operations/workshop/radial-gradient.c:26
+-msgid "x2"
+-msgstr ""
+-
+-#: ../operations/workshop/linear-gradient.c:27
+-#: ../operations/workshop/radial-gradient.c:27
+-msgid "y2"
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
+ msgstr ""
+ 
+-#: ../operations/workshop/linear-gradient.c:29
+ #: ../operations/workshop/linear-gradient.c:31
+-#: ../operations/workshop/radial-gradient.c:29
+-#: ../operations/workshop/radial-gradient.c:31
+-msgid "One end of gradient"
++msgid "The other end of a gradient"
+ msgstr ""
+ 
+-#: ../operations/workshop/linear-gradient.c:137
++#: ../operations/workshop/linear-gradient.c:136
+ msgid "Linear gradient renderer"
+ msgstr ""
+ 
+@@ -3256,18 +3423,6 @@ msgstr ""
+ msgid "Mandelbrot set renderer"
+ msgstr ""
+ 
+-#: ../operations/workshop/max-rgb.c:30
+-msgid "Minimal"
+-msgstr ""
+-
+-#: ../operations/workshop/max-rgb.c:31
+-msgid "Hold the minimal values instead of the maximal values"
+-msgstr ""
+-
+-#: ../operations/workshop/max-rgb.c:120
+-msgid "Reduce image to pure red, green, and blue"
+-msgstr ""
+-
+ #: ../operations/workshop/noise-spread.c:30
+ msgid "Horizontal spread amount"
+ msgstr ""
+@@ -3292,11 +3447,32 @@ msgstr "Турбулентность"
+ msgid "The value of the turbulence"
+ msgstr "Величина турбулентности"
+ 
+-#: ../operations/workshop/plasma.c:388
++#: ../operations/workshop/plasma.c:389
+ msgid "Performs plasma effect on the image"
+ msgstr ""
+ 
+-#: ../operations/workshop/radial-gradient.c:129
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:128
+ msgid "Radial gradient renderer"
+ msgstr ""
+ 
+@@ -3330,31 +3506,31 @@ msgid ""
+ "Neighbours"
+ msgstr ""
+ 
+-#: ../operations/workshop/warp.c:27 ../operations/workshop/warp.c:32
++#: ../operations/workshop/warp.c:36 ../operations/workshop/warp.c:41
+ msgid "Effect Strength"
+ msgstr "Сила эффекта"
+ 
+-#: ../operations/workshop/warp.c:29
++#: ../operations/workshop/warp.c:38
+ msgid "Effect Size"
+ msgstr "Размер эффекта"
+ 
+-#: ../operations/workshop/warp.c:31
++#: ../operations/workshop/warp.c:40
+ msgid "Effect Hardness"
+ msgstr "Жёсткость эффекта"
+ 
+-#: ../operations/workshop/warp.c:32
++#: ../operations/workshop/warp.c:41
+ msgid "Stroke"
+ msgstr ""
+ 
+-#: ../operations/workshop/warp.c:33
++#: ../operations/workshop/warp.c:42
+ msgid "Behavior"
+ msgstr "Поведение"
+ 
+-#: ../operations/workshop/warp.c:34
++#: ../operations/workshop/warp.c:43
+ msgid "Behavior of the op"
+ msgstr "Поведение операции"
+ 
+-#: ../operations/workshop/warp.c:379
++#: ../operations/workshop/warp.c:386
+ msgid "Compute a relative displacement mapping from a stroke"
+ msgstr ""
+ 
+@@ -3384,6 +3560,18 @@ msgstr ""
+ msgid "Applies whirling and pinching on the image"
+ msgstr "Применить к изображению эффект вихря и щипка"
+ 
++#~ msgid "Global colour saturation factor"
++#~ msgstr "Глобальный коэффициент насыщенности цвета"
++
++#~ msgid "Blur radius."
++#~ msgstr "Радиус размывания"
++
++#~ msgid "Fractal Type"
++#~ msgstr "Тип фрактала"
++
++#~ msgid "Dither"
++#~ msgstr "Подмешивание шума"
++
+ #~ msgid "Circle depth in percent."
+ #~ msgstr "Глубина круга в процентах"
+ 
+diff --git a/po/sl.po b/po/sl.po
+index daf4f17..2c86fdd 100644
+--- po/sl.po
++++ po/sl.po
+@@ -9,10 +9,11 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: GEGL\n"
+ "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gegl&keywords=I18N+L10N&component=general\n"
+-"POT-Creation-Date: 2012-04-01 07:41+0000\n"
+-"PO-Revision-Date: 2012-04-01 12:54+0100\n"
++"POT-Creation-Date: 2012-09-22 23:20+0000\n"
++"PO-Revision-Date: 2012-09-23 10:02+0100\n"
+ "Last-Translator: filmsi\n"
+ "Language-Team: Martin Srebotnjak <miles at filmsi.net>\n"
++"Language: \n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+@@ -21,34 +22,172 @@ msgstr ""
+ "X-Poedit-Country: SLOVENIA\n"
+ "X-Poedit-SourceCharset: utf-8\n"
+ 
+-#: ../gegl/gegl-init.c:216
+-msgid "babls error tolerance, a value beteen 0.2 and 0.000000001"
+-msgstr ""
++#: ../bin/gegl-options.c:45
++#, c-format
++msgid ""
++"usage: %s [options] <file | -- [op [op] ..]>\n"
++"\n"
++"  Options:\n"
++"     -h, --help      this help information\n"
++"\n"
++"     -i, --file      read xml from named file\n"
++"\n"
++"     -x, --xml       use xml provided in next argument\n"
++"\n"
++"     --dot           output a graphviz graph description\n"
++"\n"
++"     -o, --output    output generated image to named file, type based\n"
++"                     on extension.\n"
++"\n"
++"     -p              increment frame counters of various elements when\n"
++"                     processing is done.\n"
++"\n"
++"     -X              output the XML that was read in\n"
++"\n"
++"     -v, --verbose   print diagnostics while running\n"
++"\n"
++"All parameters following -- are considered ops to be chained together\n"
++"into a small composition instead of using an xml file, this allows for\n"
++"easy testing of filters. Be aware that the default value will be used\n"
++"for all properties.\n"
++msgstr ""
++"raba: %s [možnosti] <datoteka | -- [op [op] ..]>\n"
++"\n"
++"  Možnosti:\n"
++"     -h, --help      to besedilo pomoči\n"
++"\n"
++"     -i, --file      preberi xml iz navedene datoteke\n"
++"\n"
++"     -x, --xml       uporabi xml iz sledečega parametra\n"
++"\n"
++"     --dot           izpiši opis grafa graphviz\n"
++"\n"
++"     -o, --output    izpiši ustvarjeno sliko v imenovano datoteko, vrsta\n"
++"                     je odvisna od končnice datoteke.\n"
++"\n"
++"     -p              povečaj števce sličic raznih elementov, ko je\n"
++"                     obdelava zaključena.\n"
++"\n"
++"     -X              izpiše XML, ki je bil prebran\n"
++"\n"
++"     -v, --verbose   natisni diagnostiko med delovanjem\n"
++"\n"
++"Vsi argumenti, ki sledijo --, are considered ops, ki se verižijo\n"
++"v manjši sestav namesto uporabe datoteke xml, kar omogoča\n"
++"enostavno preizkušanje filtrov. Upoštevajte, da bo za vse lastnosti\n"
++"uporabljena privzeta vrednost.\n"
++
++#: ../bin/gegl-options.c:77
++#, c-format
++msgid "ERROR: '%s' option expected argument\n"
++msgstr "NAPAKA: možnost '%s' pričakuje argument\n"
+ 
+-#: ../gegl/gegl-init.c:221
+-msgid "Where GEGL stores it's swap"
+-msgstr ""
++#: ../bin/gegl-options.c:116
++msgid "Display on screen"
++msgstr "Prikaži na zaslonu"
++
++#: ../bin/gegl-options.c:118
++msgid "Print XML"
++msgstr "Natisni XML"
++
++#: ../bin/gegl-options.c:120
++msgid "Output in a file"
++msgstr "Izhod v datoteko"
++
++#: ../bin/gegl-options.c:122
++msgid "Display help information"
++msgstr "Prikaži vsebino pomoči"
++
++#: ../bin/gegl-options.c:124
++#: ../bin/gegl.c:257
++#, c-format
++msgid "Unknown GeglOption mode: %d"
++msgstr "Neznan način GeglOption: %d"
++
++#: ../bin/gegl-options.c:125
++msgid "unknown mode"
++msgstr "neznan način"
++
++#: ../bin/gegl-options.c:130
++#, c-format
++msgid ""
++"Parsed commandline:\n"
++"\tmode:   %s\n"
++"\tfile:   %s\n"
++"\txml:    %s\n"
++"\toutput: %s\n"
++"\trest:   %s\n"
++"\t\n"
++msgstr ""
++"Razčlenjena ukazna vrstica:\n"
++"\tnačin:   %s\n"
++"\tdatoteka:   %s\n"
++"\txml:    %s\n"
++"\tizhod: %s\n"
++"\tostanek:   %s\n"
++"\t\n"
++
++#: ../bin/gegl-options.c:257
++#, c-format
++msgid ""
++"\n"
++"\n"
++"unknown parameter '%s' giving you help instead\n"
++"\n"
++"\n"
++msgstr ""
++"\n"
++"\n"
++"neznan parameter '%s', namesto tega bo izpisana pomoč\n"
++"\n"
++"\n"
++
++#: ../bin/gegl.c:147
++#, c-format
++msgid "Unable to read file: %s"
++msgstr "Datoteke ni mogoče prebrati: %s"
++
++#: ../bin/gegl.c:191
++#, c-format
++msgid "Invalid graph, abort.\n"
++msgstr "Neveljaven graf, sledi prekinitev.\n"
++
++#: ../gegl/gegl-init.c:205
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr "Toleranca napake babl-a, vrednost med 0,2 in 0,000000001"
+ 
+-#: ../gegl/gegl-init.c:226
++#: ../gegl/gegl-init.c:210
++msgid "Where GEGL stores its swap"
++msgstr "Kje GEGL hrani svojo vmesno datoteko"
++
++#: ../gegl/gegl-init.c:215
+ msgid "How much memory to (approximately) use for caching imagery"
+-msgstr ""
++msgstr "Koliko pomnilnika (približno) uporabiti za predpomnenje podob"
+ 
+-#: ../gegl/gegl-init.c:231
++#: ../gegl/gegl-init.c:220
+ msgid "Default size of tiles in GeglBuffers"
+-msgstr ""
++msgstr "Privzeta velikost tlakovcev za GeglBuffer"
+ 
+-#: ../gegl/gegl-init.c:236
+-msgid "The count of pixels to compute simulantous"
+-msgstr ""
++#: ../gegl/gegl-init.c:225
++msgid "The count of pixels to compute simultaneously"
++msgstr "Število slikovnih točk, ki naj se izračunajo hkrati"
+ 
+-#: ../gegl/gegl-init.c:241
++#: ../gegl/gegl-init.c:230
+ msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
+-msgstr ""
++msgstr "Kakovost izrisovanja, vrednost med 0,0 (hitro) in 1,0 (referenčna kakovost)"
+ 
+-#: ../gegl/gegl-init.c:246
+-msgid "The number of concurrent processing threads to use."
++#: ../gegl/gegl-init.c:235
++msgid "The number of concurrent processing threads to use"
+ msgstr "Število uporabljenih vzporednih procesnih niti."
+ 
++#: ../gegl/gegl-init.c:240
++msgid "Use OpenCL"
++msgstr "Uporabi OpenCL"
++
++#: ../gegl/gegl-init.c:245
++msgid "Maximum number of entries in the file tile backend's writer queue"
++msgstr "Največje število vnosov v pisalno vrsto ozadja za tlakovanje datotek"
++
+ #: ../gegl/module/geglmodule.c:147
+ #: ../gegl/module/geglmodule.c:165
+ #: ../gegl/module/geglmodule.c:274
+@@ -74,131 +213,14 @@ msgstr "Nalaganje ni uspelo"
+ msgid "Not loaded"
+ msgstr "Ni naloženo"
+ 
+-#: ../operations/affine/affine.c:200
+-msgid "Origin-x"
+-msgstr "Izvor-X"
+-
+-#: ../operations/affine/affine.c:201
+-msgid "X-coordinate of origin"
+-msgstr "Koordinata X izvora"
+-
+-#: ../operations/affine/affine.c:208
+-msgid "Origin-y"
+-msgstr "Izvor-Y"
+-
+-#: ../operations/affine/affine.c:209
+-msgid "Y-coordinate of origin"
+-msgstr "Koordinata Y izvora"
+-
+-#: ../operations/affine/affine.c:216
+-#: ../operations/common/gaussian-blur.c:34
+-#: ../operations/workshop/emboss.c:31
+-#, fuzzy
+-msgid "Filter"
+-msgstr ""
+-"#-#-#-#-#  dia.master.sl.po (dia)  #-#-#-#-#\n"
+-"Odberi\n"
+-"#-#-#-#-#  gimp-help-2.filters.master.sl.po (GIMP Help 2 - Filters)  #-#-#-#-#\n"
+-"Filter\n"
+-"#-#-#-#-#  gimp-help-2.filters~enhance.master.sl.po (GIMP Help 2 - Filters Enhance)  #-#-#-#-#\n"
+-"Filter\n"
+-"#-#-#-#-#  gimp-plug-ins.master.sl.po (GIMP - standardni vtičniki)  #-#-#-#-#\n"
+-"Filter"
+-
+-#: ../operations/affine/affine.c:217
+-msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
+-msgstr ""
+-
+-#: ../operations/affine/affine.c:223
+-#: ../operations/affine/affine.c:224
+-msgid "Hard edges"
+-msgstr "Ostri robovi"
+-
+-#: ../operations/affine/affine.c:230
+-msgid "Lanczos-width"
+-msgstr "Širina lanczos"
+-
+-#: ../operations/affine/affine.c:231
+-#| msgid "Width of lanczos function"
+-msgid "Width of the Lanczos function"
+-msgstr "Širina funkcije lanczos"
+-
+-#: ../operations/affine/reflect.c:29
+-#| msgid "Direction vector's x component"
+-msgid "Direction vector's X component"
+-msgstr "Komponenta x vektorja smeri"
+-
+-#: ../operations/affine/reflect.c:31
+-#| msgid "Direction vector's x component"
+-msgid "Direction vector's Y component"
+-msgstr "Komponenta x vektorja smeri"
+-
+-#: ../operations/affine/rotate.c:26
+-msgid "Angle to rotate (clockwise)"
+-msgstr "Kot sukanja (v SUK)"
+-
+-#: ../operations/affine/rotate.c:31
+-#, fuzzy
+-msgid "Rotate the buffer around the specified origin."
+-msgstr "V navedeni datoteki ni podatkov o ploskvah."
+-
+-#: ../operations/affine/scale.c:25
+-msgid "Horizontal scale factor"
+-msgstr "Faktor vodoravne spremembe merila"
+-
+-#: ../operations/affine/scale.c:26
+-msgid "Vertical scale factor"
+-msgstr "Faktor navpične spremembe merila"
+-
+-#: ../operations/affine/scale.c:31
+-#, fuzzy
+-msgid "Scales the buffer."
+-msgstr "Spremeni merilo medpomnilnika."
+-
+-#: ../operations/affine/shear.c:26
+-#, fuzzy
+-msgid "Horizontal shear amount"
+-msgstr "Vodoravni preliv"
+-
+-#: ../operations/affine/shear.c:28
+-#, fuzzy
+-msgid "Vertical shear amount"
+-msgstr "Navpična poravnava besedila"
+-
+-#: ../operations/affine/shear.c:33
+-#, fuzzy
+-msgid "Shears the buffer"
+-msgstr "Prilepi medpomnilnik"
+-
+-#: ../operations/affine/transform.c:25
+-msgid "Transformation string"
+-msgstr "Niz transformacije"
+-
+-#: ../operations/affine/transform.c:30
+-msgid "Transforms the group (used by svg)."
+-msgstr ""
+-
+-#: ../operations/affine/translate.c:26
+-#, fuzzy
+-msgid "Horizontal translation"
+-msgstr "Vodoravni mirovalnik"
+-
+-#: ../operations/affine/translate.c:28
+-#, fuzzy
+-msgid "Vertical translation"
+-msgstr "Navpični mirovalnik"
+-
+-#: ../operations/affine/translate.c:33
+-msgid "Repositions the buffer (with subpixel precision), if integer coordinates are passed a fast-path without resampling is used"
+-msgstr ""
+-
+ #: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
+ msgid "Blur radius"
+ msgstr "Polmer zabrisa"
+ 
+ #: ../operations/common/bilateral-filter.c:28
+ msgid "Radius of square pixel region, (width and height will be radius*2+1)."
+-msgstr ""
++msgstr "Polmer območja kvadratne slikovne točke (širina in višina bosta polmer*2+1)"
+ 
+ #: ../operations/common/bilateral-filter.c:29
+ msgid "Edge preservation"
+@@ -208,19 +230,18 @@ msgstr "Ohranjevanje robov"
+ msgid "Amount of edge preservation"
+ msgstr "Raven ohranjanja robov"
+ 
+-#: ../operations/common/bilateral-filter.c:185
++#: ../operations/common/bilateral-filter.c:315
+ msgid "An edge preserving blur filter that can be used for noise reduction. It is a gaussian blur where the contribution of neighbourhood pixels are weighted by the color difference from the center pixel."
+-msgstr ""
++msgstr "Filter zabrisanosti, ki ohranja robove in ki ga lahko uporabite za zmanjšanje šuma. Gre za Gaussovo zabrisanost, kjer je prispevek sosednjih slikovnih točk utežen z barvno razliko od središčne slikovne točke."
+ 
+ #: ../operations/common/box-blur.c:24
+ #: ../operations/common/c2g.c:27
+ #: ../operations/common/difference-of-gaussians.c:26
+ #: ../operations/common/difference-of-gaussians.c:28
+ #: ../operations/common/dropshadow.c:30
+-#: ../operations/common/matting-global.c:28
+ #: ../operations/common/snn-mean.c:26
+ #: ../operations/common/stress.c:27
+-#: ../operations/common/vignette.c:25
++#: ../operations/common/vignette.c:26
+ #: ../operations/external/matting-levin.c:28
+ #: ../operations/workshop/box-max.c:25
+ #: ../operations/workshop/box-min.c:25
+@@ -235,11 +256,11 @@ msgstr "Radij"
+ #: ../operations/common/box-blur.c:25
+ #: ../operations/common/snn-mean.c:27
+ msgid "Radius of square pixel region, (width and height will be radius*2+1)"
+-msgstr ""
++msgstr "Polmer območja kvadratne slikovne točke (širina in višina bosta polmer*2+1)"
+ 
+-#: ../operations/common/box-blur.c:413
++#: ../operations/common/box-blur.c:423
+ msgid "Performs an averaging of a square box of pixels"
+-msgstr ""
++msgstr "Izvede poprečenje kvadratnega polja slikovnih točk"
+ 
+ #. ... are the properties of the filter, these are all scalar values
+ #. * (doubles), the the parameters are:
+@@ -251,12 +272,12 @@ msgid "Contrast"
+ msgstr "Kontrast"
+ 
+ #: ../operations/common/brightness-contrast.c:30
+-#, fuzzy
+ msgid "Range scale factor"
+-msgstr "Ali uporabi ročni faktor spreminjanja velikosti"
++msgstr "Faktor spreminjanja mere obsega"
+ 
+ #: ../operations/common/brightness-contrast.c:31
+ #: ../operations/common/reinhard05.c:27
++#: ../operations/common/softglow.c:27
+ msgid "Brightness"
+ msgstr "Svetlost"
+ 
+@@ -264,19 +285,18 @@ msgstr "Svetlost"
+ msgid "Amount to increase brightness"
+ msgstr "Količina povečanja svetlosti"
+ 
+-#: ../operations/common/brightness-contrast.c:198
++#: ../operations/common/brightness-contrast.c:159
+ msgid "Changes the light level and contrast."
+ msgstr "Spremeni raven svetlobe in kontrast."
+ 
+ #: ../operations/common/buffer-sink.c:25
+ #: ../operations/common/write-buffer.c:25
+-#, fuzzy
+ msgid "Buffer location"
+-msgstr "Položaj zavihka"
++msgstr "Mesto medpomnilnika"
+ 
+ #: ../operations/common/buffer-sink.c:26
+ msgid "The location where to store the output GeglBuffer"
+-msgstr ""
++msgstr "Mesto, kjer naj se shrani izhod GeglBuffer"
+ 
+ #: ../operations/common/buffer-sink.c:27
+ msgid "babl format"
+@@ -284,28 +304,28 @@ msgstr "Zapis babl"
+ 
+ #: ../operations/common/buffer-sink.c:28
+ msgid "The babl format of the output GeglBuffer, NULL to use input buffer format"
+-msgstr ""
++msgstr "Zapis babl izhoda GeglBuffer, NULL za uporabo vhodnega zapisa medpomnilnika"
+ 
+ #: ../operations/common/buffer-sink.c:83
+-#: ../operations/common/write-buffer.c:126
++#: ../operations/common/write-buffer.c:132
+ msgid "A GEGL buffer destination surface."
+-msgstr ""
++msgstr "Ciljna ploskev medpomnilnika GEGL."
+ 
+ #: ../operations/common/buffer-source.c:25
+ msgid "Input buffer"
+-msgstr "Vhodni izravnalnik"
++msgstr "Vhodni medpomnilnika"
+ 
+ #: ../operations/common/buffer-source.c:26
+ msgid "The GeglBuffer to load into the pipeline"
+-msgstr ""
++msgstr "GeglBuffer, ki naj se naloži v cevovod"
+ 
+-#: ../operations/common/buffer-source.c:116
++#: ../operations/common/buffer-source.c:177
+ msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
+-msgstr ""
++msgstr "Izvor, ki uporablja notranje-pomnilniški GeglBuffer, za GEGL-ovo interno uporabo."
+ 
+ #: ../operations/common/c2g.c:28
+-msgid "Neighbourhood taken into account, this is the radius in pixels taken into account when deciding which colors map to which gray values."
+-msgstr ""
++msgid "Neighborhood taken into account, this is the radius in pixels taken into account when deciding which colors map to which gray values"
++msgstr "Soseščina je upoštevana, to je polmer v slikovnih točkah, ki se upošteva pri odločanju, katere barve se preslikajo v katere sivinske vrednosti"
+ 
+ #: ../operations/common/c2g.c:29
+ #: ../operations/common/stress.c:29
+@@ -314,23 +334,36 @@ msgstr "Vzorci"
+ 
+ #: ../operations/common/c2g.c:30
+ #: ../operations/common/stress.c:30
+-msgid "Number of samples to do per iteration looking for the range of colors."
+-msgstr ""
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr "Število vzorcev na ponovitev pri iskanju obsega barv"
+ 
+ #: ../operations/common/c2g.c:31
+ #: ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25
+ #: ../operations/common/stress.c:31
+ #: ../operations/workshop/mandelbrot.c:31
+ msgid "Iterations"
+ msgstr "Ponovitve"
+ 
+ #: ../operations/common/c2g.c:32
+-msgid "Number of iterations, a higher number of iterations provides a less noisy results at computational cost."
+-msgstr ""
++msgid "Number of iterations, a higher number of iterations provides less noisy results at a computational cost"
++msgstr "Število ponavljanj, višje število ponavljanj ponuja manj šuma v rezultatih ob višjem strošku izračuna"
+ 
+-#: ../operations/common/c2g.c:193
+-msgid "Color to grayscale conversion, uses envelopes formed from spatial  color differences to perform color-feature preserving grayscale  spatial contrast enhancement."
+-msgstr ""
++#: ../operations/common/c2g.c:493
++msgid "Color to grayscale conversion, uses envelopes formed from spatial color differences to perform color-feature preserving grayscale spatial contrast enhancement"
++msgstr "Pretvorba iz sivinske v barvno, uporablja ovojnice iz barvno prostorskih razlik, da izvede izboljšavo sivinsko prostorskega kontrasta z ohranjanjem lastnosti barv"
++
++#: ../operations/common/cartoon.c:25
++msgid "Mask radius"
++msgstr "Polmer maske"
++
++#: ../operations/common/cartoon.c:27
++msgid "Percent black"
++msgstr "Odstotek črnine"
++
++#: ../operations/common/cartoon.c:376
++msgid "Cartoon effect"
++msgstr "Striparski učinek"
+ 
+ #: ../operations/common/checkerboard.c:25
+ #: ../operations/common/fractal-explorer.c:30
+@@ -348,7 +381,6 @@ msgstr "Širina"
+ 
+ #: ../operations/common/checkerboard.c:26
+ #: ../operations/common/grid.c:25
+-#| msgid "Horizontal width of cells pixels."
+ msgid "Horizontal width of cells pixels"
+ msgstr "Vodoravni širina celic v slikovnih točkah."
+ 
+@@ -367,7 +399,6 @@ msgstr "Višina"
+ 
+ #: ../operations/common/checkerboard.c:28
+ #: ../operations/common/grid.c:27
+-#| msgid "Vertical width of cells in pixels."
+ msgid "Vertical width of cells in pixels"
+ msgstr "Navpična širina celic v slikovnih točkah."
+ 
+@@ -379,7 +410,6 @@ msgstr "Odmik X"
+ 
+ #: ../operations/common/checkerboard.c:30
+ #: ../operations/common/grid.c:29
+-#| msgid "Horizontal offset (from origin) for start of grid."
+ msgid "Horizontal offset (from origin) for start of grid"
+ msgstr "Vodoravni odmik (od izvora) za začetek mreže."
+ 
+@@ -391,16 +421,15 @@ msgstr "Odmik Y"
+ 
+ #: ../operations/common/checkerboard.c:32
+ #: ../operations/common/grid.c:31
+-#| msgid "Vertical offset (from origin) for start of grid."
+ msgid "Vertical offset (from origin) for start of grid"
+ msgstr "Navpični odmik (od izvora) za začetek mreže."
+ 
+ #: ../operations/common/checkerboard.c:33
+-#: ../operations/common/color-to-alpha.c:27
++#: ../operations/common/color-to-alpha.c:28
+ #: ../operations/common/color.c:24
+ #: ../operations/common/grid.c:36
+ #: ../operations/common/rectangle.c:37
+-#: ../operations/common/vignette.c:24
++#: ../operations/common/vignette.c:25
+ #: ../operations/external/text.c:31
+ #: ../operations/external/vector-fill.c:27
+ #: ../operations/external/vector-stroke.c:27
+@@ -411,7 +440,7 @@ msgstr "Barva"
+ 
+ #: ../operations/common/checkerboard.c:34
+ msgid "One of the cell colors (defaults to 'black')"
+-msgstr ""
++msgstr "Prva barva celic (privzeto črna, 'black')"
+ 
+ #: ../operations/common/checkerboard.c:35
+ #: ../operations/workshop/linear-gradient.c:30
+@@ -421,44 +450,91 @@ msgstr "Druga barva"
+ 
+ #: ../operations/common/checkerboard.c:36
+ msgid "The other cell color (defaults to 'white')"
+-msgstr ""
++msgstr "Druga barva celic (privzeto bela, 'white')"
+ 
+ #: ../operations/common/checkerboard.c:146
+ msgid "Checkerboard renderer"
+ msgstr "Upodobitelj šahovnice"
+ 
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr "Bitov rdeče"
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr "Število bitov za rdeči kanal"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr "Bitov zelene"
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr "Število bitov za zeleni kanal"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr "Bitov modre"
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr "Število bitov za modri kanal"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr "Bitov alfe"
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr "Število bitov za kanal alfa"
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr "Strategija drgeta"
++
++#: ../operations/common/color-reduction.c:39
++msgid "The dithering strategy to use"
++msgstr "Strategija drgeta, ki jo želite uporabiti"
++
++#: ../operations/common/color-reduction.c:495
++msgid "Reduces the number of bits per channel (colors and alpha), with optional dithering"
++msgstr "Zmanjša število bitov na kanal (barvni in alfa), z možnim drgetom"
++
+ #: ../operations/common/color-temperature.c:27
+ msgid "Original temperature"
+-msgstr ""
++msgstr "Izvorna temperatura"
+ 
+ #: ../operations/common/color-temperature.c:27
+ msgid "Estimated temperature of the light source in Kelvin the image was taken with."
+-msgstr ""
++msgstr "Ocenjena temperatura svetlobnega vira pri zajemu podobe, v Kelvinih."
+ 
+ #: ../operations/common/color-temperature.c:28
+ msgid "Intended temperature"
+-msgstr ""
++msgstr "Ciljna temperatura"
+ 
+ #: ../operations/common/color-temperature.c:28
+ msgid "Corrected estimation of the temperature of the light source in Kelvin."
+-msgstr ""
++msgstr "Popravljena ocena temperature svetlobnega vira v Kelvinih."
+ 
+-#: ../operations/common/color-temperature.c:266
++#: ../operations/common/color-temperature.c:280
+ msgid "Allows changing the color temperature of an image."
+-msgstr ""
++msgstr "Omogoča spreminjanje barvne temperature slike."
+ 
+-#: ../operations/common/color-to-alpha.c:28
+-#: ../operations/common/color.c:25
+-msgid "The color to render (defaults to 'black')"
+-msgstr ""
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr "Barva izrisovanja (privzeto bela, 'white')"
+ 
+-#: ../operations/common/color-to-alpha.c:170
++#: ../operations/common/color-to-alpha.c:197
+ msgid "Performs color-to-alpha on the image."
+ msgstr "Na sliki izvede postopek barva-v-alfo."
+ 
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr "Barva izrisovanja (privzeto črna, 'black')"
++
+ #: ../operations/common/color.c:88
+ msgid "Generates a buffer entirely filled with the specified color, crop it to get smaller dimensions."
+-msgstr ""
++msgstr "Ustvari medpomnilnika, povsem zapolnjen z navedeno barvo, obrežite ga za manjše mere."
+ 
+ #: ../operations/common/contrast-curve.c:25
+ msgid "Sample points"
+@@ -466,7 +542,7 @@ msgstr "Vzorčne točke"
+ 
+ #: ../operations/common/contrast-curve.c:26
+ msgid "Number of curve sampling points.  0 for exact calculation."
+-msgstr ""
++msgstr "Število točk vzorčenja krivulj. 0 pomeni natančen izračun."
+ 
+ #: ../operations/common/contrast-curve.c:27
+ msgid "Curve"
+@@ -490,7 +566,7 @@ msgstr "Polmer 2"
+ 
+ #: ../operations/common/difference-of-gaussians.c:101
+ msgid "Does an edge detection based on the difference of two gaussian blurs."
+-msgstr ""
++msgstr "Izvede razpoznavo robov na osnovi razlike dveh Gaussovih zabrisanj."
+ 
+ #: ../operations/common/display.c:24
+ #: ../operations/external/sdl-display.c:26
+@@ -499,7 +575,28 @@ msgstr "Naslov za izhodno okno."
+ 
+ #: ../operations/common/display.c:142
+ msgid "Display the input buffer in a window."
+-msgstr ""
++msgstr "Prikaži vhodni medpomnilnik v oknu."
++
++#: ../operations/common/dot.c:26
++#: ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr "Širina bloka"
++
++#: ../operations/common/dot.c:27
++msgid "Size of each block in pixels"
++msgstr "Širina bloka v slikovnih točkah"
++
++#: ../operations/common/dot.c:28
++msgid "Dot size ratio"
++msgstr "Razmerje stranic pike"
++
++#: ../operations/common/dot.c:29
++msgid "Size ratio of a dot inside each block"
++msgstr "Razmerje stranic pike oz. točke v vsakem bloku"
++
++#: ../operations/common/dot.c:191
++msgid "Simplify image into an array of solid-colored dots"
++msgstr "Poenostavi sliko v matriko prekrivno zapolnjenih pik"
+ 
+ #: ../operations/common/dropshadow.c:25
+ #: ../operations/common/layer.c:32
+@@ -513,38 +610,34 @@ msgstr "Prekrivnost"
+ #: ../operations/common/dropshadow.c:26
+ #: ../operations/common/layer.c:34
+ #: ../operations/common/rectangle.c:29
+-#: ../operations/common/vignette.c:31
++#: ../operations/common/vignette.c:32
+ #: ../operations/common/waves.c:26
+ #: ../operations/core/crop.c:25
+ msgid "X"
+ msgstr "X"
+ 
+ #: ../operations/common/dropshadow.c:27
+-msgid "Horizontal shadow offset."
+-msgstr "Vodoravni odmik sence."
++msgid "Horizontal shadow offset"
++msgstr "Vodoravni odmik sence"
+ 
+ #: ../operations/common/dropshadow.c:28
+ #: ../operations/common/layer.c:36
+ #: ../operations/common/rectangle.c:31
+-#: ../operations/common/vignette.c:32
++#: ../operations/common/vignette.c:33
+ #: ../operations/common/waves.c:29
+ #: ../operations/core/crop.c:26
+ msgid "Y"
+ msgstr "Y"
+ 
+ #: ../operations/common/dropshadow.c:29
+-msgid "Vertical shadow offset."
+-msgstr "Navpični odmik sence."
+-
+-#: ../operations/common/dropshadow.c:31
+-msgid "Blur radius."
+-msgstr "Polmer zabrisa."
++msgid "Vertical shadow offset"
++msgstr "Navpični odmik sence"
+ 
+ #: ../operations/common/dropshadow.c:82
+-msgid "Creates a dropshadow effect on the input buffer."
+-msgstr ""
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr "Ustvari učinek padle sence na vhodnem medpomnilniku"
+ 
+-#: ../operations/common/edge-laplace.c:245
++#: ../operations/common/edge-laplace.c:521
+ msgid "High-resolution edge detection"
+ msgstr "Razpoznava robov visoke ločljivosti"
+ 
+@@ -565,7 +658,7 @@ msgstr "Navpično"
+ msgid "Keep Signal"
+ msgstr "Ohrani signal"
+ 
+-#: ../operations/common/edge-sobel.c:203
++#: ../operations/common/edge-sobel.c:352
+ msgid "Specialized direction-dependent edge detection"
+ msgstr "Specializirana razpoznava robov v odvisnosti od smeri"
+ 
+@@ -574,33 +667,31 @@ msgid "Exposure Values"
+ msgstr "Vrednosti ekspozicije"
+ 
+ #: ../operations/common/exp-combine.c:26
+-#, fuzzy
+ msgid "Relative brightness of each exposure in EV"
+ msgstr "Relativna svetlost vsake ekspozicije v EV"
+ 
+ #: ../operations/common/exp-combine.c:27
+-#, fuzzy
+ msgid "Discretization Bits"
+-msgstr "Širina cilja"
++msgstr "Diskretizacijski biti"
+ 
+ #: ../operations/common/exp-combine.c:29
+ msgid "Log2 of source's discretization steps"
+-msgstr ""
++msgstr "Log2 diskretizacijskih korakov izvora"
+ 
+ #: ../operations/common/exp-combine.c:30
+-#, fuzzy
+ msgid "Weight Sigma"
+ msgstr "Sigma teže"
+ 
+ #: ../operations/common/exp-combine.c:32
+-msgid "Weight distrubtion sigma controlling response contributions"
+-msgstr ""
++msgid "Weight distribution sigma controlling response contributions"
++msgstr "Sigma porazdelitve uteži, ki nadzira prispevke odziva"
+ 
+ #: ../operations/common/exp-combine.c:1293
+ msgid "Combine multiple scene exposures into one high range buffer"
+-msgstr ""
++msgstr "Združi več ekspozicij prizorov v posamičen visokoobsežni medpomnilnik."
+ 
+ #: ../operations/common/fattal02.c:33
++#: ../operations/common/noise-rgb.c:37
+ #: ../operations/common/noise.c:25
+ #: ../operations/workshop/convolution-matrix.c:86
+ msgid "Alpha"
+@@ -608,7 +699,7 @@ msgstr "Alfa"
+ 
+ #: ../operations/common/fattal02.c:35
+ msgid "Gradient threshold for detail enhancement"
+-msgstr ""
++msgstr "Prag preliva za izboljševanje podrobnosti"
+ 
+ #: ../operations/common/fattal02.c:36
+ msgid "Beta"
+@@ -616,18 +707,19 @@ msgstr "Beta"
+ 
+ #: ../operations/common/fattal02.c:38
+ msgid "Strength of local detail enhancement"
+-msgstr ""
++msgstr "Jakost krajevnega izboljševanja podrobnosti"
+ 
+ #: ../operations/common/fattal02.c:39
+ #: ../operations/common/mantiuk06.c:34
++#: ../operations/common/noise-hsv.c:31
+ #: ../operations/workshop/color-rotate.c:50
+ msgid "Saturation"
+ msgstr "Nasičenost"
+ 
+ #: ../operations/common/fattal02.c:41
+ #: ../operations/common/mantiuk06.c:36
+-msgid "Global colour saturation factor"
+-msgstr ""
++msgid "Global color saturation factor"
++msgstr "Splošni faktor barvne nasičenosti"
+ 
+ #: ../operations/common/fattal02.c:42
+ msgid "Noise"
+@@ -635,18 +727,18 @@ msgstr "Šum"
+ 
+ #: ../operations/common/fattal02.c:44
+ msgid "Gradient threshold for lowering detail enhancement"
+-msgstr ""
++msgstr "Prag preliva za zniževanje izboljšave podrobnosti"
+ 
+ #: ../operations/common/fattal02.c:1325
+ msgid "Adapt an image, which may have a high dynamic range, for presentation using a low dynamic range. This operator attenuates the magnitudes of local image gradients, producing luminance within the range 0.0-1.0"
+-msgstr ""
++msgstr "Prilagodite sliko, ki ima morda visok obseg dinamike, za predstavitev z uporabo nizkega obsega dinamike. Ta operator slabi magnitude krajevnih prelivov slike in povzroči svetilnost v območju 0,0-1,0."
+ 
+ #: ../operations/common/fractal-explorer.c:35
+ msgid "Fractal type"
+ msgstr "Vrsta fraktala"
+ 
+ #: ../operations/common/fractal-explorer.c:35
+-msgid "Fractal Type"
++msgid "Type of a fractal"
+ msgstr "Vrsta fraktala"
+ 
+ #: ../operations/common/fractal-explorer.c:37
+@@ -711,7 +803,7 @@ msgstr "Način rdeče"
+ 
+ #: ../operations/common/fractal-explorer.c:55
+ msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
+-msgstr ""
++msgstr "Način uporabe rdeče (0:SIN; 1:COS; 2:BREZ)"
+ 
+ #: ../operations/common/fractal-explorer.c:56
+ msgid "Green mode"
+@@ -719,7 +811,7 @@ msgstr "Način modre"
+ 
+ #: ../operations/common/fractal-explorer.c:57
+ msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
+-msgstr ""
++msgstr "Način uporabe zelene (0:SIN; 1:COS; 2:BREZ)"
+ 
+ #: ../operations/common/fractal-explorer.c:58
+ msgid "Blue mode"
+@@ -727,7 +819,7 @@ msgstr "Način zelene"
+ 
+ #: ../operations/common/fractal-explorer.c:59
+ msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
+-msgstr ""
++msgstr "Način uporabe modre (0:SIN; 1:COS; 2:BREZ)"
+ 
+ #: ../operations/common/fractal-explorer.c:61
+ #: ../operations/common/fractal-explorer.c:62
+@@ -753,9 +845,8 @@ msgid "Number of colors"
+ msgstr "Število barv"
+ 
+ #: ../operations/common/fractal-explorer.c:71
+-#, fuzzy
+ msgid "Loglog smoothing"
+-msgstr "Uporabi prečno glajenje"
++msgstr "Prečno glajenje"
+ 
+ #: ../operations/common/fractal-explorer.c:72
+ msgid "Use loglog smoothing"
+@@ -771,7 +862,7 @@ msgstr "Velikost X"
+ 
+ #: ../operations/common/gaussian-blur.c:31
+ msgid "Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
+-msgstr ""
++msgstr "Standardna deviacija za vodoravno os (pomnožite z ~2 za polmer)."
+ 
+ #: ../operations/common/gaussian-blur.c:32
+ msgid "Size Y"
+@@ -779,15 +870,21 @@ msgstr "Velikost Y"
+ 
+ #: ../operations/common/gaussian-blur.c:33
+ msgid "Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
+-msgstr ""
++msgstr "Standardna deviacija za navpično os (pomnožite z ~2 za polmer)."
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:216
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filter"
+ 
+ #: ../operations/common/gaussian-blur.c:35
+ msgid "Optional parameter to override the automatic selection of blur filter. Choices are fir, iir, auto"
+-msgstr ""
++msgstr "Neobvezni parameter, ki preglasi samodejni izbor filtra zabrisanosti. Izbire so fir, iir in auto (samodejno)"
+ 
+-#: ../operations/common/gaussian-blur.c:496
+-msgid "Performs an averaging of neighbouring pixels with the normal distribution as weighting."
+-msgstr ""
++#: ../operations/common/gaussian-blur.c:731
++msgid "Performs an averaging of neighboring pixels with the normal distribution as weighting"
++msgstr "Izvede poprečenje soležnih slikovnih točk z normalno porazdelitvijo za uteževanje"
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:24
+ #: ../operations/common/gegl-buffer-save-op.c:24
+@@ -815,21 +912,21 @@ msgstr "Datoteka"
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:24
+ msgid "Path of GeglBuffer file to load."
+-msgstr ""
++msgstr "Pot datoteke GeglBuffer, ki naj se naloži."
+ 
+ #: ../operations/common/gegl-buffer-load-op.c:88
+ msgid "GeglBuffer file loader."
+-msgstr ""
++msgstr "Nalagalnik datotek GeglBuffer."
+ 
+ #: ../operations/common/gegl-buffer-save-op.c:24
+ msgid "Target file path to write GeglBuffer to."
+-msgstr ""
++msgstr "Pot ciljne datoteke za zapis GeglBuffer."
+ 
+ #: ../operations/common/gegl-buffer-save-op.c:62
+ msgid "GeglBuffer file writer."
+-msgstr ""
++msgstr "Zapisovalnik datotek GeglBuffer."
+ 
+-#: ../operations/common/grey.c:79
++#: ../operations/common/grey.c:104
+ msgid "Turns the image greyscale"
+ msgstr "Pretvori sliko v sivinsko"
+ 
+@@ -854,35 +951,68 @@ msgid "Color of the grid lines"
+ msgstr "Barva mrežnih črt"
+ 
+ #: ../operations/common/grid.c:129
+-#, fuzzy
+ msgid "Grid renderer"
+ msgstr "Upodobljevalnik mreže"
+ 
++#: ../operations/common/image-compare.c:26
++msgid "Wrong pixels"
++msgstr "Napačne slikovne točke"
++
++#: ../operations/common/image-compare.c:26
++msgid "Number of differing pixels."
++msgstr "Število razlikujočih se slikovnih točk."
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference"
++msgstr "Največja razlika"
++
++#: ../operations/common/image-compare.c:27
++msgid "Maximum difference between two pixels."
++msgstr "Največja razlika med dvema slikovnima točkama."
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference (wrong)"
++msgstr "Povprečna razlika (napačno)"
++
++#: ../operations/common/image-compare.c:28
++msgid "Average difference between wrong pixels."
++msgstr "Povprečna razlika med napačnima slikovnima točkama."
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference (total)"
++msgstr "Povprečna razlika (skupaj)"
++
++#: ../operations/common/image-compare.c:29
++msgid "Average difference between all pixels."
++msgstr "Povprečna razlika med vsemi slikovnimi točkami."
++
++#: ../operations/common/image-compare.c:177
++msgid "Compares if input and aux buffers are different. Results are saved in the properties."
++msgstr "Primerja, če se medpomnilnika vhoda in izhoda razlikujeta. Rezultati so shranjeni v nastavitvah."
++
+ #: ../operations/common/introspect.c:26
+ msgid "Node"
+ msgstr "Vozlišče"
+ 
+ #: ../operations/common/introspect.c:26
+-#, fuzzy
+ msgid "GeglNode to introspect"
+-msgstr "Presečišče vodil"
++msgstr "GeglNode za introspekcijo"
+ 
+ #: ../operations/common/introspect.c:160
+ msgid "GEGL graph visualizer."
+-msgstr ""
++msgstr "Vizualizator grafikonov GEGL."
+ 
+-#: ../operations/common/invert.c:130
++#: ../operations/common/invert.c:86
+ msgid "Inverts the components (except alpha), the result is the corresponding \"negative\" image."
+-msgstr ""
++msgstr "Preobrne komponente (razen alfe), rezultat je ustrezna \"negativna\" slika."
+ 
+ #: ../operations/common/layer.c:30
+ msgid "Operation"
+ msgstr "Operacija"
+ 
+ #: ../operations/common/layer.c:31
+-#, fuzzy
+ msgid "Composite operation to use"
+-msgstr "Dejanja orodja se pripnejo na vodila"
++msgstr "Operacija sestavljanja, ki jo želite uporabiti"
+ 
+ #: ../operations/common/layer.c:35
+ #: ../operations/common/rectangle.c:30
+@@ -895,14 +1025,15 @@ msgid "Vertical position"
+ msgstr "Navpični položaj"
+ 
+ #: ../operations/common/layer.c:38
+-#, fuzzy
+-msgid "scale"
+-msgstr "Merilo"
++#: ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Spremeni merilo"
+ 
+ #: ../operations/common/layer.c:39
+-#, fuzzy
+ msgid "Scale 1:1 size"
+-msgstr "Sprememba merila 1:1"
++msgstr "Sprememba velikosti 1:1"
+ 
+ #: ../operations/common/layer.c:40
+ msgid "Source"
+@@ -910,10 +1041,10 @@ msgstr "Vir"
+ 
+ #: ../operations/common/layer.c:41
+ msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
+-msgstr ""
++msgstr "Izvorna podatkovna datoteka (png, jpg, raw, svg, bmp, tif, ...)"
+ 
+ #: ../operations/common/layer.c:267
+-msgid "A layer in the traditional sense."
++msgid "A layer in the traditional sense"
+ msgstr "Plast v klasičnem pomenu."
+ 
+ #: ../operations/common/lens-distortion.c:33
+@@ -961,28 +1092,26 @@ msgstr "Odmik Y:"
+ msgid "Shift vertical"
+ msgstr "Zamakni navpično"
+ 
+-#: ../operations/common/lens-distortion.c:321
++#: ../operations/common/lens-distortion.c:338
+ #: ../operations/workshop/external/lens-correct.c:476
+ msgid "Copies image performing lens distortion correction."
+-msgstr ""
++msgstr "Kopira sliko s korekcijo popačenja objektiva."
+ 
+ #: ../operations/common/levels.c:26
+ msgid "Low input"
+ msgstr "Nizka vhodna vrednost"
+ 
+ #: ../operations/common/levels.c:27
+-#, fuzzy
+ msgid "Input luminance level to become lowest output"
+-msgstr "Spremeni barve v dvobarvno paleto"
++msgstr "Raven vhodne svetilnosti, ki bo postala najnižja izhodna."
+ 
+ #: ../operations/common/levels.c:28
+ msgid "High input"
+ msgstr "Visoka vhodna vrednost"
+ 
+ #: ../operations/common/levels.c:29
+-#, fuzzy
+ msgid "Input luminance level to become white."
+-msgstr "Spremeni barve v dvobarvno paleto"
++msgstr "Raven vhodne svetilnosti, ki bo postala bela."
+ 
+ #: ../operations/common/levels.c:30
+ msgid "Low output"
+@@ -990,7 +1119,7 @@ msgstr "Nizka izhodna vrednost"
+ 
+ #: ../operations/common/levels.c:31
+ msgid "Lowest luminance level in output"
+-msgstr ""
++msgstr "Najnižja raven svetilnosti v izhodu"
+ 
+ #: ../operations/common/levels.c:32
+ msgid "High output"
+@@ -998,12 +1127,11 @@ msgstr "Visoka izhodna vrednost"
+ 
+ #: ../operations/common/levels.c:33
+ msgid "Highest luminance level in output"
+-msgstr ""
++msgstr "Najvišja raven svetilnosti v izhodu"
+ 
+-#: ../operations/common/levels.c:103
+-#, fuzzy
++#: ../operations/common/levels.c:198
+ msgid "Remaps the intensity range of the image"
+-msgstr "Nastavi velikost plasti glede na velikost slike"
++msgstr "Preslika obseg intenzivnosti slike"
+ 
+ #: ../operations/common/load.c:25
+ #: ../operations/common/magick-load.c:26
+@@ -1016,29 +1144,28 @@ msgid "Path of file to load."
+ msgstr "Pot datoteke, ki jo želite naložiti."
+ 
+ #: ../operations/common/load.c:180
+-msgid "Multipurpose file loader, that uses other native handlers, and fallback conversion using image magick's convert."
+-msgstr ""
++msgid "Multipurpose file loader, that uses other native handlers, and fallback conversion using Image Magick's convert."
++msgstr "Večnamenski nalagalnik datotek, ki uporablja druge domorodne ročice in povratno pretvorbo s funkcijo pretvarjanja programa Magick."
+ 
+ #: ../operations/common/magick-load.c:136
+ msgid "Image Magick wrapper using the png op."
+-msgstr ""
++msgstr "Ovojnik Image Magick, ki uporablja op png."
+ 
+ #: ../operations/common/mantiuk06.c:33
+ msgid "The amount of contrast compression"
+ msgstr "Mera stiskanja kontrasta"
+ 
+ #: ../operations/common/mantiuk06.c:37
+-#, fuzzy
+ msgid "Detail"
+-msgstr "Podrobno"
++msgstr "Podrobnost"
+ 
+ #: ../operations/common/mantiuk06.c:39
+ msgid "Level of emphasis on image gradient details"
+-msgstr ""
++msgstr "Raven poudarjanja podrobnosti prelivov slike"
+ 
+ #: ../operations/common/mantiuk06.c:1639
+ msgid "Adapt an image, which may have a high dynamic range, for presentation using a low dynamic range. This operator constrains contrasts across multiple spatial frequencies, producing luminance within the range 0.0-1.0"
+-msgstr ""
++msgstr "Priredite sliko, ki ima morda visok obseg dinamike, za predstavitev z uporabo nizkega obsega dinamike. Ta operator omeji kontraste prek več prostorskih frekvenc in izdela svetilnost v območju 0,0-1,0."
+ 
+ #: ../operations/common/map-absolute.c:22
+ #: ../operations/common/map-relative.c:26
+@@ -1050,12 +1177,15 @@ msgstr "Vzorčevalnik"
+ 
+ #: ../operations/common/map-absolute.c:23
+ #: ../operations/common/map-relative.c:27
+-msgid "Sampler used internaly"
++#: ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42
++#: ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
+ msgstr "Notranje uporabljeni vzorčevalnik"
+ 
+ #: ../operations/common/map-absolute.c:148
+ msgid "sample input with an auxiliary buffer that contain absolute source coordinates"
+-msgstr ""
++msgstr "Vzorči vhod s pomožnim medpomnilnikom, ki vsebuje absolutne izvorne koordinate"
+ 
+ #: ../operations/common/map-relative.c:23
+ msgid "Scaling"
+@@ -1063,89 +1193,31 @@ msgstr "Spreminjanje merila"
+ 
+ #: ../operations/common/map-relative.c:24
+ msgid "scaling factor of displacement, indicates how large spatial displacement a relative mapping value of 1.0 corresponds to."
+-msgstr ""
++msgstr "Faktor spremembe merila razmestitve, nakaže, v kakšni meri prostorska razmestitev ustreza relativni vrednosti preslikave 1,0."
+ 
+-#: ../operations/common/map-relative.c:156
++#: ../operations/common/map-relative.c:173
+ msgid "sample input with an auxiliary buffer that contain relative source coordinates"
+-msgstr ""
++msgstr "Vzorči vhod s pomožnim medpomnilnikom, ki vsebuje relativne izvorne koordinate"
+ 
+-#: ../operations/common/matting-global.c:25
+-#: ../operations/external/matting-levin.c:25
+-msgid "Epsilon"
+-msgstr "Epsilon"
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr "Število ponovitev"
+ 
+-#: ../operations/common/matting-global.c:27
+-#: ../operations/external/matting-levin.c:27
+-msgid "Log of the error weighting"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:30
+-#: ../operations/external/matting-levin.c:30
+-msgid "Radius of the processing window"
+-msgstr "Polmer obdelovalnega okna"
+-
+-#: ../operations/common/matting-global.c:31
+-#: ../operations/common/threshold.c:25
+-#: ../operations/external/matting-levin.c:31
+-#: ../operations/workshop/color-rotate.c:54
+-#: ../operations/workshop/red-eye-removal.c:31
+-msgid "Threshold"
+-msgstr "Prag"
+-
+-#: ../operations/common/matting-global.c:33
+-#: ../operations/external/matting-levin.c:33
+-msgid "Alpha threshold for multilevel processing"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:34
+-#: ../operations/external/matting-levin.c:34
+-msgid "Lambda"
+-msgstr "Lambda"
+-
+-#: ../operations/common/matting-global.c:35
+-#: ../operations/external/matting-levin.c:35
+-msgid "Trimap influence factor"
+-msgstr ""
+-
+-#: ../operations/common/matting-global.c:36
+-#: ../operations/common/posterize.c:25
+-#: ../operations/external/matting-levin.c:36
+-msgid "Levels"
+-msgstr "Ravni"
+-
+-#: ../operations/common/matting-global.c:38
+-#: ../operations/external/matting-levin.c:38
+-#, fuzzy
+-msgid "Number of downsampled levels to use"
+-msgstr "Število možnih razveljavljavitev:"
+-
+-#: ../operations/common/matting-global.c:39
+-#: ../operations/external/matting-levin.c:39
+-msgid "Active Levels"
+-msgstr "Aktivne ravni"
+-
+-#: ../operations/common/matting-global.c:41
+-#: ../operations/external/matting-levin.c:41
+-msgid "Number of levels to perform solving"
+-msgstr "Število ravni, na katerih se izvaja reševanje"
+-
+-#: ../operations/common/matting-global.c:554
+-#: ../operations/external/matting-levin.c:1428
+-msgid "Given a sparse user supplied tri-map and an input image, create a foreground alpha mat. Set white as selected, black as unselected, for the tri-map."
+-msgstr ""
++#: ../operations/common/matting-global.c:482
++msgid "Given a sparse user supplied tri-map and an input image, create a foreground alpha matte. Set white as foreground, black as background for the tri-map. Everything else will be treated as unknown and filled in."
++msgstr "Z uporabniško podano redko posejanim trojnim zemljevidom in vhodno sliko ustvari ospredje alfe brez leska. Za trojni zemljevid nastavite belo kot izbrano in črno kot neizbrano. Vse drugo bo obravnavano kot neznano in bo posledično zapolnjeno."
+ 
+ #: ../operations/common/mblur.c:25
+-#, fuzzy
+ msgid "Dampness"
+-msgstr "Ovlaži"
++msgstr "Dušenje"
+ 
+ #: ../operations/common/mblur.c:26
+ msgid "The value represents the contribution of the past to the new frame."
+-msgstr ""
++msgstr "Vrednost predstavlja prispevek preteklosti novi sličici."
+ 
+ #: ../operations/common/mblur.c:144
+ msgid "Accumulating motion blur"
+-msgstr ""
++msgstr "Kumulativna zabrisanost gibanja"
+ 
+ #: ../operations/common/mirrors.c:30
+ msgid "Mirror rotation"
+@@ -1173,11 +1245,11 @@ msgstr "Število uporabljenih zrcal"
+ 
+ #: ../operations/common/mirrors.c:36
+ msgid "X offset of the result of mirroring"
+-msgstr ""
++msgstr "Odmik X rezultata zrcaljenja"
+ 
+ #: ../operations/common/mirrors.c:38
+ msgid "Y offset of the result of mirroring"
+-msgstr ""
++msgstr "Odmik Y rezultata zrcaljenja"
+ 
+ #: ../operations/common/mirrors.c:40
+ msgid "Center X"
+@@ -1185,7 +1257,7 @@ msgstr "Središče X"
+ 
+ #: ../operations/common/mirrors.c:40
+ msgid "X axis ratio for the center of mirroring"
+-msgstr ""
++msgstr "Razmerje osi X za središče zrcaljenja"
+ 
+ #: ../operations/common/mirrors.c:42
+ msgid "Center Y"
+@@ -1193,75 +1265,59 @@ msgstr "Središče Y"
+ 
+ #: ../operations/common/mirrors.c:42
+ msgid "Y axis ratio for the center of mirroring"
+-msgstr ""
++msgstr "Razmerje osi Y za središče zrcaljenja"
+ 
+ #: ../operations/common/mirrors.c:44
+ msgid "Trim X"
+-msgstr ""
++msgstr "Pristriži X"
+ 
+ #: ../operations/common/mirrors.c:44
+ msgid "X axis ratio for trimming mirror expanse"
+-msgstr ""
++msgstr "Razmerje osi X za porezavo razširjenosti zrcaljenja"
+ 
+ #: ../operations/common/mirrors.c:46
+ msgid "Trim Y"
+-msgstr ""
++msgstr "Pristriži Y"
+ 
+ #: ../operations/common/mirrors.c:46
+ msgid "Y axis ratio for trimming mirror expanse"
+-msgstr ""
++msgstr "Razmerje osi Y za porezavo razširjenosti zrcaljenja"
+ 
+ #: ../operations/common/mirrors.c:48
+-#, fuzzy
+ msgid "Zoom"
+-msgstr ""
+-"#-#-#-#-#  dia.master.sl.po (dia)  #-#-#-#-#\n"
+-"Povečava\n"
+-"#-#-#-#-#  gimp-gap.master.sl.po (Gimp-gap 2.8)  #-#-#-#-#\n"
+-"Povečaj\n"
+-"#-#-#-#-#  gimp-help-2.gimp-keys.master.sl.po (Gimp Help 2 - Keys)  #-#-#-#-#\n"
+-"Povečava\n"
+-"#-#-#-#-#  gimp-plug-ins.master.sl.po (GIMP - standardni vtičniki)  #-#-#-#-#\n"
+-"Povečava\n"
+-"#-#-#-#-#  gimp.master.sl.po (GIMP 2.8)  #-#-#-#-#\n"
+-"Povečava\n"
+-"#-#-#-#-#  inkscape-sl.po (Inkscape 0.48.2)  #-#-#-#-#\n"
+-"Povečava"
++msgstr "Povečava"
+ 
+ #: ../operations/common/mirrors.c:48
+ #: ../operations/common/mirrors.c:50
+ msgid "Scale factor to make rendering size bigger"
+-msgstr ""
++msgstr "Faktor spremembe merila, ki poveča velikost izrisa"
+ 
+ #: ../operations/common/mirrors.c:50
+ msgid "Expand"
+ msgstr "Razširi"
+ 
+ #: ../operations/common/mirrors.c:52
+-#, fuzzy
+ msgid "Clip result"
+-msgstr "Obreži do rezultata"
++msgstr "Poreži rezultat"
+ 
+ #: ../operations/common/mirrors.c:52
+ msgid "Clip result to input size"
+-msgstr ""
++msgstr "Poreži rezultat na velikost vhoda"
+ 
+ #: ../operations/common/mirrors.c:54
+-#, fuzzy
+ msgid "Wrap input"
+-msgstr "Ročni vnos"
++msgstr "Ovij vnos"
+ 
+ #: ../operations/common/mirrors.c:54
+-#, fuzzy
+ msgid "Fill full output area"
+-msgstr "Zapolni sklenjeno območje"
++msgstr "Zapolni celotno izhodno območje"
+ 
+ #: ../operations/common/mirrors.c:401
+-#, fuzzy
+ msgid "Applies mirroring effect on the image."
+-msgstr "Sliki doda različne osvetlitvene učinke"
++msgstr "Sliki doda učinek zrcaljenja."
+ 
+ #: ../operations/common/mono-mixer.c:26
++#: ../operations/common/noise-rgb.c:31
+ #: ../operations/workshop/convolution-matrix.c:83
+ msgid "Red"
+ msgstr "Rdeča"
+@@ -1271,6 +1327,7 @@ msgid "Amount of red"
+ msgstr "Količina rdeče"
+ 
+ #: ../operations/common/mono-mixer.c:28
++#: ../operations/common/noise-rgb.c:33
+ #: ../operations/workshop/convolution-matrix.c:84
+ msgid "Green"
+ msgstr "Zelena"
+@@ -1280,6 +1337,7 @@ msgid "Amount of green"
+ msgstr "Količina zelene"
+ 
+ #: ../operations/common/mono-mixer.c:30
++#: ../operations/common/noise-rgb.c:35
+ #: ../operations/workshop/convolution-matrix.c:85
+ msgid "Blue"
+ msgstr "Modra"
+@@ -1288,7 +1346,7 @@ msgstr "Modra"
+ msgid "Amount of blue"
+ msgstr "Količina modre"
+ 
+-#: ../operations/common/mono-mixer.c:108
++#: ../operations/common/mono-mixer.c:104
+ msgid "Monochrome channel mixer"
+ msgstr "Monokromatični mešalnik kanalov"
+ 
+@@ -1298,7 +1356,7 @@ msgstr "Dolžina"
+ 
+ #: ../operations/common/motion-blur.c:28
+ msgid "Length of blur in pixels"
+-msgstr ""
++msgstr "Dolžina zabrisanosti v slikovnih točkah"
+ 
+ #: ../operations/common/motion-blur.c:29
+ #: ../operations/common/ripple.c:36
+@@ -1309,98 +1367,215 @@ msgstr "Kot"
+ msgid "Angle of blur in degrees"
+ msgstr "Kot zabrisanosti v stopinjah"
+ 
+-#: ../operations/common/motion-blur.c:174
+-#, fuzzy
++#: ../operations/common/motion-blur.c:349
+ msgid "Linear motion blur"
+ msgstr "Linearna zabrisanost gibanja"
+ 
+-#: ../operations/common/noise.c:27
+-#: ../operations/common/unsharp-mask.c:26
+-#: ../operations/workshop/external/lens-correct.c:43
+-#, fuzzy
+-msgid "Scale"
+-msgstr ""
+-"#-#-#-#-#  dia.master.sl.po (dia)  #-#-#-#-#\n"
+-"Povečaj/pomanjšaj\n"
+-"#-#-#-#-#  gimp-help-2.gimp-keys.master.sl.po (Gimp Help 2 - Keys)  #-#-#-#-#\n"
+-"Spremeni merilo\n"
+-"#-#-#-#-#  gimp-help-2.toolbox~transform.master.sl.po (GIMP Help 2 - Toolbox Transform)  #-#-#-#-#\n"
+-"Spremeni merilo\n"
+-"#-#-#-#-#  gimp.master.sl.po (GIMP 2.8)  #-#-#-#-#\n"
+-"Spremeni merilo\n"
+-"#-#-#-#-#  inkscape-sl.po (Inkscape 0.48.2)  #-#-#-#-#\n"
+-"Spremeni velikost"
++#: ../operations/common/noise-cielch.c:25
++#: ../operations/common/noise-hsv.c:27
++msgid "Holdness"
++msgstr "Strnjenost"
+ 
+-#: ../operations/common/noise.c:29
+-msgid "Z offset"
+-msgstr "Odmik Z"
++#: ../operations/common/noise-cielch.c:27
++msgid "Lightness"
++msgstr "Svetlost"
++
++#: ../operations/common/noise-cielch.c:29
++msgid "Chroma"
++msgstr "Kroma"
++
++#: ../operations/common/noise-cielch.c:31
++#: ../operations/common/noise-hsv.c:29
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr "Obarvanost"
+ 
++#: ../operations/common/noise-cielch.c:160
++#| msgid "Randomize lightness/chroma/hue independently"
++msgid "Randomize lightness, chroma and hue independently"
++msgstr "Neodvisna naključnost svetlosti, krome in obarvanosti"
++
++#: ../operations/common/noise-hsv.c:33
++#: ../operations/common/weighted-blend.c:25
++#: ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29
++#: ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29
++#: ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Vrednost"
++
++#: ../operations/common/noise-hsv.c:164
++#| msgid "Randomize hue/saturation/value independently"
++msgid "Randomize hue, saturation and value independently"
++msgstr "Neodvisna naključnost obarvanosti, nasičenosti in vrednosti"
++
++#: ../operations/common/noise-hurl.c:30
++#: ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33
+ #: ../operations/common/noise.c:31
++#: ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33
+ #: ../operations/workshop/cubism.c:34
+ #: ../operations/workshop/plasma.c:33
+ msgid "Seed"
+ msgstr "Zasadi"
+ 
++#: ../operations/common/noise-hurl.c:30
++#: ../operations/common/noise-pick.c:30
++#: ../operations/common/noise-slur.c:33
++#: ../operations/common/shift.c:29
++#: ../operations/common/wind.c:33
++#: ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr "Naključno seme"
++
++#: ../operations/common/noise-hurl.c:32
++#: ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization (%)"
++msgstr "Naključnost (%)"
++
++#: ../operations/common/noise-hurl.c:32
++#: ../operations/common/noise-pick.c:32
++#: ../operations/common/noise-slur.c:35
++msgid "Randomization"
++msgstr "Naključnost"
++
++#: ../operations/common/noise-hurl.c:34
++#: ../operations/common/noise-pick.c:34
++#: ../operations/common/noise-slur.c:37
++msgid "Repeat"
++msgstr "Ponovi"
++
++#: ../operations/common/noise-hurl.c:135
++msgid "Completely randomize a fraction of pixels"
++msgstr "Povsem naključen lom slikovnih točk"
++
++#: ../operations/common/noise-pick.c:192
++msgid "Randomly interchange some pixels with neighbors"
++msgstr "Naključno izmenjaj nekaj slikovnih točk s sosednjimi"
++
++#: ../operations/common/noise-reduction.c:26
++#: ../operations/common/wind.c:30
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Jakost"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr "S koliko ponovitvami naj se izvede algoritem"
++
++#: ../operations/common/noise-rgb.c:27
++msgid "Correlated noise"
++msgstr "Korelacijski šum"
++
++#: ../operations/common/noise-rgb.c:29
++msgid "Independent RGB"
++msgstr "Neodvisni RGB"
++
++#: ../operations/common/noise-rgb.c:164
++msgid "Distort colors by random amounts."
++msgstr "Popači barve z naključnimi vrednostmi."
++
++#: ../operations/common/noise-slur.c:178
++msgid "Randomly slide some pixels downward (similar to melting)"
++msgstr "Naključno porini nekaj slikovnih točk navzdol (podobno taljenju)"
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr "Odmik Z"
++
+ #: ../operations/common/noise.c:33
+ msgid "Iteration"
+ msgstr "Ponovitve"
+ 
+ #: ../operations/common/noise.c:111
+ msgid "Perlin noise generator"
+-msgstr ""
++msgstr "Ustvarjalnik Perlinovega šuma"
+ 
+-#: ../operations/common/noise-reduction.c:21
+-#: ../operations/workshop/warp.c:26
+-msgid "Strength"
+-msgstr "Jakost"
++#: ../operations/common/oilify.c:27
++#: ../operations/common/photocopy.c:25
++#: ../operations/common/photocopy.c:26
++msgid "Mask Radius"
++msgstr "Polmer maske"
+ 
+-#: ../operations/common/noise-reduction.c:21
+-msgid "How many iteratarions to run the algorithm with"
+-msgstr ""
++#: ../operations/common/oilify.c:28
++msgid "Radius of circle around pixel"
++msgstr "Polmer kroga okoli slik. točke"
++
++#: ../operations/common/oilify.c:30
++#: ../operations/common/oilify.c:31
++msgid "Exponent"
++msgstr "Eksponentno"
++
++#: ../operations/common/oilify.c:33
++msgid "Intensity Mode"
++msgstr "Način intenzivnosti"
++
++#: ../operations/common/oilify.c:34
++msgid "Use pixel luminance values"
++msgstr "Uporabi vrednosti svetlosti slik. točk"
++
++#: ../operations/common/oilify.c:309
++msgid "Emulate an oil painting"
++msgstr "Emuliraj oljno sliko"
+ 
+ #: ../operations/common/opacity.c:25
+ msgid "Global opacity value that is always used on top of the optional auxiliary input buffer."
+-msgstr ""
++msgstr "Splošna raven prekrivnosti, ki je vedno uporabljan na vrhu neobveznega pomožnega vhodnega medpomnilnika."
+ 
+-#: ../operations/common/opacity.c:224
++#: ../operations/common/opacity.c:153
+ msgid "Weights the opacity of the input both the value of the aux input and the global value property."
+-msgstr ""
++msgstr "Uteži prekrivnost vhoda tako z vrednostjo pomožnega vhoda kot s splošno lastnostjo vrednosti"
+ 
+ #: ../operations/common/open-buffer.c:25
+ msgid "a GeglBuffer on disk to open"
+-msgstr ""
++msgstr "GeglBuffer na disku za odpiranje"
+ 
+ #: ../operations/common/open-buffer.c:130
+ msgid "A source that uses an on-disk GeglBuffer."
+-msgstr ""
++msgstr "Vir, ki uporablja GeglBuffer na disku."
+ 
+-#: ../operations/common/over.c:200
++#: ../operations/common/over.c:153
+ msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
+-msgstr ""
++msgstr "Operacija Porter Duff over (d = cA + cB * (1 - aA))"
+ 
+-#: ../operations/common/pixelize.c:25
+-#, fuzzy
+-msgid "Block Width"
+-msgstr "Blok 7"
++#: ../operations/common/photocopy.c:28
++#: ../operations/common/photocopy.c:29
++#: ../operations/common/softglow.c:29
++msgid "Sharpness"
++msgstr "Ostrina"
++
++#: ../operations/common/photocopy.c:31
++#: ../operations/common/photocopy.c:32
++msgid "Percent Black"
++msgstr "Odstotek črne"
++
++#: ../operations/common/photocopy.c:34
++#: ../operations/common/photocopy.c:35
++msgid "Percent White"
++msgstr "Odstotek bele"
++
++#: ../operations/common/photocopy.c:395
++msgid "Photocopy effect"
++msgstr "Učinek fotokopiranja"
+ 
+ #: ../operations/common/pixelize.c:26
+-#, fuzzy
+ msgid "Width of blocks in pixels"
+-msgstr "Širina izhodnega videa (v slikovnih točkah)"
++msgstr "Širina blokov v slikovnih točkah"
+ 
+ #: ../operations/common/pixelize.c:27
+-#, fuzzy
+ msgid "Block Height"
+-msgstr "Neonska črna luč"
++msgstr "Višina bloka"
+ 
+ #: ../operations/common/pixelize.c:28
+-#, fuzzy
+ msgid "Height of blocks in pixels"
+-msgstr "Višina izhodnega videa (v slikovnih točkah)"
++msgstr "Višina blokov v slikovnih točkah"
+ 
+-#: ../operations/common/pixelize.c:182
++#: ../operations/common/pixelize.c:338
+ msgid "Simplify image into an array of solid-colored squares"
+-msgstr ""
++msgstr "Poenostavi sliko v matriko prekrivno zapolnjenih kvadratov"
+ 
+ #: ../operations/common/polar-coordinates.c:34
+ #: ../operations/common/polar-coordinates.c:35
+@@ -1419,21 +1594,32 @@ msgstr "Kot odmika."
+ msgid "Map backwards"
+ msgstr "Poslikaj nazaj"
+ 
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr "Začni z desne namesto z leve"
++
+ #: ../operations/common/polar-coordinates.c:39
+ msgid "Map from top"
+ msgstr "Poslikaj z vrha"
+ 
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr "Postavi vrhnjo vrstico na sredo in spodnjo vrstico izven"
++
+ #: ../operations/common/polar-coordinates.c:40
+ msgid "To polar"
+ msgstr "V polarne"
+ 
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr "Preslikaj sliko na krog"
++
+ #: ../operations/common/polar-coordinates.c:41
+ msgid "X:"
+ msgstr "X:"
+ 
+ #: ../operations/common/polar-coordinates.c:42
+ #: ../operations/common/polar-coordinates.c:44
+-#, fuzzy
+ msgid "Origin point for the polar coordinates"
+ msgstr "Izvorna točka za polarne koordinate"
+ 
+@@ -1442,18 +1628,21 @@ msgid "Y:"
+ msgstr "Y:"
+ 
+ #: ../operations/common/polar-coordinates.c:45
+-#, fuzzy
+ msgid "Choose middle"
+-msgstr "Izberite srednje"
++msgstr "Izberite srednjo"
+ 
+ #: ../operations/common/polar-coordinates.c:46
+ msgid "Let origin point to be the middle one"
+-msgstr ""
++msgstr "Naj bo izvorna točka osrednja točka"
+ 
+ #: ../operations/common/polar-coordinates.c:402
+-#, fuzzy
+ msgid "Performs polar-coordinates on the image."
+-msgstr "Nastavite barvni profil slike"
++msgstr "Na sliki izvede polarne koordinate."
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Ravni"
+ 
+ #: ../operations/common/posterize.c:26
+ msgid "number of levels per component"
+@@ -1461,62 +1650,55 @@ msgstr "Število ravni na komponento"
+ 
+ #: ../operations/common/posterize.c:82
+ msgid "Reduces the number of levels in each color component of the image."
+-msgstr ""
++msgstr "Zmanjša število ravni v vsaki barvni komponenti slike."
+ 
+ #: ../operations/common/raw-load.c:183
+ msgid "Raw image loader, wrapping dcraw with pipes."
+-msgstr ""
++msgstr "Nalagalnik surovih slik, zaobjemanje dcraw s cevovodi."
+ 
+ #: ../operations/common/rectangle.c:34
+-#, fuzzy
+ msgid "Horizontal extent"
+-msgstr "Vodoravno besedilo"
++msgstr "Vodoravni obseg"
+ 
+ #: ../operations/common/rectangle.c:36
+-#, fuzzy
+ msgid "Vertical extent"
+-msgstr "Navpično besedilo"
++msgstr "Navpični obseg"
+ 
+ #: ../operations/common/rectangle.c:38
+ msgid "Color to render"
+ msgstr "Barva, ki jo želite upodobiti"
+ 
+ #: ../operations/common/rectangle.c:134
+-#, fuzzy
+ msgid "A rectangular source of a fixed size with a solid color"
+-msgstr "Zapolni izbor z uporabo barve ospredja"
++msgstr "Pravokotni izvor nespremenljive velikosti prekrivne barve"
+ 
+ #: ../operations/common/reinhard05.c:29
+ msgid "Overall brightness of the image"
+ msgstr "Skupna svetlost slike"
+ 
+ #: ../operations/common/reinhard05.c:30
+-#, fuzzy
+ msgid "Chromatic Adaptation"
+-msgstr "Nasičenost kroma"
++msgstr "Kromatična priredba"
+ 
+ #: ../operations/common/reinhard05.c:32
+-#, fuzzy
+-msgid "Adapation to colour variation across the image"
+-msgstr "Uporabi barvni profil za sliko"
++msgid "Adaptation to color variation across the image"
++msgstr "Prilagajanje barvni variaciji po celi sliki"
+ 
+ #: ../operations/common/reinhard05.c:33
+-#, fuzzy
+ msgid "Light Adaptation"
+-msgstr "Smer luči"
++msgstr "Svetlobna priredba"
+ 
+ #: ../operations/common/reinhard05.c:35
+-#, fuzzy
+-msgid "Adapation to light variation across the image"
+-msgstr "Pomanjšaj svetlejša območja slike"
++msgid "Adaptation to light variation across the image"
++msgstr "Prilagajanje svetlobni variaciji po celi sliki"
+ 
+ #: ../operations/common/reinhard05.c:274
+ msgid "Adapt an image, which may have a high dynamic range, for presentation using a low dynamic range. This is an efficient global operator derived from simple physiological observations, producing luminance within the range 0.0-1.0"
+-msgstr ""
++msgstr "Prilagodite sliko, ki ima morda visok obseg dinamike, za predstavitev z uporabo nizkega obsega dinamike. To je učinkovit splošni operator, izveden iz enostavnih psiholoških opazovanj, ki izdela svetilnost v območju 0,0-1,0."
+ 
+ #: ../operations/common/remap.c:96
+ msgid "stretch components of pixels individually based on luminance envelopes"
+-msgstr ""
++msgstr "Posamično raztegne komponente slikovnih točk glede na ovojnice svetilnosti"
+ 
+ #: ../operations/common/ripple.c:27
+ #: ../operations/common/waves.c:32
+@@ -1526,7 +1708,7 @@ msgstr "Amplituda"
+ #: ../operations/common/ripple.c:28
+ #: ../operations/common/waves.c:33
+ msgid "Amplitude of the ripple"
+-msgstr ""
++msgstr "Amplituda valovanja"
+ 
+ #: ../operations/common/ripple.c:30
+ #: ../operations/common/waves.c:35
+@@ -1535,9 +1717,8 @@ msgstr "Perioda"
+ 
+ #: ../operations/common/ripple.c:31
+ #: ../operations/common/waves.c:36
+-#, fuzzy
+ msgid "Period of the ripple"
+-msgstr "Težnost pisala"
++msgstr "Perioda valov"
+ 
+ #: ../operations/common/ripple.c:33
+ #: ../operations/common/ripple.c:34
+@@ -1550,24 +1731,25 @@ msgstr "Fazni zamik"
+ msgid "Angle in degree"
+ msgstr "Kot v stopinjah"
+ 
+-#: ../operations/common/ripple.c:40
+-#: ../operations/common/waves.c:42
+-#: ../operations/workshop/ditto.c:28
+-msgid "Sampler used internally"
+-msgstr ""
+-
+-#: ../operations/common/ripple.c:42
++#: ../operations/common/ripple.c:47
+ msgid "Wave type"
+ msgstr "Vrsta valovanja"
+ 
+-#: ../operations/common/ripple.c:43
++#: ../operations/common/ripple.c:48
+ msgid "Type of wave"
+ msgstr "Vrsta valovanja"
+ 
+-#: ../operations/common/ripple.c:164
+-#, fuzzy
++#: ../operations/common/ripple.c:50
++msgid "Tileable"
++msgstr "Tlakovalnost"
++
++#: ../operations/common/ripple.c:51
++msgid "Retain tilebility"
++msgstr "Ohrani tlakovalnost"
++
++#: ../operations/common/ripple.c:175
+ msgid "Transform the buffer with a ripple pattern"
+-msgstr "Ustvari sliko, zapolnjeno z vrtinčastim vzorcem"
++msgstr "Preoblikuj medpomnilnik z valovitim vzorcem"
+ 
+ #: ../operations/common/save.c:25
+ msgid "Path of file to save."
+@@ -1575,7 +1757,27 @@ msgstr "Pot datoteke, ki jo želite shraniti."
+ 
+ #: ../operations/common/save.c:195
+ msgid "Multipurpose file saver, that uses other native handlers."
+-msgstr ""
++msgstr "Večnamenski shranjevalnik datotek, ki uporablja druge domorodne ročice."
++
++#: ../operations/common/shift.c:26
++msgid "Shift"
++msgstr "Odmik"
++
++#: ../operations/common/shift.c:27
++msgid "Maximum amount to shift"
++msgstr "Največja količina za odmik"
++
++#: ../operations/common/shift.c:36
++msgid "Direction"
++msgstr "Smer"
++
++#: ../operations/common/shift.c:37
++msgid "Shift direction"
++msgstr "Smer odmika"
++
++#: ../operations/common/shift.c:231
++msgid "Shift by a random number of pixels"
++msgstr "Odmik za naključno število slikovnih točk"
+ 
+ #: ../operations/common/snn-mean.c:28
+ #: ../operations/workshop/snn-percentile.c:29
+@@ -1584,27 +1786,35 @@ msgstr "Pari"
+ 
+ #: ../operations/common/snn-mean.c:29
+ msgid "Number of pairs; higher number preserves more acute features"
+-msgstr ""
++msgstr "Število parov; višje število ohrani bolj kritične lastnosti"
+ 
+-#: ../operations/common/snn-mean.c:228
++#: ../operations/common/snn-mean.c:436
+ msgid "Noise reducing edge enhancing blur filter based  on Symmetric Nearest Neighbours"
+-msgstr ""
++msgstr "Filter zabrisanosti za izboljšavo robov in zmanjševanje šuma, ki temelji na simetričnih najbližjih sosedih"
+ 
+-#: ../operations/common/stretch-contrast.c:162
+-msgid "Scales the components of the buffer to be in the 0.0-1.0 range. This improves images that make poor use of the available contrast (little contrast, very dark, or very bright images)."
+-msgstr ""
++#: ../operations/common/softglow.c:25
++msgid "Glow radius"
++msgstr "Polmer žarenja"
++
++#: ../operations/common/softglow.c:224
++msgid "Softglow effect"
++msgstr "Učinek mehkega žarenja"
+ 
+ #: ../operations/common/stress.c:28
+-msgid "Neighbourhood taken into account, for enhancement ideal values are close to the longest side of the image, increasing this increases the runtime."
+-msgstr ""
++msgid "Neighborhood taken into account, for enhancement ideal values are close to the longest side of the image, increasing this increases the runtime"
++msgstr "Soseščina je upoštevana, za izboljšavo so idealne vrednosti ob najdaljši stranici slike, s povečavo tega se povečuje čas izvajanja"
+ 
+ #: ../operations/common/stress.c:32
+-msgid "Number of iterations, a higher number of iterations provides a less noisy rendering at computational cost."
+-msgstr ""
++msgid "Number of iterations, a higher number of iterations provides a less noisy rendering at a computational cost"
++msgstr "Število ponavljanj, višje število ponavljanj ponuja manj šuma v rezultatih ob višjem strošku izračuna"
+ 
+ #: ../operations/common/stress.c:191
+-msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling."
+-msgstr ""
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr "Prostorsko časovna ovojnica, podobna Retinex, s stohastičnim vzorčenjem"
++
++#: ../operations/common/stretch-contrast.c:162
++msgid "Scales the components of the buffer to be in the 0.0-1.0 range. This improves images that make poor use of the available contrast (little contrast, very dark, or very bright images)."
++msgstr "Spremeni merilo komponent medpomnilnika, da ustrezajo obsegu 0,0-1,0. S tem se izboljšajo slike, ki slabo izkoriščajo kontrast, ki je na voljo (nizko kontrastne, zelo temne ali zelo svetle slike)."
+ 
+ #: ../operations/common/svg-huerotate.c:27
+ #: ../operations/common/svg-luminancetoalpha.c:27
+@@ -1617,160 +1827,144 @@ msgstr "Vrednosti"
+ #: ../operations/common/svg-luminancetoalpha.c:27
+ #: ../operations/common/svg-matrix.c:27
+ #: ../operations/common/svg-saturate.c:26
+-#, fuzzy
+ msgid "list of <number>s"
+-msgstr "Številka prosojnice"
++msgstr "seznam <številk>"
+ 
+ #: ../operations/common/svg-huerotate.c:116
+ msgid "SVG color matrix operation svg_huerotate"
+-msgstr ""
++msgstr "Operacija barvne matrike SVG svg_huerotate"
+ 
+ #: ../operations/common/svg-luminancetoalpha.c:95
+ msgid "SVG color matrix operation svg_luminancetoalpha"
+-msgstr ""
++msgstr "Operacija barvne matrike SVG svg_luminancetoalpha"
+ 
+ #: ../operations/common/svg-matrix.c:132
+ msgid "SVG color matrix operation svg_matrix"
+-msgstr ""
++msgstr "Operacija barvne matrike SVG svg_matrix"
+ 
+ #: ../operations/common/svg-saturate.c:127
+ msgid "SVG color matrix operation svg_saturate"
+-msgstr ""
++msgstr "Operacija barvne matrike SVG svg_saturate"
++
++#: ../operations/common/threshold.c:25
++#: ../operations/common/wind.c:26
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Prag"
+ 
+ #: ../operations/common/threshold.c:26
+ msgid "Global threshold level (used when there is no auxiliary input buffer)."
+-msgstr ""
++msgstr "Splošna raven praga (uporabljena, ko ni pomožnega vhodnega medpomnilnika)."
+ 
+-#: ../operations/common/threshold.c:192
++#: ../operations/common/threshold.c:123
+ msgid "Thresholds the image to white/black based on either the global value set in the value property, or per pixel from the aux input."
+-msgstr ""
++msgstr "Uporablja prag slike za belo/črno glede na nastavljeno splošno vrednost v lastnosti vrednosti ali glede na slikovno točko iz pomožnega vhoda."
+ 
+ #: ../operations/common/unsharp-mask.c:24
+-#, fuzzy
+ msgid "Std. Dev."
+-msgstr "Stan. dev."
++msgstr "Stand. dev."
+ 
+ #: ../operations/common/unsharp-mask.c:25
+ msgid "Standard deviation (spatial scale factor)"
+-msgstr ""
++msgstr "Standardna deviacija (faktor prostorske spremembe merila)"
+ 
+ #: ../operations/common/unsharp-mask.c:27
+-#, fuzzy
+ msgid "Scale, strength of effect"
+-msgstr "Učinek klika na miško"
++msgstr "Merilo, jakost ali učinek"
+ 
+ #: ../operations/common/unsharp-mask.c:73
+ msgid "Performs an unsharp mask on the input buffer (sharpens an image by adding false mach-bands around edges)"
+-msgstr ""
++msgstr "Izvede neostro masko na vhodnem medpomnilniku (izostri sliko z dodajanje lažnih Machovih trakov okoli robov)"
+ 
+-#: ../operations/common/value-invert.c:218
++#: ../operations/common/value-invert.c:190
+ msgid "Inverts just the value component, the result is the corresponding `inverted' image."
+-msgstr ""
++msgstr "Preobrne le komponento vrednosti, rezultat je ustrezna `reobrnjena' slika."
+ 
+-#: ../operations/common/vignette.c:23
+-#, fuzzy
++#: ../operations/common/vignette.c:24
+ msgid "Shape"
+-msgstr ""
+-"#-#-#-#-#  dia.master.sl.po (dia)  #-#-#-#-#\n"
+-"Oblikuj\n"
+-"#-#-#-#-#  gimp-gap.master.sl.po (Gimp-gap 2.8)  #-#-#-#-#\n"
+-"Oblika\n"
+-"#-#-#-#-#  gimp-script-fu.master.sl.po (GIMP 2.8 scriptfu)  #-#-#-#-#\n"
+-"Oblika\n"
+-"#-#-#-#-#  gimp-tiny-fu.master.sl.po (GIMP 2.8 scriptfu)  #-#-#-#-#\n"
+-"Oblika\n"
+-"#-#-#-#-#  gimp.master.sl.po (GIMP 2.8)  #-#-#-#-#\n"
+-"Oblika"
+-
+-#: ../operations/common/vignette.c:23
+-msgid "Shape to use: 0=circle 1=diamond 2=square"
+-msgstr ""
++msgstr "Lik"
+ 
+ #: ../operations/common/vignette.c:24
+-msgid "Defaults to 'black', you can use transparency here to erase portions of an image"
+-msgstr ""
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr "Lik, ki ga želite uporabiti: 0=krog, 1=karo, 2=kvadrat"
+ 
+ #: ../operations/common/vignette.c:25
+-msgid "How far out vignetting goes as portion of half image diagonal"
+-msgstr ""
++msgid "Defaults to 'black', you can use transparency here to erase portions of an image"
++msgstr "Privzeto črna ('black'), uporabite pa lahko prosojnost, da izbrišete dele slike"
+ 
+ #: ../operations/common/vignette.c:26
+-#, fuzzy
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr "Kako daleč sega vinjetiranje kot del polovične diagonale slike"
++
++#: ../operations/common/vignette.c:27
+ msgid "Softness"
+ msgstr "Mehkoba"
+ 
+-#: ../operations/common/vignette.c:27
++#: ../operations/common/vignette.c:28
+ msgid "Gamma"
+ msgstr "Gama"
+ 
+-#: ../operations/common/vignette.c:27
+-#, fuzzy
++#: ../operations/common/vignette.c:28
+ msgid "Falloff linearity"
+ msgstr "Linearnost upada"
+ 
+-#: ../operations/common/vignette.c:28
+-#, fuzzy
++#: ../operations/common/vignette.c:29
+ msgid "Proportion"
+ msgstr "Razmerje"
+ 
+-#: ../operations/common/vignette.c:28
+-#, fuzzy
++#: ../operations/common/vignette.c:29
+ msgid "How close we are to image proportions"
+-msgstr "Na voljo je pet možnosti:"
++msgstr "Kako blizu smo meram slike"
+ 
+-#: ../operations/common/vignette.c:29
++#: ../operations/common/vignette.c:30
+ msgid "Squeeze"
+-msgstr ""
++msgstr "Stisni"
+ 
+-#: ../operations/common/vignette.c:29
++#: ../operations/common/vignette.c:30
+ msgid "Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = inf:1, this is applied after proportion is taken into account, to directly use squeeze factor as proportions, set proportion to 0.0."
+-msgstr ""
++msgstr "Želeno razmerje stranic: -0,5 = 1:2, 0,0 = 1:1, 0,5 = 2:1, -1,0 = 1:nesk 1,0 = nesk:1, to se uveljavi, ko se upoštevajo mere; za neposredno rabo faktorja stiskanja kot mere, nastavite mere na 0,0."
+ 
+-#: ../operations/common/vignette.c:31
+-#, fuzzy
++#: ../operations/common/vignette.c:32
+ msgid "Horizontal center of vignetting"
+-msgstr "Vodoravna koordinata izbora"
++msgstr "Vodoravno središče vinjetiranja"
+ 
+-#: ../operations/common/vignette.c:32
+-#, fuzzy
++#: ../operations/common/vignette.c:33
+ msgid "Vertical center of vignetting"
+-msgstr "Navpična koordinata izbora"
++msgstr "Navpično središče vinjetiranja"
+ 
+-#: ../operations/common/vignette.c:33
++#: ../operations/common/vignette.c:34
+ msgid "Rotation"
+ msgstr "Sukanje"
+ 
+-#: ../operations/common/vignette.c:33
++#: ../operations/common/vignette.c:34
+ msgid "Rotation angle"
+ msgstr "Kot sukanja"
+ 
+-#: ../operations/common/vignette.c:220
++#: ../operations/common/vignette.c:386
+ msgid "A vignetting op, applies a vignette to an image. Simulates the luminance fall off at edge of exposed film, and some other fuzzier border effects that can naturally occur with analoge photograpy."
+-msgstr ""
++msgstr "Operacija vinjetiranja, na sliki uveljavi vinjetiranje. Simulira upad svetilnosti na robu osvetljenega filma in nekatere druge učinke nejasnega roba, ki se lahko naravno pojavijo pri analogni fotografiji."
+ 
+ #: ../operations/common/waves.c:27
+-#, fuzzy
+ msgid "X coordinate of the center of the waves"
+-msgstr "Koordinata X levih oglišč območja učinkovanja filtra"
++msgstr "Koordinata X središča valov"
+ 
+ #: ../operations/common/waves.c:30
+-#, fuzzy
+ msgid "Coordinate y of the center of the waves"
+-msgstr "Koordinata X levih oglišč območja učinkovanja filtra"
++msgstr "Koordinata Y središča valov"
+ 
+-#: ../operations/common/waves.c:164
+-#, fuzzy
+-msgid "Transform the buffer with waves"
+-msgstr "Popači sliko z valovi"
++#: ../operations/common/waves.c:44
++msgid "Clamp deformation"
++msgstr "Obrzdaj deformacijo"
+ 
+-#: ../operations/common/weighted-blend.c:25
+-#: ../operations/generated/add.c:29
+-#: ../operations/generated/divide.c:29
+-#: ../operations/generated/gamma.c:29
+-#: ../operations/generated/multiply.c:29
+-#: ../operations/generated/subtract.c:29
+-msgid "Value"
+-msgstr "Vrednost"
++#: ../operations/common/waves.c:45
++msgid "Limit deformation in the image area."
++msgstr "Omeji deformacijo v območju slike."
++
++#: ../operations/common/waves.c:169
++msgid "Transform the buffer with waves"
++msgstr "Preoblikuj medpomnilnik z valovi"
+ 
+ #: ../operations/common/weighted-blend.c:25
+ #: ../operations/generated/add.c:29
+@@ -1779,52 +1973,67 @@ msgstr "Vrednost"
+ #: ../operations/generated/multiply.c:29
+ #: ../operations/generated/subtract.c:29
+ msgid "global value used if aux doesn't contain data"
+-msgstr ""
++msgstr "Uporabljena splošna vrednost, če pomožni ne vsebuje podatkov"
+ 
+ #: ../operations/common/weighted-blend.c:124
+ msgid "blend two images using alpha values as weights"
+ msgstr "Združi dve sliki z uporabo alfa-vrednosti kot uteži"
+ 
++#: ../operations/common/wind.c:27
++msgid "Higher values restrict the effect to fewer areas of the image"
++msgstr "Višje vrednosti omejujejo učinek na manj območij slike"
++
++#: ../operations/common/wind.c:31
++msgid "Higher values increase the magnitude of the effect"
++msgstr "Višje vrednosti povečajo jakost učinka"
++
++#: ../operations/common/wind.c:367
++msgid "Wind-like bleed effect"
++msgstr "Učinek prelivanja, podoben vetru"
++
+ #: ../operations/common/write-buffer.c:26
+-#, fuzzy
+ msgid "Write to an existing GeglBuffer"
+ msgstr "Zapiši v obstoječi GeglBuffer"
+ 
++#: ../operations/common/write-buffer.c:28
++msgid "Flush buffer"
++msgstr "Počisti medpomnilnik"
++
++#: ../operations/common/write-buffer.c:29
++msgid "Flush buffer after writing"
++msgstr "Počisti medpomnilnik po pisanju"
++
+ #: ../operations/core/clone.c:25
+ msgid "Reference"
+ msgstr "Navezave"
+ 
+ #: ../operations/core/clone.c:26
+ msgid "The reference ID used as input (for use in XML)."
+-msgstr ""
++msgstr "Sklicni ID, uporabljen kot vhod (za uporabo v XML)."
+ 
+-#: ../operations/core/clone.c:112
+-#, fuzzy
++#: ../operations/core/clone.c:110
+ msgid "Clone a buffer"
+-msgstr "Kloniraj izravnalnik"
++msgstr "Kloniraj medpomnilnik"
+ 
+ #: ../operations/core/convert-format.c:28
+ msgid "Output format"
+ msgstr "Izhodni zapis"
+ 
+ #: ../operations/core/convert-format.c:29
+-#, fuzzy
+ msgid "Babl output format string"
+-msgstr "Oblikovanje podatkov"
++msgstr "Izhodna oblika niza Babl"
+ 
+ #: ../operations/core/convert-format.c:81
+-#, fuzzy
+ msgid "Convert the data to the specified format"
+-msgstr "Pretvori sliko v barvni prostor RGB"
++msgstr "Pretvori podatke v navedeno obliko"
+ 
+-#: ../operations/core/crop.c:179
+-#, fuzzy
++#: ../operations/core/crop.c:194
+ msgid "Crop a buffer"
+-msgstr "Obreži izravnalnik"
++msgstr "Obreži medpomnilnik"
+ 
+ #: ../operations/core/nop.c:72
+ msgid "No operation (can be used as a routing point)"
+-msgstr ""
++msgstr "Brez operacije (lahko jo uporabite kot točko preusmeritve)"
+ 
+ #: ../operations/external/ff-load.c:25
+ #: ../operations/external/jp2-load.c:25
+@@ -1846,29 +2055,29 @@ msgid "FFmpeg video frame importer"
+ msgstr "Uvoznik video-sličic FFmpeg"
+ 
+ #: ../operations/external/jp2-load.c:70
+-#, fuzzy, c-format
++#, c-format
+ msgid "Unknown JPEG 2000 image format in '%s'"
+-msgstr "Datoteke %s ni mogoče odpreti"
++msgstr "Neznan zapis slike JPEG 2000 v '%s'"
+ 
+ #: ../operations/external/jp2-load.c:77
+-#, fuzzy, c-format
++#, c-format
+ msgid "Unable to open JPEG 2000 image in '%s'"
+-msgstr "Datoteke %s ni mogoče odpreti"
++msgstr "Slike JPEG 2000 v '%s' ni mogoče odpreti"
+ 
+ #: ../operations/external/jp2-load.c:84
+-#, fuzzy, c-format
++#, c-format
+ msgid "Unable to create output color profile for '%s'"
+-msgstr "Začasne datoteke za '%s' ni mogoče ustvariti: %s"
++msgstr "Izhodnega barvnega profila za '%s' ni mogoče ustvariti"
+ 
+ #: ../operations/external/jp2-load.c:92
+ #, c-format
+ msgid "Unable to convert image to sRGB color space when processing '%s'"
+-msgstr ""
++msgstr "Slike ni mogoče pretvoriti v barvni prostor sRGB pri obdelovanju '%s'"
+ 
+ #: ../operations/external/jp2-load.c:100
+-#, fuzzy, c-format
++#, c-format
+ msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
+-msgstr "Nepodprta bitna globina: %d"
++msgstr "Nepodprta ne-RGB datoteka JPEG 2000 s %d komponentami v '%s'"
+ 
+ #: ../operations/external/jp2-load.c:111
+ #, c-format
+@@ -1883,12 +2092,12 @@ msgstr "Komponente vhodne slike '%s' se ne ujemajo"
+ #: ../operations/external/jp2-load.c:209
+ #, c-format
+ msgid "One or more of R, G, B components are missing from '%s'"
+-msgstr ""
++msgstr "Ena ali več komponent R, G, B manjka v '%s'"
+ 
+ #: ../operations/external/jp2-load.c:218
+ #, c-format
+ msgid "One or more of R, G, B components have signed data in '%s'"
+-msgstr ""
++msgstr "Ena ali več komponent R, G, B ima predznačene podatke v '%s'"
+ 
+ #: ../operations/external/jp2-load.c:252
+ #, c-format
+@@ -1928,7 +2137,6 @@ msgid "Optimize"
+ msgstr "Optimiziraj"
+ 
+ #: ../operations/external/jpg-save.c:32
+-#, fuzzy
+ msgid "Use optimized huffman tables"
+ msgstr "Uporabi optimizirane huffmanove tabele"
+ 
+@@ -1937,7 +2145,6 @@ msgid "Progressive"
+ msgstr "Progresivno"
+ 
+ #: ../operations/external/jpg-save.c:34
+-#, fuzzy
+ msgid "Create progressive JPEG images"
+ msgstr "Ustvari napredne slike JPEG"
+ 
+@@ -1952,16 +2159,55 @@ msgstr "Ustvari sivinsko (monokromatično) sliko"
+ 
+ #: ../operations/external/jpg-save.c:192
+ msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
+-msgstr ""
++msgstr "Shranjevalnik slik JPEG (preide medpomnilnik, stranski učinek je shranjevanje)."
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr "Epsilon"
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr "Zapisnik uteževanja napak"
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr "Polmer obdelovalnega okna"
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr "Prag alfa za več ravenjsko obdelavo"
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr "Lambda"
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr "Faktor vplivanja trojnega zemljevida"
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr "Število uporabljenih podvzorčenih ravni"
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Aktivne ravni"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr "Število ravni, na katerih se izvaja reševanje"
++
++#: ../operations/external/matting-levin.c:1428
++msgid "Given a sparse user supplied tri-map and an input image, create a foreground alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr "Z uporabniško podanim redko posejanim trojnim zemljevidom in vhodno sliko ustvari ospredje alfe brez leska. Za trojni zemljvedi nastavite belo kot izbrano in črno kot neizbrano."
+ 
+ #: ../operations/external/path.c:27
+ msgid "Fill Color"
+ msgstr "Barva polnila"
+ 
+ #: ../operations/external/path.c:28
+-#, fuzzy
+ msgid "Color of paint to use for filling, use 0 opacity to disable filling"
+-msgstr "Barva/prekrivnost, uporabljena za barvno prilagajanje"
++msgstr "Barva, uporabljena za polnjenje, uporabite ničelno prekrivnost za onemogočitev polnjenja"
+ 
+ #: ../operations/external/path.c:29
+ msgid "Stroke Color"
+@@ -1985,24 +2231,24 @@ msgstr "Prekrivnost poteze"
+ 
+ #: ../operations/external/path.c:36
+ msgid "Opacity of stroke, note, does not behave like SVG since at the moment stroking is done using an airbrush tool"
+-msgstr ""
++msgstr "Prekrivnost poteze, upoštevajte, da se ne vede kot SVG, saj je trenutno poteza izvedena s pršilko"
+ 
+ #: ../operations/external/path.c:38
+-#: ../operations/workshop/warp.c:30
++#: ../operations/workshop/warp.c:39
+ msgid "Hardness"
+ msgstr "Trdota"
+ 
+ #: ../operations/external/path.c:39
+ msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
+-msgstr ""
++msgstr "Trdota čopiča, 0,0 za mehak čopič, 1,0 za trd čopič"
+ 
+ #: ../operations/external/path.c:41
+ msgid "Fill rule"
+ msgstr "Pravilo polnila"
+ 
+ #: ../operations/external/path.c:42
+-msgid "How to determine what to fill (nonzero|evenodd"
+-msgstr ""
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr "Kako določiti, kaj naj bo zapolnjeno (nonzero|evenodd)"
+ 
+ #: ../operations/external/path.c:44
+ #: ../operations/external/vector-fill.c:36
+@@ -2011,9 +2257,8 @@ msgid "Transform"
+ msgstr "Preoblikuj"
+ 
+ #: ../operations/external/path.c:45
+-#, fuzzy
+ msgid "SVG style description of transform"
+-msgstr "Smer transformacije"
++msgstr "Opis transformacije v slogu SVG"
+ 
+ #: ../operations/external/path.c:47
+ msgid "Fill opacity"
+@@ -2033,7 +2278,7 @@ msgstr "Vektor"
+ #: ../operations/external/vector-fill.c:40
+ #: ../operations/external/vector-stroke.c:40
+ msgid "A GeglVector representing the path of the stroke"
+-msgstr ""
++msgstr "Vektor GeglVector, ki predstavlja pot poteze"
+ 
+ #: ../operations/external/path.c:518
+ msgid "Renders a brush stroke"
+@@ -2041,16 +2286,15 @@ msgstr "Upodobi potezo čopiča"
+ 
+ #: ../operations/external/pixbuf.c:25
+ msgid "Pixbuf"
+-msgstr "Medpomnilnik slik. točk"
++msgstr "Medpomnilnik sličic"
+ 
+ #: ../operations/external/pixbuf.c:25
+-#, fuzzy
+ msgid "GdkPixbuf to use"
+-msgstr "Uporabljen preliv"
++msgstr "Uporabljen GdkPixbuf"
+ 
+ #: ../operations/external/pixbuf.c:103
+ msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
+-msgstr ""
++msgstr "Uporablja GdkPixbug, ki se nahaja na pomnilniškem mestu v <em>pixbuf</em>."
+ 
+ #: ../operations/external/png-load.c:446
+ msgid "PNG image loader."
+@@ -2061,7 +2305,7 @@ msgstr "Nalagalnik slik PNG."
+ #: ../operations/external/rgbe-save.c:27
+ #: ../operations/workshop/external/ff-save.c:30
+ msgid "Target path and filename, use '-' for stdout."
+-msgstr ""
++msgstr "Pot in ime datoteke cilja, uporabite '-' za standardni izhod."
+ 
+ #: ../operations/external/png-save.c:28
+ msgid "Compression"
+@@ -2083,50 +2327,47 @@ msgstr "8 in 16 sta med trenutno podprtimi vrednostmi."
+ 
+ #: ../operations/external/png-save.c:233
+ msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
+-msgstr ""
++msgstr "Shranjevalnik slik PNG (preide medpomnilnik, stranski učinek je shranjevanje)."
+ 
+ #: ../operations/external/ppm-load.c:306
+ msgid "PPM image loader."
+ msgstr "Nalagalnik slik PPM."
+ 
+ #: ../operations/external/ppm-save.c:27
+-#, fuzzy
+ msgid "Raw format"
+-msgstr "Oblika slike"
++msgstr "Surovi zapis"
+ 
+ #: ../operations/external/ppm-save.c:190
+ msgid "PPM image saver (Portable pixmap saver.)"
+-msgstr ""
++msgstr "Shranjevalnik slik PPM (slik Portable Pixmap)."
+ 
+ #: ../operations/external/rgbe-load.c:135
+ msgid "RGBE image loader (Radiance HDR format)."
+-msgstr ""
++msgstr "Nalagalnik slik RGBE (zapis Radiance HDR)"
+ 
+ #: ../operations/external/rgbe-save.c:86
+ msgid "RGBE image saver (Radiance HDR format)"
+-msgstr ""
++msgstr "Shranjevalnik slik RGBE (zapis Radiance HDR)"
+ 
+ #: ../operations/external/save-pixbuf.c:28
+-#, fuzzy
+ msgid "Pixbuf location"
+-msgstr "Ikona Pixbuf"
++msgstr "Mesto medpomnilnika sličic"
+ 
+ #: ../operations/external/save-pixbuf.c:29
+ msgid "The location where to store the output GdkPixbuf."
+-msgstr ""
++msgstr "Mesto, kjer želite shraniti izhod GdkPixbuf."
+ 
+ #: ../operations/external/save-pixbuf.c:106
+-#, fuzzy
+ msgid "Save output into a GdkPixbuf."
+ msgstr "Shrani izhod v GdkPixbuf."
+ 
+ #: ../operations/external/sdl-display.c:28
+ msgid "Icon to be used for output window"
+-msgstr ""
++msgstr "Ikona za izhodno okno"
+ 
+ #: ../operations/external/sdl-display.c:181
+ msgid "Displays the input buffer in an SDL window (restricted to one display op/process, due to SDL implementation issues)."
+-msgstr ""
++msgstr "Prikaže vhodni medpomnilnik v oknu SDL (omejeno na en prikaz op/postopka zaradi težav z izvedbo SDL)"
+ 
+ #: ../operations/external/svg-load.c:26
+ msgid "Path to SVG file to load"
+@@ -2143,7 +2384,7 @@ msgid "Height for rendered image"
+ msgstr "Višina upodobljene slike"
+ 
+ #. not hidden because it has extra API
+-#: ../operations/external/svg-load.c:245
++#: ../operations/external/svg-load.c:239
+ msgid "Load an SVG file using librsvg"
+ msgstr "Datoteko SVG naloži z librsvg"
+ 
+@@ -2164,7 +2405,7 @@ msgid "Font family (utf8)"
+ msgstr "Družina pisav (UTF-8)"
+ 
+ #: ../operations/external/text.c:29
+-#: ../operations/workshop/warp.c:28
++#: ../operations/workshop/warp.c:37
+ msgid "Size"
+ msgstr "Velikost"
+ 
+@@ -2177,13 +2418,12 @@ msgid "Color for the text (defaults to 'white')"
+ msgstr "Barva besedila (privzetod 'white', bela)"
+ 
+ #: ../operations/external/text.c:33
+-#, fuzzy
+ msgid "Wrap width"
+-msgstr "Širina področja:"
++msgstr "Širina ovijanja"
+ 
+ #: ../operations/external/text.c:34
+ msgid "Sets the width in pixels at which long lines will wrap. Use -1 for no wrapping."
+-msgstr ""
++msgstr "Določi širino v slikovnih točkah, pri kateri se dolge črte ovijajo. Uporabite -1 za prepoved ovijanja."
+ 
+ #: ../operations/external/text.c:36
+ msgid "Justification"
+@@ -2191,7 +2431,7 @@ msgstr "Poravnava"
+ 
+ #: ../operations/external/text.c:37
+ msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
+-msgstr ""
++msgstr "Poravnava večvrstičnega besedila (0=leva, 1=sredinska, 2=desna)"
+ 
+ #: ../operations/external/text.c:39
+ msgid "Rendered width in pixels. (read only)"
+@@ -2215,7 +2455,7 @@ msgstr "Pot do naprave v4l"
+ 
+ #: ../operations/external/v4l.c:30
+ msgid "current frame number, can be changed to trigger a reload of the image."
+-msgstr ""
++msgstr "Številka trenutne sličice, mogoče jo je spremeniti, kar sproži ponovno nalaganje slike."
+ 
+ #: ../operations/external/v4l.c:31
+ #: ../operations/workshop/external/ff-save.c:32
+@@ -2224,11 +2464,11 @@ msgstr "sl/s"
+ 
+ #: ../operations/external/v4l.c:32
+ msgid "autotrigger reload this many times a second."
+-msgstr ""
++msgstr "Samosproži ponovno nalaganje toliko krat na sekundo."
+ 
+ #: ../operations/external/v4l.c:322
+ msgid "Video4Linux input, webcams framegrabbers and similar devices."
+-msgstr ""
++msgstr "Vhod Video4Linux, zajemalnik sličic spletne kamere in podobne naprave."
+ 
+ #: ../operations/external/vector-fill.c:28
+ msgid "Color of paint to use for filling."
+@@ -2243,32 +2483,29 @@ msgid "Fill rule."
+ msgstr "Pravilo polnila."
+ 
+ #: ../operations/external/vector-fill.c:34
+-msgid "how to determine what to fill (nonzero|evenodd"
+-msgstr ""
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr "Kako določiti, kaj je potrebno zapolniti (nonzeto|evenodd)"
+ 
+ #: ../operations/external/vector-fill.c:37
+ #: ../operations/external/vector-stroke.c:37
+-#, fuzzy
+ msgid "svg style description of transform."
+-msgstr "Smer transformacije"
++msgstr "Opis transformacije v slogu svg."
+ 
+-#: ../operations/external/vector-fill.c:258
++#: ../operations/external/vector-fill.c:268
+ msgid "Renders a filled region"
+ msgstr "Upodobi zapolnjeno območje"
+ 
+ #: ../operations/external/vector-stroke.c:28
+-#, fuzzy
+ msgid "Color of paint to use for stroking."
+-msgstr "Barva/prekrivnost, uporabljena za barvno prilagajanje"
++msgstr "Barva, uporabljena za poteze."
+ 
+ #: ../operations/external/vector-stroke.c:31
+-#, fuzzy
+ msgid "The width of the brush used to stroke the path."
+-msgstr "Spremeni merilo širine poti šiva"
++msgstr "Širina čopiča za potezo po poti."
+ 
+ #: ../operations/external/vector-stroke.c:34
+ msgid "Opacity of stroke, note, does not behave like SVG since at the moment stroking is done using an airbrush tool."
+-msgstr ""
++msgstr "Prekrivnost poteze se, to upoštevajte, ne vede kot SVG, saj trenutno vlečenje potez izvajamo z orodjem pršilke."
+ 
+ #: ../operations/external/vector-stroke.c:280
+ msgid "Renders a vector stroke"
+@@ -2276,119 +2513,230 @@ msgstr "Upodobi vektorsko potezo"
+ 
+ #: ../operations/generated/add.c:125
+ msgid "Math operation add (c = c + value)"
+-msgstr ""
++msgstr "Matematična operacija seštevanja add (c = c + vrednost)"
+ 
+ #: ../operations/generated/clear.c:116
+ msgid "Porter Duff operation clear (d = 0.0f)"
+-msgstr ""
++msgstr "Operacija Porter Duff clear (d = 0.0f)"
+ 
+-#: ../operations/generated/color-burn.c:117
+-msgid "SVG blend operation color-burn (<tt>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</tt>)"
+-msgstr ""
++#: ../operations/generated/color-burn.c:165
++msgid "SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr "Operacija zlivanja SVG color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) sicer: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
+ 
+-#: ../operations/generated/color-dodge.c:117
+-msgid "SVG blend operation color-dodge (<tt>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/color-dodge.c:165
++msgid "SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) sicer: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+-#: ../operations/generated/darken.c:115
+-msgid "SVG blend operation darken (<tt>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/darken.c:163
++msgid "SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+-#: ../operations/generated/difference.c:115
+-msgid "SVG blend operation difference (<tt>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</tt>)"
+-msgstr ""
++#: ../operations/generated/difference.c:163
++msgid "SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</code>)"
++msgstr "Operacija zlivanja SVG difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</code>)"
+ 
+ #: ../operations/generated/divide.c:125
+ msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
+-msgstr ""
++msgstr "Matematična operacija deljenja (c = vrednost==0.0f?0.0f:c/vrednost)"
+ 
+ #: ../operations/generated/dst-atop.c:116
+ msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
+-msgstr ""
++msgstr "Operacija Porter Duff dst-atop (d = cB * aA + cA * (1.0f - aB))"
+ 
+ #: ../operations/generated/dst-in.c:116
+ msgid "Porter Duff operation dst-in (d = cB * aA)"
+-msgstr ""
++msgstr "Operacija Porter Duff dst-in (d = cB * aA)"
+ 
+ #: ../operations/generated/dst-out.c:116
+ msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
+-msgstr ""
++msgstr "Operacija Porter Duff dst-out (d = cB * (1.0f - aA))"
+ 
+ #: ../operations/generated/dst-over.c:116
+ msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
+-msgstr ""
++msgstr "Operacija Porter Duff dst-over (d = cB + cA * (1.0f - aB))"
+ 
+ #: ../operations/generated/dst.c:116
+ msgid "Porter Duff operation dst (d = cB)"
+-msgstr ""
++msgstr "Operacija Porter Duff dst (d = cB)"
+ 
+-#: ../operations/generated/exclusion.c:115
+-msgid "SVG blend operation exclusion (<tt>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/exclusion.c:163
++msgid "SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+ #: ../operations/generated/gamma.c:125
+ msgid "Math operation gamma (c = powf (c, value))"
+-msgstr ""
++msgstr "Matematična operacija gama (c = powf (c, vrednost))"
+ 
+-#: ../operations/generated/hard-light.c:117
+-msgid "SVG blend operation hard-light (<tt>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/hard-light.c:165
++msgid "SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) sicer: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+-#: ../operations/generated/lighten.c:115
+-msgid "SVG blend operation lighten (<tt>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/lighten.c:163
++msgid "SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+ #: ../operations/generated/multiply.c:125
+ msgid "Math operation multiply (c = c * value)"
+-msgstr ""
++msgstr "Matematična operacija množenja multiply (c = c * vrednost)"
+ 
+-#: ../operations/generated/overlay.c:117
+-msgid "SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/overlay.c:165
++msgid "SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) sicer: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+-#: ../operations/generated/plus.c:115
+-msgid "SVG blend operation plus (<tt>d = cA + cB</tt>)"
+-msgstr ""
++#: ../operations/generated/plus.c:163
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr "Operacija zlivanja SVG plus (<code>d = cA + cB</code>)"
+ 
+-#: ../operations/generated/screen.c:115
+-msgid "SVG blend operation screen (<tt>d = cA + cB - cA * cB</tt>)"
+-msgstr ""
++#: ../operations/generated/screen.c:163
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr "Operacija zlivanja SVG screen (<code>d = cA + cB - cA * cB</code>)"
+ 
+-#: ../operations/generated/soft-light.c:119
+-msgid "SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/soft-light.c:167
++msgid "SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); sicer: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+ #: ../operations/generated/src-atop.c:116
+ msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
+-msgstr ""
++msgstr "Operacija Porter Duff src-atop (d = cA * aB + cB * (1.0f - aA))"
+ 
+ #: ../operations/generated/src-in.c:125
+ msgid "Porter Duff operation src-in (d = cA * aB)"
+-msgstr ""
++msgstr "Operacija Porter Duff src-in (d = cA * aB)"
+ 
+ #: ../operations/generated/src-out.c:116
+ msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
+-msgstr ""
++msgstr "Operacija Porter Duff src-out (d = cA * (1.0f - aB))"
+ 
+ #: ../operations/generated/src-over.c:116
+ msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
+-msgstr ""
++msgstr "Operacija Porter Duff src-over (d = cA + cB * (1.0f - aA))"
+ 
+ #: ../operations/generated/src.c:116
+ msgid "Porter Duff operation src (d = cA)"
+-msgstr ""
++msgstr "Operacija Porter Duff src (d = cA)"
+ 
+ #: ../operations/generated/subtract.c:125
+ msgid "Math operation subtract (c = c - value)"
+-msgstr ""
++msgstr "Matematična operacija odštevanja (c = c - vrednost)"
+ 
+-#: ../operations/generated/svg-multiply.c:114
+-msgid "SVG blend operation svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</tt>)"
+-msgstr ""
++#: ../operations/generated/svg-multiply.c:163
++msgid "SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr "Operacija zlivanja SVG multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</code>)"
+ 
+ #: ../operations/generated/xor.c:116
+ msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
+-msgstr ""
++msgstr "Operacija Porter Duff xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr "Komponenta x vektorja smeri"
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr "Komponenta x vektorja smeri"
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr "Kot sukanja (v SUK)"
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr "Zasukaj medpomnilnik okoli navedenega izvora."
++
++#: ../operations/transform/scale-ratio.c:26
++#: ../operations/transform/scale.c:29
++msgid "Horizontal scale factor"
++msgstr "Faktor vodoravne spremembe merila"
++
++#: ../operations/transform/scale-ratio.c:28
++#: ../operations/transform/scale.c:31
++msgid "Vertical scale factor"
++msgstr "Faktor navpične spremembe merila"
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr "Spremeni merilo medpomnilnik glede na razmerje."
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr "Velikost vodoravno"
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr "Velikost navpično"
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr "Spremeni merilo medpomnilnika glede na velikost."
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr "Spremeni merilo medpomnilnika."
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr "Količina vodoravne striženja"
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr "Količina navpičnega striženja"
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr "Postriže medpomnilnik"
++
++#: ../operations/transform/transform-core.c:200
++msgid "Origin-x"
++msgstr "Izvor-X"
++
++#: ../operations/transform/transform-core.c:201
++msgid "X coordinate of origin"
++msgstr "Koordinata X izvora"
++
++#: ../operations/transform/transform-core.c:208
++msgid "Origin-y"
++msgstr "Izvor-Y"
++
++#: ../operations/transform/transform-core.c:209
++msgid "Y coordinate of origin"
++msgstr "Koordinata Y izvora"
++
++#: ../operations/transform/transform-core.c:217
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr "Vrsta filtra (najbližji, linearni, lanczos, kubični, nizki sij)"
++
++#: ../operations/transform/transform-core.c:223
++#: ../operations/transform/transform-core.c:224
++msgid "Hard edges"
++msgstr "Ostri robovi"
++
++#: ../operations/transform/transform-core.c:230
++msgid "Lanczos width"
++msgstr "Širina lanczos"
++
++#: ../operations/transform/transform-core.c:231
++msgid "Width of the Lanczos function"
++msgstr "Širina funkcije lanczos"
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr "Niz transformacije"
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr "Preoblikuje skupino (uporablja svg)."
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr "Vodoravni vzporedni premik"
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr "Navpični vodoravni premik"
++
++#: ../operations/transform/translate.c:33
++msgid "Repositions the buffer (with subpixel precision), if integer coordinates are passed a fast-path without resampling is used"
++msgstr "Premesti medpomnilnik (z natančnostjo pod-slikovne točke), če so podane celoštevilske koordinate hitri poti brez uporabe ponovnega vzorčenja."
+ 
+ #: ../operations/workshop/box-max.c:26
+ #: ../operations/workshop/box-min.c:26
+@@ -2397,15 +2745,15 @@ msgstr ""
+ #: ../operations/workshop/kuwahara.c:26
+ #: ../operations/workshop/snn-percentile.c:28
+ msgid "Radius of square pixel region (width and height will be radius*2+1)"
+-msgstr ""
++msgstr "Polmer območja kvadratnih slikovnih točk (širina in višina sta polmer*2+1)"
+ 
+ #: ../operations/workshop/box-max.c:198
+ msgid "Sets the target pixel to the value of the maximum value in a box surrounding the pixel"
+-msgstr ""
++msgstr "Ciljni slikovni točki nastavi na vrednost najvišje vrednosti v polju, ki obkroža slikovno točko"
+ 
+ #: ../operations/workshop/box-min.c:198
+ msgid "Sets the target pixel to the value of the minimum value in a box surrounding the pixel"
+-msgstr ""
++msgstr "Ciljni slikovni točki nastavi na vrednost najnižje vrednosti v polju, ki obkroža slikovno točko"
+ 
+ #: ../operations/workshop/box-percentile.c:29
+ #: ../operations/workshop/disc-percentile.c:28
+@@ -2415,68 +2763,23 @@ msgstr "Odstotek"
+ 
+ #: ../operations/workshop/box-percentile.c:30
+ msgid "The percentile to compute, defaults to 50, which is a median filter"
+-msgstr ""
++msgstr "Odstotek za izračun, privzeto je 50, kar je medianski filter."
+ 
+ #: ../operations/workshop/box-percentile.c:230
+ msgid "Sets the target pixel to the color corresponding to a given percentile when colors are sorted by luminance"
+-msgstr ""
++msgstr "Nastavi ciljno slikovno točko na barvo, ki ustreza danemu odstotku, ko so barve razvrščene po svetilnosti"
+ 
+ #: ../operations/workshop/buffer-cache.c:25
+-#, fuzzy
+ msgid "Cache buffer"
+-msgstr "Prilepi medpomnilnik"
++msgstr "Predpomnilniški medpomnilnik"
+ 
+ #: ../operations/workshop/buffer-cache.c:26
+ msgid "The GeglBuffer where the caching is done"
+-msgstr ""
++msgstr "GeglBuffer, v katerem se izvaja predpomnjenje"
+ 
+-#: ../operations/workshop/buffer-cache.c:103
++#: ../operations/workshop/buffer-cache.c:96
+ msgid "Cache the input buffer internally, further process take this buffer as input."
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:25
+-msgid "Red bits"
+-msgstr "Bitov rdeče"
+-
+-#: ../operations/workshop/color-reduction.c:25
+-msgid "Number of bits for red channel"
+-msgstr "Število bitov za rdeči kanal"
+-
+-#: ../operations/workshop/color-reduction.c:26
+-msgid "Green bits"
+-msgstr "Bitov zelene"
+-
+-#: ../operations/workshop/color-reduction.c:26
+-msgid "Number of bits for green channel"
+-msgstr "Število bitov za zeleni kanal"
+-
+-#: ../operations/workshop/color-reduction.c:27
+-msgid "Blue bits"
+-msgstr "Bitov modre"
+-
+-#: ../operations/workshop/color-reduction.c:27
+-msgid "Number of bits for blue channel"
+-msgstr "Število bitov za modri kanal"
+-
+-#: ../operations/workshop/color-reduction.c:28
+-msgid "Alpha bits"
+-msgstr "Bitov alfe"
+-
+-#: ../operations/workshop/color-reduction.c:28
+-msgid "Number of bits for alpha channel"
+-msgstr "Število bitov za kanal alfa"
+-
+-#: ../operations/workshop/color-reduction.c:29
+-msgid "Dither"
+-msgstr "Stresanje"
+-
+-#: ../operations/workshop/color-reduction.c:30
+-msgid "Dithering strategy (none, random, random-covariant, bayer, floyd-steinberg)"
+-msgstr ""
+-
+-#: ../operations/workshop/color-reduction.c:459
+-msgid "Reduces the number of bits per channel (colors and alpha), with optional dithering"
+-msgstr ""
++msgstr "Notranje predpomni vhodni medpomnilnik, nadaljnji postopki vzamejo ta medpomnilnik kot vhod."
+ 
+ #: ../operations/workshop/color-rotate.c:33
+ #: ../operations/workshop/color-rotate.c:39
+@@ -2512,10 +2815,6 @@ msgstr "Končni kot za sukanje barv"
+ msgid "Choose in case of grayscale images"
+ msgstr "Izberite v primeru sivinskih slik"
+ 
+-#: ../operations/workshop/color-rotate.c:48
+-msgid "Hue"
+-msgstr "Obarvanost"
+-
+ #: ../operations/workshop/color-rotate.c:49
+ msgid "The value of hue"
+ msgstr "Vrednost obarvanosti"
+@@ -2526,15 +2825,14 @@ msgstr "Vrednost nasičenosti"
+ 
+ #: ../operations/workshop/color-rotate.c:52
+ #: ../operations/workshop/color-rotate.c:53
+-#, fuzzy
+ msgid "Change/Treat to this"
+-msgstr "Spremeni v to"
++msgstr "Spremeni/obdelaj"
+ 
+ #: ../operations/workshop/color-rotate.c:55
+ msgid "The value of gray threshold"
+ msgstr "Vrednost sivinskega praga"
+ 
+-#: ../operations/workshop/color-rotate.c:385
++#: ../operations/workshop/color-rotate.c:383
+ msgid "Rotate colors on the image"
+ msgstr "Zasukaj barve slike"
+ 
+@@ -2791,12 +3089,12 @@ msgid "Border"
+ msgstr "Rob"
+ 
+ #: ../operations/workshop/convolution-matrix.c:91
+-msgid "Type of border to choose.Choices are extend, wrap, crop.Default is extend"
+-msgstr ""
++msgid "Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++msgstr "Vrste obrob, ki jih lahko izberete: razširi (extend), prelomi (wrap) in obreži (crop). Privzeto je nastavljen razširi."
+ 
+ #: ../operations/workshop/convolution-matrix.c:433
+ msgid "Creates image by manually set convolution matrix"
+-msgstr ""
++msgstr "Ustvari sliko z ročno nastavljeno konvolucijsko matriko"
+ 
+ #: ../operations/workshop/cubism.c:30
+ #: ../operations/workshop/cubism.c:31
+@@ -2808,13 +3106,9 @@ msgstr "Velikost tlakovcev"
+ msgid "Tile saturation"
+ msgstr "Nasičenost tlakovcev"
+ 
+-#: ../operations/workshop/cubism.c:35
+-msgid "Random seed"
+-msgstr "Naključno seme"
+-
+ #: ../operations/workshop/cubism.c:595
+ msgid "A filter that somehow resembles a cubist painting style"
+-msgstr ""
++msgstr "Filter, ki spominja na kubistični slog slikanja"
+ 
+ #: ../operations/workshop/deinterlace.c:30
+ msgid "Even/Odd"
+@@ -2838,12 +3132,11 @@ msgstr "Velikost bloka"
+ 
+ #: ../operations/workshop/deinterlace.c:34
+ msgid "Block size of deinterlacing rows/columns"
+-msgstr ""
++msgstr "Velikost bloka za razpletanje vrstic/stolpcev"
+ 
+ #: ../operations/workshop/deinterlace.c:309
+-#, fuzzy
+ msgid "Performs deinterlace on the image"
+-msgstr "Povečaj svetlejša območja slike"
++msgstr "Izvede razpletanje slike"
+ 
+ #: ../operations/workshop/demosaic-bimedian.c:26
+ #: ../operations/workshop/demosaic-simple.c:25
+@@ -2853,27 +3146,27 @@ msgstr "Bayerjev vzorec"
+ #: ../operations/workshop/demosaic-bimedian.c:27
+ #: ../operations/workshop/demosaic-simple.c:26
+ msgid "Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji files."
+-msgstr ""
++msgstr "Uporabljeni Bayerjev vzorec, 0 se zdi ustrezen za nekatere datoteke Nikon, 2 za nekatere datoteke Fuji."
+ 
+ #: ../operations/workshop/demosaic-bimedian.c:220
+ msgid "Performs a grayscale2color demosaicing of an image, using bimedian interpolation."
+-msgstr ""
++msgstr "Izvede razmozaičenje slike grayscale2color z uporabo dvomedianske interpolacije."
+ 
+ #: ../operations/workshop/demosaic-simple.c:152
+ msgid "Performs a naive grayscale2color demosaicing of an image, no interpolation."
+-msgstr ""
++msgstr "Izvede naivno razmozaičenje slike grayscale2color, brez interpolacije."
+ 
+ #: ../operations/workshop/disc-percentile.c:29
+ msgid "The percentile to compute, defaults to 50, which is a median filter."
+-msgstr ""
++msgstr "Odstotek za izračun, privzeto 50, kar je medianski filter."
+ 
+ #: ../operations/workshop/disc-percentile.c:234
+ msgid "Sets the target pixel to the color corresponding to a given percentile when colors are sorted by luminance."
+-msgstr ""
++msgstr "Nastavi ciljno slikovno točko na barvo, ki ustreza danemu odstotku, ko so barve razvrščene po svetilnosti."
+ 
+-#: ../operations/workshop/ditto.c:111
++#: ../operations/workshop/ditto.c:112
+ msgid "Test op to do a 1:1 map of input to output, while sampling"
+-msgstr ""
++msgstr "Poskusna operacija za preslikavo 1:1 z vhoda na izhod, medtem poteka vzorčenje."
+ 
+ #: ../operations/workshop/emboss.c:25
+ msgid "Azimuth"
+@@ -2888,7 +3181,6 @@ msgid "Elevation"
+ msgstr "Dvignjenost"
+ 
+ #: ../operations/workshop/emboss.c:28
+-#, fuzzy
+ msgid "The value of elevation"
+ msgstr "Vrednost dvignjenosti"
+ 
+@@ -2903,7 +3195,7 @@ msgstr "Globina slikovne točke"
+ 
+ #: ../operations/workshop/emboss.c:32
+ msgid "Optional parameter to override automatic selection of emboss filter. Choices are emboss, blur-map"
+-msgstr ""
++msgstr "Neobvezni parameter, ki preglasi samodejni izbor filtra izbočenja. Izbire so izboči (emboss) in zemljevid zabrisanosti (blur-map)"
+ 
+ #: ../operations/workshop/emboss.c:248
+ msgid "Simulates an image created by embossing"
+@@ -2923,7 +3215,7 @@ msgstr "sličic na sekundo"
+ 
+ #: ../operations/workshop/external/ff-save.c:889
+ msgid "FFmpeg video output sink"
+-msgstr ""
++msgstr "Ponor izhodneg videa FFmpeg"
+ 
+ #: ../operations/workshop/external/gluas.c:41
+ msgid "Script"
+@@ -2931,11 +3223,11 @@ msgstr "Skripta"
+ 
+ #: ../operations/workshop/external/gluas.c:42
+ msgid "The lua script containing the implementation of this operation."
+-msgstr ""
++msgstr "Skript lua, ki udejanja to operacijo."
+ 
+ #: ../operations/workshop/external/gluas.c:43
+ msgid "a stored lua script on disk implementing an operation."
+-msgstr ""
++msgstr "Na disku shranjeni skript lua, ki udejanja operacijo."
+ 
+ #: ../operations/workshop/external/gluas.c:44
+ msgid "User value"
+@@ -2943,11 +3235,11 @@ msgstr "Uporabniška vrednost"
+ 
+ #: ../operations/workshop/external/gluas.c:45
+ msgid "(appears in the global variable 'user_value' in lua."
+-msgstr ""
++msgstr "(pojavi se v splošni spremenljivki 'user_value' v lua)."
+ 
+ #: ../operations/workshop/external/gluas.c:984
+ msgid "A general purpose filter/composer implementation proxy for the lua programming language."
+-msgstr ""
++msgstr "Splošno-namensko posredovanje implementacije filtra/sestavljalnika za programski jezik lua."
+ 
+ #: ../operations/workshop/external/lens-correct.c:28
+ msgid "Maker:"
+@@ -2955,7 +3247,7 @@ msgstr "Izdelovalec:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:29
+ msgid "Write lens maker correctly"
+-msgstr ""
++msgstr "Pravilno vnesite izdelovalca objektiva"
+ 
+ #: ../operations/workshop/external/lens-correct.c:30
+ msgid "Camera:"
+@@ -2963,54 +3255,42 @@ msgstr "Kamera:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:31
+ msgid "Write camera name correctly"
+-msgstr ""
++msgstr "Pravilno vnesite ime kamere"
+ 
+ #: ../operations/workshop/external/lens-correct.c:32
+ msgid "Lens:"
+ msgstr "Objektiv."
+ 
+ #: ../operations/workshop/external/lens-correct.c:33
+-msgid "Write your lens model with majuscules"
+-msgstr ""
++msgid "Write your lens model with uppercase letters"
++msgstr "Zapišite model objektiva z velikimi črkami"
+ 
+ #: ../operations/workshop/external/lens-correct.c:34
+-#, fuzzy
+ msgid "Focal of the camera"
+-msgstr "Merilo podlikov"
++msgstr "Gorišče kamere"
+ 
+ #: ../operations/workshop/external/lens-correct.c:35
+ msgid "Calculate b value from focal"
+-msgstr ""
++msgstr "Izračunajte vrednost b iz gorišča"
+ 
+ #: ../operations/workshop/external/lens-correct.c:37
+-#, fuzzy
+ msgid "Center"
+-msgstr ""
+-"#-#-#-#-#  dia.master.sl.po (dia)  #-#-#-#-#\n"
+-"Sredinsko\n"
+-"#-#-#-#-#  gimp-gap.master.sl.po (Gimp-gap 2.8)  #-#-#-#-#\n"
+-"na sredini\n"
+-"#-#-#-#-#  gimp-plug-ins.master.sl.po (GIMP - standardni vtičniki)  #-#-#-#-#\n"
+-"sredinsko"
++msgstr "Središče"
+ 
+ #: ../operations/workshop/external/lens-correct.c:38
+-#, fuzzy
+ msgid "If you want center"
+-msgstr "Zgoraj in na sredi"
++msgstr "Če želite središče"
+ 
+ #: ../operations/workshop/external/lens-correct.c:39
+-#, fuzzy
+ msgid "Lens center x"
+ msgstr "Središče objektiva X"
+ 
+ #: ../operations/workshop/external/lens-correct.c:40
+ #: ../operations/workshop/external/lens-correct.c:42
+-#, fuzzy
+ msgid "Coordinates of lens center"
+ msgstr "Koordinate središča objektiva"
+ 
+ #: ../operations/workshop/external/lens-correct.c:41
+-#, fuzzy
+ msgid "Lens center y"
+ msgstr "Središče objektiva Y"
+ 
+@@ -3020,16 +3300,15 @@ msgstr "Merilo slike"
+ 
+ #: ../operations/workshop/external/lens-correct.c:45
+ msgid "Autocorrect d values"
+-msgstr ""
++msgstr "Samopopravi vrednosti d"
+ 
+ #: ../operations/workshop/external/lens-correct.c:46
+ msgid "Autocorrect D values for lens correction models."
+-msgstr ""
++msgstr "Samopopravi vrednosti D za korekcijske modele."
+ 
+ #: ../operations/workshop/external/lens-correct.c:48
+-#, fuzzy
+ msgid "Model red a:"
+-msgstr "Bolj nasičeno:"
++msgstr "Model rdeče a:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:49
+ #: ../operations/workshop/external/lens-correct.c:51
+@@ -3047,62 +3326,52 @@ msgid "Correction parameters for each color channel"
+ msgstr "Parametri korekcije za vsak barvni kanal"
+ 
+ #: ../operations/workshop/external/lens-correct.c:50
+-#, fuzzy
+ msgid "Model red b:"
+-msgstr "Hitrost spr.:"
++msgstr "Model rdeče b:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:52
+-#, fuzzy
+ msgid "Model red c:"
+-msgstr "Hitrost spr.:"
++msgstr "Model rdeče c:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:54
+-#, fuzzy
+ msgid "Model red d:"
+-msgstr "Hitrost spr.:"
++msgstr "Model rdeče d:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:57
+-#, fuzzy
+ msgid "Model green a:"
+-msgstr "Spremeni _zeleni kanal"
++msgstr "Model zelene a:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:59
+ msgid "Model green b:"
+-msgstr ""
++msgstr "Model zelene b:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:61
+-#, fuzzy
+ msgid "Model green c:"
+-msgstr "Spremeni _zeleni kanal"
++msgstr "Model zelene c:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:63
+ msgid "Model green d:"
+-msgstr ""
++msgstr "Model zelene d:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:66
+-#, fuzzy
+ msgid "Model blue a:"
+-msgstr "Datoteka modela"
++msgstr "Model modre a:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:68
+-#, fuzzy
+ msgid "Model blue b:"
+-msgstr "Datoteka modela"
++msgstr "Model modre b:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:70
+-#, fuzzy
+ msgid "Model blue c:"
+-msgstr "Datoteka modela"
++msgstr "Model modre c:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:72
+-#, fuzzy
+ msgid "Model blue d:"
+-msgstr "Datoteka modela"
++msgstr "Model modre d:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:75
+-#, fuzzy
+ msgid "Model alpha a:"
+-msgstr "v alfo"
++msgstr "Model alfe a:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:76
+ #: ../operations/workshop/external/lens-correct.c:78
+@@ -3112,19 +3381,16 @@ msgid "Correction parameters for alpha channel"
+ msgstr "Parametri korekcije za kanal alfa"
+ 
+ #: ../operations/workshop/external/lens-correct.c:77
+-#, fuzzy
+ msgid "Model alpha b:"
+-msgstr "v alfo"
++msgstr "Model alfe b:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:79
+-#, fuzzy
+ msgid "Model alpha c:"
+-msgstr "v alfo"
++msgstr "Model alfe c:"
+ 
+ #: ../operations/workshop/external/lens-correct.c:81
+-#, fuzzy
+ msgid "Model alpha d:"
+-msgstr "v alfo"
++msgstr "Model alfe d:"
+ 
+ #: ../operations/workshop/external/line-profile.c:25
+ msgid "X0"
+@@ -3136,6 +3402,7 @@ msgstr "Začetna koordinata X"
+ 
+ #: ../operations/workshop/external/line-profile.c:26
+ #: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
+ msgid "X1"
+ msgstr "X1"
+ 
+@@ -3153,6 +3420,7 @@ msgstr "Začetna koordinata Y"
+ 
+ #: ../operations/workshop/external/line-profile.c:28
+ #: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
+ msgid "Y1"
+ msgstr "Y1"
+ 
+@@ -3161,14 +3429,12 @@ msgid "End y coordinate"
+ msgstr "Končna koordinata Y"
+ 
+ #: ../operations/workshop/external/line-profile.c:29
+-#, fuzzy
+ msgid "Width of plot"
+-msgstr "Širina razmikov"
++msgstr "Širina izrisa"
+ 
+ #: ../operations/workshop/external/line-profile.c:30
+-#, fuzzy
+ msgid "Height of plot"
+-msgstr "Višina papirja"
++msgstr "Višina izrisa"
+ 
+ #: ../operations/workshop/external/line-profile.c:31
+ msgid "Min"
+@@ -3188,7 +3454,7 @@ msgstr "Vrednost na vrhu"
+ 
+ #: ../operations/workshop/external/line-profile.c:178
+ msgid "Renders luminance profiles for red green and blue components along the specified line in the input buffer, plotted in a buffer of the specified size."
+-msgstr ""
++msgstr "Upodobi profile svetilnosti za komponente rdeče, zelene in modre vzdolž navedene črte v vhodnem medpomnilnik, izrisane medpomnilniku navedene velikosti."
+ 
+ #: ../operations/workshop/fractal-trace.c:25
+ msgid "Fractal"
+@@ -3196,13 +3462,14 @@ msgstr "Fraktal"
+ 
+ #: ../operations/workshop/fractal-trace.c:26
+ msgid "Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
+-msgstr ""
++msgstr "Vrsta fraktala. Izberete lahko med julia in mandelbrot. Slednja vrsta je privzeta."
+ 
+ #: ../operations/workshop/fractal-trace.c:29
+ msgid "X1 value, position"
+ msgstr "Vrednost, položaj X1"
+ 
+ #: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
+ msgid "X2"
+ msgstr "X2"
+ 
+@@ -3212,6 +3479,7 @@ msgid "X2 value, position"
+ msgstr "Vrednost, položaj X2"
+ 
+ #: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
+ msgid "Y2"
+ msgstr "Y2"
+ 
+@@ -3225,7 +3493,7 @@ msgstr "JX"
+ 
+ #: ../operations/workshop/fractal-trace.c:37
+ msgid "Julia seed X value, position"
+-msgstr ""
++msgstr "Vrednost, položaj X semena Julia"
+ 
+ #: ../operations/workshop/fractal-trace.c:38
+ msgid "JY"
+@@ -3233,128 +3501,95 @@ msgstr "JY"
+ 
+ #: ../operations/workshop/fractal-trace.c:39
+ msgid "Julia seed Y value, position"
+-msgstr ""
++msgstr "Vrednost, položaj Y semena Julia"
+ 
+ #: ../operations/workshop/fractal-trace.c:41
+-#, fuzzy
+ msgid "Depth value"
+-msgstr "Privzeta vrednost"
++msgstr "Vrednost globine"
+ 
+ #: ../operations/workshop/fractal-trace.c:42
+-#, fuzzy
+ msgid "Bailout"
+-msgstr "Postavitev"
++msgstr "Umik"
+ 
+ #: ../operations/workshop/fractal-trace.c:43
+-#, fuzzy
+ msgid "Bailout length"
+-msgstr "Dolžina stolpca"
++msgstr "Dolžina umika"
+ 
+ #: ../operations/workshop/fractal-trace.c:44
+-msgid "Background"
+-msgstr "Ozadje"
++msgid "Abyss policy"
++msgstr "Politika ponora"
+ 
+ #: ../operations/workshop/fractal-trace.c:45
+-msgid "Optional parameter to override automatic selection of wrap background. Choices are wrap, black, white and transparent."
+-msgstr ""
++msgid "How to deal with pixels outside of the input buffer"
++msgstr "Kako ravnati s slik. točkami zunaj vstopnega medpomnilnika"
+ 
+-#: ../operations/workshop/fractal-trace.c:171
++#: ../operations/workshop/fractal-trace.c:161
+ msgid "Unsupported fractal type"
+ msgstr "Nepodprta vrsta fraktala"
+ 
+-#: ../operations/workshop/fractal-trace.c:321
+-#, fuzzy
++#: ../operations/workshop/fractal-trace.c:248
+ msgid "Performs fractal trace on the image"
+-msgstr "Deformirajte kletko in s tem deformirate sliko"
++msgstr "Izvede fraktalsko sledenje na sliki"
+ 
+ #: ../operations/workshop/generated/average.c:109
+ msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
+-msgstr ""
++msgstr "Operacija zlivanja slik 'average' (<tt>c = (cA + aB)/2</tt>)"
+ 
+ #: ../operations/workshop/generated/blend-reflect.c:109
+ msgid "Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-cB)</tt>)"
+-msgstr ""
++msgstr "Operacija zlivanja slik 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-cB)</tt>)"
+ 
+ #: ../operations/workshop/generated/negation.c:109
+ msgid "Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
+-msgstr ""
++msgstr "Operacija zlivanja slik 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
+ 
+ #: ../operations/workshop/generated/soft-burn.c:109
+ msgid "Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
+-msgstr ""
++msgstr "Operacija zlivanja slik 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
+ 
+ #: ../operations/workshop/generated/soft-dodge.c:109
+ msgid "Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
+-msgstr ""
++msgstr "Operacija zlivanja slik 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
+ 
+ #: ../operations/workshop/generated/subtractive.c:109
+ msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
+-msgstr ""
++msgstr "Operacija zlivanja slik 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
+ 
+ #: ../operations/workshop/hstack.c:178
+ msgid "Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of \"input\")"
+-msgstr ""
++msgstr "Vodoravno skladaj vhode (v izhodu, \"output\", je pomožni, \"aux\", postavljen desno od vhoda, \"input\")"
+ 
+ #: ../operations/workshop/kuwahara.c:243
+ msgid "Edge preserving blur"
+-msgstr ""
+-
+-#: ../operations/workshop/linear-gradient.c:24
+-#: ../operations/workshop/radial-gradient.c:24
+-msgid "x1"
+-msgstr "x1"
+-
+-#: ../operations/workshop/linear-gradient.c:25
+-#: ../operations/workshop/radial-gradient.c:25
+-msgid "y1"
+-msgstr "y1"
+-
+-#: ../operations/workshop/linear-gradient.c:26
+-#: ../operations/workshop/radial-gradient.c:26
+-msgid "x2"
+-msgstr "x2"
+-
+-#: ../operations/workshop/linear-gradient.c:27
+-#: ../operations/workshop/radial-gradient.c:27
+-msgid "y2"
+-msgstr "y2"
++msgstr "Zabrisanost, ki ohranja robove"
+ 
+ #: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr "Prvi konec preliva"
++
+ #: ../operations/workshop/linear-gradient.c:31
+-#: ../operations/workshop/radial-gradient.c:29
+-#: ../operations/workshop/radial-gradient.c:31
+-#, fuzzy
+-msgid "One end of gradient"
+-msgstr "Paleta v preliv"
++msgid "The other end of a gradient"
++msgstr "Drugi konec preliva"
+ 
+-#: ../operations/workshop/linear-gradient.c:137
+-#, fuzzy
++#: ../operations/workshop/linear-gradient.c:136
+ msgid "Linear gradient renderer"
+-msgstr "Obratni preliv orisa"
++msgstr "Upodobljevalnik linearnih prelivov"
+ 
+ #: ../operations/workshop/mandelbrot.c:25
+-#, fuzzy
+ msgid "Real"
+-msgstr "Zaceli"
++msgstr "Realna"
+ 
+ #: ../operations/workshop/mandelbrot.c:26
+-#, fuzzy
+ msgid "Real coordinate"
+-msgstr ""
+-"#-#-#-#-#  gimp-gap.master.sl.po (Gimp-gap 2.8)  #-#-#-#-#\n"
+-"Koordinata X \n"
+-"#-#-#-#-#  inkscape-sl.po (Inkscape 0.48.2)  #-#-#-#-#\n"
+-"Koordinata X"
++msgstr "Realna koordinata"
+ 
+ #: ../operations/workshop/mandelbrot.c:27
+-#, fuzzy
+ msgid "Imaginary"
+-msgstr "magenta"
++msgstr "Imaginarna"
+ 
+ #: ../operations/workshop/mandelbrot.c:28
+-#, fuzzy
+ msgid "Imaginary coordinate"
+-msgstr "Polarne koordinate"
++msgstr "Imaginarna koordinata"
+ 
+ #: ../operations/workshop/mandelbrot.c:29
+ msgid "Level"
+@@ -3369,118 +3604,114 @@ msgid "Maximum number of iterations"
+ msgstr "Največje število ponovitev"
+ 
+ #: ../operations/workshop/mandelbrot.c:144
+-#, fuzzy
+ msgid "Mandelbrot set renderer"
+-msgstr "Parametri Mandelbrot"
+-
+-#: ../operations/workshop/max-rgb.c:30
+-#, fuzzy
+-msgid "Minimal"
+-msgstr "Najmanjše"
+-
+-#: ../operations/workshop/max-rgb.c:31
+-msgid "Hold the minimal values instead of the maximal values"
+-msgstr ""
+-
+-#: ../operations/workshop/max-rgb.c:120
+-msgid "Reduce image to pure red, green, and blue"
+-msgstr "Reducira sliko na čisto rdečo, zeleno in modro barvo"
++msgstr "Upodobljevalnik Mandelbrotove množice"
+ 
+ #: ../operations/workshop/noise-spread.c:30
+-#, fuzzy
+ msgid "Horizontal spread amount"
+-msgstr "Vodoravni preliv"
++msgstr "Količina vodoravnega širjenja"
+ 
+ #: ../operations/workshop/noise-spread.c:32
+-#, fuzzy
+ msgid "Vertical spread amount"
+-msgstr "Navpični preliv"
++msgstr "Količina navpičnega širjenja"
+ 
+ #: ../operations/workshop/noise-spread.c:172
+-#, fuzzy
+ msgid "Noise spread filter"
+-msgstr "Zračni filter"
++msgstr "Filter širjenja šuma"
+ 
+ #: ../operations/workshop/plasma.c:34
+ msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
+-msgstr ""
++msgstr "Naključno seme. Vrednost -1 implicira, da je seme izbrano naključno."
+ 
+ #: ../operations/workshop/plasma.c:35
+ msgid "Turbulence"
+ msgstr "Turbulenca"
+ 
+ #: ../operations/workshop/plasma.c:36
+-#, fuzzy
+ msgid "The value of the turbulence"
+-msgstr "Ime koraka"
++msgstr "Vrednost turbulence"
+ 
+-#: ../operations/workshop/plasma.c:388
+-#, fuzzy
++#: ../operations/workshop/plasma.c:389
+ msgid "Performs plasma effect on the image"
+-msgstr "Plasti slike"
++msgstr "Na sliki izvede učinek plazme"
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr "Prvi konec preliva"
+ 
+-#: ../operations/workshop/radial-gradient.c:129
+-#, fuzzy
++#: ../operations/workshop/radial-gradient.c:128
+ msgid "Radial gradient renderer"
+-msgstr "Krožen preliv poteze"
++msgstr "Upodobljevalnik krožnega preliva"
+ 
+ #: ../operations/workshop/rawbayer-load.c:154
+ msgid "Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as grayscale, if the fileformat is .rawbayer it will use this loader instead of the normal dcraw loader, if the fileformat is .rawbayerS it will swap the returned 16bit numbers (the pnm loader is apparently buggy)"
+-msgstr ""
++msgstr "Nalagalnik surovih slik, zaobjemanje dcraw s cevovodi, ponuja surovo bayerjevo mrežo kot sivinsko, če je vrsta datoteke .rawbayer bo uporabil ta nalagalnik namesto običajnega nalagalnika dcraw, če pa je vrsta datoteke .rawbayerS, bo zamenjala vrnjena 16-bitna števila (nalagalnik pnm je očitno poln napak)"
+ 
+ #: ../operations/workshop/red-eye-removal.c:32
+ msgid "The value of the threshold"
+ msgstr "Vrednost praga"
+ 
+ #: ../operations/workshop/red-eye-removal.c:132
+-#, fuzzy
+-#| msgid "Performs red-eye-removal on the image."
+ msgid "Performs red-eye-removal on the image"
+-msgstr "Izvede odstranitev rdečega v očeh na sliki."
++msgstr "Izvede odstranitev rdečega z oči na sliki."
+ 
+ #: ../operations/workshop/snn-percentile.c:30
+-#, fuzzy
+ msgid "Number of pairs, higher number preserves more acute features"
+-msgstr "Število parov, višja številka ohranja bolj akutne lastnosti"
++msgstr "Število parov, višja številka ohranja bolj kritične lastnosti"
+ 
+ #: ../operations/workshop/snn-percentile.c:32
+ msgid "The percentile to return, the default value 50 is equal to the median"
+-msgstr ""
++msgstr "Vrnjeni odstotek, privzeta vrednost 50 je enaka mediani"
+ 
+ #: ../operations/workshop/snn-percentile.c:272
+ msgid "Noise reducing edge enhancing percentile filter based on Symmetric Nearest Neighbours"
+-msgstr ""
++msgstr "Odstotkovni filter zabrisanosti za izboljšavo robov in zmanjševanje šuma, ki temelji na simetričnih najbližjih sosedih"
+ 
+-#: ../operations/workshop/warp.c:27
+-#: ../operations/workshop/warp.c:32
++#: ../operations/workshop/warp.c:36
++#: ../operations/workshop/warp.c:41
+ msgid "Effect Strength"
+ msgstr "Jakost učinka"
+ 
+-#: ../operations/workshop/warp.c:29
++#: ../operations/workshop/warp.c:38
+ msgid "Effect Size"
+ msgstr "Velikost učinka"
+ 
+-#: ../operations/workshop/warp.c:31
+-#, fuzzy
++#: ../operations/workshop/warp.c:40
+ msgid "Effect Hardness"
+-msgstr "Kanal učinkov"
++msgstr "Trdota učinka"
+ 
+-#: ../operations/workshop/warp.c:32
++#: ../operations/workshop/warp.c:41
+ msgid "Stroke"
+ msgstr "Poteza"
+ 
+-#: ../operations/workshop/warp.c:33
++#: ../operations/workshop/warp.c:42
+ msgid "Behavior"
+ msgstr "Vedenje"
+ 
+-#: ../operations/workshop/warp.c:34
+-#, fuzzy
++#: ../operations/workshop/warp.c:43
+ msgid "Behavior of the op"
+-msgstr "Težnost pisala"
++msgstr "Vedenje operacije"
+ 
+-#: ../operations/workshop/warp.c:379
++#: ../operations/workshop/warp.c:386
+ msgid "Compute a relative displacement mapping from a stroke"
+-msgstr ""
++msgstr "Izračunaj relativno razmestitveno preslikavo iz poteze"
+ 
+ #: ../operations/workshop/whirl-pinch.c:36
+ msgid "Whirl"
+@@ -3500,7 +3731,7 @@ msgstr "Količina odščipa"
+ 
+ #: ../operations/workshop/whirl-pinch.c:40
+ msgid "Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all the way to the corners)"
+-msgstr ""
++msgstr "Polmer (1,0 je največji krog, ki ga je mogoče postaviti v sliko, 2,0 pa sega vse do robov slike)"
+ 
+ #: ../operations/workshop/whirl-pinch.c:258
+ msgid "Applies whirling and pinching on the image"
+diff --git a/po/sv.po b/po/sv.po
+new file mode 100644
+index 0000000..fb412de
+--- /dev/null
++++ po/sv.po
+@@ -0,0 +1,3337 @@
++# Swedish translation for gegl.
++# Copyright (C) 2012 Free Software Foundation, Inc.
++# This file is distributed under the same license as the gegl package.
++# Daniel Nylander <po at danielnylander.se>, 2012.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: gegl\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2012-05-16 00:29+0200\n"
++"PO-Revision-Date: 2012-05-16 00:38+0100\n"
++"Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
++"Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++
++#: ../gegl/gegl-init.c:216
++msgid "babls error tolerance, a value between 0.2 and 0.000000001"
++msgstr ""
++
++#: ../gegl/gegl-init.c:221
++msgid "Where GEGL stores its swap"
++msgstr ""
++
++#: ../gegl/gegl-init.c:226
++msgid "How much memory to (approximately) use for caching imagery"
++msgstr ""
++
++#: ../gegl/gegl-init.c:231
++msgid "Default size of tiles in GeglBuffers"
++msgstr ""
++
++#: ../gegl/gegl-init.c:236
++msgid "The count of pixels to compute simultaneously"
++msgstr ""
++
++#: ../gegl/gegl-init.c:241
++msgid "The quality of rendering a value between 0.0(fast) and 1.0(reference)"
++msgstr ""
++
++#: ../gegl/gegl-init.c:246
++msgid "The number of concurrent processing threads to use"
++msgstr ""
++
++#: ../gegl/module/geglmodule.c:147
++#: ../gegl/module/geglmodule.c:165
++#: ../gegl/module/geglmodule.c:274
++#: ../gegl/module/geglmodule.c:301
++#: ../gegl/module/geglmodule.c:393
++#, c-format
++msgid "Module '%s' load error: %s"
++msgstr "Modulen \"%s\" inläsningsfel: %s"
++
++#: ../gegl/module/geglmodule.c:369
++msgid "Module error"
++msgstr "Modulfel"
++
++#: ../gegl/module/geglmodule.c:370
++msgid "Loaded"
++msgstr "Inläst"
++
++#: ../gegl/module/geglmodule.c:371
++msgid "Load failed"
++msgstr "Inläsning misslyckades"
++
++#: ../gegl/module/geglmodule.c:372
++msgid "Not loaded"
++msgstr "Inte läst"
++
++#: ../operations/common/bilateral-filter.c:27
++#: ../operations/common/dropshadow.c:31
++msgid "Blur radius"
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:28
++msgid "Radius of square pixel region, (width and height will be radius*2+1)."
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:29
++msgid "Edge preservation"
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:30
++msgid "Amount of edge preservation"
++msgstr ""
++
++#: ../operations/common/bilateral-filter.c:315
++msgid "An edge preserving blur filter that can be used for noise reduction. It is a gaussian blur where the contribution of neighbourhood pixels are weighted by the color difference from the center pixel."
++msgstr ""
++
++#: ../operations/common/box-blur.c:24
++#: ../operations/common/c2g.c:27
++#: ../operations/common/difference-of-gaussians.c:26
++#: ../operations/common/difference-of-gaussians.c:28
++#: ../operations/common/dropshadow.c:30
++#: ../operations/common/snn-mean.c:26
++#: ../operations/common/stress.c:27
++#: ../operations/common/vignette.c:26
++#: ../operations/external/matting-levin.c:28
++#: ../operations/workshop/box-max.c:25
++#: ../operations/workshop/box-min.c:25
++#: ../operations/workshop/box-percentile.c:27
++#: ../operations/workshop/disc-percentile.c:26
++#: ../operations/workshop/kuwahara.c:25
++#: ../operations/workshop/snn-percentile.c:27
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius"
++msgstr "Radie"
++
++#: ../operations/common/box-blur.c:25
++#: ../operations/common/snn-mean.c:27
++msgid "Radius of square pixel region, (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/common/box-blur.c:423
++msgid "Performs an averaging of a square box of pixels"
++msgstr ""
++
++#. ... are the properties of the filter, these are all scalar values
++#. * (doubles), the the parameters are:
++#. *       property name,   min,   max, default, "description of property"
++#.
++#: ../operations/common/brightness-contrast.c:29
++#: ../operations/common/mantiuk06.c:31
++msgid "Contrast"
++msgstr "Kontrast"
++
++#: ../operations/common/brightness-contrast.c:30
++msgid "Range scale factor"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:31
++#: ../operations/common/reinhard05.c:27
++msgid "Brightness"
++msgstr "Ljusstyrka"
++
++#: ../operations/common/brightness-contrast.c:32
++msgid "Amount to increase brightness"
++msgstr ""
++
++#: ../operations/common/brightness-contrast.c:145
++msgid "Changes the light level and contrast."
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:25
++#: ../operations/common/write-buffer.c:25
++msgid "Buffer location"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:26
++msgid "The location where to store the output GeglBuffer"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:27
++msgid "babl format"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:28
++msgid "The babl format of the output GeglBuffer, NULL to use input buffer format"
++msgstr ""
++
++#: ../operations/common/buffer-sink.c:83
++#: ../operations/common/write-buffer.c:127
++msgid "A GEGL buffer destination surface."
++msgstr ""
++
++#: ../operations/common/buffer-source.c:25
++msgid "Input buffer"
++msgstr "Inmatningsbuffert"
++
++#: ../operations/common/buffer-source.c:26
++msgid "The GeglBuffer to load into the pipeline"
++msgstr ""
++
++#: ../operations/common/buffer-source.c:177
++msgid "A source that uses an in-memory GeglBuffer, for use internally by GEGL."
++msgstr ""
++
++#: ../operations/common/c2g.c:28
++msgid "Neighborhood taken into account, this is the radius in pixels taken into account when deciding which colors map to which gray values"
++msgstr ""
++
++#: ../operations/common/c2g.c:29
++#: ../operations/common/stress.c:29
++msgid "Samples"
++msgstr ""
++
++#: ../operations/common/c2g.c:30
++#: ../operations/common/stress.c:30
++msgid "Number of samples to do per iteration looking for the range of colors"
++msgstr ""
++
++#: ../operations/common/c2g.c:31
++#: ../operations/common/fractal-explorer.c:42
++#: ../operations/common/matting-global.c:25
++#: ../operations/common/stress.c:31
++#: ../operations/workshop/mandelbrot.c:31
++msgid "Iterations"
++msgstr ""
++
++#: ../operations/common/c2g.c:32
++msgid "Number of iterations, a higher number of iterations provides less noisy results at a computational cost"
++msgstr ""
++
++#: ../operations/common/c2g.c:493
++msgid "Color to grayscale conversion, uses envelopes formed from spatial  color differences to perform color-feature preserving grayscale  spatial contrast enhancement"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:25
++#: ../operations/common/fractal-explorer.c:30
++#: ../operations/common/fractal-explorer.c:31
++#: ../operations/common/grid.c:24
++#: ../operations/common/rectangle.c:33
++#: ../operations/core/crop.c:27
++#: ../operations/external/svg-load.c:27
++#: ../operations/external/text.c:38
++#: ../operations/external/v4l.c:27
++#: ../operations/external/vector-stroke.c:30
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width"
++msgstr "Bredd"
++
++#: ../operations/common/checkerboard.c:26
++#: ../operations/common/grid.c:25
++msgid "Horizontal width of cells pixels"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:27
++#: ../operations/common/fractal-explorer.c:32
++#: ../operations/common/fractal-explorer.c:33
++#: ../operations/common/grid.c:26
++#: ../operations/common/rectangle.c:35
++#: ../operations/core/crop.c:28
++#: ../operations/external/svg-load.c:29
++#: ../operations/external/text.c:40
++#: ../operations/external/v4l.c:28
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height"
++msgstr "Höjd"
++
++#: ../operations/common/checkerboard.c:28
++#: ../operations/common/grid.c:27
++msgid "Vertical width of cells in pixels"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:29
++#: ../operations/common/grid.c:28
++#: ../operations/common/mirrors.c:36
++msgid "X offset"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:30
++#: ../operations/common/grid.c:29
++msgid "Horizontal offset (from origin) for start of grid"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:31
++#: ../operations/common/grid.c:30
++#: ../operations/common/mirrors.c:38
++msgid "Y offset"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:32
++#: ../operations/common/grid.c:31
++msgid "Vertical offset (from origin) for start of grid"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:33
++#: ../operations/common/color.c:24
++#: ../operations/common/color-to-alpha.c:28
++#: ../operations/common/grid.c:36
++#: ../operations/common/rectangle.c:37
++#: ../operations/common/vignette.c:25
++#: ../operations/external/text.c:31
++#: ../operations/external/vector-fill.c:27
++#: ../operations/external/vector-stroke.c:27
++#: ../operations/workshop/linear-gradient.c:28
++#: ../operations/workshop/radial-gradient.c:28
++msgid "Color"
++msgstr "Färg"
++
++#: ../operations/common/checkerboard.c:34
++msgid "One of the cell colors (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:35
++#: ../operations/workshop/linear-gradient.c:30
++#: ../operations/workshop/radial-gradient.c:30
++msgid "Other color"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:36
++msgid "The other cell color (defaults to 'white')"
++msgstr ""
++
++#: ../operations/common/checkerboard.c:146
++msgid "Checkerboard renderer"
++msgstr ""
++
++#: ../operations/common/color.c:25
++msgid "The color to render (defaults to 'black')"
++msgstr ""
++
++#: ../operations/common/color.c:88
++msgid "Generates a buffer entirely filled with the specified color, crop it to get smaller dimensions."
++msgstr ""
++
++#: ../operations/common/color-reduction.c:33
++msgid "Red bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:33
++msgid "Number of bits for red channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:34
++msgid "Green bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:34
++msgid "Number of bits for green channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:35
++msgid "Blue bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:35
++msgid "Number of bits for blue channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:36
++msgid "Alpha bits"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:36
++msgid "Number of bits for alpha channel"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:38
++msgid "Dithering Strategy"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:39
++msgid "The dithering strategy to use"
++msgstr ""
++
++#: ../operations/common/color-reduction.c:478
++msgid "Reduces the number of bits per channel (colors and alpha), with optional dithering"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid "Original temperature"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:27
++msgid "Estimated temperature of the light source in Kelvin the image was taken with."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Intended temperature"
++msgstr ""
++
++#: ../operations/common/color-temperature.c:28
++msgid "Corrected estimation of the temperature of the light source in Kelvin."
++msgstr ""
++
++#: ../operations/common/color-temperature.c:267
++msgid "Allows changing the color temperature of an image."
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:29
++msgid "The color to render (defaults to 'white')"
++msgstr ""
++
++#: ../operations/common/color-to-alpha.c:176
++msgid "Performs color-to-alpha on the image."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:25
++msgid "Sample points"
++msgstr "Samplingspunkter"
++
++#: ../operations/common/contrast-curve.c:26
++msgid "Number of curve sampling points.  0 for exact calculation."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:27
++msgid "Curve"
++msgstr "Kurva"
++
++#: ../operations/common/contrast-curve.c:27
++msgid "The contrast curve."
++msgstr ""
++
++#: ../operations/common/contrast-curve.c:125
++msgid "Adjusts the contrast of the image according to a curve."
++msgstr ""
++
++#: ../operations/common/difference-of-gaussians.c:25
++msgid "Radius 1"
++msgstr "Radie 1"
++
++#: ../operations/common/difference-of-gaussians.c:27
++msgid "Radius 2"
++msgstr "Radie 2"
++
++#: ../operations/common/difference-of-gaussians.c:101
++msgid "Does an edge detection based on the difference of two gaussian blurs."
++msgstr ""
++
++#: ../operations/common/display.c:24
++#: ../operations/external/sdl-display.c:26
++msgid "Title to be given to output window"
++msgstr ""
++
++#: ../operations/common/display.c:142
++msgid "Display the input buffer in a window."
++msgstr ""
++
++#: ../operations/common/dropshadow.c:25
++#: ../operations/common/layer.c:32
++#: ../operations/common/layer.c:33
++#: ../operations/common/opacity.c:24
++#: ../operations/external/vector-fill.c:30
++#: ../operations/external/vector-stroke.c:33
++msgid "Opacity"
++msgstr "Opacitet"
++
++#: ../operations/common/dropshadow.c:26
++#: ../operations/common/layer.c:34
++#: ../operations/common/rectangle.c:29
++#: ../operations/common/vignette.c:32
++#: ../operations/common/waves.c:26
++#: ../operations/core/crop.c:25
++msgid "X"
++msgstr "X"
++
++#: ../operations/common/dropshadow.c:27
++msgid "Horizontal shadow offset"
++msgstr ""
++
++#: ../operations/common/dropshadow.c:28
++#: ../operations/common/layer.c:36
++#: ../operations/common/rectangle.c:31
++#: ../operations/common/vignette.c:33
++#: ../operations/common/waves.c:29
++#: ../operations/core/crop.c:26
++msgid "Y"
++msgstr "Y"
++
++#: ../operations/common/dropshadow.c:29
++msgid "Vertical shadow offset"
++msgstr ""
++
++#: ../operations/common/dropshadow.c:82
++msgid "Creates a dropshadow effect on the input buffer"
++msgstr ""
++
++#: ../operations/common/edge-laplace.c:521
++msgid "High-resolution edge detection"
++msgstr ""
++
++#: ../operations/common/edge-sobel.c:28
++#: ../operations/common/edge-sobel.c:29
++#: ../operations/workshop/noise-spread.c:29
++msgid "Horizontal"
++msgstr "Horisontell"
++
++#: ../operations/common/edge-sobel.c:31
++#: ../operations/common/edge-sobel.c:32
++#: ../operations/workshop/noise-spread.c:31
++msgid "Vertical"
++msgstr "Vertikal"
++
++#: ../operations/common/edge-sobel.c:34
++#: ../operations/common/edge-sobel.c:35
++msgid "Keep Signal"
++msgstr ""
++
++#: ../operations/common/edge-sobel.c:352
++msgid "Specialized direction-dependent edge detection"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:25
++msgid "Exposure Values"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:26
++msgid "Relative brightness of each exposure in EV"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:27
++msgid "Discretization Bits"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:29
++msgid "Log2 of source's discretization steps"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:30
++msgid "Weight Sigma"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:32
++msgid "Weight distribution sigma controlling response contributions"
++msgstr ""
++
++#: ../operations/common/exp-combine.c:1293
++msgid "Combine multiple scene exposures into one high range buffer"
++msgstr ""
++
++#: ../operations/common/fattal02.c:33
++#: ../operations/common/noise.c:25
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha"
++msgstr "Alfa"
++
++#: ../operations/common/fattal02.c:35
++msgid "Gradient threshold for detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:36
++msgid "Beta"
++msgstr "Beta"
++
++#: ../operations/common/fattal02.c:38
++msgid "Strength of local detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:39
++#: ../operations/common/mantiuk06.c:34
++#: ../operations/workshop/color-rotate.c:50
++msgid "Saturation"
++msgstr "Färgmättnad"
++
++#: ../operations/common/fattal02.c:41
++msgid "Global color saturation factor"
++msgstr ""
++
++#: ../operations/common/fattal02.c:42
++msgid "Noise"
++msgstr "Brus"
++
++#: ../operations/common/fattal02.c:44
++msgid "Gradient threshold for lowering detail enhancement"
++msgstr ""
++
++#: ../operations/common/fattal02.c:1325
++msgid "Adapt an image, which may have a high dynamic range, for presentation using a low dynamic range. This operator attenuates the magnitudes of local image gradients, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Fractal type"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:35
++msgid "Type of a fractal"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:37
++msgid "Left"
++msgstr "Vänster"
++
++#: ../operations/common/fractal-explorer.c:38
++msgid "Right"
++msgstr "Höger"
++
++#: ../operations/common/fractal-explorer.c:39
++msgid "Top"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:40
++msgid "Bottom"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:44
++msgid "CX (only Julia)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:45
++msgid "CY (only Julia)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:47
++msgid "Red stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:48
++msgid "Red stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:49
++msgid "Green stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:50
++msgid "Green stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:51
++msgid "Blue stretch"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:52
++msgid "Blue stretching factor"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:54
++msgid "Red mode"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:55
++msgid "Red application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:56
++msgid "Green mode"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:57
++msgid "Green application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:58
++msgid "Blue mode"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:59
++msgid "Blue application mode (0:SIN; 1:COS; 2:NONE)"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:61
++#: ../operations/common/fractal-explorer.c:62
++msgid "Red inversion"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:63
++#: ../operations/common/fractal-explorer.c:64
++msgid "Green inversion"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:65
++#: ../operations/common/fractal-explorer.c:66
++msgid "Blue inversion"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:68
++msgid "Colors"
++msgstr "Färger"
++
++#: ../operations/common/fractal-explorer.c:69
++msgid "Number of colors"
++msgstr "Antal färger"
++
++#: ../operations/common/fractal-explorer.c:71
++msgid "Loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:72
++msgid "Use loglog smoothing"
++msgstr ""
++
++#: ../operations/common/fractal-explorer.c:474
++msgid "Fractal Explorer"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:30
++msgid "Size X"
++msgstr "Storlek X"
++
++#: ../operations/common/gaussian-blur.c:31
++msgid "Standard deviation for the horizontal axis. (multiply by ~2 to get radius)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:32
++msgid "Size Y"
++msgstr "Storlek Y"
++
++#: ../operations/common/gaussian-blur.c:33
++msgid "Standard deviation for the vertical axis. (multiply by ~2 to get radius.)"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:34
++#: ../operations/transform/transform-core.c:218
++#: ../operations/workshop/emboss.c:31
++msgid "Filter"
++msgstr "Filter"
++
++#: ../operations/common/gaussian-blur.c:35
++msgid "Optional parameter to override the automatic selection of blur filter. Choices are fir, iir, auto"
++msgstr ""
++
++#: ../operations/common/gaussian-blur.c:731
++msgid "Performs an averaging of neighboring pixels with the normal distribution as weighting"
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++#: ../operations/common/gegl-buffer-save-op.c:24
++#: ../operations/common/load.c:25
++#: ../operations/common/magick-load.c:26
++#: ../operations/common/open-buffer.c:25
++#: ../operations/common/raw-load.c:27
++#: ../operations/common/save.c:25
++#: ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++#: ../operations/external/jpg-save.c:25
++#: ../operations/external/png-load.c:27
++#: ../operations/external/png-save.c:26
++#: ../operations/external/ppm-load.c:25
++#: ../operations/external/ppm-save.c:25
++#: ../operations/external/rgbe-load.c:26
++#: ../operations/external/rgbe-save.c:26
++#: ../operations/external/svg-load.c:25
++#: ../operations/workshop/external/ff-save.c:30
++#: ../operations/workshop/external/gluas.c:43
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "File"
++msgstr "Fil"
++
++#: ../operations/common/gegl-buffer-load-op.c:24
++msgid "Path of GeglBuffer file to load."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-load-op.c:88
++msgid "GeglBuffer file loader."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:24
++msgid "Target file path to write GeglBuffer to."
++msgstr ""
++
++#: ../operations/common/gegl-buffer-save-op.c:62
++msgid "GeglBuffer file writer."
++msgstr ""
++
++#: ../operations/common/grey.c:104
++msgid "Turns the image greyscale"
++msgstr ""
++
++#: ../operations/common/grid.c:32
++msgid "Line Width"
++msgstr ""
++
++#: ../operations/common/grid.c:33
++msgid "Width of grid lines in pixels"
++msgstr ""
++
++#: ../operations/common/grid.c:34
++msgid "Line Height"
++msgstr ""
++
++#: ../operations/common/grid.c:35
++msgid "Height of grid lines in pixels"
++msgstr ""
++
++#: ../operations/common/grid.c:37
++msgid "Color of the grid lines"
++msgstr ""
++
++#: ../operations/common/grid.c:129
++msgid "Grid renderer"
++msgstr ""
++
++#: ../operations/common/introspect.c:26
++msgid "Node"
++msgstr ""
++
++#: ../operations/common/introspect.c:26
++msgid "GeglNode to introspect"
++msgstr ""
++
++#: ../operations/common/introspect.c:160
++msgid "GEGL graph visualizer."
++msgstr ""
++
++#: ../operations/common/invert.c:86
++msgid "Inverts the components (except alpha), the result is the corresponding \"negative\" image."
++msgstr ""
++
++#: ../operations/common/layer.c:30
++msgid "Operation"
++msgstr ""
++
++#: ../operations/common/layer.c:31
++msgid "Composite operation to use"
++msgstr ""
++
++#: ../operations/common/layer.c:35
++#: ../operations/common/rectangle.c:30
++msgid "Horizontal position"
++msgstr ""
++
++#: ../operations/common/layer.c:37
++#: ../operations/common/rectangle.c:32
++msgid "Vertical position"
++msgstr ""
++
++#: ../operations/common/layer.c:38
++#: ../operations/common/noise.c:27
++#: ../operations/common/unsharp-mask.c:26
++#: ../operations/workshop/external/lens-correct.c:43
++msgid "Scale"
++msgstr "Skala"
++
++#: ../operations/common/layer.c:39
++msgid "Scale 1:1 size"
++msgstr ""
++
++#: ../operations/common/layer.c:40
++msgid "Source"
++msgstr "Källa"
++
++#: ../operations/common/layer.c:41
++msgid "Source datafile (png, jpg, raw, svg, bmp, tif, ...)"
++msgstr ""
++
++#: ../operations/common/layer.c:267
++msgid "A layer in the traditional sense"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:33
++msgid "Main:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:34
++#: ../operations/common/lens-distortion.c:36
++msgid "Main value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:35
++msgid "Zoom:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:37
++msgid "Edge:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:38
++msgid "Edge value of distortion"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:39
++msgid "Brighten:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:40
++msgid "Brighten the image"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:41
++msgid "X shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:42
++msgid "Shift horizontal"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:43
++msgid "Y shift:"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:44
++msgid "Shift vertical"
++msgstr ""
++
++#: ../operations/common/lens-distortion.c:321
++#: ../operations/workshop/external/lens-correct.c:476
++msgid "Copies image performing lens distortion correction."
++msgstr ""
++
++#: ../operations/common/levels.c:26
++msgid "Low input"
++msgstr ""
++
++#: ../operations/common/levels.c:27
++msgid "Input luminance level to become lowest output"
++msgstr ""
++
++#: ../operations/common/levels.c:28
++msgid "High input"
++msgstr ""
++
++#: ../operations/common/levels.c:29
++msgid "Input luminance level to become white."
++msgstr ""
++
++#: ../operations/common/levels.c:30
++msgid "Low output"
++msgstr ""
++
++#: ../operations/common/levels.c:31
++msgid "Lowest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:32
++msgid "High output"
++msgstr ""
++
++#: ../operations/common/levels.c:33
++msgid "Highest luminance level in output"
++msgstr ""
++
++#: ../operations/common/levels.c:182
++msgid "Remaps the intensity range of the image"
++msgstr ""
++
++#: ../operations/common/load.c:25
++#: ../operations/common/magick-load.c:26
++#: ../operations/common/raw-load.c:27
++#: ../operations/external/png-load.c:27
++#: ../operations/external/ppm-load.c:25
++#: ../operations/external/rgbe-load.c:26
++#: ../operations/workshop/rawbayer-load.c:25
++msgid "Path of file to load."
++msgstr ""
++
++#: ../operations/common/load.c:180
++msgid "Multipurpose file loader, that uses other native handlers, and fallback conversion using image magick's convert."
++msgstr ""
++
++#: ../operations/common/magick-load.c:136
++msgid "Image Magick wrapper using the png op."
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:33
++msgid "The amount of contrast compression"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:36
++msgid "Global colour saturation factor"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:37
++msgid "Detail"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:39
++msgid "Level of emphasis on image gradient details"
++msgstr ""
++
++#: ../operations/common/mantiuk06.c:1639
++msgid "Adapt an image, which may have a high dynamic range, for presentation using a low dynamic range. This operator constrains contrasts across multiple spatial frequencies, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:22
++#: ../operations/common/map-relative.c:26
++#: ../operations/common/ripple.c:39
++#: ../operations/common/waves.c:41
++#: ../operations/workshop/ditto.c:27
++msgid "Sampler"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:23
++#: ../operations/common/map-relative.c:27
++#: ../operations/common/ripple.c:40
++#: ../operations/common/waves.c:42
++#: ../operations/workshop/ditto.c:28
++msgid "Sampler used internally"
++msgstr ""
++
++#: ../operations/common/map-absolute.c:148
++msgid "sample input with an auxiliary buffer that contain absolute source coordinates"
++msgstr ""
++
++#: ../operations/common/map-relative.c:23
++msgid "Scaling"
++msgstr ""
++
++#: ../operations/common/map-relative.c:24
++msgid "scaling factor of displacement, indicates how large spatial displacement a relative mapping value of 1.0 corresponds to."
++msgstr ""
++
++#: ../operations/common/map-relative.c:156
++msgid "sample input with an auxiliary buffer that contain relative source coordinates"
++msgstr ""
++
++#: ../operations/common/matting-global.c:26
++msgid "Number of iterations"
++msgstr ""
++
++#: ../operations/common/matting-global.c:482
++msgid "Given a sparse user supplied tri-map and an input image, create a foreground alpha matte. Set white as foreground, black as background for the tri-map. Everything else will be treated as unknown and filled in."
++msgstr ""
++
++#: ../operations/common/mblur.c:25
++msgid "Dampness"
++msgstr ""
++
++#: ../operations/common/mblur.c:26
++msgid "The value represents the contribution of the past to the new frame."
++msgstr ""
++
++#: ../operations/common/mblur.c:144
++msgid "Accumulating motion blur"
++msgstr ""
++
++#: ../operations/common/mirrors.c:30
++msgid "Mirror rotation"
++msgstr ""
++
++#: ../operations/common/mirrors.c:30
++msgid "Rotation applied to the mirrors"
++msgstr ""
++
++#: ../operations/common/mirrors.c:32
++msgid "Result rotation"
++msgstr ""
++
++#: ../operations/common/mirrors.c:32
++msgid "Rotation applied to the result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:34
++msgid "Mirrors"
++msgstr "Speglar"
++
++#: ../operations/common/mirrors.c:34
++msgid "Number of mirrors to use"
++msgstr ""
++
++#: ../operations/common/mirrors.c:36
++msgid "X offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:38
++msgid "Y offset of the result of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:40
++msgid "Center X"
++msgstr ""
++
++#: ../operations/common/mirrors.c:40
++msgid "X axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:42
++msgid "Center Y"
++msgstr ""
++
++#: ../operations/common/mirrors.c:42
++msgid "Y axis ratio for the center of mirroring"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "Trim X"
++msgstr ""
++
++#: ../operations/common/mirrors.c:44
++msgid "X axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Trim Y"
++msgstr ""
++
++#: ../operations/common/mirrors.c:46
++msgid "Y axis ratio for trimming mirror expanse"
++msgstr ""
++
++#: ../operations/common/mirrors.c:48
++msgid "Zoom"
++msgstr ""
++
++#: ../operations/common/mirrors.c:48
++#: ../operations/common/mirrors.c:50
++msgid "Scale factor to make rendering size bigger"
++msgstr ""
++
++#: ../operations/common/mirrors.c:50
++msgid "Expand"
++msgstr ""
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result"
++msgstr ""
++
++#: ../operations/common/mirrors.c:52
++msgid "Clip result to input size"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Wrap input"
++msgstr ""
++
++#: ../operations/common/mirrors.c:54
++msgid "Fill full output area"
++msgstr ""
++
++#: ../operations/common/mirrors.c:401
++msgid "Applies mirroring effect on the image."
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:26
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red"
++msgstr "Röd"
++
++#: ../operations/common/mono-mixer.c:27
++msgid "Amount of red"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:28
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green"
++msgstr "Grön"
++
++#: ../operations/common/mono-mixer.c:29
++msgid "Amount of green"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:30
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue"
++msgstr "Blå"
++
++#: ../operations/common/mono-mixer.c:31
++msgid "Amount of blue"
++msgstr ""
++
++#: ../operations/common/mono-mixer.c:104
++msgid "Monochrome channel mixer"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:27
++msgid "Length"
++msgstr "Längd"
++
++#: ../operations/common/motion-blur.c:28
++msgid "Length of blur in pixels"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:29
++#: ../operations/common/ripple.c:36
++msgid "Angle"
++msgstr "Vinkel"
++
++#: ../operations/common/motion-blur.c:30
++msgid "Angle of blur in degrees"
++msgstr ""
++
++#: ../operations/common/motion-blur.c:349
++msgid "Linear motion blur"
++msgstr ""
++
++#: ../operations/common/noise.c:29
++msgid "Z offset"
++msgstr ""
++
++#: ../operations/common/noise.c:31
++#: ../operations/workshop/cubism.c:34
++#: ../operations/workshop/plasma.c:33
++msgid "Seed"
++msgstr ""
++
++#: ../operations/common/noise.c:33
++msgid "Iteration"
++msgstr "Iteration"
++
++#: ../operations/common/noise.c:111
++msgid "Perlin noise generator"
++msgstr ""
++
++#: ../operations/common/noise-reduction.c:26
++#: ../operations/workshop/warp.c:35
++msgid "Strength"
++msgstr "Styrka"
++
++#: ../operations/common/noise-reduction.c:26
++msgid "How many iteratarions to run the algorithm with"
++msgstr ""
++
++#: ../operations/common/opacity.c:25
++msgid "Global opacity value that is always used on top of the optional auxiliary input buffer."
++msgstr ""
++
++#: ../operations/common/opacity.c:153
++msgid "Weights the opacity of the input both the value of the aux input and the global value property."
++msgstr ""
++
++#: ../operations/common/open-buffer.c:25
++msgid "a GeglBuffer on disk to open"
++msgstr ""
++
++#: ../operations/common/open-buffer.c:130
++msgid "A source that uses an on-disk GeglBuffer."
++msgstr ""
++
++#: ../operations/common/over.c:153
++msgid "Porter Duff operation over (d = cA + cB * (1 - aA))"
++msgstr ""
++
++#: ../operations/common/pixelize.c:25
++msgid "Block Width"
++msgstr ""
++
++#: ../operations/common/pixelize.c:26
++msgid "Width of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:27
++msgid "Block Height"
++msgstr ""
++
++#: ../operations/common/pixelize.c:28
++msgid "Height of blocks in pixels"
++msgstr ""
++
++#: ../operations/common/pixelize.c:338
++msgid "Simplify image into an array of solid-colored squares"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:34
++#: ../operations/common/polar-coordinates.c:35
++msgid "Circle depth in percent"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:36
++msgid "Offset angle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:37
++msgid "Offset angle."
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Map backwards"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:38
++msgid "Start from the right instead of the left"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Map from top"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:39
++msgid "Put the top row in the middle and the bottom row on the outside"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "To polar"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:40
++msgid "Map the image to a circle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:41
++msgid "X:"
++msgstr "X:"
++
++#: ../operations/common/polar-coordinates.c:42
++#: ../operations/common/polar-coordinates.c:44
++msgid "Origin point for the polar coordinates"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:43
++msgid "Y:"
++msgstr "Y:"
++
++#: ../operations/common/polar-coordinates.c:45
++msgid "Choose middle"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:46
++msgid "Let origin point to be the middle one"
++msgstr ""
++
++#: ../operations/common/polar-coordinates.c:402
++msgid "Performs polar-coordinates on the image."
++msgstr ""
++
++#: ../operations/common/posterize.c:25
++#: ../operations/external/matting-levin.c:36
++msgid "Levels"
++msgstr "Nivåer"
++
++#: ../operations/common/posterize.c:26
++msgid "number of levels per component"
++msgstr ""
++
++#: ../operations/common/posterize.c:82
++msgid "Reduces the number of levels in each color component of the image."
++msgstr ""
++
++#: ../operations/common/raw-load.c:183
++msgid "Raw image loader, wrapping dcraw with pipes."
++msgstr ""
++
++#: ../operations/common/rectangle.c:34
++msgid "Horizontal extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:36
++msgid "Vertical extent"
++msgstr ""
++
++#: ../operations/common/rectangle.c:38
++msgid "Color to render"
++msgstr ""
++
++#: ../operations/common/rectangle.c:134
++msgid "A rectangular source of a fixed size with a solid color"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:29
++msgid "Overall brightness of the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:30
++msgid "Chromatic Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:32
++msgid "Adapation to colour variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:33
++msgid "Light Adaptation"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:35
++msgid "Adapation to light variation across the image"
++msgstr ""
++
++#: ../operations/common/reinhard05.c:274
++msgid "Adapt an image, which may have a high dynamic range, for presentation using a low dynamic range. This is an efficient global operator derived from simple physiological observations, producing luminance within the range 0.0-1.0"
++msgstr ""
++
++#: ../operations/common/remap.c:96
++msgid "stretch components of pixels individually based on luminance envelopes"
++msgstr ""
++
++#: ../operations/common/ripple.c:27
++#: ../operations/common/waves.c:32
++msgid "Amplitude"
++msgstr ""
++
++#: ../operations/common/ripple.c:28
++#: ../operations/common/waves.c:33
++msgid "Amplitude of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:30
++#: ../operations/common/waves.c:35
++msgid "Period"
++msgstr ""
++
++#: ../operations/common/ripple.c:31
++#: ../operations/common/waves.c:36
++msgid "Period of the ripple"
++msgstr ""
++
++#: ../operations/common/ripple.c:33
++#: ../operations/common/ripple.c:34
++#: ../operations/common/waves.c:38
++#: ../operations/common/waves.c:39
++msgid "Phase shift"
++msgstr ""
++
++#: ../operations/common/ripple.c:37
++msgid "Angle in degree"
++msgstr ""
++
++#: ../operations/common/ripple.c:47
++msgid "Wave type"
++msgstr ""
++
++#: ../operations/common/ripple.c:48
++msgid "Type of wave"
++msgstr ""
++
++#: ../operations/common/ripple.c:169
++msgid "Transform the buffer with a ripple pattern"
++msgstr ""
++
++#: ../operations/common/save.c:25
++msgid "Path of file to save."
++msgstr ""
++
++#: ../operations/common/save.c:195
++msgid "Multipurpose file saver, that uses other native handlers."
++msgstr ""
++
++#: ../operations/common/snn-mean.c:28
++#: ../operations/workshop/snn-percentile.c:29
++msgid "Pairs"
++msgstr ""
++
++#: ../operations/common/snn-mean.c:29
++msgid "Number of pairs; higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/common/snn-mean.c:436
++msgid "Noise reducing edge enhancing blur filter based  on Symmetric Nearest Neighbours"
++msgstr ""
++
++#: ../operations/common/stress.c:28
++msgid "Neighborhood taken into account, for enhancement ideal values are close to the longest side of the image, increasing this increases the runtime"
++msgstr ""
++
++#: ../operations/common/stress.c:32
++msgid "Number of iterations, a higher number of iterations provides a less noisy rendering at a computational cost"
++msgstr ""
++
++#: ../operations/common/stress.c:191
++msgid "Spatio Temporal Retinex-like Envelope with Stochastic Sampling"
++msgstr ""
++
++#: ../operations/common/stretch-contrast.c:162
++msgid "Scales the components of the buffer to be in the 0.0-1.0 range. This improves images that make poor use of the available contrast (little contrast, very dark, or very bright images)."
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27
++#: ../operations/common/svg-saturate.c:26
++msgid "Values"
++msgstr "Värden"
++
++#: ../operations/common/svg-huerotate.c:27
++#: ../operations/common/svg-luminancetoalpha.c:27
++#: ../operations/common/svg-matrix.c:27
++#: ../operations/common/svg-saturate.c:26
++msgid "list of <number>s"
++msgstr ""
++
++#: ../operations/common/svg-huerotate.c:116
++msgid "SVG color matrix operation svg_huerotate"
++msgstr ""
++
++#: ../operations/common/svg-luminancetoalpha.c:95
++msgid "SVG color matrix operation svg_luminancetoalpha"
++msgstr ""
++
++#: ../operations/common/svg-matrix.c:132
++msgid "SVG color matrix operation svg_matrix"
++msgstr ""
++
++#: ../operations/common/svg-saturate.c:127
++msgid "SVG color matrix operation svg_saturate"
++msgstr ""
++
++#: ../operations/common/threshold.c:25
++#: ../operations/external/matting-levin.c:31
++#: ../operations/workshop/color-rotate.c:54
++#: ../operations/workshop/red-eye-removal.c:31
++msgid "Threshold"
++msgstr "Tröskelvärde"
++
++#: ../operations/common/threshold.c:26
++msgid "Global threshold level (used when there is no auxiliary input buffer)."
++msgstr ""
++
++#: ../operations/common/threshold.c:123
++msgid "Thresholds the image to white/black based on either the global value set in the value property, or per pixel from the aux input."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:24
++msgid "Std. Dev."
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:25
++msgid "Standard deviation (spatial scale factor)"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:27
++msgid "Scale, strength of effect"
++msgstr ""
++
++#: ../operations/common/unsharp-mask.c:73
++msgid "Performs an unsharp mask on the input buffer (sharpens an image by adding false mach-bands around edges)"
++msgstr ""
++
++#: ../operations/common/value-invert.c:190
++msgid "Inverts just the value component, the result is the corresponding `inverted' image."
++msgstr ""
++
++#: ../operations/common/vignette.c:24
++msgid "Shape"
++msgstr ""
++
++#: ../operations/common/vignette.c:24
++msgid "Shape to use: 0=circle 1=diamond 2=square"
++msgstr ""
++
++#: ../operations/common/vignette.c:25
++msgid "Defaults to 'black', you can use transparency here to erase portions of an image"
++msgstr ""
++
++#: ../operations/common/vignette.c:26
++msgid "How far out vignetting goes as portion of half image diagonal"
++msgstr ""
++
++#: ../operations/common/vignette.c:27
++msgid "Softness"
++msgstr ""
++
++#: ../operations/common/vignette.c:28
++msgid "Gamma"
++msgstr "Gamma"
++
++#: ../operations/common/vignette.c:28
++msgid "Falloff linearity"
++msgstr ""
++
++#: ../operations/common/vignette.c:29
++msgid "Proportion"
++msgstr ""
++
++#: ../operations/common/vignette.c:29
++msgid "How close we are to image proportions"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid "Squeeze"
++msgstr ""
++
++#: ../operations/common/vignette.c:30
++msgid "Aspect ratio to use, -0.5 = 1:2, 0.0 = 1:1, 0.5 = 2:1, -1.0 = 1:inf 1.0 = inf:1, this is applied after proportion is taken into account, to directly use squeeze factor as proportions, set proportion to 0.0."
++msgstr ""
++
++#: ../operations/common/vignette.c:32
++msgid "Horizontal center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:33
++msgid "Vertical center of vignetting"
++msgstr ""
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation"
++msgstr ""
++
++#: ../operations/common/vignette.c:34
++msgid "Rotation angle"
++msgstr ""
++
++#: ../operations/common/vignette.c:386
++msgid "A vignetting op, applies a vignette to an image. Simulates the luminance fall off at edge of exposed film, and some other fuzzier border effects that can naturally occur with analoge photograpy."
++msgstr ""
++
++#: ../operations/common/waves.c:27
++msgid "X coordinate of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:30
++msgid "Coordinate y of the center of the waves"
++msgstr ""
++
++#: ../operations/common/waves.c:164
++msgid "Transform the buffer with waves"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:25
++#: ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29
++#: ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29
++#: ../operations/generated/subtract.c:29
++msgid "Value"
++msgstr "Värde"
++
++#: ../operations/common/weighted-blend.c:25
++#: ../operations/generated/add.c:29
++#: ../operations/generated/divide.c:29
++#: ../operations/generated/gamma.c:29
++#: ../operations/generated/multiply.c:29
++#: ../operations/generated/subtract.c:29
++msgid "global value used if aux doesn't contain data"
++msgstr ""
++
++#: ../operations/common/weighted-blend.c:124
++msgid "blend two images using alpha values as weights"
++msgstr ""
++
++#: ../operations/common/write-buffer.c:26
++msgid "Write to an existing GeglBuffer"
++msgstr ""
++
++#: ../operations/core/clone.c:25
++msgid "Reference"
++msgstr "Referens"
++
++#: ../operations/core/clone.c:26
++msgid "The reference ID used as input (for use in XML)."
++msgstr ""
++
++#: ../operations/core/clone.c:112
++msgid "Clone a buffer"
++msgstr "Klona en buffert"
++
++#: ../operations/core/convert-format.c:28
++msgid "Output format"
++msgstr "Utmatningsformat"
++
++#: ../operations/core/convert-format.c:29
++msgid "Babl output format string"
++msgstr ""
++
++#: ../operations/core/convert-format.c:81
++msgid "Convert the data to the specified format"
++msgstr ""
++
++#: ../operations/core/crop.c:179
++msgid "Crop a buffer"
++msgstr ""
++
++#: ../operations/core/nop.c:72
++msgid "No operation (can be used as a routing point)"
++msgstr ""
++
++#: ../operations/external/ff-load.c:25
++#: ../operations/external/jp2-load.c:25
++#: ../operations/external/jpg-load.c:25
++msgid "Path of file to load"
++msgstr "Sökväg till en fil att läsa in"
++
++#: ../operations/external/ff-load.c:26
++#: ../operations/external/v4l.c:29
++msgid "Frame"
++msgstr ""
++
++#: ../operations/external/ff-load.c:26
++msgid "Frame number"
++msgstr ""
++
++#: ../operations/external/ff-load.c:471
++msgid "FFmpeg video frame importer"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:70
++#, c-format
++msgid "Unknown JPEG 2000 image format in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:77
++#, c-format
++msgid "Unable to open JPEG 2000 image in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:84
++#, c-format
++msgid "Unable to create output color profile for '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:92
++#, c-format
++msgid "Unable to convert image to sRGB color space when processing '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:100
++#, c-format
++msgid "Unsupported non-RGB JPEG 2000 file with %d components in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:111
++#, c-format
++msgid "Unsupported JPEG 2000 file with depth %d in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:124
++#, c-format
++msgid "Components of input image '%s' don't match"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:209
++#, c-format
++msgid "One or more of R, G, B components are missing from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:218
++#, c-format
++msgid "One or more of R, G, B components have signed data in '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:252
++#, c-format
++msgid "Error reading row %d component %d from '%s'"
++msgstr ""
++
++#: ../operations/external/jp2-load.c:397
++msgid "JPEG 2000 image loader"
++msgstr ""
++
++#: ../operations/external/jpg-load.c:223
++msgid "JPG image loader"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:26
++msgid "Target path and filename, use '-' for stdout"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:27
++msgid "Quality"
++msgstr "Kvalitet"
++
++#: ../operations/external/jpg-save.c:28
++msgid "JPEG compression quality (between 1 and 100)"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:29
++msgid "Smoothing"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:30
++msgid "Smoothing factor from 1 to 100; 0 disables smoothing"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:31
++msgid "Optimize"
++msgstr "Optimera"
++
++#: ../operations/external/jpg-save.c:32
++msgid "Use optimized huffman tables"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:33
++msgid "Progressive"
++msgstr "Progressiv"
++
++#: ../operations/external/jpg-save.c:34
++msgid "Create progressive JPEG images"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:35
++#: ../operations/workshop/color-rotate.c:46
++msgid "Grayscale"
++msgstr "Gråskala"
++
++#: ../operations/external/jpg-save.c:36
++msgid "Create a grayscale (monochrome) image"
++msgstr ""
++
++#: ../operations/external/jpg-save.c:192
++msgid "JPEG image saver (passes the buffer through, saves as a side-effect)"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:25
++msgid "Epsilon"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:27
++msgid "Log of the error weighting"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:30
++msgid "Radius of the processing window"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:33
++msgid "Alpha threshold for multilevel processing"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:34
++msgid "Lambda"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:35
++msgid "Trimap influence factor"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:38
++msgid "Number of downsampled levels to use"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:39
++msgid "Active Levels"
++msgstr "Aktiva nivåer"
++
++#: ../operations/external/matting-levin.c:41
++msgid "Number of levels to perform solving"
++msgstr ""
++
++#: ../operations/external/matting-levin.c:1428
++msgid "Given a sparse user supplied tri-map and an input image, create a foreground alpha mat. Set white as selected, black as unselected, for the tri-map."
++msgstr ""
++
++#: ../operations/external/path.c:27
++msgid "Fill Color"
++msgstr ""
++
++#: ../operations/external/path.c:28
++msgid "Color of paint to use for filling, use 0 opacity to disable filling"
++msgstr ""
++
++#: ../operations/external/path.c:29
++msgid "Stroke Color"
++msgstr ""
++
++#: ../operations/external/path.c:30
++msgid "Color of paint to use for stroking"
++msgstr ""
++
++#: ../operations/external/path.c:32
++msgid "Stroke width"
++msgstr ""
++
++#: ../operations/external/path.c:33
++msgid "The width of the brush used to stroke the path"
++msgstr ""
++
++#: ../operations/external/path.c:35
++msgid "Stroke opacity"
++msgstr ""
++
++#: ../operations/external/path.c:36
++msgid "Opacity of stroke, note, does not behave like SVG since at the moment stroking is done using an airbrush tool"
++msgstr ""
++
++#: ../operations/external/path.c:38
++#: ../operations/workshop/warp.c:39
++msgid "Hardness"
++msgstr "Hårdhet"
++
++#: ../operations/external/path.c:39
++msgid "Hardness of the brush, 0.0 for a soft brush, 1.0 for a hard brush"
++msgstr ""
++
++#: ../operations/external/path.c:41
++msgid "Fill rule"
++msgstr ""
++
++#: ../operations/external/path.c:42
++msgid "How to determine what to fill (nonzero|evenodd)"
++msgstr ""
++
++#: ../operations/external/path.c:44
++#: ../operations/external/vector-fill.c:36
++#: ../operations/external/vector-stroke.c:36
++msgid "Transform"
++msgstr "Transformera"
++
++#: ../operations/external/path.c:45
++msgid "SVG style description of transform"
++msgstr ""
++
++#: ../operations/external/path.c:47
++msgid "Fill opacity"
++msgstr ""
++
++#: ../operations/external/path.c:48
++msgid "The fill opacity to use"
++msgstr ""
++
++#: ../operations/external/path.c:50
++#: ../operations/external/vector-fill.c:39
++#: ../operations/external/vector-stroke.c:39
++msgid "Vector"
++msgstr ""
++
++#: ../operations/external/path.c:51
++#: ../operations/external/vector-fill.c:40
++#: ../operations/external/vector-stroke.c:40
++msgid "A GeglVector representing the path of the stroke"
++msgstr ""
++
++#: ../operations/external/path.c:518
++msgid "Renders a brush stroke"
++msgstr ""
++
++#: ../operations/external/pixbuf.c:25
++msgid "Pixbuf"
++msgstr "Pixbuf"
++
++#: ../operations/external/pixbuf.c:25
++msgid "GdkPixbuf to use"
++msgstr "GdkPixbuf att använda"
++
++#: ../operations/external/pixbuf.c:103
++msgid "Uses the GdkPixbuf located at the memory location in <em>pixbuf</em>."
++msgstr ""
++
++#: ../operations/external/png-load.c:446
++msgid "PNG image loader."
++msgstr ""
++
++#: ../operations/external/png-save.c:27
++#: ../operations/external/ppm-save.c:26
++#: ../operations/external/rgbe-save.c:27
++#: ../operations/workshop/external/ff-save.c:30
++msgid "Target path and filename, use '-' for stdout."
++msgstr ""
++
++#: ../operations/external/png-save.c:28
++msgid "Compression"
++msgstr "Komprimering"
++
++#: ../operations/external/png-save.c:29
++msgid "PNG compression level from 1 to 9"
++msgstr ""
++
++#: ../operations/external/png-save.c:30
++#: ../operations/external/ppm-save.c:28
++msgid "Bitdepth"
++msgstr "Bitdjup"
++
++#: ../operations/external/png-save.c:31
++#: ../operations/external/ppm-save.c:30
++msgid "8 and 16 are amongst the currently accepted values."
++msgstr ""
++
++#: ../operations/external/png-save.c:233
++msgid "PNG image saver (passes the buffer through, saves as a side-effect.)"
++msgstr ""
++
++#: ../operations/external/ppm-load.c:306
++msgid "PPM image loader."
++msgstr ""
++
++#: ../operations/external/ppm-save.c:27
++msgid "Raw format"
++msgstr "Råformat"
++
++#: ../operations/external/ppm-save.c:190
++msgid "PPM image saver (Portable pixmap saver.)"
++msgstr ""
++
++#: ../operations/external/rgbe-load.c:135
++msgid "RGBE image loader (Radiance HDR format)."
++msgstr ""
++
++#: ../operations/external/rgbe-save.c:86
++msgid "RGBE image saver (Radiance HDR format)"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:28
++msgid "Pixbuf location"
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:29
++msgid "The location where to store the output GdkPixbuf."
++msgstr ""
++
++#: ../operations/external/save-pixbuf.c:106
++msgid "Save output into a GdkPixbuf."
++msgstr ""
++
++#: ../operations/external/sdl-display.c:28
++msgid "Icon to be used for output window"
++msgstr ""
++
++#: ../operations/external/sdl-display.c:181
++msgid "Displays the input buffer in an SDL window (restricted to one display op/process, due to SDL implementation issues)."
++msgstr ""
++
++#: ../operations/external/svg-load.c:26
++msgid "Path to SVG file to load"
++msgstr ""
++
++#: ../operations/external/svg-load.c:28
++#: ../operations/external/v4l.c:27
++msgid "Width for rendered image"
++msgstr ""
++
++#: ../operations/external/svg-load.c:30
++#: ../operations/external/v4l.c:28
++msgid "Height for rendered image"
++msgstr ""
++
++#. not hidden because it has extra API
++#: ../operations/external/svg-load.c:245
++msgid "Load an SVG file using librsvg"
++msgstr ""
++
++#: ../operations/external/text.c:25
++msgid "Text"
++msgstr "Text"
++
++#: ../operations/external/text.c:26
++msgid "String to display (utf8)"
++msgstr ""
++
++#: ../operations/external/text.c:27
++msgid "Font family"
++msgstr "Typsnittsfamilj"
++
++#: ../operations/external/text.c:28
++msgid "Font family (utf8)"
++msgstr ""
++
++#: ../operations/external/text.c:29
++#: ../operations/workshop/warp.c:37
++msgid "Size"
++msgstr "Storlek"
++
++#: ../operations/external/text.c:30
++msgid "Approximate height of text in pixels."
++msgstr ""
++
++#: ../operations/external/text.c:32
++msgid "Color for the text (defaults to 'white')"
++msgstr ""
++
++#: ../operations/external/text.c:33
++msgid "Wrap width"
++msgstr ""
++
++#: ../operations/external/text.c:34
++msgid "Sets the width in pixels at which long lines will wrap. Use -1 for no wrapping."
++msgstr ""
++
++#: ../operations/external/text.c:36
++msgid "Justification"
++msgstr ""
++
++#: ../operations/external/text.c:37
++msgid "Alignment for multi-line text (0=Left, 1=Center, 2=Right)"
++msgstr ""
++
++#: ../operations/external/text.c:39
++msgid "Rendered width in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:41
++msgid "Rendered height in pixels. (read only)"
++msgstr ""
++
++#: ../operations/external/text.c:301
++msgid "Display a string of text using pango and cairo."
++msgstr ""
++
++#: ../operations/external/v4l.c:26
++msgid "Path"
++msgstr "Sökväg"
++
++#: ../operations/external/v4l.c:26
++msgid "Path to v4l device"
++msgstr ""
++
++#: ../operations/external/v4l.c:30
++msgid "current frame number, can be changed to trigger a reload of the image."
++msgstr ""
++
++#: ../operations/external/v4l.c:31
++#: ../operations/workshop/external/ff-save.c:32
++msgid "FPS"
++msgstr "FPS"
++
++#: ../operations/external/v4l.c:32
++msgid "autotrigger reload this many times a second."
++msgstr ""
++
++#: ../operations/external/v4l.c:322
++msgid "Video4Linux input, webcams framegrabbers and similar devices."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:28
++msgid "Color of paint to use for filling."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:31
++msgid "The fill opacity to use."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:33
++msgid "Fill rule."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:34
++msgid "how to determine what to fill (nonzero|evenodd)"
++msgstr ""
++
++#: ../operations/external/vector-fill.c:37
++#: ../operations/external/vector-stroke.c:37
++msgid "svg style description of transform."
++msgstr ""
++
++#: ../operations/external/vector-fill.c:258
++msgid "Renders a filled region"
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:28
++msgid "Color of paint to use for stroking."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:31
++msgid "The width of the brush used to stroke the path."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:34
++msgid "Opacity of stroke, note, does not behave like SVG since at the moment stroking is done using an airbrush tool."
++msgstr ""
++
++#: ../operations/external/vector-stroke.c:280
++msgid "Renders a vector stroke"
++msgstr ""
++
++#: ../operations/generated/add.c:125
++msgid "Math operation add (c = c + value)"
++msgstr ""
++
++#: ../operations/generated/clear.c:116
++msgid "Porter Duff operation clear (d = 0.0f)"
++msgstr ""
++
++#: ../operations/generated/color-burn.c:117
++msgid "SVG blend operation color-burn (<code>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/color-dodge.c:117
++msgid "SVG blend operation color-dodge (<code>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/darken.c:115
++msgid "SVG blend operation darken (<code>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/difference.c:115
++msgid "SVG blend operation difference (<code>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</code>)"
++msgstr ""
++
++#: ../operations/generated/divide.c:125
++msgid "Math operation divide (c = value==0.0f?0.0f:c/value)"
++msgstr ""
++
++#: ../operations/generated/dst-atop.c:116
++msgid "Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/dst.c:116
++msgid "Porter Duff operation dst (d = cB)"
++msgstr ""
++
++#: ../operations/generated/dst-in.c:116
++msgid "Porter Duff operation dst-in (d = cB * aA)"
++msgstr ""
++
++#: ../operations/generated/dst-out.c:116
++msgid "Porter Duff operation dst-out (d = cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/dst-over.c:116
++msgid "Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/exclusion.c:115
++msgid "SVG blend operation exclusion (<code>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/gamma.c:125
++msgid "Math operation gamma (c = powf (c, value))"
++msgstr ""
++
++#: ../operations/generated/hard-light.c:117
++msgid "SVG blend operation hard-light (<code>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/lighten.c:115
++msgid "SVG blend operation lighten (<code>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/multiply.c:125
++msgid "Math operation multiply (c = c * value)"
++msgstr ""
++
++#: ../operations/generated/overlay.c:117
++msgid "SVG blend operation overlay (<code>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/plus.c:115
++msgid "SVG blend operation plus (<code>d = cA + cB</code>)"
++msgstr ""
++
++#: ../operations/generated/screen.c:115
++msgid "SVG blend operation screen (<code>d = cA + cB - cA * cB</code>)"
++msgstr ""
++
++#: ../operations/generated/soft-light.c:119
++msgid "SVG blend operation soft-light (<code>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/src-atop.c:116
++msgid "Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/src.c:116
++msgid "Porter Duff operation src (d = cA)"
++msgstr ""
++
++#: ../operations/generated/src-in.c:125
++msgid "Porter Duff operation src-in (d = cA * aB)"
++msgstr ""
++
++#: ../operations/generated/src-out.c:116
++msgid "Porter Duff operation src-out (d = cA * (1.0f - aB))"
++msgstr ""
++
++#: ../operations/generated/src-over.c:116
++msgid "Porter Duff operation src-over (d = cA + cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/generated/subtract.c:125
++msgid "Math operation subtract (c = c - value)"
++msgstr ""
++
++#: ../operations/generated/svg-multiply.c:115
++msgid "SVG blend operation multiply (<code>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</code>)"
++msgstr ""
++
++#: ../operations/generated/xor.c:116
++msgid "Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))"
++msgstr ""
++
++#: ../operations/transform/reflect.c:29
++msgid "Direction vector's X component"
++msgstr ""
++
++#: ../operations/transform/reflect.c:31
++msgid "Direction vector's Y component"
++msgstr ""
++
++#: ../operations/transform/rotate.c:26
++msgid "Angle to rotate (clockwise)"
++msgstr ""
++
++#: ../operations/transform/rotate.c:31
++msgid "Rotate the buffer around the specified origin."
++msgstr ""
++
++#: ../operations/transform/scale.c:29
++#: ../operations/transform/scale-ratio.c:26
++msgid "Horizontal scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:31
++#: ../operations/transform/scale-ratio.c:28
++msgid "Vertical scale factor"
++msgstr ""
++
++#: ../operations/transform/scale.c:36
++msgid "Scales the buffer."
++msgstr ""
++
++#: ../operations/transform/scale-ratio.c:33
++msgid "Scales the buffer according to a ratio."
++msgstr ""
++
++#: ../operations/transform/scale-size.c:26
++msgid "Horizontal size"
++msgstr ""
++
++#: ../operations/transform/scale-size.c:28
++msgid "Vertical size"
++msgstr ""
++
++#: ../operations/transform/scale-size.c:33
++msgid "Scales the buffer according to a size."
++msgstr ""
++
++#: ../operations/transform/shear.c:26
++msgid "Horizontal shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:28
++msgid "Vertical shear amount"
++msgstr ""
++
++#: ../operations/transform/shear.c:33
++msgid "Shears the buffer"
++msgstr ""
++
++#: ../operations/transform/transform.c:25
++msgid "Transformation string"
++msgstr ""
++
++#: ../operations/transform/transform.c:30
++msgid "Transforms the group (used by svg)."
++msgstr ""
++
++#: ../operations/transform/transform-core.c:202
++msgid "Origin-x"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:203
++msgid "X coordinate of origin"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:210
++msgid "Origin-y"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:211
++msgid "Y coordinate of origin"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:219
++msgid "Filter type (nearest, linear, lanczos, cubic, lohalo)"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:225
++#: ../operations/transform/transform-core.c:226
++msgid "Hard edges"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:232
++msgid "Lanczos width"
++msgstr ""
++
++#: ../operations/transform/transform-core.c:233
++msgid "Width of the Lanczos function"
++msgstr ""
++
++#: ../operations/transform/translate.c:26
++msgid "Horizontal translation"
++msgstr ""
++
++#: ../operations/transform/translate.c:28
++msgid "Vertical translation"
++msgstr ""
++
++#: ../operations/transform/translate.c:33
++msgid "Repositions the buffer (with subpixel precision), if integer coordinates are passed a fast-path without resampling is used"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:26
++#: ../operations/workshop/box-min.c:26
++#: ../operations/workshop/box-percentile.c:28
++#: ../operations/workshop/disc-percentile.c:27
++#: ../operations/workshop/kuwahara.c:26
++#: ../operations/workshop/snn-percentile.c:28
++msgid "Radius of square pixel region (width and height will be radius*2+1)"
++msgstr ""
++
++#: ../operations/workshop/box-max.c:198
++msgid "Sets the target pixel to the value of the maximum value in a box surrounding the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-min.c:198
++msgid "Sets the target pixel to the value of the minimum value in a box surrounding the pixel"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:29
++#: ../operations/workshop/disc-percentile.c:28
++#: ../operations/workshop/snn-percentile.c:31
++msgid "Percentile"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:30
++msgid "The percentile to compute, defaults to 50, which is a median filter"
++msgstr ""
++
++#: ../operations/workshop/box-percentile.c:230
++msgid "Sets the target pixel to the color corresponding to a given percentile when colors are sorted by luminance"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:25
++msgid "Cache buffer"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:26
++msgid "The GeglBuffer where the caching is done"
++msgstr ""
++
++#: ../operations/workshop/buffer-cache.c:103
++msgid "Cache the input buffer internally, further process take this buffer as input."
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:33
++#: ../operations/workshop/color-rotate.c:39
++msgid "Clockwise"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:34
++#: ../operations/workshop/color-rotate.c:40
++msgid "Switch to clockwise"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:35
++#: ../operations/workshop/color-rotate.c:41
++msgid "From:"
++msgstr "Från:"
++
++#: ../operations/workshop/color-rotate.c:36
++#: ../operations/workshop/color-rotate.c:42
++msgid "Starting angle for the color rotation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:37
++#: ../operations/workshop/color-rotate.c:43
++msgid "To:"
++msgstr "Till:"
++
++#: ../operations/workshop/color-rotate.c:38
++#: ../operations/workshop/color-rotate.c:44
++msgid "End angle for the color rotation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:47
++msgid "Choose in case of grayscale images"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:48
++msgid "Hue"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:49
++msgid "The value of hue"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:51
++msgid "The value of saturation"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:52
++#: ../operations/workshop/color-rotate.c:53
++msgid "Change/Treat to this"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:55
++msgid "The value of gray threshold"
++msgstr ""
++
++#: ../operations/workshop/color-rotate.c:385
++msgid "Rotate colors on the image"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:25
++msgid "(1,1) "
++msgstr "(1,1) "
++
++#: ../operations/workshop/convolution-matrix.c:26
++msgid "Value of the element in position (1,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:27
++msgid "(1,2) "
++msgstr "(1,2) "
++
++#: ../operations/workshop/convolution-matrix.c:28
++msgid "Value of the element in position (1,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:29
++msgid "(1,3) "
++msgstr "(1,3) "
++
++#: ../operations/workshop/convolution-matrix.c:30
++msgid "Value of the element in position (1,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:31
++msgid "(1,4) "
++msgstr "(1,4) "
++
++#: ../operations/workshop/convolution-matrix.c:32
++msgid "Value of the element in position (1,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:33
++msgid "(1,5) "
++msgstr "(1,5) "
++
++#: ../operations/workshop/convolution-matrix.c:34
++msgid "Value of the element in position (1,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:35
++msgid "(2,1) "
++msgstr "(2,1) "
++
++#: ../operations/workshop/convolution-matrix.c:36
++msgid "Value of the element in position (2,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:37
++msgid "(2,2) "
++msgstr "(2,2) "
++
++#: ../operations/workshop/convolution-matrix.c:38
++msgid "Value of the element in position (2,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:39
++msgid "(2,3) "
++msgstr "(2,3) "
++
++#: ../operations/workshop/convolution-matrix.c:40
++msgid "Value of the element in position (2,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:41
++msgid "(2,4) "
++msgstr "(2,4) "
++
++#: ../operations/workshop/convolution-matrix.c:42
++msgid "Value of the element in position (2,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:43
++msgid "(2,5) "
++msgstr "(2,5) "
++
++#: ../operations/workshop/convolution-matrix.c:44
++msgid "Value of the element in position (2,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:45
++msgid "(3,1) "
++msgstr "(3,1) "
++
++#: ../operations/workshop/convolution-matrix.c:46
++msgid "Value of the element in position (3,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:47
++msgid "(3,2) "
++msgstr "(3,2) "
++
++#: ../operations/workshop/convolution-matrix.c:48
++msgid "Value of the element in position (3,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:49
++msgid "(3,3) "
++msgstr "(3,3) "
++
++#: ../operations/workshop/convolution-matrix.c:50
++msgid "Value of the element in position (3,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:51
++msgid "(3,4) "
++msgstr "(3,4) "
++
++#: ../operations/workshop/convolution-matrix.c:52
++msgid "Value of the element in position (3,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:53
++msgid "(3,5) "
++msgstr "(3,5) "
++
++#: ../operations/workshop/convolution-matrix.c:54
++msgid "Value of the element in position (3,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:55
++msgid "(4,1) "
++msgstr "(4,1) "
++
++#: ../operations/workshop/convolution-matrix.c:56
++msgid "Value of the element in position (4,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:57
++msgid "(4,2) "
++msgstr "(4,2) "
++
++#: ../operations/workshop/convolution-matrix.c:58
++msgid "Value of the element in position (4,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:59
++msgid "(4,3) "
++msgstr "(4,3) "
++
++#: ../operations/workshop/convolution-matrix.c:60
++msgid "Value of the element in position (4,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:61
++msgid "(4,4) "
++msgstr "(4,4) "
++
++#: ../operations/workshop/convolution-matrix.c:62
++msgid "Value of the element in position (4,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:63
++msgid "(4,5) "
++msgstr "(4,5) "
++
++#: ../operations/workshop/convolution-matrix.c:64
++msgid "Value of the element in position (4,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:65
++msgid "(5,1) "
++msgstr "(5,1) "
++
++#: ../operations/workshop/convolution-matrix.c:66
++msgid "Value of the element in position (5,1)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:67
++msgid "(5,2) "
++msgstr "(5,2) "
++
++#: ../operations/workshop/convolution-matrix.c:68
++msgid "Value of the element in position (5,2)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:69
++msgid "(5,3) "
++msgstr "(5,3) "
++
++#: ../operations/workshop/convolution-matrix.c:70
++msgid "Value of the element in position (5,3)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:71
++msgid "(5,4) "
++msgstr "(5,4) "
++
++#: ../operations/workshop/convolution-matrix.c:72
++msgid "Value of the element in position (5,4)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:73
++msgid "(5,5) "
++msgstr "(5,5) "
++
++#: ../operations/workshop/convolution-matrix.c:74
++msgid "Value of the element in position (5,5)"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:76
++msgid "Divisor: "
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:77
++msgid "The value of the divisor"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:78
++msgid "Offset: "
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:79
++msgid "The value of the offset"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:81
++msgid "Normalize or not"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:83
++msgid "Red channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:84
++msgid "Green channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:85
++msgid "Blue channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:86
++msgid "Alpha channel"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha-weighting"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:88
++msgid "Alpha weighting"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:90
++msgid "Border"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:91
++msgid "Type of border to choose. Choices are extend, wrap, crop. Default is extend"
++msgstr ""
++
++#: ../operations/workshop/convolution-matrix.c:433
++msgid "Creates image by manually set convolution matrix"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:30
++#: ../operations/workshop/cubism.c:31
++msgid "Tile size"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:32
++#: ../operations/workshop/cubism.c:33
++msgid "Tile saturation"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:35
++msgid "Random seed"
++msgstr ""
++
++#: ../operations/workshop/cubism.c:595
++msgid "A filter that somehow resembles a cubist painting style"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Even/Odd"
++msgstr "Jämn/udda"
++
++#: ../operations/workshop/deinterlace.c:30
++msgid "Keep even/odd fields"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:31
++msgid "Horizontal/Vertical"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:32
++msgid "Choose horizontal or vertical"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:33
++msgid "Block size"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:34
++msgid "Block size of deinterlacing rows/columns"
++msgstr ""
++
++#: ../operations/workshop/deinterlace.c:309
++msgid "Performs deinterlace on the image"
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:26
++#: ../operations/workshop/demosaic-simple.c:25
++msgid "Bayer pattern"
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:27
++#: ../operations/workshop/demosaic-simple.c:26
++msgid "Bayer pattern used, 0 seems to work for some nikon files, 2 for some Fuji files."
++msgstr ""
++
++#: ../operations/workshop/demosaic-bimedian.c:220
++msgid "Performs a grayscale2color demosaicing of an image, using bimedian interpolation."
++msgstr ""
++
++#: ../operations/workshop/demosaic-simple.c:152
++msgid "Performs a naive grayscale2color demosaicing of an image, no interpolation."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:29
++msgid "The percentile to compute, defaults to 50, which is a median filter."
++msgstr ""
++
++#: ../operations/workshop/disc-percentile.c:234
++msgid "Sets the target pixel to the color corresponding to a given percentile when colors are sorted by luminance."
++msgstr ""
++
++#: ../operations/workshop/ditto.c:111
++msgid "Test op to do a 1:1 map of input to output, while sampling"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:25
++msgid "Azimuth"
++msgstr "Azimut"
++
++#: ../operations/workshop/emboss.c:26
++msgid "The value of azimuth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:27
++msgid "Elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:28
++msgid "The value of elevation"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:29
++#: ../operations/workshop/fractal-trace.c:40
++msgid "Depth"
++msgstr "Djup"
++
++#: ../operations/workshop/emboss.c:30
++msgid "Pixel depth"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:32
++msgid "Optional parameter to override automatic selection of emboss filter. Choices are emboss, blur-map"
++msgstr ""
++
++#: ../operations/workshop/emboss.c:248
++msgid "Simulates an image created by embossing"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "Bitrate"
++msgstr "Bitfrekvens"
++
++#: ../operations/workshop/external/ff-save.c:31
++msgid "target bitrate"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:32
++msgid "frames per second"
++msgstr ""
++
++#: ../operations/workshop/external/ff-save.c:889
++msgid "FFmpeg video output sink"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:41
++msgid "Script"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:42
++msgid "The lua script containing the implementation of this operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:43
++msgid "a stored lua script on disk implementing an operation."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:44
++msgid "User value"
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:45
++msgid "(appears in the global variable 'user_value' in lua."
++msgstr ""
++
++#: ../operations/workshop/external/gluas.c:984
++msgid "A general purpose filter/composer implementation proxy for the lua programming language."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:28
++msgid "Maker:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:29
++msgid "Write lens maker correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:30
++msgid "Camera:"
++msgstr "Kamera:"
++
++#: ../operations/workshop/external/lens-correct.c:31
++msgid "Write camera name correctly"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:32
++msgid "Lens:"
++msgstr "Lins:"
++
++#: ../operations/workshop/external/lens-correct.c:33
++msgid "Write your lens model with uppercase letters"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:34
++msgid "Focal of the camera"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:35
++msgid "Calculate b value from focal"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:37
++msgid "Center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:38
++msgid "If you want center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:39
++msgid "Lens center x"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:40
++#: ../operations/workshop/external/lens-correct.c:42
++msgid "Coordinates of lens center"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:41
++msgid "Lens center y"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:44
++msgid "Scale of the image"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:45
++msgid "Autocorrect d values"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:46
++msgid "Autocorrect D values for lens correction models."
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:48
++msgid "Model red a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:49
++#: ../operations/workshop/external/lens-correct.c:51
++#: ../operations/workshop/external/lens-correct.c:53
++#: ../operations/workshop/external/lens-correct.c:55
++#: ../operations/workshop/external/lens-correct.c:58
++#: ../operations/workshop/external/lens-correct.c:60
++#: ../operations/workshop/external/lens-correct.c:62
++#: ../operations/workshop/external/lens-correct.c:64
++#: ../operations/workshop/external/lens-correct.c:67
++#: ../operations/workshop/external/lens-correct.c:69
++#: ../operations/workshop/external/lens-correct.c:71
++#: ../operations/workshop/external/lens-correct.c:73
++msgid "Correction parameters for each color channel"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:50
++msgid "Model red b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:52
++msgid "Model red c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:54
++msgid "Model red d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:57
++msgid "Model green a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:59
++msgid "Model green b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:61
++msgid "Model green c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:63
++msgid "Model green d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:66
++msgid "Model blue a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:68
++msgid "Model blue b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:70
++msgid "Model blue c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:72
++msgid "Model blue d:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:75
++msgid "Model alpha a:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:76
++#: ../operations/workshop/external/lens-correct.c:78
++#: ../operations/workshop/external/lens-correct.c:80
++#: ../operations/workshop/external/lens-correct.c:82
++msgid "Correction parameters for alpha channel"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:77
++msgid "Model alpha b:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:79
++msgid "Model alpha c:"
++msgstr ""
++
++#: ../operations/workshop/external/lens-correct.c:81
++msgid "Model alpha d:"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "X0"
++msgstr "X0"
++
++#: ../operations/workshop/external/line-profile.c:25
++msgid "Start x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:26
++#: ../operations/workshop/fractal-trace.c:28
++#: ../operations/workshop/linear-gradient.c:24
++msgid "X1"
++msgstr "X1"
++
++#: ../operations/workshop/external/line-profile.c:26
++msgid "End x coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Y0"
++msgstr "Y0"
++
++#: ../operations/workshop/external/line-profile.c:27
++msgid "Start y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:28
++#: ../operations/workshop/fractal-trace.c:32
++#: ../operations/workshop/linear-gradient.c:25
++msgid "Y1"
++msgstr "Y1"
++
++#: ../operations/workshop/external/line-profile.c:28
++msgid "End y coordinate"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:29
++msgid "Width of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:30
++msgid "Height of plot"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Min"
++msgstr "Min"
++
++#: ../operations/workshop/external/line-profile.c:31
++msgid "Value at bottom"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Max"
++msgstr "Max"
++
++#: ../operations/workshop/external/line-profile.c:32
++msgid "Value at top"
++msgstr ""
++
++#: ../operations/workshop/external/line-profile.c:178
++msgid "Renders luminance profiles for red green and blue components along the specified line in the input buffer, plotted in a buffer of the specified size."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:25
++msgid "Fractal"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:26
++msgid "Type of fractal to use. Choices are julia, mandelbrot. Default is mandelbrot."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:29
++msgid "X1 value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:30
++#: ../operations/workshop/linear-gradient.c:26
++msgid "X2"
++msgstr "X2"
++
++#: ../operations/workshop/fractal-trace.c:31
++#: ../operations/workshop/fractal-trace.c:33
++msgid "X2 value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:34
++#: ../operations/workshop/linear-gradient.c:27
++msgid "Y2"
++msgstr "Y2"
++
++#: ../operations/workshop/fractal-trace.c:35
++msgid "Y2 value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:36
++msgid "JX"
++msgstr "JX"
++
++#: ../operations/workshop/fractal-trace.c:37
++msgid "Julia seed X value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:38
++msgid "JY"
++msgstr "JY"
++
++#: ../operations/workshop/fractal-trace.c:39
++msgid "Julia seed Y value, position"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:41
++msgid "Depth value"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:42
++msgid "Bailout"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:43
++msgid "Bailout length"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:44
++msgid "Background"
++msgstr "Bakgrund"
++
++#: ../operations/workshop/fractal-trace.c:45
++msgid "Optional parameter to override automatic selection of wrap background. Choices are wrap, black, white and transparent."
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:171
++msgid "Unsupported fractal type"
++msgstr ""
++
++#: ../operations/workshop/fractal-trace.c:321
++msgid "Performs fractal trace on the image"
++msgstr ""
++
++#: ../operations/workshop/generated/average.c:109
++msgid "Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/blend-reflect.c:109
++msgid "Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/negation.c:109
++msgid "Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-burn.c:109
++msgid "Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/soft-dodge.c:109
++msgid "Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)"
++msgstr ""
++
++#: ../operations/workshop/generated/subtractive.c:109
++msgid "Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)"
++msgstr ""
++
++#: ../operations/workshop/hstack.c:178
++msgid "Horizontally stack inputs, (in \"output\" \"aux\" is placed to the right of \"input\")"
++msgstr ""
++
++#: ../operations/workshop/kuwahara.c:243
++msgid "Edge preserving blur"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:29
++msgid "One end of a agradient"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:31
++msgid "The other end of a gradient"
++msgstr ""
++
++#: ../operations/workshop/linear-gradient.c:137
++msgid "Linear gradient renderer"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:25
++msgid "Real"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:26
++msgid "Real coordinate"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:27
++msgid "Imaginary"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:28
++msgid "Imaginary coordinate"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:29
++msgid "Level"
++msgstr "Nivå"
++
++#: ../operations/workshop/mandelbrot.c:30
++msgid "Water level"
++msgstr "Vattennivå"
++
++#: ../operations/workshop/mandelbrot.c:32
++msgid "Maximum number of iterations"
++msgstr ""
++
++#: ../operations/workshop/mandelbrot.c:144
++msgid "Mandelbrot set renderer"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:30
++msgid "Horizontal spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:32
++msgid "Vertical spread amount"
++msgstr ""
++
++#: ../operations/workshop/noise-spread.c:172
++msgid "Noise spread filter"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:34
++msgid "Random seed. Passing -1 implies that the seed is randomly chosen."
++msgstr ""
++
++#: ../operations/workshop/plasma.c:35
++msgid "Turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:36
++msgid "The value of the turbulence"
++msgstr ""
++
++#: ../operations/workshop/plasma.c:389
++msgid "Performs plasma effect on the image"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:24
++msgid "x1"
++msgstr "x1"
++
++#: ../operations/workshop/radial-gradient.c:25
++msgid "y1"
++msgstr "y1"
++
++#: ../operations/workshop/radial-gradient.c:26
++msgid "x2"
++msgstr "x2"
++
++#: ../operations/workshop/radial-gradient.c:27
++msgid "y2"
++msgstr "y2"
++
++#: ../operations/workshop/radial-gradient.c:29
++#: ../operations/workshop/radial-gradient.c:31
++msgid "One end of gradient"
++msgstr ""
++
++#: ../operations/workshop/radial-gradient.c:129
++msgid "Radial gradient renderer"
++msgstr ""
++
++#: ../operations/workshop/rawbayer-load.c:154
++msgid "Raw image loader, wrapping dcraw with pipes, provides the raw bayer grid as grayscale, if the fileformat is .rawbayer it will use this loader instead of the normal dcraw loader, if the fileformat is .rawbayerS it will swap the returned 16bit numbers (the pnm loader is apparently buggy)"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:32
++msgid "The value of the threshold"
++msgstr ""
++
++#: ../operations/workshop/red-eye-removal.c:132
++msgid "Performs red-eye-removal on the image"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:30
++msgid "Number of pairs, higher number preserves more acute features"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:32
++msgid "The percentile to return, the default value 50 is equal to the median"
++msgstr ""
++
++#: ../operations/workshop/snn-percentile.c:272
++msgid "Noise reducing edge enhancing percentile filter based on Symmetric Nearest Neighbours"
++msgstr ""
++
++#: ../operations/workshop/warp.c:36
++#: ../operations/workshop/warp.c:41
++msgid "Effect Strength"
++msgstr ""
++
++#: ../operations/workshop/warp.c:38
++msgid "Effect Size"
++msgstr ""
++
++#: ../operations/workshop/warp.c:40
++msgid "Effect Hardness"
++msgstr ""
++
++#: ../operations/workshop/warp.c:41
++msgid "Stroke"
++msgstr ""
++
++#: ../operations/workshop/warp.c:42
++msgid "Behavior"
++msgstr "Beteende"
++
++#: ../operations/workshop/warp.c:43
++msgid "Behavior of the op"
++msgstr ""
++
++#: ../operations/workshop/warp.c:386
++msgid "Compute a relative displacement mapping from a stroke"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:36
++msgid "Whirl angle (degrees)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:38
++msgid "Pinch amount"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:40
++msgid "Radius (1.0 is the largest circle that fits in the image, and 2.0 goes all the way to the corners)"
++msgstr ""
++
++#: ../operations/workshop/whirl-pinch.c:258
++msgid "Applies whirling and pinching on the image"
++msgstr ""
++
+diff --git a/tests/buffer/reference/get_abyss_black.buf b/tests/buffer/reference/get_abyss_black.buf
+new file mode 100644
+index 0000000..5f3ad1e
+--- /dev/null
++++ tests/buffer/reference/get_abyss_black.buf
+@@ -0,0 +1,23 @@
++Test: get_abyss_black
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌     ░░░░░░░░░░     ▐
++▌     ░░░░░░░░░░     ▐
++▌     ▒▒▒▒▒▒▒▒▒▒     ▐
++▌     ▒▒▒▒▒▒▒▒▒▒     ▐
++▌     ▒▒▒▒▒▒▒▒▒▒     ▐
++▌     ▓▓▓▓▓▓▓▓▓▓     ▐
++▌     ▓▓▓▓▓▓▓▓▓▓     ▐
++▌     ██████████     ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/get_abyss_clamp.buf b/tests/buffer/reference/get_abyss_clamp.buf
+new file mode 100644
+index 0000000..5d6a7dc
+--- /dev/null
++++ tests/buffer/reference/get_abyss_clamp.buf
+@@ -0,0 +1,23 @@
++Test: get_abyss_clamp
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌░░░░░░░░░░░░░░░░░░░░▐
++▌░░░░░░░░░░░░░░░░░░░░▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/get_abyss_loop.buf b/tests/buffer/reference/get_abyss_loop.buf
+new file mode 100644
+index 0000000..ddc8ff4
+--- /dev/null
++++ tests/buffer/reference/get_abyss_loop.buf
+@@ -0,0 +1,23 @@
++Test: get_abyss_loop
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌     ░░░       ░░░  ▐
++▌     ░░░       ░░░  ▐
++▌     ░░░       ░░░  ▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌     ░░░       ░░░  ▐
++▌     ░░░       ░░░  ▐
++▌     ░░░       ░░░  ▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▌▒▒▒▒▒   ▒▒▒▒▒▒▒   ▒▒▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/get_abyss_none.buf b/tests/buffer/reference/get_abyss_none.buf
+new file mode 100644
+index 0000000..c4b62f8
+--- /dev/null
++++ tests/buffer/reference/get_abyss_none.buf
+@@ -0,0 +1,23 @@
++Test: get_abyss_none
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌     ░░░░░░░░░░     ▐
++▌     ░░░░░░░░░░     ▐
++▌     ▒▒▒▒▒▒▒▒▒▒     ▐
++▌     ▒▒▒▒▒▒▒▒▒▒     ▐
++▌     ▒▒▒▒▒▒▒▒▒▒     ▐
++▌     ▓▓▓▓▓▓▓▓▓▓     ▐
++▌     ▓▓▓▓▓▓▓▓▓▓     ▐
++▌     ██████████     ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▌                    ▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/get_abyss_white.buf b/tests/buffer/reference/get_abyss_white.buf
+new file mode 100644
+index 0000000..21ca3ea
+--- /dev/null
++++ tests/buffer/reference/get_abyss_white.buf
+@@ -0,0 +1,23 @@
++Test: get_abyss_white
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌█████          █████▐
++▌█████          █████▐
++▌█████░░░░░░░░░░█████▐
++▌█████░░░░░░░░░░█████▐
++▌█████▒▒▒▒▒▒▒▒▒▒█████▐
++▌█████▒▒▒▒▒▒▒▒▒▒█████▐
++▌█████▒▒▒▒▒▒▒▒▒▒█████▐
++▌█████▓▓▓▓▓▓▓▓▓▓█████▐
++▌█████▓▓▓▓▓▓▓▓▓▓█████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▌████████████████████▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/test_gegl_buffer_linear_copy.buf b/tests/buffer/reference/test_gegl_buffer_linear_copy.buf
+new file mode 100644
+index 0000000..7c026c1
+--- /dev/null
++++ tests/buffer/reference/test_gegl_buffer_linear_copy.buf
+@@ -0,0 +1,23 @@
++Test: test_gegl_buffer_linear_copy
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌                    ▐
++▌   ██████████       ▐
++▌   ██████████       ▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌▒▒▒██████████▒▒▒▒▒▒▒▐
++▌▒▒▒██████████▒▒▒▒▒▒▒▐
++▌▒▒▒██████████▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌████████████████████▐
++▌████████████████████▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/test_gegl_buffer_linear_iter.buf b/tests/buffer/reference/test_gegl_buffer_linear_iter.buf
+new file mode 100644
+index 0000000..ef51d5d
+--- /dev/null
++++ tests/buffer/reference/test_gegl_buffer_linear_iter.buf
+@@ -0,0 +1,23 @@
++Test: test_gegl_buffer_linear_iter
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌                    ▐
++▌   ██████████       ▐
++▌   ██████████       ▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌░░░██████████░░░░░░░▐
++▌▒▒▒██████████▒▒▒▒▒▒▒▐
++▌▒▒▒██████████▒▒▒▒▒▒▒▐
++▌▒▒▒██████████▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
++▌████████████████████▐
++▌████████████████████▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/test_gegl_buffer_multcopy.buf b/tests/buffer/reference/test_gegl_buffer_multcopy.buf
+new file mode 100644
+index 0000000..720a3cd
+--- /dev/null
++++ tests/buffer/reference/test_gegl_buffer_multcopy.buf
+@@ -0,0 +1,131 @@
++Test: test_gegl_buffer_multcopy
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/reference/test_grow_extent.buf b/tests/buffer/reference/test_grow_extent.buf
+new file mode 100644
+index 0000000..410f2cc
+--- /dev/null
++++ tests/buffer/reference/test_grow_extent.buf
+@@ -0,0 +1,53 @@
++Test: test_grow_extent
++▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
++▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
+diff --git a/tests/buffer/tests/get_abyss_black.c b/tests/buffer/tests/get_abyss_black.c
+new file mode 100644
+index 0000000..d633a03
+--- /dev/null
++++ tests/buffer/tests/get_abyss_black.c
+@@ -0,0 +1,22 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  GeglRectangle  bound = {0, 0, 10, 10};
++  GeglRectangle  bound2 = {0, 0, 20, 20};
++  GeglRectangle  source = {-5, -5, 20, 20};
++  GeglRectangle  dest = {0, 0, 20, 20};
++  const Babl    *format = babl_format ("Y float");
++  gfloat         buf[20 * 20 * sizeof(gfloat)];
++
++  test_start ();
++  buffer = gegl_buffer_new (&bound, format);
++  buffer2 = gegl_buffer_new (&bound2, format);
++
++  vgrad (buffer);
++  gegl_buffer_get (buffer, &source, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_BLACK);
++  gegl_buffer_set (buffer2, &dest, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE);
++  print_buffer (buffer2);
++  g_object_unref (buffer);
++  g_object_unref (buffer2);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/get_abyss_clamp.c b/tests/buffer/tests/get_abyss_clamp.c
+new file mode 100644
+index 0000000..604bd8b
+--- /dev/null
++++ tests/buffer/tests/get_abyss_clamp.c
+@@ -0,0 +1,22 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  GeglRectangle  bound = {0, 0, 10, 10};
++  GeglRectangle  bound2 = {0, 0, 20, 20};
++  GeglRectangle  source = {-5, -5, 20, 20};
++  GeglRectangle  dest = {0, 0, 20, 20};
++  const Babl    *format = babl_format ("Y float");
++  gfloat         buf[20 * 20 * sizeof(gfloat)];
++
++  test_start ();
++  buffer = gegl_buffer_new (&bound, format);
++  buffer2 = gegl_buffer_new (&bound2, format);
++
++  vgrad (buffer);
++  gegl_buffer_get (buffer, &source, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_CLAMP);
++  gegl_buffer_set (buffer2, &dest, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE);
++  print_buffer (buffer2);
++  g_object_unref (buffer);
++  g_object_unref (buffer2);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/get_abyss_loop.c b/tests/buffer/tests/get_abyss_loop.c
+new file mode 100644
+index 0000000..b691a5d
+--- /dev/null
++++ tests/buffer/tests/get_abyss_loop.c
+@@ -0,0 +1,26 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  GeglRectangle  bound = {0, 0, 10, 10};
++  GeglRectangle  bound2 = {0, 0, 20, 20};
++  GeglRectangle  source = {-5, -5, 20, 20};
++  GeglRectangle  dest = {0, 0, 20, 20};
++  GeglRectangle  fill1 = {0, 0, 3, 3};
++  GeglRectangle  fill2 = {3, 3, 7, 7};
++  const Babl    *format = babl_format ("Y float");
++  gfloat         buf[20 * 20 * sizeof(gfloat)];
++
++  test_start ();
++  buffer = gegl_buffer_new (&bound, format);
++  buffer2 = gegl_buffer_new (&bound2, format);
++
++  fill_rect (buffer, &fill1, 0.2);
++  fill_rect (buffer, &fill2, 0.5);
++
++  gegl_buffer_get (buffer, &source, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_LOOP);
++  gegl_buffer_set (buffer2, &dest, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE);
++  print_buffer (buffer2);
++  g_object_unref (buffer);
++  g_object_unref (buffer2);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/get_abyss_none.c b/tests/buffer/tests/get_abyss_none.c
+new file mode 100644
+index 0000000..0d32b21
+--- /dev/null
++++ tests/buffer/tests/get_abyss_none.c
+@@ -0,0 +1,22 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  GeglRectangle  bound = {0, 0, 10, 10};
++  GeglRectangle  bound2 = {0, 0, 20, 20};
++  GeglRectangle  source = {-5, -5, 20, 20};
++  GeglRectangle  dest = {0, 0, 20, 20};
++  const Babl    *format = babl_format ("Y float");
++  gfloat         buf[20 * 20 * sizeof(gfloat)];
++
++  test_start ();
++  buffer = gegl_buffer_new (&bound, format);
++  buffer2 = gegl_buffer_new (&bound2, format);
++
++  vgrad (buffer);
++  gegl_buffer_get (buffer, &source, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++  gegl_buffer_set (buffer2, &dest, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE);
++  print_buffer (buffer2);
++  g_object_unref (buffer);
++  g_object_unref (buffer2);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/get_abyss_white.c b/tests/buffer/tests/get_abyss_white.c
+new file mode 100644
+index 0000000..3ff2518
+--- /dev/null
++++ tests/buffer/tests/get_abyss_white.c
+@@ -0,0 +1,22 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  GeglRectangle  bound = {0, 0, 10, 10};
++  GeglRectangle  bound2 = {0, 0, 20, 20};
++  GeglRectangle  source = {-5, -5, 20, 20};
++  GeglRectangle  dest = {0, 0, 20, 20};
++  const Babl    *format = babl_format ("Y float");
++  gfloat         buf[20 * 20 * sizeof(gfloat)];
++
++  test_start ();
++  buffer = gegl_buffer_new (&bound, format);
++  buffer2 = gegl_buffer_new (&bound2, format);
++
++  vgrad (buffer);
++  gegl_buffer_get (buffer, &source, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_WHITE);
++  gegl_buffer_set (buffer2, &dest, 1.0, format, buf, GEGL_AUTO_ROWSTRIDE);
++  print_buffer (buffer2);
++  g_object_unref (buffer);
++  g_object_unref (buffer2);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/test_gegl_buffer_linear_copy.c b/tests/buffer/tests/test_gegl_buffer_linear_copy.c
+new file mode 100644
+index 0000000..35f9c91
+--- /dev/null
++++ tests/buffer/tests/test_gegl_buffer_linear_copy.c
+@@ -0,0 +1,28 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  gchar         *buf1, *buf2;
++  GeglRectangle  bound = {2, 2, 20, 20};
++  GeglRectangle  source = {5, 3, 10, 10};
++
++  test_start ();
++
++  buf1 = g_malloc0 (bound.width * bound.height * sizeof (float));
++  buf2 = g_malloc0 (source.width * source.height * sizeof (float));
++
++  buffer = gegl_buffer_linear_new_from_data (buf1, babl_format ("Y float"),
++                                             &bound, GEGL_AUTO_ROWSTRIDE,
++                                             NULL, NULL);
++  buffer2 = gegl_buffer_linear_new_from_data (buf2, babl_format ("Y float"),
++                                              &source, GEGL_AUTO_ROWSTRIDE,
++                                              NULL, NULL);
++
++  vgrad (buffer);
++  fill (buffer2, 1.0);
++
++  gegl_buffer_copy (buffer2, &source, buffer, &source);
++  print_buffer (buffer);
++  g_object_unref (buffer2);
++  g_object_unref (buffer);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/test_gegl_buffer_linear_iter.c b/tests/buffer/tests/test_gegl_buffer_linear_iter.c
+new file mode 100644
+index 0000000..e90419d
+--- /dev/null
++++ tests/buffer/tests/test_gegl_buffer_linear_iter.c
+@@ -0,0 +1,44 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  gchar         *buf1, *buf2;
++  GeglRectangle  bound = {2, 2, 20, 20};
++  GeglRectangle  source = {5, 3, 10, 10};
++  GeglBufferIterator *iter;
++
++  test_start ();
++
++  buf1 = g_malloc0 (bound.width * bound.height * sizeof (float));
++  buf2 = g_malloc0 (source.width * source.height * sizeof (float));
++
++  buffer = gegl_buffer_linear_new_from_data (buf1, babl_format ("Y float"),
++                                             &bound, GEGL_AUTO_ROWSTRIDE,
++                                             NULL, NULL);
++  buffer2 = gegl_buffer_linear_new_from_data (buf2, babl_format ("Y float"),
++                                              &source, GEGL_AUTO_ROWSTRIDE,
++                                              NULL, NULL);
++
++  vgrad (buffer);
++  fill (buffer2, 1.0);
++
++  iter = gegl_buffer_iterator_new (buffer2, &source, 0, NULL,
++                                   GEGL_BUFFER_READ, GEGL_ABYSS_NONE);
++
++  gegl_buffer_iterator_add (iter, buffer, &source, 0, NULL,
++                            GEGL_BUFFER_WRITE, GEGL_ABYSS_NONE);
++
++  while (gegl_buffer_iterator_next (iter))
++    {
++      gfloat *s = iter->data[0];
++      gfloat *d = iter->data[1];
++      gint length = iter->length;
++
++      while (length--)
++        *d++ = *s++;
++    }
++
++  print_buffer (buffer);
++  g_object_unref (buffer2);
++  g_object_unref (buffer);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/test_gegl_buffer_multcopy.c b/tests/buffer/tests/test_gegl_buffer_multcopy.c
+new file mode 100644
+index 0000000..5d8e65e
+--- /dev/null
++++ tests/buffer/tests/test_gegl_buffer_multcopy.c
+@@ -0,0 +1,52 @@
++TEST ()
++{
++  GeglBuffer    *buffer, *buffer2;
++  gchar         *buf2;
++  GeglRectangle  bound = { 0, 0, 128, 128 };
++  GeglBufferIterator *iter;
++  gint x, y;
++
++  test_start ();
++
++  buffer = gegl_buffer_new (&bound, babl_format ("Y float"));
++  fill (buffer, 0.5);
++
++  for (y = 0; y < bound.height; y += 64)
++    {
++      for (x = 0; x < bound.width; x += 64)
++        {
++          GeglRectangle source = {x, y, 30, 30};
++
++          buf2 = g_malloc0 (source.width * source.height * sizeof (float));
++
++          buffer2 = gegl_buffer_linear_new_from_data (buf2,
++                                                      babl_format ("Y float"),
++                                                      &source,
++                                                      GEGL_AUTO_ROWSTRIDE,
++                                                      NULL, NULL);
++          fill (buffer2, 1.0);
++
++          iter = gegl_buffer_iterator_new (buffer2, &source, 0, NULL,
++                                           GEGL_BUFFER_READ, GEGL_ABYSS_NONE);
++
++          gegl_buffer_iterator_add (iter, buffer, &source, 0, NULL,
++                                    GEGL_BUFFER_WRITE, GEGL_ABYSS_NONE);
++
++          while (gegl_buffer_iterator_next (iter))
++            {
++              gfloat *s = iter->data[0];
++              gfloat *d = iter->data[1];
++              gint length = iter->length;
++
++              while (length--)
++                *d++ = *s++;
++            }
++
++          g_object_unref (buffer2);
++        }
++    }
++
++  print_buffer (buffer);
++  g_object_unref (buffer);
++  test_end ();
++}
+diff --git a/tests/buffer/tests/test_grow_extent.c b/tests/buffer/tests/test_grow_extent.c
+new file mode 100644
+index 0000000..59aadb7
+--- /dev/null
++++ tests/buffer/tests/test_grow_extent.c
+@@ -0,0 +1,17 @@
++TEST ()
++{
++  GeglBuffer    *buffer;
++  GeglRectangle  orig_extent = {0, 0, 20, 20};
++  GeglRectangle  new_extent = {0, 0, 50, 50};
++
++  test_start ();
++
++  buffer = gegl_buffer_new(&orig_extent, babl_format ("Y float"));
++  gegl_buffer_set_extent(buffer, &new_extent);
++
++  fill (buffer, 0.5);
++  print_buffer (buffer);
++  g_object_unref (buffer);
++
++  test_end ();
++}
+diff --git a/tests/compositions/Makefile.am b/tests/compositions/Makefile.am
+index ea97fab..2d46346 100644
+--- tests/compositions/Makefile.am
++++ tests/compositions/Makefile.am
+@@ -35,7 +35,7 @@ TESTS = \
+   run-edge-laplace-broken.xml.sh       \
+   run-edge-sobel.xml.sh                \
+   run-fattal02.xml.sh                  \
+-  run-gamma-broken.xml.sh              \
++  run-gamma.xml.sh              \
+   run-hdr-color.xml.sh                 \
+   run-mantiuk06.xml.sh                 \
+   run-pixelize.xml.sh                  \
+@@ -68,10 +68,10 @@ $(testprefix)%.xml.sh: Makefile.am $(call test_to_xml,$@) $(call test_to_ref,$@)
+ 	@xml_file=$(call test_to_xml,$@)                                   ;\
+ 	ref_img=$(call test_to_ref,$@)                                     ;\
+ 	out_img=$(call test_to_out,$@)                                     ;\
+-	echo "#!/bin/sh" > $@                                              ;\
++	echo "#!/bin/bash" > $@                                            ;\
+ 	echo "mkdir -p $(abs_builddir)/output" >> $@                       ;\
+ 	echo "$(builddir_gegl) $$xml_file -o $$out_img" >> $@              ;\
+-	echo "$(builddir_img_cmp) $$ref_img $$out_img &> /dev/null" >> $@  ;\
++	echo "$(builddir_img_cmp) $$ref_img $$out_img" >> $@  ;\
+ 	chmod +x $@
+ 
+ clean-local:
+diff --git a/tests/compositions/gamma-broken.xml b/tests/compositions/gamma-broken.xml
+deleted file mode 100644
+index 7978cc7..0000000
+--- tests/compositions/gamma-broken.xml
++++ /dev/null
+@@ -1,13 +0,0 @@
+-<?xml version='1.0' encoding='UTF-8'?>
+-<gegl>
+-  <node operation='gegl:gamma'>
+-    <params>
+-      <param name='value'>0.5</param>
+-    </params>
+-  </node>
+-  <node operation='gegl:load'>
+-    <params>
+-      <param name='path'>data/parliament_0.jpg</param>
+-    </params>
+-  </node>
+-</gegl>
+diff --git a/tests/compositions/gamma.xml b/tests/compositions/gamma.xml
+new file mode 100644
+index 0000000..7978cc7
+--- /dev/null
++++ tests/compositions/gamma.xml
+@@ -0,0 +1,13 @@
++<?xml version='1.0' encoding='UTF-8'?>
++<gegl>
++  <node operation='gegl:gamma'>
++    <params>
++      <param name='value'>0.5</param>
++    </params>
++  </node>
++  <node operation='gegl:load'>
++    <params>
++      <param name='path'>data/parliament_0.jpg</param>
++    </params>
++  </node>
++</gegl>
+diff --git a/tests/simple/Makefile.am b/tests/simple/Makefile.am
+index f35a51a..264a068 100644
+--- tests/simple/Makefile.am
++++ tests/simple/Makefile.am
+@@ -12,6 +12,9 @@ noinst_PROGRAMS = \
+ 	test-gegl-rectangle		\
+ 	test-misc			\
+ 	test-path			\
++	test-buffer-extract \
++	test-buffer-cast  \
++	test-buffer-changes \
+ 	test-proxynop-processing
+ 
+ EXTRA_DIST = test-exp-combine.sh
+diff --git a/tests/simple/test-buffer-cast.c b/tests/simple/test-buffer-cast.c
+new file mode 100644
+index 0000000..ffcde39
+--- /dev/null
++++ tests/simple/test-buffer-cast.c
+@@ -0,0 +1,72 @@
++/*
++ * 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/>.
++ *
++ * Copyright (C) 2010 Martin Nordholts
++ */
++
++#include "config.h"
++
++#include "gegl.h"
++#include "gegl-plugin.h"
++
++#define SUCCESS  0
++#define FAILURE -1
++
++static int
++test_buffer_cast (void)
++{
++  gint result = SUCCESS;
++  GeglBuffer *buffer = gegl_buffer_new (GEGL_RECTANGLE (0,0,1,1),
++                                         babl_format ("R'G'B'A u8"));
++  GeglBuffer *cbuffer = gegl_buffer_new (GEGL_RECTANGLE (0,0,1,1),
++                                         babl_format ("Y u8"));
++  guchar srcpix[4] = {1,2,3,4};
++  guchar dstpix[4] = {0};
++
++  gegl_buffer_set (buffer, NULL, 0, NULL, srcpix, GEGL_AUTO_ROWSTRIDE);
++
++  gegl_buffer_set_format (cbuffer, 
++       babl_format_new ("name", "B' u8",
++                          babl_model ("R'G'B'A"),
++                          babl_type ("u8"),
++                          babl_component ("B'"),
++                          NULL));
++  gegl_buffer_copy (buffer, NULL, cbuffer, NULL);
++  gegl_buffer_set_format (cbuffer, NULL);
++
++  gegl_buffer_get (cbuffer, NULL, 1.0, NULL,
++      dstpix, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  if (dstpix[0] != 3)
++    result = FAILURE;
++  
++  g_object_unref (buffer);
++  g_object_unref (cbuffer);
++  return result;
++}
++
++
++int main(int argc, char *argv[])
++{
++  gint result = SUCCESS;
++
++  gegl_init (&argc, &argv);
++
++  if (result == SUCCESS)
++    result = test_buffer_cast ();
++
++  gegl_exit ();
++
++  return result;
++}
+diff --git a/tests/simple/test-buffer-changes.c b/tests/simple/test-buffer-changes.c
+new file mode 100644
+index 0000000..5cc3a2c
+--- /dev/null
++++ tests/simple/test-buffer-changes.c
+@@ -0,0 +1,144 @@
++#include <gegl.h>
++#include <gegl-buffer.h>
++#include <gegl-utils.h>
++
++typedef struct {
++    GeglBuffer *buffer;
++    GeglRectangle buffer_extent;
++    const Babl *buffer_format;
++    
++    guint buffer_changed_called;
++    GeglRectangle buffer_changed_rect;
++} TestCase;
++
++GeglRectangle null_rect = {0, 0, 0, 0};
++
++gboolean    test_gegl_rectangle_equal(const GeglRectangle *expected, const GeglRectangle *actual);
++TestCase *  test_case_new(void);
++void        handle_buffer_changed(GeglBuffer *buffer, const GeglRectangle *rect, gpointer user_data);
++void        test_buffer_change_signal_on_set(void);
++void        test_buffer_change_signal_with_iter(guint access_method, guint expected_signal_calls);
++void        test_buffer_change_signal_with_iter_write(void);
++void        test_buffer_change_signal_with_iter_readwrite(void);
++void        test_buffer_no_change_signal_with_iter_read(void);
++
++gboolean
++test_gegl_rectangle_equal(const GeglRectangle *expected, const GeglRectangle *actual)
++{
++    gboolean equal = gegl_rectangle_equal(expected, actual);
++    if (!equal) {
++        g_warning("GeglRectangle(%d, %d %dx%d) != GeglRectangle(%d, %d %dx%d)",
++                  expected->x, expected->y, expected->width, expected->height,
++                  actual->x, actual->y, actual->width, actual->height);
++    }
++    return equal;
++}
++
++TestCase *
++test_case_new(void)
++{
++    TestCase *test_case = g_new(TestCase, 1);
++
++    test_case->buffer_extent.x = 0;
++    test_case->buffer_extent.y = 0;
++    test_case->buffer_extent.width = 500;
++    test_case->buffer_extent.height = 500;
++    test_case->buffer_format = babl_format("RGBA u8");
++    test_case->buffer = gegl_buffer_new(&test_case->buffer_extent, test_case->buffer_format);
++    
++    test_case->buffer_changed_called = 0;
++    test_case->buffer_changed_rect = null_rect;
++    return test_case;
++}
++
++
++void
++handle_buffer_changed(GeglBuffer *buffer, const GeglRectangle *rect, gpointer user_data)
++{
++    TestCase *t = (TestCase *)user_data;
++    t->buffer_changed_called++;
++    t->buffer_changed_rect = *rect;
++}
++
++/* Test that 'changed' signal is emitted on gegl_buffer_set */
++void
++test_buffer_change_signal_on_set(void)
++{
++    TestCase *test_case = test_case_new();
++    GeglRectangle rect = {0, 0, 100, 100};
++    char *tmp = g_malloc(rect.height*rect.width*1*4);
++    
++    g_signal_connect(test_case->buffer, "changed", (GCallback)handle_buffer_changed, test_case);
++    
++    gegl_buffer_set(test_case->buffer, &rect, 1, test_case->buffer_format, tmp, GEGL_AUTO_ROWSTRIDE);
++    
++    g_assert_cmpint(test_case->buffer_changed_called, ==, 1);
++    g_assert(test_gegl_rectangle_equal(&(test_case->buffer_changed_rect), &rect));
++    
++    g_free(tmp);
++    g_free(test_case);
++}
++
++/* Utility function to test emission of 'changed' signal on GeglBuffer
++ * when accessing with GeglBufferIterator. 
++ * @access_method: GEGL_BUFFER_READ, GEGL_BUFFER_WRITE, GEGL_BUFFER_READWRITE
++ * @expected_signal_calls: Whether the 'changed' signal is expected to be emitted or not
++ */
++void
++test_buffer_change_signal_with_iter(guint access_method, guint expected_signal_calls)
++{
++    TestCase *test_case = test_case_new();
++    GeglRectangle rect = {0, 0, 100, 100};
++    char *tmp = g_malloc(rect.height*rect.width*1*4);
++    GeglBufferIterator *gi = gegl_buffer_iterator_new(test_case->buffer, &rect, 0,
++                                test_case->buffer_format, access_method, GEGL_ABYSS_NONE);
++    
++    g_signal_connect(test_case->buffer, "changed", (GCallback)handle_buffer_changed, test_case);
++
++    while (gegl_buffer_iterator_next(gi)) {
++    }
++
++    if (expected_signal_calls == 0)
++        rect = null_rect;
++
++    g_assert(test_case->buffer_changed_called == expected_signal_calls);
++    g_assert(test_gegl_rectangle_equal(&(test_case->buffer_changed_rect), &rect));
++    
++    g_free(tmp);
++    g_free(test_case);
++}
++
++/* Test that 'changed' signal is emitted once for gegl_buffer_iterator in WRITE mode */
++void
++test_buffer_change_signal_with_iter_write(void)
++{
++    test_buffer_change_signal_with_iter(GEGL_BUFFER_WRITE, 1);
++}
++
++/* Test that 'changed' signal is emitted once for gegl_buffer_iterator in READWRITE mode */
++void
++test_buffer_change_signal_with_iter_readwrite(void)
++{
++    test_buffer_change_signal_with_iter(GEGL_BUFFER_READWRITE, 1);
++}
++
++/* Test that 'changed' signal is _not_ emitted on gegl_buffer_iterator in READ mode */
++void
++test_buffer_no_change_signal_with_iter_read(void)
++{
++    test_buffer_change_signal_with_iter(GEGL_BUFFER_READ, 0);
++}
++
++gint
++main(gint argc, gchar **argv)
++{
++    babl_init();
++    gegl_init(&argc, &argv);
++    g_test_init (&argc, &argv, NULL);
++
++    g_test_add_func ("/buffer/change/signal-on-set", test_buffer_change_signal_on_set);
++    g_test_add_func ("/buffer/change/no-signal-with-iter-read", test_buffer_no_change_signal_with_iter_read);
++    g_test_add_func ("/buffer/change/signal-with-iter-readwrite", test_buffer_change_signal_with_iter_readwrite);
++    g_test_add_func ("/buffer/change/signal-with-iter-write", test_buffer_change_signal_with_iter_write);
++    return g_test_run();
++}
+diff --git a/tests/simple/test-buffer-extract.c b/tests/simple/test-buffer-extract.c
+new file mode 100644
+index 0000000..b8fd0c7
+--- /dev/null
++++ tests/simple/test-buffer-extract.c
+@@ -0,0 +1,65 @@
++/*
++ * 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/>.
++ *
++ * Copyright (C) 2010 Martin Nordholts
++ */
++
++#include "config.h"
++
++#include "gegl.h"
++#include "gegl-plugin.h"
++
++#define SUCCESS  0
++#define FAILURE -1
++
++static int
++test_buffer_extract (void)
++{
++  gint result = SUCCESS;
++  GeglBuffer *buffer = gegl_buffer_new (GEGL_RECTANGLE (0,0,1,1),
++                                        babl_format ("R'G'B'A u8"));
++  guchar srcpix[4] = {1,2,3,4};
++  guchar dstpix[4] = {0};
++
++  gegl_buffer_set (buffer, NULL, 0, NULL, srcpix, GEGL_AUTO_ROWSTRIDE);
++  gegl_buffer_get (buffer, NULL, 1.0, 
++       babl_format_new ("name", "B' u8",
++                          babl_model ("R'G'B'A"),
++                          babl_type ("u8"),
++                          babl_component ("B'"),
++                          NULL),
++      dstpix, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
++
++  g_object_unref (buffer);
++
++  if (dstpix[0] != 3)
++    result = FAILURE;
++  
++  return result;
++}
++
++
++int main(int argc, char *argv[])
++{
++  gint result = SUCCESS;
++
++  gegl_init (&argc, &argv);
++
++  if (result == SUCCESS)
++    result = test_buffer_extract ();
++
++  gegl_exit ();
++
++  return result;
++}
+diff --git a/tools/create-reference.rb b/tools/create-reference.rb
+index d0bb96c..98fed3b 100755
+--- tools/create-reference.rb
++++ tools/create-reference.rb
+@@ -5,6 +5,11 @@
+ # Use under a public domain license.
+ #
+ 
++if RUBY_VERSION =~ /^1.9/ or RUBY_VERSION =~ /^[2345]/
++  Encoding.default_external = Encoding::UTF_8
++  Encoding.default_internal = Encoding::UTF_8
++end
++
+ class Argument
+     attr_accessor :name, :data_type, :doc
+     def initialize
+@@ -26,15 +31,15 @@ class Argument
+         when "gboolean"
+         when "gpointer"
+         when "GList"
+-          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Doubly-Linked-Lists.html#GList"
++          url="http://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#GList"
+         when "GSList"
+-          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Singly-Linked-Lists.html#GSList"
++          url="http://developer.gnome.org/glib/stable/glib-Singly-Linked-Lists.html#GSList"
+         when "GParamSpec"
+-          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-GParamSpec.html#GParamSpec"
++          url="http://developer.gnome.org/gobject/stable/gobject-GParamSpec.html#GParamSpec"
+         when "GOptionGroup"
+-          url="http://developer.gnome.org/doc/API/2.2/glib/glib-Commandline-option-parser.html#GOptionGroup"
++          url="http://developer.gnome.org/glib/stable/glib-Commandline-option-parser.html#GOptionGroup"
+         when "GValue"
+-          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-Generic-values.html#GValue"
++          url="http://developer.gnome.org/gobject/stable/gobject-Generic-values.html#GValue"
+         else
+           url="##{type}"
+         end
+@@ -136,15 +141,15 @@ class Function
+         when "gboolean"
+         when "gpointer"
+         when "GList"
+-          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Doubly-Linked-Lists.html#GList"
++          url="http://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#GList"
+         when "GSList"
+-          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Singly-Linked-Lists.html#GSList"
++          url="http://developer.gnome.org/glib/stable/glib-Singly-Linked-Lists.html#GSList"
+         when "GParamSpec"
+-          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-GParamSpec.html#GParamSpec"
++          url="http://developer.gnome.org/gobject/stable/gobject-GParamSpec.html#GParamSpec"
+         when "GOptionGroup"
+-          url="http://developer.gnome.org/doc/API/2.2/glib/glib-Commandline-option-parser.html#GOptionGroup"
++          url="http://developer.gnome.org/glib/stable/glib-Commandline-option-parser.html#GOptionGroup"
+         when "GValue"
+-          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-Generic-values.html#GValue"
++          url="http://developer.gnome.org/gobject/stable/gobject-Generic-values.html#GValue"
+         else
+           url="##{type}"
+         end
+diff --git a/tools/img_cmp.c b/tools/img_cmp.c
+index d59ece0..705a1ad 100644
+--- tools/img_cmp.c
++++ tools/img_cmp.c
+@@ -1,4 +1,4 @@
+-#include <gegl.h> 
++#include <gegl.h>
+ #include <math.h>
+ #include <string.h>
+ 
+@@ -8,9 +8,10 @@ gint
+ main (gint    argc,
+       gchar **argv)
+ {
+-  GeglBuffer *bufferA = NULL;
+-  GeglBuffer *bufferB = NULL;
+-  GeglBuffer *debug_buf = NULL;
++  GeglNode      *gegl, *imgA, *imgB, *comparison;
++  GeglRectangle  boundsA, boundsB;
++  gdouble        max_diff, avg_diff_wrong, avg_diff_total;
++  gint           wrong_pixels, total_pixels;
+ 
+   g_thread_init (NULL);
+   gegl_init (&argc, &argv);
+@@ -24,162 +25,84 @@ main (gint    argc,
+       return 1;
+     }
+ 
+-  {
+-    GeglNode *graph, *sink;
+-    graph = gegl_graph (sink=gegl_node ("gegl:buffer-sink", "buffer", &bufferA, NULL,
+-                             gegl_node ("gegl:load", "path", argv[1], NULL)));
+-    gegl_node_process (sink);
+-    g_object_unref (graph);
+-    if (!bufferA)
+-      {
+-        g_printerr ("Failed to open %s\n", argv[1]);
+-        return 1;
+-      }
+-
+-    graph = gegl_graph (sink=gegl_node ("gegl:buffer-sink", "buffer", &bufferB, NULL,
+-                             gegl_node ("gegl:load", "path", argv[2], NULL)));
+-    gegl_node_process (sink);
+-    g_object_unref (graph);
+-    if (!bufferB)
+-      {
+-        g_printerr ("Failed to open %s\n", argv[2]);
+-        return 1;
+-      }
+-  }
+-
+-  if (gegl_buffer_get_width (bufferA) != gegl_buffer_get_width (bufferB) ||
+-      gegl_buffer_get_height (bufferA) != gegl_buffer_get_height (bufferB))
++  gegl = gegl_node_new ();
++  imgA = gegl_node_new_child (gegl,
++                              "operation", "gegl:load",
++                              "path", argv[1],
++                              NULL);
++  imgB = gegl_node_new_child (gegl,
++                              "operation", "gegl:load",
++                              "path", argv[2],
++                              NULL);
++
++  boundsA = gegl_node_get_bounding_box (imgA);
++  boundsB = gegl_node_get_bounding_box (imgB);
++  total_pixels = boundsA.width * boundsA.height;
++
++  if (boundsA.width != boundsB.width || boundsA.height != boundsB.height)
+     {
+       g_printerr ("%s and %s differ in size\n", argv[1], argv[2]);
+       g_printerr ("  %ix%i vs %ix%i\n",
+-                  gegl_buffer_get_width (bufferA), gegl_buffer_get_height (bufferA),
+-                  gegl_buffer_get_width (bufferB), gegl_buffer_get_height (bufferB));
++                  boundsA.width, boundsA.height, boundsB.width, boundsB.height);
+       return 1;
+     }
+ 
+-  debug_buf = gegl_buffer_new (gegl_buffer_get_extent (bufferA), babl_format ("R'G'B' u8"));
+-  
+-   
+-
+-  {
+-     gfloat *bufA, *bufB;
+-     gfloat *a, *b;
+-     guchar *debug, *d;
+-     gint   rowstrideA, rowstrideB, dRowstride;
+-     gint   pixels;
+-     gint   wrong_pixels=0;
+-     gint   i;
+-     gdouble diffsum = 0.0;
+-     gdouble max_diff = 0.0;
+-
+-     pixels = gegl_buffer_get_pixel_count (bufferA);
+-
+-     bufA = (void*)gegl_buffer_linear_open (bufferA, NULL, &rowstrideA,
+-                                            babl_format ("CIE Lab float"));
+-     bufB = (void*)gegl_buffer_linear_open (bufferB, NULL, &rowstrideB,
+-                                            babl_format ("CIE Lab float"));
+-     debug = (void*)gegl_buffer_linear_open (debug_buf, NULL, &dRowstride, babl_format ("R'G'B' u8"));
+-
+-     a = bufA;
+-     b = bufB;
+-     d = debug;
+-
+-     for (i=0;i<pixels;i++)
+-       {
+-         gdouble diff = sqrt ( SQR(a[0]-b[0])+
+-                               SQR(a[1]-b[1])+
+-                               SQR(a[2]-b[2])
+-                               /*+SQR(a[3]-b[3])*/);
+-         if (diff>=0.01)
+-           {
+-             wrong_pixels++;
+-             diffsum += diff;
+-             if (diff > max_diff)
+-               max_diff = diff;
+-             d[0]=(diff/100.0 * 255);
+-             d[1]=0;
+-             d[2]=a[0]/100.0*255;
+-           }
+-         else
+-           {
+-             d[0]=a[0]/100.0*255;
+-             d[1]=a[0]/100.0*255;
+-             d[2]=a[0]/100.0*255;
+-           }
+-         a+=3;
+-         b+=3;
+-         d+=3;
+-       }
+-
+-     a = bufA;
+-     b = bufB;
+-     d = debug;
+-
+-     if (wrong_pixels)
+-       for (i=0;i<pixels;i++)
+-         {
+-           gdouble diff = sqrt ( SQR(a[0]-b[0])+
+-                                 SQR(a[1]-b[1])+
+-                                 SQR(a[2]-b[2])
+-                                 /*+SQR(a[3]-b[3])*/);
+-           if (diff>=0.01)
+-             {
+-               d[0]=(100-a[0])/100.0*64+32;
+-               d[1]=(diff/max_diff * 255);
+-               d[2]=0;
+-             }
+-           else
+-             {
+-               d[0]=a[0]/100.0*255;
+-               d[1]=a[0]/100.0*255;
+-               d[2]=a[0]/100.0*255;
+-             }
+-           a+=3;
+-           b+=3;
+-           d+=3;
+-         }
+-
+-     gegl_buffer_linear_close (bufferA, bufA);
+-     gegl_buffer_linear_close (bufferB, bufB);
+-     gegl_buffer_linear_close (debug_buf, debug);
+-
+-     if (max_diff >= 0.1)
+-       {
+-         g_printerr ("%s and %s differ\n"
+-                     "  wrong pixels   : %i/%i (%2.2f%%)\n"
+-                     "  max Δe         : %2.3f\n"
+-                     "  avg Δe (wrong) : %2.3f(wrong) %2.3f(total)\n",
+-                     argv[1], argv[2],
+-                     wrong_pixels, pixels, (wrong_pixels*100.0/pixels),
+-                     max_diff,
+-                     diffsum/wrong_pixels,
+-                     diffsum/pixels);
+-         if (max_diff > 1.5 &&
+-             !strstr (argv[2], "broken"))
+-           {
+-             GeglNode *sink;
+-             gchar *debug_path = g_malloc (strlen (argv[2])+16);
+-             memcpy (debug_path, argv[2], strlen (argv[2])+1);
+-             memcpy (debug_path + strlen(argv[2])-4, "-diff.png", 11);
+-             gegl_graph (sink=gegl_node ("gegl:png-save",
+-                                 "path", debug_path, NULL,
+-                                 gegl_node ("gegl:buffer-source", "buffer", debug_buf, NULL)));
+-             gegl_node_process (sink);
+-             return 1;
+-           }
+-         if (strstr (argv[2], "broken"))
+-           g_print ("because the test is expected to fail ");
+-         else
+-           g_print ("because the error is small ");
+-         g_print ("we'll say ");
+-       }
+-
+-  }
++  comparison = gegl_node_create_child (gegl, "gegl:image-compare");
++  gegl_node_link (imgA, comparison);
++  gegl_node_connect_to (imgB, "output", comparison, "aux");
++  gegl_node_process (comparison);
++  gegl_node_get (comparison,
++                 "max diff", &max_diff,
++                 "avg-diff-wrong", &avg_diff_wrong,
++                 "avg-diff-total", &avg_diff_total,
++                 "wrong-pixels", &wrong_pixels,
++                 NULL);
++
++  if (max_diff >= 0.1)
++    {
++      g_printerr ("%s and %s differ\n"
++                  "  wrong pixels   : %i/%i (%2.2f%%)\n"
++                  "  max Δe         : %2.3f\n"
++                  "  avg Δe (wrong) : %2.3f(wrong) %2.3f(total)\n",
++                  argv[1], argv[2],
++                  wrong_pixels, total_pixels,
++                  (wrong_pixels*100.0/total_pixels), max_diff,
++                  avg_diff_wrong, avg_diff_total);
++
++      if (max_diff > 1.5 &&
++          !strstr (argv[2], "broken"))
++        {
++          GeglNode *save;
++          gchar *debug_path = g_malloc (strlen (argv[2])+16);
++
++          memcpy (debug_path, argv[2], strlen (argv[2])+1);
++          memcpy (debug_path + strlen(argv[2])-4, "-diff.png", 11);
++
++          save = gegl_node_new_child (gegl,
++                                      "operation", "gegl:png-save",
++                                      "path", debug_path,
++                                      NULL);
++          gegl_node_link (comparison, save);
++          gegl_node_process (save);
++
++
++          /*gegl_graph (sink=gegl_node ("gegl:png-save",
++                                      "path", debug_path, NULL,
++                                      gegl_node ("gegl:buffer-source", "buffer", debug_buf, NULL)));*/
++
++          return 1;
++        }
++      if (strstr (argv[2], "broken"))
++        g_print ("because the test is expected to fail ");
++      else
++        g_print ("because the error is small ");
++      g_print ("we'll say ");
++    }
+ 
+   g_print ("%s and %s are identical\n", argv[1], argv[2]);
+-  g_object_unref (debug_buf); 
+-  g_object_unref (bufferA); 
+-  g_object_unref (bufferB); 
++
++  g_object_unref (gegl);
++
+   gegl_exit ();
+   return 0;
+ }
+diff --git a/tools/introspect.c b/tools/introspect.c
+index 7e4eab3..55ffdd7 100644
+--- tools/introspect.c
++++ tools/introspect.c
+@@ -214,16 +214,18 @@ list_properties_simple (GType type)
+        */
+       if (!found)
+         {
+-
++          gchar *escaped;
+           if (first)
+             {
+                fprintf (file, "<dl>");
+                first = FALSE;
+             }
++          escaped = escape (g_param_spec_get_blurb (self[prop_no]));
+           fprintf (file, "<dt><b>%s</b> <em>%s</em></dt><dd>%s</dd>\n", 
+               g_param_spec_get_name (self[prop_no]),
+               g_type_name (G_OBJECT_TYPE(self[prop_no])),
+-              escape (g_param_spec_get_blurb (self[prop_no])));
++              escaped);
++          g_free (escaped);
+         }
+     }
+   if (!first)
+@@ -270,16 +272,18 @@ list_properties (GType type,
+        */
+       if (!found)
+         {
+-
++          gchar *escaped;
+           if (first)
+             {
+                fprintf (file, "<h5>Properties</h5><dl>");
+                first = FALSE;
+             }
++          escaped = escape (g_param_spec_get_blurb (self[prop_no]));
+           fprintf (file, "<dt><b>%s</b> <em>%s</em></dt><dd>%s</dd>\n", 
+               g_param_spec_get_name (self[prop_no]),
+               g_type_name (G_OBJECT_TYPE(self[prop_no])),
+-              escape(g_param_spec_get_blurb (self[prop_no])));
++              escaped);
++          g_free (escaped);
+         }
+     }
+   if (!first)
+@@ -299,15 +303,18 @@ list_properties (GType type,
+        */
+       if (found)
+         {
++          gchar *escaped;
+           if (first)
+             {
+                fprintf (file, "<h5>Inherited Properties</h5><dl>");
+                first = FALSE;
+             }
++          escaped = escape (g_param_spec_get_blurb (self[prop_no]));
+           fprintf (file, "<dt><b>%s</b> <em>%s</em></dt><dd>%s</dd>\n", 
+               g_param_spec_get_name (self[prop_no]),
+               g_type_name (G_OBJECT_TYPE(self[prop_no])),
+-              escape(g_param_spec_get_blurb (self[prop_no])));
++              escaped);
++          g_free (escaped);
+         }
+     }
+   if (!first)
+diff --git a/tools/operation_reference.c b/tools/operation_reference.c
+index d9687a6..0455e45 100644
+--- tools/operation_reference.c
++++ tools/operation_reference.c
+@@ -239,7 +239,7 @@ list_properties (GType    type,
+ static gchar *html_top = "<html>\n<head>\n<title>GEGL operations</title>\n<link rel='shortcut icon' href='images/gegl.ico'/>\n<style type='text/css'>\n at import url(gegl.css);\ndiv#toc ul { font-size:70%; }\n"
+ ".category { margin-bottom: 2em; }\n"
+ ".category a {\n  display: block;\n  width: 14em;\n  height: 1.2em;\n  float: left;\n  text-align: left;\n  font-size: 90%;\n}\n"
+-"</style>\n</head>\n\n<body>\n<div class='paper'>\n<div class='content'>\n";
++"</style>\n<meta http-equiv='Content-Type' content='application/xhtml+xml; charset=UTF-8' /></head>\n\n<body>\n<div class='paper'>\n<div class='content'>\n";
+ static gchar *html_bottom = "</div>\n</div>\n</body>\n</html>\n";
+ 
+ 
+@@ -289,6 +289,23 @@ static void category_menu_index (gpointer key,
+     }
+ }
+ 
++/* convert operation name to path of example image */
++static gchar*
++operation_to_path (const gchar *op_name)
++{
++  gchar *cleaned = g_strdup (op_name);
++  gchar *filename, *output_path;
++
++  g_strdelimit (cleaned, ":", '-');
++  filename = g_strconcat (cleaned, ".png", NULL);
++  output_path = g_build_path (G_DIR_SEPARATOR_S, "images", "examples", filename, NULL);
++
++  g_free (cleaned);
++  g_free (filename);
++
++  return output_path;
++}
++
+ gint
+ main (gint    argc,
+       gchar **argv)
+@@ -364,12 +381,26 @@ main (gint    argc,
+       GeglOperationClass *klass = iter->data;
+       const char *categoris = gegl_operation_class_get_key (klass, "categories");
+       const char *description = gegl_operation_class_get_key (klass, "description");
++      const char *name = gegl_operation_class_get_key (klass, "name");
++
+       if (categoris && strstr (categoris, "hidden"))
+         continue;
+ 
+       g_print ("<tr>\n  <td colspan='1'>&nbsp;</td>\n  <td class='op_name' colspan='4'><a name='op_%s'>%s</a></td>\n</tr>\n", klass->name, klass->name);
++
++      if (name)
++        {
++          char *image = operation_to_path (name);
++
++          if (g_file_test (image, G_FILE_TEST_EXISTS))
++            g_print ("<tr>\n <td colspan='1'>&nbsp;</td>\n  <td colspan='4'><img src='%s' /></td>\n</tr>\n", image);
++
++          g_free (image);
++        }
++
+       if (description)
+         g_print ("<tr>\n  <td colspan='1'>&nbsp;</td>\n  <td class='op_description' colspan='4'>%s</td>\n</tr>\n", description);
++
+       list_properties (G_OBJECT_CLASS_TYPE (klass), 2, TRUE);
+     }
+   g_print ("</table>\n");

Deleted: trunk/dports/graphics/gegl/files/patch-workshop-lua-5.2.diff
===================================================================
--- trunk/dports/graphics/gegl/files/patch-workshop-lua-5.2.diff	2013-10-17 13:33:19 UTC (rev 112308)
+++ trunk/dports/graphics/gegl/files/patch-workshop-lua-5.2.diff	2013-10-17 14:41:33 UTC (rev 112309)
@@ -1,29 +0,0 @@
---- operations/workshop/external/gluas.c.orig	2012-03-29 13:05:50.000000000 -0700
-+++ operations/workshop/external/gluas.c	2013-09-29 13:51:53.000000000 -0700
-@@ -97,7 +97,7 @@
- static int l_flush     (lua_State * lua);
- static int l_print     (lua_State * lua);
- 
--static const luaL_reg gluas_functions[] =
-+static const luaL_Reg gluas_functions[] =
- {
-     {"set_rgba",    l_set_rgba},
-     {"get_rgba",    l_get_rgba},
-@@ -122,7 +122,7 @@
- };
- static void
- register_functions (lua_State      *L,
--                    const luaL_reg *l)
-+                    const luaL_Reg *l)
- {
-   for (;l->name; l++)
-     lua_register (L, l->name, l->func);
-@@ -146,7 +146,7 @@
-     lua_State *L;
-     Priv p;
- 
--    L = lua_open ();
-+    L = luaL_newstate ();
-     luaL_openlibs (L);
- 
-     register_functions (L, gluas_functions);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20131017/19b77af8/attachment-0001.html>


More information about the macports-changes mailing list