Media Metadata
Image metadata schema, XMP structure, Zod validation, and GCS bucket layout per vendor.
Media Metadata Structure
The Media Service manages product images stored in Google Cloud Storage. Each image has associated metadata validated through Zod schemas.
GCS Bucket Layout
gs://crop-parts-media/
├── {vendor_code}/
│ └── {part_number}/
│ ├── original.jpg # Original uploaded image
│ ├── thumbnail.webp # 200px thumbnail
│ ├── medium.webp # 800px display image
│ └── metadata.json # Image metadata
gs://crop-equipment-images/
└── models/
└── {vendor}/
└── {baseModel}/
└── {filename} # Scraped equipment model imagesImage Metadata Schema
Each image has metadata stored in MongoDB alongside the media record:
const ImageMetadataSchema = z.object({
partNumber: z.string(),
vendor: z.string(),
originalFilename: z.string(),
mimeType: z.string(),
width: z.number(),
height: z.number(),
fileSize: z.number(),
gcsPath: z.string(),
cdnUrl: z.string().optional(),
uploadedAt: z.date(),
source: z.enum(["manual", "scraper", "vendor_api"]),
});CDN URLs
Images are served through Cloudflare CDN:
https://media.clintontractor.net/{vendor}/{part_number}/{variant}.webp
https://media.clintontractor.net/equipment/models/{vendor}/{baseModel}/{filename}Related
- Media Service — Image processing and storage service
- Vendor Data Overview — Unified data schema
- Cloudflare — CDN and proxy configuration