EXP
Status
| Field | Value |
|---|---|
| Extension(s) | .exp |
| Common ecosystem | Melco and some Bernina workflows |
| Format family | Expanded stitch stream |
| Satin Studio status | Supported |
| Open / import | Yes |
| Export | Yes |
| Confidence | High for base Melco-style stream; sidecars vary. |
What it is
EXP is a compact expanded stitch format associated with Melco. The base stitch stream has no header: it is a sequence of relative movement records and control markers.
Bernina workflows may also use EXP-style files with companion color or metadata sidecars, so an .exp file alone may not describe the whole design handoff.
Satin Studio behavior
Satin Studio preserves the EXP stitch stream and associates recognized color sidecars with it. Missing or unknown sidecars leave the stitch commands intact and mark the thread mapping for review.
Versions and variants
Melco-style and Bernina-style workflows differ around sidecars. Satin Studio identifies the main stitch stream and reports each companion file separately.
File identification notes
The base EXP stream uses signed 8-bit relative x, y movement bytes. Normal movement is two bytes. A first byte of 0x80 introduces a control event, with the second byte identifying the command.
Known command pairs include:
0x80 0x80: end.0x80 0x04: jump; the followingx, ybytes give the jump movement, and the command must be repeated for each jump segment.0x80 0x01: color change / stop in common files.0x80 0x02: reported stitch/control marker in some files.
Maximum single-byte movement is in the signed 8-bit range. Longer travel must be split.
Observed structure notes
- Observed EXP trim records use
0x80 0x80followed by two payload bytes; common writers use0x07 0x00there. - Observed color-change records use
0x80 0x01followed by two payload bytes, commonly0x00 0x00. If those payload bytes contain movement, readers may apply it after the color change. - Observed jump records use
0x80 0x04followed by signeddx, dymovement. Observed0x80 0x02is sometimes accepted as a stitch/control marker but should not be emitted without a target reason. - Observed writers do not need an end record for base EXP; they commonly stop at end-of-file after the last command.
- Observed writers use maximum single-record movement of 127 units for stitch and jump deltas and split longer travel before writing.
Structure sketch
Represent the base stream as records with no required file header:
struct ExpStream<'a> {
records: &'a [ExpRecord<'a>], // no required file header in base EXP
}
enum ExpRecord<'a> {
Stitch { dx: i8, dy: i8 },
End, // 0x80 0x80
ColorChange, // 0x80 0x01 in common files
Jump { dx: i8, dy: i8 }, // 0x80 0x04 followed by movement bytes
VendorControl { command: u8, payload: &'a [u8] },
}
Compatibility evidence
Compatibility checks cover signatures, metadata, command boundaries, malformed records, and files from the machines and software named above. Unsupported variants stop with a specific report instead of being silently rewritten.