1 comments

  • pod4g 10 hours ago ago

    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.