Welcome to Gimp-Print 5.0 Alpha! Please read these release notes
Gimp-Print 5.0.0-alpha1 is the first alpha release (technology preview)
in the line that will eventually lead to Gimp-Print 5.0. It is based
on the 4.3 series that has been in development for two years, and
includes many improvements over the very popular 4.2 series. This
release is not considered to be a fully stable release (there are
still various things in flux, and it has not undergone the extensive
testing that is required to declare a release stable), but we've been
using it and we believe that it will be useful for many purposes.
Gimp-Print is a suite of printer drivers that may be used with most
common UNIX print spooling systems, including CUPS, lpr, LPRng, or
others. These drivers provide high quality printing for UNIX
(including Macintosh OS X 10.2 and 10.3) and Linux systems that in
many cases equal or exceed proprietary vendor-supplied drivers in
quality and functionality, and can be used for demanding printing
tasks requiring flexibility and high quality. This software package
includes the Print plug-in for the GIMP and Ghostscript and CUPS
drivers, as well as Foomatic data.
The Print plug-in for the GIMP requires the GIMP 1.2 (more recent
versions of the GIMP, such as 1.3, are not supported at present). You
may need to install packages named "gimp-devel", "gtk-devel", and
"glib-devel" (or similar equivalents) on many systems. This plug-in
will work with any printing system, and offers a comprehensive user
interface to control all aspects of the printing process.
The CUPS driver requires CUPS 1.1.15 or higher. You may need to
install a package named "cups-devel" or similar on many systems.
Please the rest of the release notes for full details on installation,
as there is an important caveat. CUPS is the printing system used on
Macintosh OS X 10.2 and above, and many other systems use it. The
combination of CUPS and Gimp-Print provides a flexible, general
purpose printing system capable of producing the highest quality
output with any of the printers supported by this package. We
strongly recommend using CUPS with Gimp-Print as a general-purpose
The Ghostscript driver requires GNU Ghostscript 6.53 or higher, ESP
Ghostscript 7.05 or higher, or AFPL Ghostscript 7.04 or higher. It
uses the IJS package included with these versions of Ghostscript to
create a driver that may be built much more easily than traditional
Ghostscript drivers. The options for this driver are very complex,
and it is normally used with the Foomatic driver integration system.
At the present time, the Foomatic data generation for Gimp-Print is
incomplete, and we do not recommend using it with Gimp-Print 5.0 alpha
as most of the new options will not be available. This will be
remedied prior to release of the final 5.0.
Users of Macintosh OS X 10.2 (Jaguar) and 10.3 (Panther) can use this
package, as the printing system is based on CUPS. For ease of
installation, a pre-built package with installer is normally supplied
a few days after the release of the source package. We highly
recommend that OS X users use the pre-built package rather than
attempt to build it themselves.
NOTE: This package will not work with any version of OS X 10.0 and
10.1 (such as 10.1.5), as those systems do not use CUPS as their
printing system. This is NOT going to change; you must upgrade to at
least OS X 10.2 in order to use this package. The reason why is that
OS X 10.2 and above use CUPS as the basis of the printing system. OS
X 10.0 and 10.1 use a different system that would require a separate
driver, and we do not plan to write that driver.
The README file included with this package provides full instructions
on building and installing Gimp-Print.
While Gimp-Print 5.0 is not finalized, it contains many improvements
and changes from 4.2, as follows:
* General User-Visible Changes:
1) In general, Gimp-Print 5.0 is not compatible with Gimp-Print 4.2.
Gimp-Print 5.0 offers many new options (which are described
separately below), and many options that are present in both 4.2
and 5.0 function differently in the two releases. In addition,
the API is different. Finally, the color correction is quite
different, and profiles created against the 4.2 driver will not
function well against the 5.0 driver.
2) In addition to all of the printers supported in 4.2, a variety of
Olympus and Sony photo printers are supported in this release.
3) Options in the CUPS driver and GIMP plugin are now grouped
according to function. This work is still in progress, and
further usability improvements are expected.
4) Simplified bundles of settings are now offered for users who do
not need to customize the settings. The Print Quality and Image
Type controls offer a variety of settings optimized for common
printing tasks. Both controls offer Manual Control settings for
users who wish greater control over the output.
5) Many of the color settings have changed effect. We recommend
starting with no color correction and making appropriate changes
only as required. Specific changes that you should be aware of
* The default operation of the contrast setting has changed to be
more in accord with standard practice. In 4.2, reducing the
contrast resulted in changing the black and white setting. In
5.0, reducing the contrast does not change the black and white
settings. As a result, it is possible to use the contrast
setting to improve highlight and shadow detail by reducing the
The old behavior is available by turning on the "Linear
* The Cyan, Magenta, and Yellow settings have been replaced with
separate settings for gamma and density for Cyan, Magenta,
Yellow, and Black. The Cyan, Magenta, and Yellow settings in
Gimp-Print 4.2 most closely correspond to the gamma settings in
The per-channel density settings do not affect the color
correction. They are applied after the color correction to
scale the individual channels.
* Quality Improvements:
1) Color and tonal accuracy is greatly improved compared to 4.2
while the gamut (range of printable colors) has been increased.
This particularly improves the hue accuracy of red, magenta, and
blue, and the tonal accuracy of cyan and green. Most Epson
printers have been fully tuned for the new color correction
algorithms introduced for this release.
2) The handling of variable drop sizes and photo inks (6 and 7 color
printers) has been completely rewritten, with the result being
that variable drop size printers with photo inks (such as most
Epson Stylus Photo and Stylus Pro printers) give much more
consistent results with fewer artifacts. In particular, colors
match correctly across all resolutions, which was not the case in
In 4.2, variable size drops and light inks were treated the same
way; an "effective drop size" based on the relative size of the
drops and the darkness of the inks was used to decide what kind
of drop to print. While this method has some advantages (it
ensures that dark and light inks are never printed at the same
place, and also that dark dots are optimally dispersed among
light dots), it has some serious disadvantages as well: the
properties of a small dark dot and a large light dot are not
really the same, particularly when inks are mixed. The
combination of different drop sizes being used at different
resolutions meant that the transition between light and dark inks
differed depending upon the resolution chosen, and if more than
one drop size was required at a given resolution, the transition
tended to be quite marked.
The new method of handling variable size drops and light inks is
to first separate each of the four channels (cyan, magenta,
yellow, and black) into the appropriate light and dark inks, if
needed. This separation is performed based on the relative
darkness of the different ink sub-colors (such as light and dark
cyan) and specific characteristics of the printer, ink type, and
paper chosen. Following this, each sub-color is screened
separately, and the appropriate combination of drop sizes is
The drop size selection in this release has also been changed to
fill the page with as many small drops as possible before
switching to larger drops. This ensures that the largest number
of the smallest possible drops is printed, which yields a
smoother texture in the midtones.
Finally, new dither algorithms described below allow drops of ink
of different colors to be dispersed, avoiding clumping or
overprinting of drops.
3) The EvenTone dither algorithm has been extensively reworked in
this release, offering many improvements.
First, it has been rewritten to work correctly with variable drop
size and photo printers. This algorithm, which offers
significant improvements over the standard Adaptive Hybrid
algorithm, does not work optimally with variable drop sizes or
photo printers in 4.2.
Secondly, several variations on this algorithm have been
introduced, yielding a family of high quality screening
algorithms for different applications. The first variation is
called Hybrid EvenTone. This dither algorithm perturbs the dot
positions slightly to break up some patterning seen in standard
EvenTone dithering in solid regions of pale tones, particularly
when printing with black ink only. This very slightly reduces
the smoothness of texture in exchange for largely eliminating
this undesirable patterning. This algorithm is also expected to
be more resistant to microbanding effects.
The second variation is called UniTone. This dither algorithm
calculates the placement of all dots (except for yellow) using a
single EvenTone pass, not just all of the dots of one color.
This technique improves the quality when multiple inks must be
mixed, such as when color inks are used to produce gray. It does
so by ensuring that all dots are equally spaced. Typically when
printing neutral tones with EvenTone dithering the cyan, magenta,
and yellow dots are positioned very close to each other, even
though the individual cyan dots are well-positioned. This causes
the groups of dots to appear to be single, large dots. UniTone
dithering evens out the spacing between all dots, producing a
smoother texture. UniTone dithering only functions when printing
in color (or grayscale with multi-tone gray ink); when printing
with black ink only, it is exactly equivalent to EvenTone
dithering. UniTone dithering is generally slower than EvenTone.
UniTone dithering works best at improving output when the drops
are already very small, which is usually at high resolutions.
With these small drops, the eye has difficulty distinguishing the
color of the individual drops, so their color tends to be
distinguished primarily by their darkness. While cyan ink is
lighter than black ink and magenta ink is lighter than cyan ink,
these differences are not overwhelming and hence the eye does not
perceive a difference between them. With large drops, the eye
perceives the color of the individual drops, and small spots
dominated by one ink become apparent.
As noted above, UniTone dithers yellow separately. This is
because the yellow ink is much lighter than any other ink, and
the positions occupied by yellow drops appear as holes, reducing
the quality of the print. Even light cyan and light magenta inks
appear to be significantly darker than yellow.
Experiments conducted to date suggest that UniTone works very
well on the printers such as the Epson Stylus C80 at high
resolutions, when the printer is using 3 picolitre drops. On the
Stylus Photo EX, at 1440x720 DPI, using 8 picolitre drops,
quality is improved significantly when printing in normal 6-color
mode but quality is slightly worse in 4-color mode, as the colors
of the drops are apparent. At 720 DPI (using 12 picolitre
drops), quality is improved in 6-color mode but degraded
significantly in 4-color mode.
Finally, a Hybrid UniTone dither algorithm is provided, combining
the principles of both of the above.
As noted above, UniTone dithering does not always work better
than EvenTone, although in most cases all of these algorithms
work much better than Adaptive Hybrid in 4.2. We suggest that
users requiring the highest quality experiment, using Hybrid
EvenTone as a baseline.
4) The conversion between black and composite (CMY) gray has been
improved in this release, yielding more neutral grays on most
5) Epson printers have been completely retuned, in most cases
yielding much better density, more accurate gray scale, and
higher Dmax on all paper types.
* New Functionality:
1) This release offers a new curve data type.
2) This release offers many new output controls:
+ Balance (density) controls for each channel, in addition to the
gamma controls present in 4.2.
+ Black (GCR) transition, including the transition gamma and the
upper and lower limits.
+ Transitions for photo (light cyan and light magenta) inks.
+ Transfer curves for each channel (cyan, magenta, yellow, black,
and composite), allowing very precise control over the output.
+ Hue, saturation, and luminosity transfer curves.
+ Ink limit control.
+ The density control now permits setting density as high as 8.0,
vs. 2.0 in 4.2.
3) The Epson driver offers (almost) true full bleed for printers
that support it (but see the limitations below).
4) The resolution list for Epson printers has been simplified; many
redundant resolutions have been removed.
5) Print head directional for Epson printers (unidirectional
vs. bidirectional) is now a separate control. In addition to
contributing to the simplification of the Epson printer
resolutions, this permits the choice of unidirectional
vs. bidirectional at all resolutions.
6) The Epson driver now offers a choice of print head weave
patterns. In addition to simplifying the resolution choices for
Epson Stylus Pro printers, this offers an additional control for
fine tuning output quality.
7) The Epson driver offers an Ink Set control for printers taking
different choices of inks (such as the Epson Stylus Photo 2200,
which offers a choice of Matte Black and Photo Black inks).
8) The Epson driver permits adjusting the dot size if required to
increase the amount of ink printed. For example, if 1440x720 DPI
is selected, but the density requested is very high, the printer
will switch to using drop sizes appropriate for 720 DPI. This
option is disabled by default.
9) Where practical, all controls offer a default setting for
simplicity of operation. This default value is intended to offer
the optimal choice given the printer and its other settings. For
example, if "Automatic" is selected for print head direction, the
print head motion will be unidirectional at high resolutions
(since unidirectional usually produces better output), but
bidirectional at low resolutions (for faster printing).
The default is only offered for options that are not directly
controlled by the user's action. For example, there is no
default choice offered for paper type, since the correct value is
based on the paper type loaded by the user. Similarly, there is
no default for the input slot or ink set.
10) A new Threshold color correction mode has been added, that
produces either all-on or all-off of each color. This is similar
to the Monochrome mode in 4.2, except that it works for color as
well as black.
* Changes to the Print plugin for the GIMP:
1) The plugin now always displays the page preview with the top of
the page at the top of the preview pane, rotating the image
preview as necessary to display landscape or portrait mode.
2) The positioning controls have been simplified.
3) The printrc file format is different. Gimp-Print 5.0 can read
printrc files created by Gimp-Print 4.2 and earlier, but it
writes out the printrc file in a format that earlier versions of
Gimp-Print cannot read.
* Changes to the CUPS driver:
1) The CUPS PPD files now offer both fine and coarse adjustments for
all color controls, permitting much finer control over output (in
steps of .005 rather than .05).
2) The CUPS driver refuses to function with PPD files created for a
different version of Gimp-Print, providing an error message
indicating the problem. This avoids problems caused by
mismatches between the PPD files and the driver. While
mismatches are potentially not harmful in all cases, they could
cause problems ranging from failures to print with poor
diagnostic messages to incorrect results.
3) The Gimp-Print 5.0 CUPS driver can be installed concurrently with
the 4.2 driver. Both the PPD files and the driver carry
different names from their 4.2 counterparts, permitting a gradual
switchover between 4.2 and 5.0-based releases.
4) An update script (cups-genppdupdate.5.0) is provided to update
PPD files between recent 4.3 and 5.0-based releases, preserving
option values where possible. This script will not update PPD
files based on Gimp-Print 4.2, or Gimp-Print 4.3 releases prior
5) Due to the implementation of CUPS, it is necessary on some
systems to link the programs associated with the CUPS driver (in
particular, cups-genppd and rastertogimpprint) statically against
the Gimp-Print library. Please see bugs 865253 and 865265 for
This fix works correctly unless --disable-static (to disable
building static libraries) is passed on the command line.
Normally, only people packaging up Gimp-Print for distribution
use this option. If you wish to use this option, please read the
Exceptions and Workarounds *carefully* for a full description of
the problem along with suggested methods of procedure.
6) With certain versions of CUPS and in certain non-default
configurations, if a new version of Gimp-Print is installed over
an existing version genppd will create PPD files based on the
older version of Gimp-Print rather than the newer version. This
will happen if all of the following are true:
1) The cups-config provided by the CUPS driver adds
-Wl,rpath=/usr/lib. This is done by some versions of CUPS
reportedly because in some cases the runtime linker does not
pick up libraries out of /usr/lib. This can be checked by
cups-config --libs --ldflags
and inspecting the output for any mention of "rpath", "RPATH",
"RUN_PATH", or the like. This is controlled by the CUPS
installation on your system.
2) There is presently a version of Gimp-Print installed in /usr
(--prefix=/usr) rather than /usr/local or the like. The
default location of Gimp-Print installation is in /usr/local,
but system vendors typically install Gimp-Print in /usr.
3) Gimp-Print is built dynamically only (--disable-static). This
is not a default, and requires the explicit --disable-static
on the Gimp-Print "configure" command line. Therefore, if you
build Gimp-Print normally you should not be vulnerable to this
Note that in general if you install CUPS into a non-standard
location, and install Gimp-Print into the same location, this
problem can surface. For example, if you choose to install CUPS
in /usr/local and Gimp-Print in /usr/local you are vulnerable to
this. However, it is not standard practice to install CUPS
anywhere but /usr.
In this case, the run path embedded in the genppd executable
points to the version of Gimp-Print installed in /usr/lib. This
run path overrides any attempt by libtool to look in the build
directory. The result is that cups-genppd and rastertogimpprint
are run against the older version of Gimp-Print. If the new
version contains additional features (more printers, etc.) they
will not be available.
This bug is difficult to detect in a normal build. It does not
cause an error to happen during build; the only failure is that
some PPD files may not be built or may be built with missing
options. Due to the PPD version checking introduced in this
release, the behavior might manifest itself as a runtime error.
It is also possible that there will be no error at all other than
the older version of Gimp-Print being used, with the result that
new features and bug fixes are not available.
If you wish to use only shared libraries, do not wish to build
static libraries at all, and are vulnerable to this issue
(because cups-config --ldflags sets the run path), there are
three workarounds available:
1) Build and install Gimp-Print into /usr (rather than
/usr/local) and then rebuild Gimp-Print from scratch. This
will install the correct libgimpprint.so in /usr/lib, and in
the rebuild genppd will be run against the correct library.
2) Remove the old version of Gimp-Print prior to building the new
version of Gimp-Print. The important files to remove are
anything named /usr/lib/libgimpprint*.
3) Edit cups-config to remove the reference to the run path.
* Changes to the Ghostscript driver:
1) The stp driver, a monolithic (traditional) Ghostscript driver
used with Ghostscript 5.10, 5.50, and 6.51, has been withdrawn.
The only supported Ghostscript driver is the IJS-based driver,
for GNU Ghostscript 6.53 and above, ESP Ghostscript 7.05 and
above, and AFPL Ghostscript 7.04 and above.
This change was made due to the difficulty of supporting the
monolithic driver and the complexity of building it. The
traditional monolithic driver architecture required that all
drivers be compiled into Ghostscript, requiring that program to
be recompiled whenever a driver is added. This is a rather
complicated operation that cannot easily be automated. The IJS
architecture, based on the open source HPIJS driver supplied by
Hewlett-Packard for HP inkjet printers, allows for drivers to be
compiled independently of the core Ghostscript. A Gimp-Print
driver based on the IJS architecture was introduced into
Gimp-Print 4.2.1 and 4.3.0, and has been recommended for use with
Gimp-Print 4.2.2 and beyond.
In addition to a greatly simplified build procedure and overall
cleaner architecture, the separation between Ghostscript and
driver imposed by the IJS architecture permits use of Gimp-Print
with AFPL Ghostscript with no license conflict.
* Exceptions and Workarounds:
1) Full bleed mode does not work completely correctly on most Epson
printers at present. Typically there is a small margin at the
bottom of the page (1-2 mm) and possibly a very small margin at
the top. However, it works correctly along the left and right
margins. We do not have an estimated time for a fix.
2) Printing to CD probably does not work correctly on the Epson
Stylus Photo 900 and the Stylus Photo R300, although for
different reasons. On the Stylus Photo 900, the positioning is
most likely incorrect, while there have been reports that the
manual feed tray is not selected correctly on the Stylus Photo
R300. We do not have an estimated time for a fix.
3) The Canon, Hewlett-Packard, and Lexmark drivers do not offer all
of the additional options and improvements that the Epson driver
does. We do not have an estimated time for fix. Please contact
us if you would like to assist with this.
4) Translation to other languages other than US-English is not
supported in this release. This will be fixed prior to 5.0.
5) The Foomatic printer data management system is not completely
supported in this release, as noted above. This will be fixed
prior to 5.0.
6) Support for the Canon S200 has not yet been ported forward from
7) This release is probably slower than 4.2 in many cases,
particularly when using High Accuracy (which is the default color
correction in most cases) or Bright color correction. It is
possible that this release will not be able to drive some
printers at full speed, particularly if your computer has a slow
processor. Performance has not been analyzed or tuned at
present. We expect to improve the performance prior to final
8) The user's manual and developer's guide have not been updated for
9) The CUPS PPD update script (cups-genppdupdate.5.0) will not
update PPD files from 4.2 or from 4.3 prior to 4.3.21.
* Architectural Changes:
1) A modular architecture for family drivers. A "family driver" is
a collection of printer drivers for one group of printers sharing
a common programming architecture, e. g. ESC/P2, PCL, Lexmark,
2) A modular architecture for color processing. This architecture
will enable us, or others, to provide color management without
having to change the internal interfaces within Gimp-Print.
3) New composite data types. Gimp-Print 5.0 defines additional data
types. These types include:
* Sequences, curves, and arrays. A sequence is a primitive
vector of numbers data type; curves and arrays provide
additional capabilities such as interpolation (for curves) and
multiple dimensions (for arrays).
* Lists are a general ordered container of named objects of
arbitrary type. They are used throughout the core library, but
are not presently exported as such, although derived types
are. The creator of a list can specify constructor,
destructor, name comparison, copy, and sort operations on list
* Parameters, which are part of the options system described
below. In addition to storing values and descriptions of the
parameter, parameters can be queried to determine defaults and
constraints. Parameter lists (which use the list container
internally) are also defined as part of this.
* String lists are used in various ways; in particular, they are
used by the parameter system to inform programs of the
available choices of values for string-valued parameters.
4) Complete overhaul of the options system. Rather than offering a
fixed set of operations, family drivers, color modules, etc. can
now offer a wide variety of options using a predefined set of
data types. The data types currently supported are strings
picked from a list, floating point numbers, integers, curves,
arrays, Boolean values, and filenames.
The new options system provides a flexible way for drivers to
inform applications of default values and UI hints, the ability
to selectively enable and disable options, and a generalized way
of verifying legality of option choices.
5) The coordinate system has been changed from bottom left to top
left of the page, and the printable area can now extend beyond
the edge of the page. The result is a more intuitive coordinate
system for driver writers that matches the coordinate system of
printers, and the ability to do true full bleed.
6) Complete overhaul of the black generation in CMYK output. Black
generation is now performed in the color code rather than the
dither code. This simplifies the dither code, puts the CMYK
generation where it should be, and improves overall flexibility.
7) Complete overhaul of the multi-tone (photo or quadtone) ink
processing architecture (channels). Instead of being processed
as part of the dithering code as in 4.2, where ink drops of
lighter inks were assigned virtual values proportional to their
darkness as well as their size, this is now processed after the
initial color conversion. This has a number of major advantages:
* As the actual amount of ink to be printed is visible to the
color code, the color code can do ink limiting without fear
that the dither code will change the amount of ink to be
* It ensures that the same proportions of inks will be printed at
any density and resolution. In 4.2, the ramp from light to
dark ink varied depending upon the dot sizes available and
hence the resolution. This has already been demonstrated to
yield much better linearity and much more neutral gray scale
with even very modest tuning effort.
* It enables use of all drop sizes of all ink tones. In 4.2, we
could not use the smallest drop size of dark ink, because the
virtual dot size of a small dot of dark ink is typically close
to the virtual dot size of a large dot of small ink. This
would yield very sharp transition, and perhaps even result in
more light ink printed in darker regions than in lighter
regions. With channel processing separate from dithering, this
concern no longer exists; we can safely use small drops of dark
ink, improving smoothness.
* It enables the color code to do ink limiting intelligently
without concern that the dither code will rearrange things
behind its back.
* It greatly simplifies the specification of inks. With drop
size and darkness orthogonal, family drivers can greatly
simplify their tables of inks.
* Dither algorithms can choose to ignore smaller drop sizes if
they wish to offer fast operation.
* Applications with special requirements can now access the raw
ink channels directly. This facility was used to create a
mechanism to more accurately tune printer inks.
8) Use of true XML to store data about printers and paper sizes, and
to represent new data types (sequences, curves, and arrays).
This uses the "mxml" XML library, a fast, lightweight XML parser
written by Mike Sweet for this project. Currently, the use of
XML (as opposed to compiled-in data) is limited, but we expect
that this will change beyond the initial 5.0 release.
9) In addition to parameters, internal components such as family
drivers, color drivers, etc. can store arbitrary data in the
basic stp_vars_t object. This facility is used to simplify the
internal driver API; the family driver no longer needs to keep
track of dither, color, etc. information itself.
10) The Epson Stylus family driver has been decomposed into more
functionally distinct units. The data schema has been
considerably improved, and the code itself broken into more
easily maintained units.
11) The build system has been updated with a more contemporary
toolchain based on autoconf 2.5 and gettext 0.11.
12) The Print plugin for the GIMP has been decomposed into a UI
library and the core plugin. The user interface library is a
pure GTK1-based library; the tiny GIMP plugin is a client of this
13) Printer characteristics are exposed to the application level as
read-only parameters. This permits the escputil utility to not
duplicate information stored in the printer driver.
Robert Krawitz <rlk@...>
Tall Clubs International -- http://www.tall.org/ or 1-888-IM-TALL-2
Member of the League for Programming Freedom -- mail lpf@...
Project lead for Gimp Print -- http://gimp-print.sourceforge.net
"Linux doesn't dictate how I work, I dictate how Linux works."