JEF
Status
| Field | Value |
|---|---|
| Extension(s) | .jef |
| Common ecosystem | Janome, Elna-related workflows |
| Format family | Machine-specific file |
| Satin Studio status | Planned |
| Open / import | No |
| Export | No |
| 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 direction
Satin Studio plans to import exact JEF stitches with hoop/thread metadata and export only when the selected machine and hoop can safely contain the design.
Versions and variants
JEF support needs a machine-generation matrix. Janome version letters, hoop codes, palette tables, trim settings, and JEF+ or newer variants should be tracked separately.
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
}
What we still need
Palette tables, hoop-code tables, trim behavior by machine, and validation files from multiple Janome generations.