Every profile starts with a fixed 128-byte header of 18 fields. It says what the profile is for and how to read the rest, so that software can search and sort profiles without reading their tags. All numbers are big-endian. A field that is not used is set to zero; colour space and abstract profiles leave the device fields at zero.
Fields
| Offset | Size | Field | Encoding |
|---|---|---|---|
| 0 | 4 | Profile size | uInt32Number |
| 4 | 4 | Preferred CMM type | signature |
| 8 | 4 | Profile version | binary-coded decimal |
| 12 | 4 | Profile or device class | signature |
| 16 | 4 | Data colour space | signature |
| 20 | 4 | Profile connection space (PCS) | signature |
| 24 | 12 | Date and time of creation | dateTimeNumber |
| 36 | 4 | Profile file signature, acsp | 61 63 73 70 |
| 40 | 4 | Primary platform | signature |
| 44 | 4 | Profile flags | bit field |
| 48 | 4 | Device manufacturer | signature |
| 52 | 4 | Device model | signature |
| 56 | 8 | Device attributes | bit field |
| 64 | 4 | Rendering intent | uInt32Number |
| 68 | 12 | PCS illuminant | XYZNumber |
| 80 | 4 | Profile creator | signature |
| 84 | 16 | Profile ID | MD5 digest |
| 100 | 28 | Reserved (used by iccMAX) | zeros |
A signature is four bytes, usually four ASCII characters, padded at the end with spaces:
RGB is 52 47 42 20. See
Numbers and encodings for the number types.
Profile size
The exact size of the profile in bytes: the header, the tag table and the tag data, including the padding after the last tag. Because every tag is padded to a 4-byte boundary, the size is a multiple of four.
Preferred CMM type
The colour management module (CMM) the profile prefers, as a signature registered with the
ICC, or zero for none. Apple’s profiles use appl, Little CMS writes
lcms and Adobe’s use ADBE. A CMM may ignore it.
Profile version
The version of the specification the profile follows, in binary-coded decimal: byte 8
is the major version, the high four bits of byte 9 the minor version and the low four
bits the bug-fix version. Bytes 10 and 11 are zero. 04 40 00 00 is 4.4.0, the
version of ICC.1:2022, and 02 10 00 00 is 2.1.0.
| Major | Specifications |
|---|---|
| 2 | The ICC specifications from 3.0 (1994) to ICC.1:2001-04, which is version 2.4.0. |
| 4 | ICC.1:2001-12 (4.0), ICC.1:2003-09 (4.1), ICC.1:2004-10 (4.2), ICC.1:2010 (4.3, also ISO 15076-1:2010) and ICC.1:2022 (4.4). |
| 5 | iccMAX, ICC.2. |
A major version changes only when old readers can no longer use the new profiles; a new optional tag is a minor change.
Profile or device class
What the profile is for. The class decides which tags the profile must have (see Profile classes and required tags).
| Signature | Hex | Class |
|---|---|---|
scnr | 73636E72 | Input device: scanners and cameras |
mntr | 6D6E7472 | Display device: monitors and screens |
prtr | 70727472 | Output device: printers and film recorders |
link | 6C696E6B | DeviceLink: a fixed conversion from one device to another |
spac | 73706163 | ColorSpace: a colour encoding such as sRGB, to and from the PCS |
abst | 61627374 | Abstract: an effect from PCS to PCS |
nmcl | 6E6D636C | NamedColor: a list of named colours, such as spot inks |
iccMAX adds four classes; see below.
Data colour space
The colour space of the data on the device side (the “A” side) of the profile’s transforms. The same signatures are used for the PCS field.
| Signature | Hex | Colour space | Channels |
|---|---|---|---|
XYZ | 58595A20 | nCIEXYZ or PCSXYZ | 3 |
Lab | 4C616220 | CIELAB or PCSLAB | 3 |
Luv | 4C757620 | CIELUV | 3 |
YCbr | 59436272 | YCbCr | 3 |
Yxy | 59787920 | CIEYxy | 3 |
RGB | 52474220 | RGB | 3 |
GRAY | 47524159 | Grey | 1 |
HSV | 48535620 | HSV | 3 |
HLS | 484C5320 | HLS | 3 |
CMYK | 434D594B | CMYK | 4 |
CMY | 434D5920 | CMY | 3 |
2CLR … 9CLR | 32434C52 … 39434C52 | 2 to 9 colours | 2 to 9 |
ACLR … FCLR | 41434C52 … 46434C52 | 10 to 15 colours | 10 to 15 |
The xCLR spaces are generic: their colorants are named in the
colorantTableTag. 3CLR and
4CLR are for three and four colours other than RGB and CMYK.
Profile connection space
The colour space on the PCS side (the “B” side): XYZ for PCSXYZ or
Lab for PCSLAB. In a DeviceLink profile it is instead the data colour space
of the last device in the chain, any signature from the table above. Matrix and tone-curve
profiles must use PCSXYZ.
Date and time
When the profile was first created, as a dateTimeNumber: six 16-bit numbers for the year (in full, such as 2022), month, day, hours, minutes and seconds, in UTC.
Profile file signature
Always acsp (61 63 73 70). It is what identifies a profile, at
byte 36 rather than at the start.
Primary platform
The operating system the profile was mainly made for, or zero.
| Signature | Hex | Platform |
|---|---|---|
APPL | 4150504C | Apple Computer, Inc. |
MSFT | 4D534654 | Microsoft Corporation |
SGI | 53474920 | Silicon Graphics, Inc. |
SUNW | 53554E57 | Sun Microsystems, Inc. |
TGNT | 54474E54 | Taligent, Inc. (version 2 only) |
Profile flags
Hints for the CMM. The low 16 bits are reserved for the ICC, of which two are defined; the high 16 bits may be used by the CMM.
| Bit | Meaning when set |
|---|---|
| 0 | The profile is embedded in a file (0: a profile file of its own) |
| 1 | The profile cannot be used apart from the colour data it is embedded with |
| 2 to 15 | Reserved, zero |
| 16 to 31 | For the CMM’s own use |
Device manufacturer
The maker of the device the profile describes, as a signature from the ICC’s registry of manufacturers, or zero. The deviceMfgDescTag gives the name for display.
Device model
The model of the device, as a registered signature, or zero. The deviceModelDescTag gives the name for display.
Device attributes
A 64-bit field describing the media the profile was made for, stored big-endian, so the ICC’s bits 0 to 31 are in the last four bytes (60 to 63) and the vendor’s bits 32 to 63 in the first four (56 to 59).
| Bit | 0 | 1 |
|---|---|---|
| 0 | Reflective | Transparency |
| 1 | Glossy | Matte |
| 2 | Positive media | Negative media |
| 3 | Colour media | Black and white media |
| 4 to 31 | Reserved, zero | |
| 32 to 63 | Not defined by the ICC: the vendor’s own | |
The bits describe the media, not the device: a colour scanner loaded with black and white film sets bit 3.
Rendering intent
The intent to use when this profile is combined with the next one in a sequence (for a DeviceLink, the intent that was used). The low 16 bits hold it; the high 16 bits are zero. Applications usually choose the intent when they convert, so the field often means little.
| Value | Intent |
|---|---|
| 0 | Perceptual: a pleasing picture, compressing the whole gamut |
| 1 | Media-relative colorimetric: exact colours, the media white mapped to the PCS white |
| 2 | Saturation: vivid colours, for graphics |
| 3 | ICC-absolute colorimetric: exact colours including the media white |
PCS illuminant
The nCIEXYZ of the illuminant of the PCS, as an XYZNumber. In ICC.1 it is always D50:
rounded to four decimals, X = 0.9642, Y = 1.0 and Z = 0.8249, stored as
0000F6D6 00010000 0000D32D.
Profile creator
Who made the profile, as a signature from the manufacturer section of the ICC registry, or zero.
Profile ID
An MD5 digest (RFC 1321) of the whole profile, as long as the size field says, worked out with three fields temporarily set to zeros: the profile flags (bytes 44 to 47), the rendering intent (64 to 67) and the Profile ID itself (84 to 99). Those are the fields that change when a profile is embedded or used with another intent, so the ID stays the same. All zeros means the ID has not been worked out. Version 4 added this field; in version 2 these bytes are reserved and zero.
The explorer works the digest out and says whether it matches.
Reserved
Bytes 100 to 127 are reserved for future use and are zeros in ICC.1 profiles.
The header in iccMAX
iccMAX (ICC.2, version 5) keeps this header and gives meanings to some reserved bytes and codes. Its PCS field may also be zero, with the connection made through a spectral or multiplex space instead, and its PCS illuminant need not be D50. The Versions and iccMAX page describes the fields.