PES
Status
| Field | Value |
|---|---|
| Extension(s) | .pes |
| Common ecosystem | Brother / Baby Lock / Deco |
| Format family | Machine-specific file |
| Satin Studio status | Available now |
| Open / import | Yes |
| Export | Yes |
| Confidence | High for PEC-payload import and compact PES v6 export; PES metadata coverage is version-specific. |
What it is
PES is the common home-embroidery format for Brother, Baby Lock, and Deco-family workflows. It is a hybrid format: the PES section stores higher-level design/application data, while the PEC section stores the low-level machine stitch payload.
Satin Studio direction
Satin Studio imports PES as preserved stitches and exports Brother-compatible PES as the primary machine format.
Versions and variants
PES support is version-sensitive. Satin Studio currently writes #PES0060 and can import PES files when it can find a compatible PEC payload. Publicly reported PES signatures include #PES0001, #PES0020, #PES0025, #PES0030, #PES0040, #PES0050, #PES0055, #PES0056, #PES0060, #PES0070, #PES0080, #PES0090, and #PES0100, but version-specific metadata layouts still need fixture testing. See the PES versions index and PES file structure.
File identification notes
Common files start with a #PES signature followed by four version digits and a four-byte little-endian offset to the PEC payload. Satin Studio currently writes #PES0060 and stores a pointer to an embedded payload beginning with LA:.
Observed structure notes
- PES starts with an eight-byte signature such as
#PES0060followed by a little-endian 32-bit PEC offset. - Observed readers often parse limited version-specific PES metadata and then seek to the PEC payload for stitches. Versions 4 and later may include name/category/author/keywords/comments strings. Versions 5 and later may include thread tables. Newer versions add image filename and hoop/name metadata fields.
- Thread records in observed PES-side metadata use length-prefixed strings for catalog, description, brand, and chart, plus 24-bit RGB color data and five skipped/unknown bytes.
- Observed compact PES v6 writers emit design-page defaults such as custom-design flags, 100x100 hoop/page fields, foreground/background colors, grid flags, identity transform floats, and zero programmable fill/motif/feather counts before thread records.
- Observed PES v6 thread records store catalog string, RGB bytes, one unknown zero byte, little-endian
0x0000000Acustom-color marker, description string, brand string, and chart string. - Observed PES v6 writers place addendum data after the embedded PEC payload: palette indexes padded to 128 bytes,
0x90zero bytes per RGB entry, then 24-bit little-endian RGB values, followed by a trailing zero word.
Structure sketch
PES is a versioned wrapper with a pointer to an embedded PEC payload. The detailed byte map lives in PES file structure.
struct PesFile<'a> {
signature: [u8; 8], // b"#PES0001", b"#PES0060", etc.
pec_offset: u32, // little-endian offset after the signature
pes_metadata: &'a [u8], // version-specific PES-side data
pec_payload: PecPayload<'a>,
}
struct PecPayload<'a> {
label_area: &'a [u8], // compatible payload begins with b"LA:"
header_512: [u8; 512],
stitch_stream: &'a [u8],
}
What we still need
More real-machine fixtures for older PES versions, preview/icon metadata, and hoop metadata.