mermaid
sequenceDiagram
participant U as User/Frontend
participant API as API Worker
participant D1 as D1 Database
participant R2 as R2 Storage
participant Q as Variant Queue
participant AI as Workers AI
U->>API: 1. POST /v1/images<br/>(metadata + filename)
API->>D1: 2. Create image record<br/>(uploaded=0)
D1-->>API: Image ID
API->>API: 3. Generate signed<br/>upload token (JWT)
API-->>U: 4. {imageId, uploadUrl, token}
U->>API: 5. PUT /v1/upload/:id?token=xxx<br/>(binary image data)
API->>API: 6. Validate token<br/>Strip EXIF (if enabled)
API->>R2: 7. Store at<br/>{owner}/{album}/{filename}
API->>D1: 8. Update uploaded=1
API->>Q: 9. Enqueue variant generation
API-->>U: 10. 201 Created
Note over Q: Async Processing
Q->>R2: 11. Fetch original image
Q->>Q: 12. Generate variants:<br/>w128, w256, w512, w1024,<br/>w1536, w2048, thumb, og-image
Q->>R2: 13. Store variants at<br/>{owner}/{album}/{filename}/{variant}
Q->>D1: 14. Update variants_ready[]
Q->>AI: 15. Classify image<br/>(labels, NSFW, colors, caption)
AI-->>Q: Classification results
Q->>D1: 16. Save AI metadata