7.4 KiB
Data Model & Asset Pack Structure
Asset Pack Overview
A Ford BnP asset pack is a ZIP file containing:
linkingrecord.json— The manifest that describes every image, its category, viewing angle, associated features, and layering info- Image files — Organized in subdirectories by viewtype and imagetype
The linkingrecord.json is the single source of truth. Every QC check reads this file to understand what the pack should contain.
linkingrecord.json Schema
graph TD
ROOT[linkingrecord.json] --> MARKET[market: string]
ROOT --> MODEL[model: string]
ROOT --> YEAR[year: string]
ROOT --> FULLLOAD[fullLoad: string]
ROOT --> HEADER[header: object]
ROOT --> ITEMS[items: array]
HEADER --> SPECMARKET[specMarket: string]
HEADER --> PTVL[ptvl: string]
HEADER --> NUMMMY[numericalMmy: string]
ITEMS --> ITEM1[Item]
ITEM1 --> CONDITIONS[conditions: object]
ITEM1 --> RECORDS[records: array]
ITEM1 --> COUNT[count: integer]
CONDITIONS --> VT[viewtype: string]
CONDITIONS --> IT[imagetype: string]
CONDITIONS --> EC[experienceCondition: string]
CONDITIONS --> VAR[variant: string]
RECORDS --> REC1[Record]
REC1 --> ANGLE[angle: integer]
REC1 --> FEATURES[features: array of strings]
REC1 --> ASSETS[assets: array]
ASSETS --> ASSET1[Asset]
ASSET1 --> FILENAME[filename: string]
ASSET1 --> LAYER[layer: integer]
Top-Level Fields
| Field | Type | Example | Validation Rules |
|---|---|---|---|
market |
string | "DEU" |
Exactly 3 uppercase letters (A-Z) |
model |
string | "CGW07" |
Uppercase letters and digits only |
year |
string | "YYY" |
Must be the literal string "YYY" |
fullLoad |
string | "Y" |
Load indicator |
header |
object | — | Contains metadata fields |
items |
array | — | Array of item objects |
Header Fields
| Field | Type | Example | Validation Rules |
|---|---|---|---|
specMarket |
string | "WAEDX" |
Specification market code |
ptvl |
string | "CGW" |
Platform code |
numericalMmy |
string | "202400" |
Must contain no dots |
Item Fields
Each item represents a group of images sharing the same viewtype/imagetype conditions.
| Field | Type | Example | Description |
|---|---|---|---|
conditions.viewtype |
string | "exterior" |
View category (see matrix below) |
conditions.imagetype |
string | "layeroptext" |
Image subcategory (see matrix below) |
conditions.experienceCondition |
string | "2d-background" |
Optional. Presence indicates MEC pack |
conditions.variant |
string | "desktop" |
Optional. Used for beltline images |
records |
array | — | Array of record objects |
count |
integer | 8 |
Number of records in this item |
Record Fields
Each record represents a specific configuration (angle + feature combination) with its image files.
| Field | Type | Example | Description |
|---|---|---|---|
angle |
integer | 21 |
Camera viewing angle |
features |
array | ["bs-sa", "vs-kz", "pn4hq"] |
WERS feature/option codes |
assets |
array | — | Image files for this record |
Asset Fields
| Field | Type | Example | Description |
|---|---|---|---|
filename |
string | "ext/base/ext_21_bs-sa.jpg" |
File path relative to ZIP root |
layer |
integer | 0 |
Layer stacking order (0 = base image) |
ViewType / ImageType Matrix
| ViewType | ImageType | Description | Format | Resolution (BAU) |
|---|---|---|---|---|
exterior |
(none) | Base exterior renders | JPEG (PNG accepted) | 1600x900 |
exterior |
layeroptext |
Exterior layered options | PNG | 1600x900 |
exterior |
showroom |
Showroom previews | PNG | 768x432 |
interior |
(none) | Base interior renders | JPEG (PNG accepted) | 1600x900 |
interior |
layeroptint |
Interior layered options | PNG | 1600x900 |
carousel |
colour |
Color chip thumbnails | JPEG | 148x83 |
carousel |
powertrain |
Powertrain images | JPEG | 678x381 |
carousel |
extra |
Extra option carousel images | JPEG | 678x381 |
carousel |
bodystyle |
Body style images | JPEG | 678x381 |
carousel |
series |
Series images | JPEG | 678x381 |
carousel |
trim |
Trim images | JPEG | 678x381 |
lifestyle |
(none) | Lifestyle/marketing photo | JPEG | 1440x810 |
inventory |
(none) | Inventory/spec image | JPEG | 2900x1280 |
vehicleselector |
desktop |
Beltline desktop frames | AVIF | 1920x842 |
vehicleselector |
mobile |
Beltline mobile frames | AVIF | 640x428 |
MEC packs use different resolutions for some types — see the QC Checks Reference.
Pack Types: MEC vs BAU
Asset packs come in two variants with different validation rules:
BAU (Business As Usual)
- Standard configurator packs
- No
experienceConditionfield present on any item - Standard resolution and format requirements
MEC (Multi-Experience Configurator)
- Enhanced packs with 2D background experience
- Detection: Any item with
conditions.experienceCondition = "2d-background"makes the entire pack MEC - Additional requirements:
- Must have exterior 2d-background section with angle 30
- Must have carousel/powertrain with assets
- Required section pairs (regular + 2d-background) for exterior base, interior base, exterior layered options, interior layered options
- Different resolution requirements (e.g., 1600x1600 instead of 1600x900 for base images)
- Stricter format rules (base assets must be JPEG only, no PNG)
- 100% WERS code coverage required for extra carousel (vs 50% minimum for BAU)
Allowed File Types
Only these file extensions are permitted in asset packs:
| Extension | Case Rule | Used For |
|---|---|---|
.jpg |
Lowercase | Most image types |
.jpeg |
Lowercase | Alternative JPEG extension |
.png |
Lowercase | Layer options, showroom |
.AVIF |
Uppercase required | Beltline (vehicleselector) images |
.json |
Lowercase | Linking record manifest |
Any other extensions are flagged as unauthorized. Lowercase .avif is flagged as a case violation.
Asset Naming Conventions
General Pattern
Filenames typically follow: {viewtype_prefix}/{subdir}/{viewtype}_{angle}_{features}.{ext}
Example: ext/base/ext_21_bs-sa.jpg
Beltline Files
- Desktop:
vsd_{frame}_{features}.AVIF(frames 0-71) - Mobile:
vsm_{frame}_{features}.AVIF(frames 49-71)
MEC-Specific Files
- Files with
_mecin the filename are only allowed in2d-backgroundexperienceCondition sections
Layer Numbering
- Layer 0 = base image (no layer suffix needed)
- Layer N > 0 = overlay image; the layer number must appear as the last number before the file extension in the filename (e.g.,
_21_20.pngmeans layer 20)
Feature Codes
The features array on each record contains WERS (World Engineering Release System) codes that identify vehicle options:
vs-prefix: Vehicle Series codes (e.g.,vs-kz)acmprefix: ACM codes (e.g.,acm5b)bs-prefix: Body style codes (e.g.,bs-sa)- Other codes: Paint colors, trim options, packages (e.g.,
pn4hq)
These codes are used by check_series_permutations and extra_carousel_validation_check to verify coverage completeness.