Skip to content

PureJsImage v0.7.0

Choose a tag to compare

@a-r-d a-r-d released this 10 Aug 03:07
· 335 commits to main since this release

Added

  • Completed the common static 8-bit Huffman JPEG reference before optional WASM work: incremental
    entropy input, restart-aware region seeking, chroma-aware bilinear upsampling, SOF1 and sequential
    multi-scan decode, 4:4:0 and 4:1:1 fixtures, native grayscale and restart-marker output, hostile
    input limits, and provider-neutral parity vectors.
  • Added native 1/2, 1/4, and 1/8 JPEG IDCT output, decoder-driven scale selection for safe
    full-frame downscales, baseline/progressive/restart/subsampling regressions, and an isolated
    runtime, RSS, avoided-pixel, and output-error benchmark against the full-resolution path.
  • Added an explicit modern-browser entry with File/Blob, ArrayBuffer, Uint8Array, Blob output,
    custom sinks, browser-safe TypeScript declarations, and a browser bundle gate that rejects Node
    built-ins across the full codec graph.
  • Added browser PNG encoding through CompressionStream and bounded browser rotation/orientation
    storage through OPFS, a lazy 64 MiB chunked-memory fallback, and IndexedDB for larger transforms.
  • Added HEIF/HEIC EXIF and RGB ICC preservation for conversion workflows, including orientation
    normalization, plus structured ICC and nclx color-profile metadata for HEIF and AVIF.
  • Refreshed the static GitHub Pages documentation with responsive guides, API and codec references,
    benchmark tables, memory-model explanations, and clearer capability boundaries.
  • Documented the progressive JavaScript, optional WASM, and future WebGPU backend roadmap,
    including capability probing, workload-based selection, bounded GPU memory rules, runtime
    fallback policy, correctness gates, and a staged browser-first delivery plan.
  • Added a reproducible bundle and deployment-footprint comparison for PureJsImage, Jimp, image-js,
    and Sharp, with a matched common codec set and explicit accounting for Sharp's native payload.
  • Added one machine-readable codec capability manifest that generates README, detailed codec,
    website, public JSON, and compatibility-test expectations, with a stale-output CI gate and a
    repository agent skill for rolling capabilities out consistently.

Changed

  • Made bundle and installed-package size reporting part of the mandatory npm run check gate.
  • Reworked the root README into a shorter human-facing overview with a practical all-codec example,
    bundle sizes, codec support and compatibility links, benchmark charts, and direct routes to the
    API, benchmark, browser, temporary-storage, specification, and contributor details.
  • Split Node file, Buffer, zlib, and temporary-file services from the portable codec and pipeline
    core while preserving the existing Node API and measured transform performance.
  • Made Node.js and modern-browser portability an explicit project goal and release requirement.
  • Reused a single Node file descriptor across detection, metadata, and execution reads, and avoided
    redundant copies when stable sources fill codec regions.
  • Surfaced the measured 191.8-211.0 MiB JPEG 2000 decode peak and its 512 MiB Lambda-tier guidance
    in the README and codec documentation.

Fixed

  • Reduced first-party lossless WebP output for graphics by adding predictor and subtract-green
    transforms, LZ77 references, and adaptive Huffman trees, with exact Sharp/libwebp pixel checks
    and an isolated size and peak-memory benchmark for the documented full-frame encoder state.
  • Decoded the quantization matrices and block delta-Q syntax used by default Sharp/libaom AVIF
    output in the restricted opaque 8-bit YUV 4:2:0 path, with exact q50 and q80 YUV agreement
    against both dav1d and libaom while delta loop-filter syntax remains explicitly unsupported.
  • Restricted SVG recognition to the document's first element so HTML with inline SVG and JSON text
    mentioning <svg are no longer misreported as SVG input.