The image, every layer, channel, path and effect carries a property list. Each
property is a UINT32 type, a UINT32 payload length and the
payload; the list ends with PROP_END. Types used in
the header are defined there. A property that
is absent takes its default value.
00 00 00 11 00 00 00 01 01 00 00 00 13 00 00 00 08 42 90 00 00 42 90 00 00
PROP_COMPRESSION (17) with RLE, then PROP_RESOLUTION (19): 72 by 72 pixels per inchProperty types
| Type | Name | Used on | Payload and values |
|---|---|---|---|
| 0 | PROP_END | all lists | None; length 0. Ends the list. |
| 1 | PROP_COLORMAP | image | UINT32 n, then n RGB triples of 3 bytes. Only meaningful for indexed images. Some old files store a wrong length; read n instead. |
| 2 | PROP_ACTIVE_LAYER | layer | None. The layer is selected. More than one from version 14. |
| 3 | PROP_ACTIVE_CHANNEL | channel | None. The channel is selected. More than one from version 16. |
| 4 | PROP_SELECTION | channel | None. This channel is the selection mask. |
| 5 | PROP_FLOATING_SELECTION | layer | POINTER to the layer, channel or mask the floating selection is attached to. |
| 6 | PROP_OPACITY | layer, channel | UINT32 0 to 255. Ignored when PROP_FLOAT_OPACITY is present. |
| 7 | PROP_MODE | layer, effect | UINT32 layer mode, table below. |
| 8 | PROP_VISIBLE | layer, channel, path, effect | UINT32 1 visible, 0 hidden. |
| 9 | PROP_LINKED | layer, channel, path | UINT32 1 linked. Deprecated from version 16, where links become an item set. |
| 10 | PROP_LOCK_ALPHA | layer | UINT32 1 alpha locked. Named PROP_PRESERVE_TRANSPARENCY before GIMP 2.3. On groups from version 17. |
| 11 | PROP_APPLY_MASK | layer | UINT32 1 the layer mask is applied. Default true. |
| 12 | PROP_EDIT_MASK | layer | UINT32 1 the mask, not the layer, is being edited. Default false. |
| 13 | PROP_SHOW_MASK | layer | UINT32 1 the mask is shown instead of the layer. Default false. |
| 14 | PROP_SHOW_MASKED | channel | UINT32 1 the channel is shown as a mask. |
| 15 | PROP_OFFSETS | layer | INT32 x, INT32 y: position of the layer on the canvas. May be negative. Default (0, 0). |
| 16 | PROP_COLOR | channel | 3 bytes: red, green, blue of the channel’s display colour. Replaced by PROP_FLOAT_COLOR. |
| 17 | PROP_COMPRESSION | image | 1 byte: 0 none, 1 RLE, 2 zlib, 3 reserved (once meant for fractal compression, never used). |
| 18 | PROP_GUIDES | image | For each guide, 5 bytes: INT32 position, then 1 byte orientation: 1 horizontal, 2 vertical. Off-canvas positions from version 15. |
| 19 | PROP_RESOLUTION | image | FLOAT horizontal, FLOAT vertical, in pixels per inch. |
| 20 | PROP_TATTOO | image, layer, channel, path | UINT32, a unique non-zero ID for the item. On the image, the highest tattoo used so far. |
| 21 | PROP_PARASITES | any list | Repeated to the end of the payload: STRING name, UINT32 flags, UINT32 size and the data. Parasites are named blobs such as the image comment. |
| 22 | PROP_UNIT | image | UINT32 display unit: 1 inch, 2 millimetre, 3 point, 4 pica. |
| 23 | PROP_PATHS | image | Old path format (GIMP 1.2 and earlier, still written when every path is a plain Bézier). See layers, channels and tiles. |
| 24 | PROP_USER_UNIT | image | A custom unit: FLOAT factor (units per inch), UINT32 digits, then STRINGs id, symbol, abbreviation, singular name and plural name. From version 21 the singular and plural are replaced by one name. The stored length is unreliable. |
| 25 | PROP_VECTORS | image | Paths, used before version 18 when PROP_PATHS cannot hold them. See layers, channels and tiles. |
| 26 | PROP_TEXT_LAYER_FLAGS | layer | UINT32 flags: 0x1 keep the layer name when the text changes; 0x2 the pixels were changed after the text was rendered. The text itself is in the gimp-text-layer parasite. |
| 27 | PROP_OLD_SAMPLE_POINTS | image | For each point: UINT32 x, y. Written beside PROP_SAMPLE_POINTS for older readers. |
| 28 | PROP_LOCK_CONTENT | layer, channel, path | UINT32 1 pixels or path locked. |
| 29 | PROP_GROUP_ITEM | layer | None. The layer is a layer group. |
| 30 | PROP_ITEM_PATH | layer | A list of UINT32: the layer’s position in the tree of groups, as an index at each level. |
| 31 | PROP_GROUP_ITEM_FLAGS | layer group | UINT32 flags: 0x1 expanded in the Layers dialog. |
| 32 | PROP_LOCK_POSITION | layer, channel, path | UINT32 1 position locked. On groups from version 17. |
| 33 | PROP_FLOAT_OPACITY | layer, channel, effect | FLOAT 0.0 to 1.0. Takes precedence over PROP_OPACITY. |
| 34 | PROP_COLOR_TAG | layer, channel, path | UINT32: 0 none, 1 blue, 2 green, 3 yellow, 4 orange, 5 brown, 6 red, 7 violet, 8 grey. |
| 35 | PROP_COMPOSITE_MODE | layer, effect | INT32: 1 union, 2 clip to backdrop, 3 clip to layer, 4 intersection. A negative value means “auto”, with the absolute value as the mode in use. |
| 36 | PROP_COMPOSITE_SPACE | layer, effect | INT32: 1 RGB (linear), 2 RGB (from the colour profile), 3 LAB, 4 RGB (perceptual, version 23). Negative means “auto”. |
| 37 | PROP_BLEND_SPACE | layer, effect | INT32, the same values as composite space. |
| 38 | PROP_FLOAT_COLOR | channel | 3 FLOATs: red, green, blue, each 0.0 to 1.0. |
| 39 | PROP_SAMPLE_POINTS | image | For each point: UINT32 x, y, pick mode, then two UINT32 of padding. Pick modes: 0 pixel, 1 RGB percent, 2 RGB 0 to 255, 3 greyscale percent, 4 HSV, 5 CIE LCh, 6 CIE LAB, 7 CMYK, 8 CIE xyY, 9 CIE Yu′v′. |
| 40 | PROP_ITEM_SET | image | A stored selection of items: UINT32 item type (0 layers, 1 channels, 2 paths), UINT32 method (0 text search, 1 regular expression, 2 glob pattern, 0xFFFFFFFF a named set of items), STRING label or pattern. Version 16. |
| 41 | PROP_ITEM_SET_ITEM | layer, channel, path | UINT32 index of the named item set the item belongs to. Version 16. |
| 42 | PROP_LOCK_VISIBILITY | layer, channel | UINT32 1 visibility locked. Version 17. |
| 43 | PROP_SELECTED_PATH | path | None. The path is selected. Version 18. |
| 44 | PROP_FILTER_REGION | effect | UINT32: 0 the effect works on the selection, 1 on the entire drawable. |
| 45 | PROP_FILTER_ARGUMENT | effect | One argument of the effect’s GEGL operation: STRING name, UINT32 type, then the value. Types below. |
| 46 | PROP_FILTER_CLIP | effect | Whether the effect’s output is clipped to the drawable. Defined in GIMP’s source; not yet described on GIMP’s format page. |
| 47 | PROP_VECTOR_LAYER | layer | A vector layer (version 24): UINT32 modified, tattoo of the path, filled, stroked; fill style (0 solid, 1 pattern), antialias, GeglColor, RESOURCE pattern; stroke style, antialias, GeglColor, RESOURCE, FLOAT line width, cap style (0 butt, 1 round, 2 square), join style (0 miter, 1 round, 2 bevel), FLOAT miter limit, UINT32 dash count and that many FLOAT dash lengths. |
| 48 | PROP_LINK_LAYER | layer | A layer linked to an outside file (version 25): UINT32 flags (0x1 keep the layer name when the file changes, 0x2 no longer monitored), STRING path, then UINT32 width and height used for vector files. |
| 49 | PROP_TRANSFORM | layer | A transformation (version 25): INT32 x and y offsets, UINT32 interpolation (0 none, 1 linear, 2 cubic, 3 NoHalo, 4 LoHalo), then 9 FLOATs of the 3 × 3 matrix, row by row. |
GIMP’s format page lists PROP_TRANSFORM as 48; GIMP’s source
(app/xcf/xcf-private.h) defines it as 49, after
PROP_LINK_LAYER at 48.
Effect argument types
| Type | Value |
|---|---|
| 0 | Unknown. |
| 1 | Integer. |
| 2 | Boolean. |
| 3 | Floating point. |
| 4 | STRING. |
| 5 | Enumeration value. |
| 6 | A GIMP configuration object, serialised. |
| 7 | Unsigned integer. |
| 8 | GeglColor. |
| 9 | Gradient. Defined in GIMP’s source; its layout is not yet described on the format page. |
Layer modes
Modes 0 to 22 are the “legacy” modes, which blend in perceptual (gamma) space as GIMP 2.8 did. Modes 23 and up are the GIMP 2.10 modes, which by default blend in linear light.
| Value | Mode | Value | Mode |
|---|---|---|---|
| 0 | Normal (legacy) | 31 | Screen |
| 1 | Dissolve (legacy) | 32 | Difference |
| 2 | Behind (legacy) | 33 | Addition |
| 3 | Multiply (legacy) | 34 | Subtract |
| 4 | Screen (legacy) | 35 | Darken only |
| 5 | Overlay (legacy, the old incorrect version) | 36 | Lighten only |
| 6 | Difference (legacy) | 37 | Hue (HSV) |
| 7 | Addition (legacy) | 38 | Saturation (HSV) |
| 8 | Subtract (legacy) | 39 | Colour (HSL) |
| 9 | Darken only (legacy) | 40 | Value (HSV) |
| 10 | Lighten only (legacy) | 41 | Divide |
| 11 | Hue (HSV, legacy) | 42 | Dodge |
| 12 | Saturation (HSV, legacy) | 43 | Burn |
| 13 | Colour (HSL, legacy) | 44 | Hard light |
| 14 | Value (HSV, legacy) | 45 | Soft light |
| 15 | Divide (legacy) | 46 | Grain extract |
| 16 | Dodge (legacy) | 47 | Grain merge |
| 17 | Burn (legacy) | 48 | Vivid light |
| 18 | Hard light (legacy) | 49 | Pin light |
| 19 | Soft light (legacy) | 50 | Linear light |
| 20 | Grain extract (legacy) | 51 | Hard mix |
| 21 | Grain merge (legacy) | 52 | Exclusion |
| 22 | Colour erase (legacy) | 53 | Linear burn |
| 23 | Overlay | 54 | Luma darken only |
| 24 | Hue (LCh) | 55 | Luma lighten only |
| 25 | Chroma (LCh) | 56 | Luminance |
| 26 | Colour (LCh) | 57 | Colour erase |
| 27 | Lightness (LCh) | 58 | Erase |
| 28 | Normal | 59 | Merge |
| 29 | Behind | 60 | Split |
| 30 | Multiply | 61 | Pass through (groups) |