rlk is currently certified at Journeyer level.

Name: Robert Krawitz
Member since: 2000-09-30 03:23:04
Last Login: N/A

FOAF RDF Share This

Homepage: http://www.tiac.net/users/rlk


Project lead for gimp-print


Articles Posted by rlk

Recent blog entries by rlk

Syndication: RSS 2.0

Like raph, I have memories of Chema from the first Printing Summit. I also had the good fortune to meet him twice more: in Mexico City when I was on vacation, and in Boston when he was here on business. At that last meeting, we finally resolved an issue that had been confusing us ever since the summit.

There's really no way to describe what happened. At least he was doing something he enjoyed.


We're finally on the verge of alpha, although we don't know whether it's going to be 4.4 or 5.0 yet. This last development release (4.3.24) has quite a few goodies jammed into it. I finally did printing to CD's, which some Epson printers can do. The other interesting addition is a few variations on Raph's EvenTone dithering, which I call Hybrid EvenTone and UniTone.

Hybrid EvenTone is a fairly simple variation that reduces the high frequency patterning that EvenTone sometimes produces in light midtones, particularly if only one channel is in use. Like most screening algorithms, EvenTone is usually implemented by comparing a value (the input value plus the error term that's specific to the algorithm) against a constant (typically 0.5): if the value exceeds the constant, the dot is printed. What Hybrid EvenTone does is perturb the "constant" by using a small amount of a fixed dither matrix. In our case, the perturbation from the dither matrix is 1/16 (plus or minus 1/32). This causes dots to be printed slightly out of position. This creates a very slight imperfection in the screen, but it breaks up the somewhat objectionable patterning. I arrived at the value of 1/16 for the perturbation by experiment; that amount of variation is sufficient to break up all patterning but the effect on the smoothness is very minor.

UniTone is more radical. It creates an EvenTone screen based on multiple channels, and then picks the channel to print at each selected position by EvenTone screens on each channel. The channel selected is the one with the best EvenTone value.

The principle behind this is that the eye has difficulty distinguishing the color of isolated small dots, but it easily sees the luminosity. The problem with EvenTone dithering of pale neutral tones is that the dots of each color typically line up, or even overprint, while leaving large expanses of unprinted paper. UniTone dithering spaces these dots apart, creating the impression of more lighter dots.

For this to work, the dots have to be fairly close in luminosity, or else there will be visible holes where light inks are printed. It turns out that yellow is much lighter than any other ink (even light cyan and light magenta), and I therefore obtained best results by dithering every channel except yellow by UniTone and dithering yellow by a separate EvenTone screen.

How well does it work? It varies. With old-style, single drop size printers at low resolution (e. g. the Epson Stylus Photo EX at 360 DPI, which uses something like 40 pl drops), the colors of the drops are easily distinguished and the UniTone screen works poorly. However, on the Stylus C80 at high resolution (3 pl drops, 4 colors) and the Stylus Photo EX (8 pl drops, 6 colors), the improvement is substantial in gray and blue tones. There's less improvement on the Stylus Photo 2200, and sometimes the result is worse; it depends upon whether the printing is unidirectional or bidirectional, and the choice of weave pattern. However, the best results I've obtained with UniTone is better than the best results from EvenTone or Hybrid EvenTone.

I also figured out how to use EvenTone and UniTone screening with multiple drop sizes. The principle applies to any screening algorithm. The method is to pick two candidate drop sizes (small and large) based on the input value, and then to perform the screening based on the small drop size being "off" and the large drop size being "on".

All in all, it will be very interesting to see how other people perceive the differences between 4.2 and 4.3.

Japan-market Printers

It looks like some of the Japan-market printers are coming to the US. The Stylus Photo R300 is a PM-G type printer with 3 pl minimum drop size, and the R800 (which is due out in February) is a PX-G type printer with 1.5 pl drops and red and blue inks. Anyone know good algorithms for RGB->CMYRB?

More on the Epson Japan-Market Printers

These things are even wilder than I thought. They appear to have three pigment inks:

  • PX V is 4-color ink, apparently similar to the C80 and its successors, with a 3 pl drop size.

  • PX P is 7-color (CcMmYKk). The only printer using that is the PM-4000PX, which is our old friend the Stylus Photo 2200.

  • The really wild one is PX G. This appears to have three shades of black (if I'm reading the cartoons right; maybe it's 2) in addition to CMY. This uses a 1.5 pl drop size, which is astounding for pigment ink. However, it also has red and blue inks to increase the gamut. This is a very interesting choice. I agree with blue; it's typically very hard to get good blue out of inkjet printers. I'm not sure I agree with the choice of red as the other "wildcard" ink, though, because the existing 7-color (PX P) inks print spectacular reds as it is. Green is usually a very troublesome color, and it's particularly difficult to get a saturated light green, so I'd think a highly saturated light green ink would be a good choice. Interestingly enough, it's not hard to get a really saturated dark green that's way outside of monitor gamut. I wonder if the really tiny drops forced them to use a formula that's less saturated, so they're compensating with the red and blue inks.

They also have PM-G inks (6-color dye) with 1.5 and 3 pl minimum dot sizes, depending upon the printer. Perhaps they've reformulated the inks; if not, they probably have the same problems as what I've seen on the 960 with poor saturation in the reds.

If anyone knows Japanese, I'd be very interested in a translation of this PDF.

So what do I think? I'd rather see a highly saturated 4-color combination (CMYK) with very small drops for the highest quality. At the very highest resolution, the PX P ink with 1.5 pl drops should come very close to matching PX V with 4 pl drops. It's certainly easier to get right, and it avoids all the nasties that multiple shades can bring (getting transitions clean, for example). However, at lower resolutions (with correspondingly bigger drops), 6-color (CcMmYK) or 7-color (CcMmYKk) are the way to go, and 2880x1440 is very slow even with the gigantic print heads that some of these printers have (plus it's computationally expensive). A lot of people will be perfectly happy with 720 DPI on the 2200, but they won't be happy with 720 DPI on these hyper-micro-drop 2880x1440 or 2880x2880 machines.

The real wildcard is this PX G. Since I can't figure out exactly how many different black/gray components it has, I have to reserve judgment until someone translates it for me. It's certainly not something we're going to support in Gimp-Print right now (that's not to say we won't in the future!), unless someone wants to use the raw interface with their own color code.

In any event, printing technology certainly isn't standing still...

Epson Stylus Photo 2200

Raph, about the Epson Stylus Photo 2200: the light black ink isn't quite as perfect a solution as it looks at first glance. The problem with the 2200 is that the color inks alone have a cyan cast, and the light black and photo black inks have a brown cast to compensate. On Epson's other printers, Gimp-Print doesn't replace composite gray with black ink until quite a bit of CMY ink is used. On the 2200, that's not an option: you pretty much have to use light black ink for even very light gray, mixed with color ink. I've found that we can get away with cheating slightly (.01 of maximum density) without getting much of a color cast, but using composite-only ink at more than that is asking for trouble.

The light black dots are darker than the light cyan, light magenta, and yellow dots, so they're actually more visible. The upshot is that I haven't been able to achieve quite the smoothness of texture with the 2200 as I can with the 870, say.

The more interesting issues are with the choices of darker black ink. There are two choices available: photo black and matte black. The matte black ink is considerably darker, and is neutral in tone, while the photo black ink is rather brownish in color and will not produce anything close to a solid (or neutral) black without CMY inks in the same proportion (about 2 parts black for 1 part CMY is what I've found). The matte black ink doesn't actually seem to be all that dark either, at least on the papers I've tried. It's OK on Radiant White Watercolor Paper, but on Heavyweight Matte it requires extra black ink to achieve a good black.

Epson's real intent with this somewhat odd inkset appears to be twofold: to improve the blue and green gamut (where inkjets tend to be weak) and to allow toning photographic prints by adjusting the proportions of light vs. dark ink. I'm actually somewhat tempted to add a tone control (warm to cold) to Epson printers using UltraChrome inks in Gimp-Print, but that's still fairly low on my list of priorities.

What's also truly fascinating about this printer is the extreme color gamut -- it simply produces much more saturated output than any other Epson printer I've tried. This is particularly interesting because the UltraChrome inks are pigment-based, and that usually leads to a smaller gamut.

BTW, for anyone who notices that the 2200 is capable of 2880x1440 DPI while the 870 can only do 1440x720 DPI, and that it therefore sounds like the 2200 is rather lacking in comparison to a much older printer, that's a wrong interpretation. The smallest drop size the two printers use is both 4 pl, and that's more or less what limits the highlight smoothness. The difference is that the 870 needs three drop sizes, roughly 4, 8, and 12 pl, in order to deposit enough ink, while the 2200 needs only the smallest drop size. The larger dots are only used in dark areas, so they're effectively hidden. The higher resolution of the 2200 does allow more places on which to deposit a dot, which theoretically allows for better dithering placement and higher print resolution. However, with a good dither algorithm such as Raph's excellent EvenTone Screen, 1440x720 is quite sufficient. For photographs, the high print resolution doesn't matter, although for line art with extremely fine detail it could make a difference. In practice, the 2200 is almost as good at 720 DPI as it is at 2880x1440 DPI, and 4x faster (that's not a typo; the details of why are rather boring). The 870, in contrast, cannot effectively use the smallest drop sizes at 720 DPI (it uses drops of approximately 6, 12, and 24 pl), and the quality at 720 DPI is significantly degraded.

The 2200 is in fact a spectacular printer, but it has its quirks. Quirks or no, it's still a lot easier to produce a neutral grayscale on the 2200 than it is on the 870.

One thing that's somewhat unfortunate is that I have yet to figure out how to print full bleed to the top and bottom of the page. Someone sent me a print file, and it appears that there's a completely undocumented remote mode command (SN followed by something like 45 data bytes) that enables it. Changing a byte within that command disabled the full bleed. I'd like to know what that's all about.

Epson Stylus Photo 960

In contrast, I'm rather disappointed by this printer. It has a tiny 2 pl drop size, which is almost invisible under a high quality 5x loupe. It does produce very smooth highlights, but it's very hard to get a neutral grayscale from it. The workaround is to use much more dark ink, which somewhat negates the advantage of the small drops in the midtones, which therefore are actually typically grainier than the highlights.

Due to this, it really is necessary to use 2880x1440 DPI to get the highest quality; 1440x720 DPI requires using 4, 8, and 16 pl drops, which completely negates the advantage of this printer. In addition, despite the difficulty of eliminating color casts, this printer also has a markedly smaller gamut than the 2200 (which as I noted above has a really huge gamut) and the 870. This is particularly apparent in the reds. Interestingly enough, though, it does produce a very solid black.

This is a printer that could really use a light black ink.

Other Interesting Printers

Epson just announced the Stylus Pro 4000. If you're a fan of UltraChrome inks, the specs will simply blow you away. 3.5 pl, 8 separate ink tanks (lets you have both matte and photo black installed, or 2xCMYK cartridges for more throughput for proofing). Very complicated beast, but it sounds like it's quite a machine.

Epson has introduced a whole bunch of printers in Japan whose specs blow away anything available in the US. The PM-970C and PM-980C, for example, are 7-color, 1.8 (!) pl printers with gigantic print heads, which will deliver tremendous print speed in draft mode and some improvement at 2880x2880 (!) DPI. It uses a dark yellow (!) 7th ink, which apparently is used to improve skin tones. I think it would have potential to improve red, yellow, and green somewhat.

The site, by the way, is called I Love Epson. No, I can't read Japanese, and unfortunately they've Flashified the site a lot, making it harder to get around. However, they've recently introduced a line of printers spearheaded by the PX-900G, and some of the specs on these things are incredible (1.5 pl, for example).


Progress on the next release (4.4 or 5.0) is slower than I'd like. For one, we're having problems with recent 4.3 releases on Macintosh OS X; 4.3.18 works fine if you drag and drop files onto the Print Center, but printing from applications doesn't work. I suspect a PPD problem of some kind, but we haven't yet managed to debug it. I consider this to be a hard alpha stopper; OS X users are very important.

There's also project fatigue; a lot of people who have been working on it for a while are less active now. I myself am getting fatigued. Maybe it's time to move on after this release, and either take a break for a while or find something else to do. I've been working on this for more than 4 years now. That's a lot of time.

18 Sep 2002 (updated 18 Sep 2002 at 00:29 UTC) »
Inside the tornado!

Apple has picked up on CUPS and Gimp-print in a big way. Mac OS X 10.2 is using CUPS as the core of its printing system, and Gimp-print is providing a lot of the drivers.

They aren't actually bundling Gimp-print with OS X, but when Phil Schiller (top marketing guy) does a keynote at Seybold, and mentions Gimp-print for more than a few seconds, they're not exactly ignoring it. It's being made available for download on all of the OS X sites, and on VersionTracker.com it's getting (with very few exceptions, mostly related to the fact that until extremely recently Ghostscript wasn't available to handle applications generating PostScript output) rave reviews. One person even said that Epson pointed him at Gimp-print for his 2200, because they don't know when they'll have their own driver.

It's absolutely astounding how all of this happens. I certainly never imagined it would go mainstream to this degree; I expected uptake by Linux distributions, but since it's a piece of infrastructure I expected it to remain largely invisible. Reality is very different.

My sister in law has told me several times that she thinks I'm crazy for not having patented it and made my fortune selling it. Aside from the fact that it's rather difficult to patent a printer driver, and I'm a free software fan in general, it's interesting to note that there are a few proprietary driver packages for Linux/UNIX: Xwtools and PrintPro. The developer of Xwtools is actually making pieces of it free/GPL (in particular the excellent Epson Stylus maintenance utility, which is far nicer than our own escputil), and PrintPro has steady, but not spectacular sales in the corporate arena. However, neither of these packages has really taken off. I'm convinced that the free part is a direct cause of the developer interest, which is what's needed to create end user interest.

It's interesting to note how many users are really unhappy with printer vendors. From my own discussions, I believe that the problem is with the OS vendors, who historically keep changing their driver architecture, and with the printer vendors, who don't spend much on sustaining for their older models. I can't entirely blame the printer vendors; sustaining is very expensive and unpleasant. However, it's very apparent that at least some printer vendors essentially write new drivers for every printer model; the Windows GUI for the Stylus Color 800 is very different (and clearly much older) from that of the C80. A data-driven approach would help here.

This whole thing's actually really wild, and very exciting.

The functionality/architecture tradeoff

One thing that's disappointed me is that we haven't really looked all that hard at our internal architecture over the past few years. We've certainly cleaned up a lot of interfaces, but we've never moved toward the much more data-driven architecture I envisioned. This is as much my fault as anyone's; I haven't had a lot of real moments of inspiration on this front.

Most of my effort has gone into nibbling around the edges: tweaking the Epson family metadata schema to support newer printers, improving color fidelity in minor ways, playing around with dithering, and the like. There have been a lot of other sub-projects, such as a user's manual, that also aren't architectural in nature; most of the architectural work has gone toward improving the build system for both the code and documentation.

I'm becoming more and more convinced that this is actually a reason why Gimp-print has succeeded. Most of the work has gone into things with visible end-user effect; documenting how to actually use it,supporting more printers and improving quality is something people notice; low-level architecture isn't. Also, the base is stable; there have been zero changes to the API (as determined by commits to the gimp-print.h header file) in the 4.2 series, and exactly one minor addition (which may have important ramificationns for color management on photo printers later) thus far in 4.3. Is the API perfect? No; there are certainly things I'd like to change. But it's good enough, and probably a lot better than existing printing facilities can really use.

The 4.2 releases really have been stable -- 4.2.1 came out fully five months after 4.2.0; it did contain a number of bug fixes, but they were mostly corner cases. It also contained some new functionality: the IJS driver. 4.2.2 was almost five months after 4.2.1. It contained some more bug fixes (some rather important ones), but none were regressions. Most of its new functionality was support for new Epson printers. Of course, there have been prereleases and release candidates, but I'm overjoyed how stable we've managed to keep 4.2. 4.0 had five releases in the first month -- fortunately, 4.0.4 was solid -- but it's evident that we've matured as a project.

Color management

I discovered not long ago that the API can actually support color management, thanks to the 16-bit CMYK input method (the 8-bit CMYK and RGB inputs could too, but it wouldn't be as effective). We've done some experimenting, and discussion on the development list has heated up recently, so somebody (maybe even I) will come up with a prototype. There has already been one prototype (it isn't very practical in its current form for various reasons) that has demonstrated really dramatic results for certain colors that Gimp-print currently has difficulty with.

Complete control over all ink channels!

So I finally put code into Gimp-print to provide a new input mode that gives full control over all physical channels. This is like CMYK, only more so (if you have a 6 or 7 color printer). Somebody with a spectrophotometer can make really good profiles and use all six colors optimally.

I don't have time to write more about this right now, but if anyone wants to play with it, it's on the "generic_color_branch" in our CVS.

12 older entries...


Others have certified rlk as follows:

  • duncanm certified rlk as Journeyer
  • cpbs certified rlk as Journeyer
  • gtaylor certified rlk as Journeyer
  • Raphael certified rlk as Journeyer
  • ttonino certified rlk as Journeyer
  • khk certified rlk as Journeyer
  • fxn certified rlk as Journeyer
  • ghostgum certified rlk as Journeyer

[ Certification disabled because you're not logged in. ]

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

Share this page