I needed to convert 500 product images from one format to another. Server-based solutions quoted $15-50/month for batch processing. So I built a client-side solution using Web Workers and OffscreenCanvas.

The Architecture

The key insight: Canvas operations on large images block the main thread. The fix:

Web Workers handle image decoding/encoding off the main thread

OffscreenCanvas renders without DOM access — perfect for worker contexts