Hi HN, I built this as a side project. PicShift converts images (HEIC, WebP, AVIF, PNG, JPG) entirely client-side using WebAssembly encoders — MozJPEG for JPEG, OxiPNG + imagequant
for PNG, libwebp with SIMD detection for WebP, AV1 for AVIF, and libheif for HEIC decoding.
Nothing is uploaded. All processing happens in Web Workers (up to 4 parallel) with the WASM modules lazy-loaded per format.
A few technical highlights:
- HEIC decoding: native createImageBitmap on Safari (17-39x faster), libheif-js WASM fallback on Chrome (2-3x faster than the pure JS decoder heic2any)
- PNG has a three-stage pipeline: imagequant palette quantization → secondary color reduction → OxiPNG lossless optimization
- Streaming ZIP packaging with fflate (STORE mode, no re-compression)
- All WASM encoders fall back silently to Canvas.convertToBlob() if they fail
Happy to discuss the architecture or answer any questions.
pod4g•9h ago