Projects/Liberty/File Formats/Husqvarna Viking SHV
Husqvarna Viking SHV - EXE Menu
Sometimes Pfaff, Husqvarna, or Viking files come as an EXE program: a self extracting ZIP compressed file; for Designer I software. The instructions by Husqvarna say design is in Menu 1, position 1. Once decompressed, with the likes of Ark or WINE, a directory tree is produced, for example:
File_name/
- MENU_SEL.PHV
- MENU_01/
- MENU_01.MHV
- DES01_01.SHV
- MENU_02/
- MENU_02.MHV
- MENU_03/
- MENU_03.MHV
- MENU_04/
- MENU_04.MHV
The file MENU_SEL.PHV appears to contain a software notice, the name of the pattern (sixteen times), menu
labels for four menus (each repeated sixteen times: I assume intended for different languages), some four row
table (looks like weights for each bit: 120, 82, 44 and 6), and finally a 4 bit per pixel pixmap (8 bit line
count, 8 bit pixels/line, lines x (pixels/2 round up) bytes).
In subdirectory MENU_01, the file MENU_01.MHV appears to contain a software notice, menu label repeated
sixteen times, some values (of unknown purpose 0x77 119, 0xFB 251/-5, and 6), list of 36 bytes, and a 4 bit
per pixel pixmap.
The important file is DES01_01.SHV, this contains stitches, the stitches appear to be the same format as VP3.
Offset | Size | Type | Description |
---|---|---|---|
0 | 86 | ASCII | Signature = "Embroidery..." software notice |
0x56 86 | 1 | Byte | N1 length of string |
0x57 87 | N1 | ASCII | Name of pattern (appears limited to 12 characters) |
0x57+N1 |
After the header is an 16 colour image, there are two forms 8 bit sizes and 16 bit sizes. The 16 bit sizes
are flagged with three bytes: 0xFF 0xFF 0x01. Big-endian is used for 2 and 4 byte numbers.
Offset | Size | Type | Description |
---|---|---|---|
0 | 3 | Byte | 0xFF 0xFF 0x01 |
3 | 2 | Count | Height, lines in the pixel-map (unsigned big-endian) |
5 | 2 | Count | Width, pixels in a line, two pixels are packed in a byte, odd count leaves empty nibble in last byte of line |
7 | 2 | Count | Unknown width/2 round down |
9 | 2 | Count | Unknown height/2 round down |
11 | 2 | Count | Unknown width/2 round down |
13 | 2 | Count | Unknown height/2 round down |
Offset | Size | Type | Description |
---|---|---|---|
0 | 1 | Count | Height, lines in the pixel-map |
1 | 1 | Count | Width, pixels in a line, two pixels are packed in a byte, odd count leaves an empty nibble in last byte of each line |
2 | 1 | Count | Unknown width/2 round down |
3 | 1 | Count | Unknown height/2 round down |
4 | 1 | Count | Unknown width/2 round down |
5 | 1 | Count | Unknown height/2 round down |
Followed by the bytes of the pixel-map.
Now the stitches, follow a summary and colour table.
Offset | Size | Type | Description |
---|---|---|---|
0 | 1 | Count | Colour count, number of rows in colour table |
1 | 1 | Signed | Unknown = -60 or 196 or bit-set [1100 0100] |
2 | 1 | Count | Unknown = 40, may be weight in km/kg |
3 | 1 | Byte | Unknown = 0x00 |
4 | 1 | Byte | Unknown |
5 | 2 | Byte | Unknown = 0 0 |
7 | 2 | Signed | Right extent in 0.1 mm |
9 | 2 | Signed | Top extent in 0.1 mm |
11 | 2 | Signed | Left extent in 0.1 mm |
13 | 2 | Signed | Bottom extent in 0.1 mm |
15 | 4 | Count | total stitch count |
Each colour table row appears:
Offset | Size | Type | Description |
---|---|---|---|
0 | 4 | Count | stitch count, related to number of stitches of this thread |
4 | 1 | Byte | Unknown, seems to be HUS format colour index |
5 | 3 | Byte | Unknown = 0x02 00 00, this could be colour name string |
8 | 2 | BCD | Thread part-number |
10 | 2 | Signed | Start X in 0.1 mm |
12 | 2 | Signed | Start Y in 0.1 mm |
The stitches are pairs (dx, dy) of signed 8 bit offsets (from previous current position) with an escape code.
When dx is 0x80 -128, dy gives the command.
Code | Description |
---|---|
0x80 0x01 | Start 16 bit jump stitch |
0x80 0x02 | End 16 bit jump stitch, enables stitches to be rewound |
0x80 0x03 | Unknown, may be deleted stitch |
0x80 0xA0 | Start 8 bit jump stitch |
0x80 0x00 | End 8 bit jump stitch |
The jump stitch, going forward, Start then relative X displacement, relative Y displacement, End. When rewinding or backing up, the End will be seen, then Y displacement, X displacement, and Start.