Back to all projects
Jul 14, 2026

Hardware-Accelerated Bulk Image Processing

A client-side bulk image compressor using HTML5 canvas and JSZip. Zero cloud uploads, zero data leakage, and absolute privacy.

The Problem: Proprietary Data Leaks & Memory Crashes

To optimize web performance, developers and designers must constantly convert assets into next-gen formats like WebP. The industry standard is dragging these files into free cloud converters. However, this creates a massive security vulnerability: uploading unreleased, proprietary client assets (often under NDA) to third-party servers.

The alternative is using local CLI tools, which lacks the visual workflow designers need. Attempting to build this in the browser presents a different challenge: if a user drops fifty 4K PNG files into a standard React app, the browser will attempt to process them simultaneously, immediately exhausting the tab's memory allocation and crashing the page. Furthermore, browsers with strict anti-tracking settings (like LibreWolf) actively block rapid-fire multi-file downloads.

The Architecture: Sequential Processing & In-Memory Packaging

I engineered Lumist Crush to be a bulletproof, local-first alternative to cloud compressors.

  1. Hardware-Accelerated Canvas Minification: Instead of sending files to a server, Crush reads the file into memory and draws it to an offscreen HTML5 <canvas>. It then utilizes the browser's native canvas.toBlob() engine to encode the image into WebP or JPEG. A critical byproduct of drawing to a canvas is that it naturally scrubs all EXIF data (GPS coordinates, camera metadata), ensuring immediate privacy compliance.

  2. Non-Blocking Sequential Queues: To prevent memory crashes during bulk uploads, I built a custom asynchronous processing queue. Instead of firing a Promise.all() that floods the main thread, the engine processes images strictly one at a time. The UI immediately updates with a staggered loading state, keeping the application rendering at a smooth 60fps regardless of the payload size.

  3. Client-Side ZIP Generation: To bypass strict browser heuristic blocks against "download bombs" (triggering 50 downloads at once), I integrated JSZip. Once the queue finishes processing, Crush aggregates the in-memory blobs and compiles a single .zip file entirely on the client-side. The user clicks once, downloading a cleanly packaged folder of optimized assets. The Outcome

Lumist Crush brings the speed and privacy of local CLI workflows into a highly polished GUI. By pushing the heavy lifting to the client's hardware, server compute costs are eliminated, allowing the tool to scale infinitely and remain 100% free while mathematically guaranteeing zero data leakage.