ULID-based Asset Storage Pattern
Use ULID keys in R2 and track all asset metadata in video_assets.
Key Pattern
Store objects at bucket root:
{ULID}.{ext}
This keeps paths flat, sortable enough for operations, and globally unique.
DB Record Shape
For each asset row:
video_idasset_type(for exampleslide_image,slide_audio,rendered_video,highlight_video,thumbnail_image, prompt assets)asset_index(stable ordering)r2_keypublic_urlmime_typefile_sizemetadataJSON
Practical Rules
- Write metadata required by downstream stages (dimensions, durationMs, slideIndex, etc).
- Regenerate stage outputs by deleting old rows/assets for that stage before inserting fresh outputs.
- Use typed asset categories rather than overloading one generic type.