cups-filters icon indicating copy to clipboard operation
cups-filters copied to clipboard

Color management not working with temporary driverless print queues for IPP Everywhere

Open kc2zgu opened this issue 4 months ago • 3 comments

Describe the bug I have an Epson inkjet that can work with Gutenprint or IPP Everywhere. With the Gutenprint driver, adding an ICC profile through colord works normally. When using IPP Everywhere, however, assigning a profile to the auto-generated temporary printer does not work. Cups ends up finding no profile and passing sRGB.icc to the Ghostscript filter command instead. But if I add a permanent queue for the same printer, using the driverless PPD, that one will respect the profile setting.

I also tried this on another driverless-capable printer (Brother laser) and saw that it also appears to ignore the profile when using the temporary queue, but I don't have a log file for this case.

To Reproduce Steps to reproduce the behavior:

  1. Start cups with browsed so the temporary driverless queue gets created.
  2. Assign an ICC profile with colormgr import-profile/device-add-profile.
  3. Print a document and compare the output to the expected colors.
  4. Create a permanent queue for the same printer.
  5. Repeat 2 and 3

Expected behavior The output from both print queues should use the same ICC profile and appear with identical colors.

System Information:

  • OS and its version: Gentoo Linux
  • Application: GIMP and Atril (MATE PDF viewer), identical behavior with each
  • CUPS version: 2.4.12

Additional context (somewhat strange backstory: I had the Gutenprint driver manually tuned and profiled due to some significant color accuracy problems like incorrect default ink limits and string color casts (it's a fairly peculiar 6-ink CMYK+red+gray system that AFAIK was only used by two different printer models) but later switched to IPP Everywhere mode once I discovered that was supported since it produces better output out of the box and is also faster. I didn't profile it in this mode at first since the colors were already close enough, and I didn't create a permanent queue since that wasn't strictly necessary either. Recently the printer has inexplicably started printing colors wrong, with too much contrast at the high end or something. It's showing the same behavior with multiple hosts, Linux, Windows, and Android. Gutenprint (which sends print jobs in a completely different low level format) still works normally however, but I haven't tried Windows with the non-IPP Everywhere driver since this started happening. So I made a profile for it in this state but ran into this issue trying to make it work)

attr.log

error_log-1.txt

error_log-2.txt

kc2zgu avatar Aug 29 '25 00:08 kc2zgu

Hi @kc2zgu ,

if you use cups-browsed, you don't use IPP Everywhere model from CUPS, but driverless model from libppd (cups-filters architecture module). They both construct PPD based on IPP response, but the created PPD is different.

However, I don't see generating anything regarding ICC profiles in both PPD generators, but we generate different PPD Color Model values based on print-color-mode-supported or urf-supported values, which IIUC use ICC profiles saved in the printer.

@michaelrsweet WDYT?

zdohnal avatar Aug 29 '25 04:08 zdohnal

We don't do anything specifically for ICC profiles in the current IPP Everywhere PPD generator. I'm not sure how colord deals with temporary queues, but from the cupsd perspective we treat all queues the same and register any color profiles we see.

Longer term we probably want to support the printer-icc-profiles attribute, download those profiles and list them in the PPD file. But then we are getting away from PPDs...

michaelrsweet avatar Aug 29 '25 13:08 michaelrsweet

Ultimately any application of color profiles happens in cups-filters - all we do on the CUPS side is register profiles from the PPD file, but it sounds like you have done your own profiles. I think we need to move this over to cups-filters.

FWIW, assuming you are using vendor inks, the default sRGB/AdobeRGB color spaces that get used in IPP Everywhere mode should yield proper results...

michaelrsweet avatar Sep 20 '25 23:09 michaelrsweet