Satin Studio Manual

VP3

Status

FieldValue
Extension(s).vp3
Common ecosystemPfaff / Husqvarna Viking
Format familyStructured machine-specific file
Satin Studio statusSupported
Open / importYes
ExportYes
ConfidenceMedium-high for structure; variants need tests.

What it is

VP3 is a newer Pfaff / Husqvarna Viking / VSM-family format. It is structured into file, design, color-block, and stitch-block areas rather than being one flat command stream.

Satin Studio behavior

Satin Studio preserves VP3 design, color-block, and stitch-block boundaries on import. Export carries the selected machine, hoop placement, thread blocks, and supported previews into the structured file.

Versions and variants

A VP3 file can contain several designs and color blocks. Satin Studio reports multi-design and multi-hoop placement explicitly rather than flattening them into one unexplained stitch stream.

File identification notes

Known structural clues:

Color blocks carry start position, thread metadata, block movement shift, and stitch data. Thread metadata can include RGB, material, thread weight, catalog number, description, and brand.

Stitch data uses short dx, dy bytes plus 0x80 control pairs:

Observed structure notes

Structure sketch

VP3 is sectioned, big-endian, and color-block oriented:

struct Vp3File<'a> {
    magic: [u8; 6],                     // observed b"%vsm%\0"
    header_strings_and_metadata: &'a [u8],
    center_x_scaled: i32,               // big-endian, observed scale / 100
    center_y_scaled: i32,
    color_count: u16,
    color_blocks: &'a [Vp3ColorBlock<'a>],
}

struct Vp3ColorBlock<'a> {
    lead_marker: [u8; 3],               // observed 00 05 00 in common files
    distance_to_next_050: u32,
    start_x_scaled: i32,
    start_y_scaled: i32,
    thread: Vp3Thread<'a>,
    pre_stitch_gap: [u8; 15],
    stitch_marker: [u8; 3],             // observed 0A F6 00 in common files
    stitch_data: &'a [Vp3StitchRecord],
}

struct Vp3Thread<'a> {
    color_count: u8,
    transition: u8,
    rgb_and_parts: &'a [u8],
    thread_type: u8,
    weight: u8,
    catalog_number: &'a str,
    description: &'a str,
    brand: &'a str,
}

enum Vp3StitchRecord {
    Short { dx: i8, dy: i8 },
    Long { dx: i16, dy: i16 },           // introduced by 0x80 0x01, signed 16-bit BE x/y
    LongTerminator,                     // 0x80 0x02 in observed streams
    TrimOrBlockEnd,                     // 0x80 0x03
}

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.