JEF
Status
| Field | Value |
|---|---|
| Extension(s) | .jef |
| Common ecosystem | Janome, Elna-related workflows |
| Format family | Machine-specific file |
| Satin Studio status | Supported |
| Open / import | Yes |
| Export | Yes |
| Confidence | High for broad structure; machine variants remain. |
What it is
JEF is the common machine format for Janome home embroidery machines. Unlike sparse expanded streams, it usually carries hoop, palette, extent, and stitch-offset information.
Satin Studio behavior
Satin Studio imports exact JEF stitches with their hoop and thread metadata. Export stops when the selected Janome machine or hoop cannot safely contain the design.
Versions and variants
Version letters, hoop codes, palette tables, trim settings, and JEF+ variants differ by machine generation. Satin Studio identifies the target generation before applying those records.
File identification notes
JEF is little-endian and header-driven. Publicly documented fields include:
- A stitch-data offset, commonly
0x74 + 8 * color_change_count. - A date/version area, including version letters used by different Janome machine generations.
- Color count and point/stitch-data length fields.
- Hoop code and extent/edge-distance records for common hoops.
- A palette-index list and repeated separator values before the stitch data.
The stitch body uses signed 8-bit relative x, y movement. If x == 0x80, the record is a command. Common command prefixes are:
0x80 0x10: end.0x80 0x01: color change / stop.0x80 0x02: jump; also used as trim behavior in some machine/software settings.
Some Janome machines can trim on color changes, long jumps, or explicit zero-distance jump/cut commands depending on machine settings.
Observed structure notes
- Observed JEF readers start with a little-endian stitch-data offset, skip date/version-style metadata, read a color count, then read palette indexes before seeking to the stitch stream.
- Normal stitch records are signed two-byte
dx, dypairs with Y inverted for embroidery coordinates. A first byte0x80introduces a command byte plus two payload bytes. - Observed commands include
0x02jump with payload movement,0x01color change or stop depending on the next thread entry, and0x10end. - Observed writers compute stitch-data offset as
0x74 + color_count * 8and then write palette indexes followed by repeated0x0Dseparator values before stitch data. - Observed JEF headers include a 14-byte timestamp string, color count, point count, hoop code, design half-width/half-height, and edge distances for common hoops.
- Observed writers finish stitch data with
0x80 0x10and no movement payload.
Structure sketch
JEF is little-endian and header-driven. Stitch data starts at the offset stored in the header.
struct JefFile<'a> {
stitch_data_offset: u32,
header_after_offset: &'a [u8], // date/version, counts, hoop, extents, and separators vary by generation
palette_indexes: &'a [u32],
stitch_records: &'a [JefRecord],
}
enum JefRecord {
Stitch { dx: i8, dy: i8 },
Jump { dx: i8, dy: i8 }, // 0x80 0x02 + payload movement
ColorChangeOrStop, // 0x80 0x01
End, // 0x80 0x10
}
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.