Variable ShowfileSchemaConst 
 
Showfile
Schema
: Record<{     $chessbots_show_schema_version
: Literal<4>;     audio
: Optional<Record<{         data
: InstanceOf<Uint8Array>;         mimeType
: String;     }, false>>;     name
: String;     timeline
: Arr<Record<{         remainingEvents
: Arr<Union<[Record<{             durationMs
: Constraint<Constraint<Constraint<Number, number, unknown>, number, unknown>, number, unknown>;             id
: String;             target
: Union<[Record<{                 controlPoint
: Record<{                     x
: Number;                     y
: Number;                 }, false>;                 controlPoint2
: Record<{                     x
: Number;                     y
: Number;                 }, false>;                 endPoint
: Record<{                     x
: Number;                     y
: Number;                 }, false>;                 type
: Literal<CubicBezier>;             }, false>, Record<{                 controlPoint
: Record<{                     x
: Number;                     y
: Number;                 }, false>;                 endPoint
: Record<{                     x
: Number;                     y
: Number;                 }, false>;                 type
: Literal<QuadraticBezier>;             }, false>]>;             type
: Literal<"goto_point">;         }, false>, Record<{             durationMs
: Constraint<Constraint<Constraint<Number, number, unknown>, number, unknown>, number, unknown>;             id
: String;             type
: Literal<"wait">;         }, false>, Record<{             durationMs
: Constraint<Constraint<Constraint<Number, number, unknown>, number, unknown>, number, unknown>;             id
: String;             radians
: Number;             type
: Literal<"turn">;         }, false>]>, false>;         startPoint
: Record<{             durationMs
: Constraint<Constraint<Constraint<Number, number, unknown>, number, unknown>, number, unknown>;             id
: String;             target
: Record<{                 point
: Record<{                     x
: Number;                     y
: Number;                 }, false>;                 type
: Literal<StartPoint>;             }, false>;             type
: Literal<"start_point">;         }, false>;     }, false>, false>; }, false> = ... 
The showfile schema.
Remarks
At runtime this is a regular JS object. When saved as a file, it is stored as binary in the Concise Binary Object Representation (CBOR) format. The main reason for using a binary format is to allow the audio file to be included inline with the file. Alternatives include base64 encoding the audio file so it could be stored as a string in a JSON file, or storing the audio file separately, perhaps using a ZIP file.