Skip to main content

PCD / PCM / PCS / PCQ

Status

FieldValue
Extension(s).pcd, .pcm, .pcq, .pcs
Common ecosystemOlder Pfaff
Format familyMachine-specific files
Satin Studio statusResearching
Open / importNo
ExportNo
ConfidenceMedium-high for ecosystem role.

What it is

PCD, PCM, PCQ, and PCS are older Pfaff formats, historically associated with older machine or hoop generations.

Satin Studio direction

VP3 and VIP are likely higher-priority Pfaff/Viking targets before these older files.

Versions and variants

These are related older Pfaff formats rather than one flat format. Their exact split by hoop, machine generation, or encoding needs verification.

File identification notes

Reported details:

  • .pcd may use an unusual absolute-positioning scheme rather than normal relative stitch deltas.
  • .pcm, .pcq, and .pcs are reported as stitch-bearing Pfaff files, but exact differences are not verified in Satin Studio.

Observed structure notes

  • Observed PCD/PCQ/PCS files start with version, hoop-size byte, little-endian color count, RGB thread entries, and a little-endian stitch count, followed by absolute stitch records.
  • Observed PCD/PCQ/PCS point records include one byte, 24-bit little-endian X, one byte, 24-bit little-endian Y, and a control byte. Coordinates are signed 24-bit values scaled by 5.0 / 3.0 in observed readers.
  • Observed PCM differs: it starts at offset 2, uses big-endian color indexes into a 16-entry fixed palette, big-endian stitch count, and 24-bit big-endian absolute coordinates.
  • Observed control behavior: 0x00 stitch absolute, bit 0x01 color change, and bit 0x04 move absolute.

Structure sketch

The older Pfaff formats share ideas but differ in byte order and palette handling:

struct PcLittleEndianFile<'a> {
version: u8,
hoop_size: u8, // observed 0 PCD, 1 PCQ/MAXI, 2 PCS 80x80, 3 PCS large
color_count: u16,
threads: &'a [PcRgbThread], // RGB plus one skipped byte
stitch_count: u16,
records: &'a [PcLeRecord],
}

struct PcRgbThread {
rgb: [u8; 3],
unknown: u8,
}

struct PcLeRecord {
c0: u8,
x_le24: [u8; 3], // signed 24-bit little-endian absolute X
c1: u8,
y_le24: [u8; 3], // signed 24-bit little-endian absolute Y
control: u8, // 0x00 stitch, bit 0x01 color, bit 0x04 move
}

struct PcmFile<'a> {
prefix: [u8; 2],
color_count: u16, // big-endian
palette_indexes: &'a [u16], // big-endian indexes into fixed 16-color table
stitch_count: u16,
records: &'a [PcmRecord],
}

struct PcmRecord {
x_be24: [u8; 3],
c0: u8,
y_be24: [u8; 3],
c1: u8,
control: u8,
}

What we still need

Known Pfaff files for each extension, hoop/machine mapping, and command encoding notes.