Projects/Liberty/File Formats/Janome Embroidery Format
Janome Embroidery Format JEF
The JEF and JEF+ files consists of a number of sections. Multi-byte numbers appear to be stored little endian. For the JEF (and not JEF+ ) files, there is no simple signature, except to see if the Stitch-offset is after the Thread-type-list. The JEF pattern can easily be extracted from JEF+ files; by using the Stitch-offset to the Stitch-list, to skip over the JEF+ header; and then to ignore the JEF+ details, after the Stitch-list, at the end of the file.
File = File-header Thread-colour-list Thread-type-list [Plus-header] Stitch-list {Plus-detail}
Thread-colour-list = {Thread-colour}
Thread-type-list = {Thread-type}
Stitch-list = {Stitch}
Stitch = Escaped-command | Displacement
File-header
Offset | Length | Type | Description |
0 | 4 | Offset | Stitch-offset location of first stitch |
4 | 4 | Flags | unknown = 1, 10 or 20 |
8 | 8 | ASCII | Date YYYYMMDD |
16 | 8 | ASCII | Time HHMMSSxx |
24 | 4 | Count | Thread-count number of thread changes |
28 | 4 | Count | Stitch-count |
32 | 4 | Code | Hoop-code = 0 to 4 |
36 | 4 | Measure | Extent-1-left stitch extent left of centre in 0.1 mm units |
40 | 4 | Measure | Extent-1-top |
44 | 4 | Measure | Extent-1-right |
48 | 4 | Measure | Extent-1-bottom |
52 | 4 | Measure | Extent-2-left; -1 implies not used |
56 | 4 | Measure | Extent-2-top |
60 | 4 | Measure | Extent-2-right |
64 | 4 | Measure | Extent-2-bottom |
68 | 4 | Measure | Extent-3-left; -1 implies not used |
72 | 4 | Measure | Extent-3-top |
76 | 4 | Measure | Extent-3-right |
80 | 4 | Measure | Extent-3-bottom |
84 | 4 | Measure | Extent-4-left; -1 implies not used |
88 | 4 | Measure | Extent-4-top |
92 | 4 | Measure | Extent-4-right |
96 | 4 | Measure | Extent-4-bottom |
100 | 4 | Measure | Extent-5-left; -1 implies not used |
104 | 4 | Measure | Extent-5-top |
108 | 4 | Measure | Extent-5-right |
112 | 4 | Measure | Extent-5-bottom |
Hoop-code
Hoop-code | Hoop-name | Hoop-size |
0 | A Standard | 126 x 110 mm |
1 | C Free Arm | 50 x 50 mm |
2 | B Large | 140 x 200 mm |
3 | F Spring Loaded | 126 x 110 mm |
4 | D Giga | 230 x 200 mm |
Thread-colour
Offset | Length | Type | Description |
0 | 4 | Code | Thread-code = 1 to 78 |
Thread-code | Colour-RGB | Colour-number | Colour-name |
1 | "#000000" | 002 | "Black" |
2 | "#F0F0F0" | 001 | "White" |
3 | "#FFCC00" | 239 | "Sunflower" |
4 | "#E6651E" | 254 | "Hazel" |
5 | "#C4E39D" | 264 | "Green Dust" |
6 | "#237336" | 226 | "Green" |
7 | "#071650" | 232 | "Navy Blue" |
8 | "#4CB58F" | 250 | "Emerald Green" |
9 | "#F669A0" | 201 | "Pink" |
10 | "#FF4720" | 202 | "Vermilion" |
11 | "#E2A188" | 236 | "Cinnamon" |
12 | "#595B61" | 252 | "Dark Gray" |
13 | "#E4C35D" | 003 | "Gold" |
14 | "#6231BD" | 261 | "Violet Blue" |
15 | "#2F5933" | 219 | "Olive Green" |
16 | "#FAB381" | 212 | "Peach" |
17 | "#F999B7" | 211 | "Pale Pink" |
18 | "#F09C96" | 256 | "Salmon" |
19 | "#A39166" | 268 | "Olive Drab" |
20 | "#970533" | 215 | "Wine Red" |
21 | "#AC9CC7" | 209 | "Pale Violet" |
22 | "#65C2C8" | 217 | "Sky" |
23 | "#E5E5E5" | 220 | "Silver Gray" |
24 | "#A0B8CC" | 216 | "Pale Sky" |
25 | "#98D6BD" | 227 | "Pale Aqua" |
26 | "#0B2F84" | 207 | "Blue" |
27 | "#98F3FE" | 229 | "Powder Blue" |
28 | "#B2E1E3" | 228 | "Baby Blue" |
29 | "#FF0927" | 244 | "Cardinal Red" |
30 | "#14329C" | 262 | "Blue Ink" |
31 | "#A80043" | 242 | "Burgundy" |
32 | "#FF6600" | 203 | "Orange" |
33 | "#FF6048" | 234 | "Coral" |
34 | "#B59474" | 237 | "Umber" |
35 | "#FDF5B5" | 210 | "Pale Yellow" |
36 | "#F5DB8B" | 238 | "Blond" |
37 | "#C79732" | 272 | "Old Gold" |
38 | "#889B9B" | 221 | "Gray" |
39 | "#AB5A96" | 208 | "Purple" |
40 | "#FFBDE3" | 240 | "Orchid Pink" |
41 | "#C3007E" | 241 | "Peony Purple" |
42 | "#FF0000" | 225 | "Red" |
43 | "#EE71AF" | 266 | "Floral Pink" |
44 | "#608541" | 246 | "Moss Green" |
45 | "#609418" | 247 | "Meadow Green" |
46 | "#C6EECB" | 245 | "Opal Green" |
47 | "#5BD2B5" | 249 | "Aquamarine" |
48 | "#FFFF17" | 204 | "Yellow" |
49 | "#04917B" | 251 | "Peacock Green" |
50 | "#5C2625" | 260 | "Dark Sepia" |
51 | "#FFFFDC" | 253 | "Ivory White" |
52 | "#FF5A27" | 235 | "Burnt Orange" |
53 | "#A76C3D" | 257 | "Cocoa Brown" |
54 | "#9C6445" | 214 | "Brown" |
55 | "#B45A30" | 258 | "Sienna" |
56 | "#481A05" | 205 | "Dark Brown" |
57 | "#0C8918" | 269 | "Meadow" |
58 | "#70A9E2" | 230 | "Bright Blue" |
59 | "#1D5478" | 231 | "Slate Blue" |
60 | "#165FA7" | 263 | "Solar Blue" |
61 | "#7FC21C" | 218 | "Yellow Green" |
62 | "#06480D" | 248 | "Dark Green" |
63 | "#843154" | 267 | "Wine" |
64 | "#FD33A3" | 265 | "Crimson" |
65 | "#FFBBBB" | 233 | "Salmon Pink" |
66 | "#F7F297" | 270 | "Mustard" |
67 | "#00B552" | 206 | "Bright Green" |
68 | "#FCF121" | 275 | "Canary Yellow" |
69 | "#E6965A" | 255 | "Toast" |
70 | "#D7BDA4" | 213 | "Beige" |
71 | "#FF9D00" | 273 | "Honey Dew" |
72 | "#FFBA5E" | 274 | "Tangerine" |
73 | "#0257B5" | 222 | "Ocean Blue" |
74 | "#6E3937" | 259 | "Sepia" |
75 | "#540571" | 243 | "Royal Purple" |
76 | "#CC9900" | 271 | "Yellow Ocher" |
77 | "#D0BAB0" | 223 | "Beige Gray" |
78 | "#E3BE81" | 224 | "Bamboo" |
Thread-type
Offset | Length | Type | Description |
0 | 4 | int | unknown = 13 |
Plus-header
Only in JEF+ files.
Offset | Length | Type | Description |
0 | 4 | int | Signature-1 = 0 |
4 | 4 | int | Signature-2 = 0 |
8 | 8 | ASCII | Signature-3 = "JANOME\0\0" |
16 | 4 | Count | Plus-detail-count = 1 |
20 | 4 | Offset | Plus-detail-offset from file-start to JEF+ extra details |
Escaped-command
Offset | Length | Type | Description |
0 | 1 | Byte | Escape = -128 or 0x80 |
1 | 1 | Byte | Command-code = 1, 2 or 16 |
Command-code | Description |
1 | Change to next thread in list |
2 | Move followed by 8 bit displacement-X and 8 bit displacement-Y |
16 | Last-stitch |
Displacement
Offset | Length | Type | Description |
0 | 1 | Byte | Displacement-X -127 to 127 in 0.1 mm |
1 | 1 | Byte | Displacement-Y -127 to 127 in 0.1 mm |
Plus-detail
Unknown, many 32 bit numbers, then many 16 bit numbers.
SEW Format
This appears to be an earlier format, it is fairly simple (from the examples seen), it includes bitmap previews, but sometimes they do not match the pattern described in stitches. The format seems to use the same thread colour codes and the same stitch-list as JEF.
Format appears to be little endian, except for the bitmaps.
SEW-file = SEW-header {Bitmap} {stitch}
SEW-header
Only SEW files
Offset | Length | Type | Description |
0 | 2 | Count | Colour count; maximum of 12 colours |
2 | 12x2 | Table | Colour index table padded with 0; JEF colour code |
0x1A | 12x2 | Table | Colour unknown; all entries appear to have the same value: 8 or 0 or 255 |
0x32 | 12x2 | Table | Stitches per colour (minus a few) |
0x4A |
Bitmap
The bitmaps and sets of bitmaps appear to start at several fixed file offsets:
0x004A 1 x 48 pixel by 32 lines monochrome
0x010C 1 to 12 x 24 by 16, one for each colour
0x043C 1 x 64 by 48 monochrome
0x05BE 1 to 12 x 64 by 48, one for each colour
0x17D6 1 x w x h, variously sized monochrome outline and centre mark.
There are about 1440 bytes before the stitch-list.
This last bitmap may give an indication of the size in millimetres, the width will be a multiple of 8 mm. The available bits (for pixels or mm) 1440 x 8 = 11,520 gives a maximum size around 120 mm x 96 mm, so may be not.
Offset | Length | Type | Description |
0 | 1 | Count | Width of bitmap in (8 bit) bytes |
1 | 1 | Count | Height of bitmap in lines/rows |
2 | Width x Height | Byte | Bits from top to bottom, left to right, MSB to LSB |
2 + Width x Height |
The bitmap is similar to PBM P4 format, a PBM file can be created by writing:
"P4\n" "%d %d\n", Width * 8, Height
then copy Width x Height chars
Stitch
The SEW stitches appear to start at the fixed file offset 0x1D78, and use the same Escaped-command and (8 bit, 8 bit) Displacement as JEF above.