Before the ZIP archive come three short
parts: the two strings that name the file and the SketchUp that saved it, and 13 bytes
that start with VFF. All numbers are little-endian.
00000000 FF FE FF 0E 53 00 6B 00 65 00 74 00 63 00 68 00
00000010 55 00 70 00 20 00 4D 00 6F 00 64 00 65 00 6C 00
00000020 FF FE FF 0A 7B 00 32 00 33 00 2E 00 31 00 2E 00
00000030 33 00 34 00 30 00 7D 00
Fields
The offsets after the version are those of a ten-character version string, which every
file seen has. Read the version’s length to find the VFF bytes.
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| 0 | 32 | CString | Signature | The text SketchUp Model. |
| 32 (0x20) | 4 + 2 × length | CString | Version | The version of SketchUp that saved the file, in braces: {23.1.340}. 24 bytes here. |
| 56 (0x38) | 3 | ASCII | Magic | 56 46 46, the letters VFF. |
| 59 (0x3B) | 2 | u16 | Unknown 1 | 8 in every file seen. |
| 61 (0x3D) | 2 | u16 | Unknown 2 | 1 in every file seen. |
| 63 (0x3F) | 2 | u16 | Unknown 3 | 13 in every file seen. |
| 65 (0x41) | 4 | u32 | Unknown 4 | Different in every file seen. |
| 69 (0x45) | ZIP archive | To the end of the file. |
Strings
The two strings are MFC CStrings, the form the strings at the start of
every SKP file take:
| Bytes | Meaning |
|---|---|
FF | A byte FF. |
FE FF | The word FFFE. Together with the FF before it, this marks a Unicode string. |
| length | The length in UTF-16 code units: one byte if below 255; otherwise FF and a 16-bit length if below FFFE; otherwise FF FF FF and a 32-bit length. |
| text | The text, length × 2 bytes of UTF-16LE. There is no terminating zero. |
Both strings in these files are short, so the length is always one byte.
Signature
The text SketchUp Model as a CString: FF FE FF, the length 14
(0E) and 28 bytes of UTF-16LE. These 32 bytes are the same in every SKP file
of every version, and are what identifies the file as a SketchUp model.
Version
The version of SketchUp that saved the file, as a CString in braces: the major
version (the last two digits of the release’s year), the minor version and the build,
such as {22.0.353} or {23.1.340}. In every file seen it is the
version of the last save in the save history inside
meta.dat.
The version strings seen all have ten characters, so the string is 24 bytes and the header 69 bytes in every file. That is only because of the version’s length: a reader should take the length from the string.
VFF
Thirteen bytes between the version and the ZIP archive: the letters VFF
and four numbers whose meaning is not known.
00000038 56 46 46 08 00 01 00 0D 00 B1 3B 6A 28 50 4B 03 04
| Offset | Size | Type | Seen | Notes |
|---|---|---|---|---|
| 0 | 3 | ASCII | VFF | The magic. Older SketchUp files have a GUID here instead. |
| 3 | 2 | u16 | 8 | Not known. |
| 5 | 2 | u16 | 1 | Not known. |
| 7 | 2 | u16 | 13 | Not known. The tag 0x0074 in meta.dat also holds 13 in the files seen; whether the two are linked is not known. |
| 9 | 4 | u32 | different in each file | Not known. It is not the CRC-32 of the ZIP part, of its central directory or of the header before it; those were checked. |
OpenSKP uses the name VFF for this whole format.