The GIMP Paintbrush File Format Version 2 (.gbr) ------------------------------------------------ HEADER ------ Bytes 0 - 3: header_size: Type: 32 bit unsigned int Value: size of brush header (28) + length of brush name Bytes 4 - 7: version Type: 32 bit unsigned int Value: The file format version. Currently Bytes 8 - 11: width Type: 32 bit unsigned int Value: Brush width Bytes 12 - 15: height Type: 32 bit unsigned int Value: Brush height Bytes 16 - 19: bytes Type: 32 bit unsigned int Value: Colour depth of brush. 1 = greyscale, 4 = RGBA Bytes 20 - 23: magic_number Type: 32 bit unsigned int Value: GIMP brush magic number. ('G' << 24) + ('I' << 16) + ('M' << 8) + 'P' Bytes 24 - 27: spacing Type: 32 bit unsigned int Value: Default spacing to be used for brush. Percentage of brush width. Bytes 28 - (header_size - 28): Type: char * Value: UTF-8 string - name of brush BODY ---- Size: width * height * bytes Type: uchar * Value: Pixel values (row-first) for brush The GIMP Paintbrush File Format Version 1 (.gbr) ------------------------------------------------ Based on examples and code, it seems that v1 is like v2, but it is lacking bytes 20 - 27 (no magic or spacing info), and thus having as last header field: Bytes 20 - (header_size - 20): Type: char * Value: undefined encoding string - name of brush GBR v1 is deprecated and should never be used to save new brushes.