Skip to main content

PES

Status

FieldValue
Extension(s).pes
Common ecosystemBrother / Baby Lock / Deco
Format familyMachine-specific file
Satin Studio statusAvailable now
Open / importYes
ExportYes
ConfidenceHigh 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 #PES0060 followed 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 0x0000000A custom-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, 0x90 zero 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.