{
  "schemaVersion": 1,
  "codecs": [
    {
      "id": "jpeg",
      "name": "JPEG",
      "experimental": false,
      "packageFormat": "jpeg",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Static 8-bit Huffman JPEG, including AVI1/MJPEG frames with omitted standard tables; no arithmetic, lossless, 12-bit, or omitted nonstandard external tables",
      "description": "Decodes common 8-bit baseline, extended-sequential, multi-scan, and progressive grayscale, YCbCr, RGB, CMYK, and YCCK JPEGs with chroma-aware interpolation, plus AVI1/MJPEG baseline frames that use omitted standard Huffman tables. Encodes baseline and scan-optimized refinement-based progressive JPEG with configurable quality, chroma sampling, native grayscale, and restart markers.",
      "memory": "Incremental entropy input, bounded MCU-row baseline output, restart-aware region seeking, and scaled IDCT; progressive decode and encode retain compact Int16 coefficient planes",
      "recommendation": "Photographs and broadly compatible lossy output.",
      "evidence": [
        "tests/jpeg.test.ts",
        "tests/pipeline.test.ts",
        "tests/transform-codecs.test.ts",
        "tests/metadata-preservation.test.ts",
        "tests/lossy-codec-quality.test.ts",
        "tests/jpeg-reference-fixtures.test.ts",
        "tests/jpeg-hardening.test.ts",
        "tests/jpeg-reference-parity.test.ts",
        "tests/wasm-jpeg.test.ts",
        "browser-tests/compatibility.pw.ts"
      ],
      "lossyPixelValidation": {
        "status": "independent-oracle",
        "oracle": "Sharp 0.35.3 with libjpeg plus pinned browser fixtures",
        "tolerance": "Decode RGB PSNR above 40 dB versus Sharp/libjpeg and above 28 dB versus source pixels",
        "evidence": ["tests/lossy-codec-quality.test.ts", "tests/jpeg-reference-parity.test.ts"]
      },
      "claims": [
        {
          "status": "supported",
          "text": "JPEG detection from the start-of-image marker"
        },
        {
          "status": "supported",
          "text": "Header-only width, height, bit depth, Adobe/component-ID color-space classification, chroma subsampling, MPF image count, and EXIF orientation inspection without decoding entropy-coded pixels"
        },
        {
          "status": "supported",
          "text": "8-bit baseline sequential DCT with Huffman coding (`SOF0`)"
        },
        {
          "status": "supported",
          "text": "8-bit progressive DCT with Huffman coding (`SOF2`)"
        },
        {
          "status": "supported",
          "text": "Single-component grayscale images"
        },
        {
          "status": "supported",
          "text": "Non-interleaved grayscale scans with non-unit frame sampling factors"
        },
        {
          "status": "supported",
          "text": "Three-component YCbCr images"
        },
        {
          "status": "supported",
          "text": "4:4:4, 4:4:0, 4:2:2, 4:2:0, and 4:1:1 chroma sampling with pinned asymmetric-layout compatibility fixtures"
        },
        {
          "status": "supported",
          "text": "Image dimensions that do not end on an MCU boundary"
        },
        {
          "status": "supported",
          "text": "Per-image quantization and Huffman tables"
        },
        {
          "status": "supported",
          "text": "Entropy byte stuffing and restart intervals (`DRI` / `RST0`-`RST7`)"
        },
        {
          "status": "supported",
          "text": "Compatible restart recovery in TypeScript and opt-in Rust/WASM by default for out-of-order markers, bounded intervening bytes, and premature scan ends, with explicit strict validation through `tolerantDecoding: false`"
        },
        {
          "status": "supported",
          "text": "Multi-scan progressive DC and AC first-pass and refinement scans"
        },
        {
          "status": "supported",
          "text": "Bounded tolerant recovery for partial progressive scans ending at inter-scan DHT, SOS, or EOI boundaries, with strict rejection through `tolerantDecoding: false`"
        },
        {
          "status": "supported",
          "text": "Extended sequential 8-bit JPEG (`SOF1`)"
        },
        {
          "status": "supported",
          "text": "Structured `UNSUPPORTED_OPERATION` rejection for recognized 12-bit and arithmetic-coded frames"
        },
        {
          "status": "planned",
          "text": "Extended sequential 12-bit JPEG (`SOF1`)"
        },
        {
          "status": "planned",
          "text": "Lossless JPEG (`SOF3`)"
        },
        {
          "status": "planned",
          "text": "Arithmetic-coded sequential, progressive, and lossless JPEG"
        },
        {
          "status": "planned",
          "text": "Hierarchical JPEG processes"
        },
        {
          "status": "supported",
          "text": "Sequential images split into multiple non-progressive component scans"
        },
        {
          "status": "planned",
          "text": "Define-number-of-lines (`DNL`) images whose height is supplied after the frame header"
        },
        {
          "status": "supported",
          "text": "AVI1/MJPEG baseline frames that omit DHT segments and use standard luminance/chrominance Huffman table identifiers 0 and 1"
        },
        {
          "status": "planned",
          "text": "Abbreviated JPEG or MJPEG frames that depend on omitted nonstandard coding tables supplied outside the individual image"
        },
        {
          "status": "supported",
          "text": "Grayscale-to-RGB output"
        },
        {
          "status": "supported",
          "text": "YCbCr-to-RGB output"
        },
        {
          "status": "supported",
          "text": "EXIF orientation values 1-8 through explicit `autoOrient()` processing"
        },
        {
          "status": "supported",
          "text": "Four-component CMYK JPEG decode with an explicit Adobe transform marker"
        },
        {
          "status": "supported",
          "text": "Adobe YCCK JPEG decode and Adobe color-transform detection"
        },
        {
          "status": "supported",
          "text": "Three-component JPEGs explicitly encoded as RGB rather than YCbCr"
        },
        {
          "status": "supported",
          "text": "Ordered multi-segment ICC profile assembly and color-managed conversion to sRGB for RGB matrix/TRC and ICC v4 `mAB` LUT `A2B0` profiles plus CMYK `lut16` `A2B0` profiles"
        },
        {
          "status": "planned",
          "text": "Broader ICC transform coverage, including `lut8`, device-link, gray, and uncommon parametric or sampled profile forms"
        },
        {
          "status": "planned",
          "text": "Full EXIF, XMP, IPTC/IIM, Photoshop image-resource, JFIF density, comment, and application-marker exposure"
        },
        {
          "status": "supported",
          "text": "Opt-in compatible ICC and EXIF preservation, with metadata stripped by default"
        },
        {
          "status": "supported",
          "text": "Bounded-row, chroma-siting-aware bilinear upsampling with horizontal and vertical halo samples across MCU-row boundaries"
        },
        {
          "status": "supported",
          "text": "Decode and pixel-validate the SDR primary image from pinned Apple and self-contained Android-style Ultra HDR gain-map JPEG fixtures without misreading their appended secondary images"
        },
        {
          "status": "supported",
          "text": "Header-only MPF image-count inspection; the pinned Apple gain-map fixture reports its two constituent images"
        },
        {
          "status": "planned",
          "text": "Ultra HDR / JPEG_R and ISO 21496-1:2025 gain-map discovery, HDR reconstruction, encoding, and preservation"
        },
        {
          "status": "planned",
          "text": "Multi-Picture Format (`MPF` / `MPO`) secondary-image enumeration and selection for gain maps, depth maps, stereo pairs, bursts, and other auxiliary images"
        },
        {
          "status": "planned",
          "text": "Motion Photo XMP and appended-video discovery, extraction, and preservation"
        },
        {
          "status": "supported",
          "text": "Baseline reconstruction in bounded MCU rows without a source-sized RGB or RGBA bitmap"
        },
        {
          "status": "supported",
          "text": "Crop-aware RGB emission so pixels outside the requested output region are not materialized"
        },
        {
          "status": "supported",
          "text": "Progressive coefficient retention in compact 16-bit planes, followed by bounded-row RGB reconstruction"
        },
        {
          "status": "supported",
          "text": "Public crop, resize, auto-orient, JPEG-to-JPEG, and JPEG-to-other-codec pipelines"
        },
        {
          "status": "supported",
          "text": "Incremental header and entropy decoding from `ImageSource` without retaining the complete compressed JPEG input"
        },
        {
          "status": "supported",
          "text": "Native 1/2, 1/4, and 1/8 scaled IDCT decode for baseline and progressive JPEGs, including restart-marker and common subsampling paths"
        },
        {
          "status": "supported",
          "text": "Decoder-driven resize planning for full-frame downscales; it selects the largest safe denominator that still supplies the requested output dimensions and avoids reconstructing discarded full-resolution MCU samples"
        },
        {
          "status": "supported",
          "text": "Restart-marker-assisted region seeking plus skipped IDCT and color work for MCUs outside the requested crop where the file permits it"
        },
        {
          "status": "planned",
          "text": "Lossless coefficient-domain rotate, flip, transpose, and MCU-aligned crop without decoding and re-encoding pixels"
        },
        {
          "status": "planned",
          "text": "Reduce progressive coefficient memory further where scan dependencies and coefficient ranges permit a smaller representation"
        },
        {
          "status": "supported",
          "text": "First-party 8-bit baseline sequential DCT with Huffman coding (`SOF0`)"
        },
        {
          "status": "supported",
          "text": "JFIF output with three YCbCr components"
        },
        {
          "status": "supported",
          "text": "Configurable 4:2:0, 4:2:2, and 4:4:4 output sampling, with 4:2:0 as the photographic default"
        },
        {
          "status": "supported",
          "text": "Quality control from 1-100 using scaled luminance and chrominance quantization tables"
        },
        {
          "status": "supported",
          "text": "Standard luminance and chrominance Huffman tables for bounded-row baseline output"
        },
        {
          "status": "supported",
          "text": "`gray8`, `rgb8`, and `rgba8` pipeline input"
        },
        {
          "status": "supported",
          "text": "Native one-component grayscale output for `gray8` input"
        },
        {
          "status": "supported",
          "text": "Configurable `DRI` restart intervals with ordered `RST0`-`RST7` markers and DC predictor resets"
        },
        {
          "status": "supported",
          "text": "Deterministic alpha flattening onto white by default or a requested RGB background"
        },
        {
          "status": "supported",
          "text": "Streaming top-to-bottom baseline encoding with an 8- or 16-row MCU working buffer rather than a full output frame"
        },
        {
          "status": "supported",
          "text": "Refinement-based progressive encoding with fixed four-scan grayscale and six-scan YCbCr scripts backed by compact quantized `Int16` coefficient planes"
        },
        {
          "status": "supported",
          "text": "Two-pass, scan-specific optimized Huffman tables for progressive DC-first, AC-first, and AC-refinement entropy"
        },
        {
          "status": "supported",
          "text": "Edge replication for dimensions that are not multiples of eight"
        },
        {
          "status": "supported",
          "text": "Public `image.jpeg()` and `image.encode('jpeg')` APIs"
        },
        {
          "status": "planned",
          "text": "Optimized per-image Huffman tables for baseline output without retaining full coefficient planes"
        },
        {
          "status": "planned",
          "text": "Faster integer/fixed-point DCT and quantization without changing decoded output beyond defined error bounds"
        },
        {
          "status": "supported",
          "text": "Compatible ICC and EXIF metadata writing when explicitly preserved"
        },
        {
          "status": "planned",
          "text": "XMP, JFIF density, comment, and application-marker writing or preservation"
        },
        {
          "status": "supported",
          "text": "Explicit control over ICC and EXIF stripping versus preservation"
        },
        {
          "status": "planned",
          "text": "Custom quantization tables for reproducible advanced workflows"
        },
        {
          "status": "planned",
          "text": "CMYK output if real upload or print workflows justify it"
        },
        {
          "status": "supported",
          "text": "Validate marker extents, frame dimensions, component counts, sampling factors, table references, scan progression, and entropy reads"
        },
        {
          "status": "supported",
          "text": "Apply configurable input-size, dimension, pixel-count, decoded-byte, compact coefficient, scan-count, restart-index, and ICC limits before large allocations"
        },
        {
          "status": "supported",
          "text": "Reject truncated files and unsupported coding processes explicitly"
        },
        {
          "status": "supported",
          "text": "Compare baseline grayscale, 4:4:4, 4:2:2, 4:2:0, and restart-marker fixtures against an independent development oracle"
        },
        {
          "status": "supported",
          "text": "Compare progressive output pixels against an independent development oracle"
        },
        {
          "status": "supported",
          "text": "Compare CMYK and YCCK output against an independent development oracle, and exercise RGB matrix/TRC and CMYK LUT ICC transforms with focused fixtures"
        },
        {
          "status": "supported",
          "text": "Pin and pixel-validate libultrahdr ICC and Apple gain-map fixtures plus Web Platform Tests' progressive MozJPEG RGB and YUV browser fixtures"
        },
        {
          "status": "supported",
          "text": "Decode encoded output independently and require correct dimensions and pixels before benchmark timing counts"
        },
        {
          "status": "supported",
          "text": "Decode progressive encoder output through libjpeg and Chromium, Firefox, and WebKit; require the same final pixels as baseline output from identical coefficients"
        },
        {
          "status": "supported",
          "text": "Gate both libjpeg-to-PureJsImage decode and PureJsImage-to-libjpeg encode/decode paths with PSNR floors in CI"
        },
        {
          "status": "supported",
          "text": "Measure absolute peak RSS in isolated cold and warm processes for the primary large-JPEG resize workflow"
        },
        {
          "status": "supported",
          "text": "Compare 1/2, 1/4, and 1/8 output against the full-resolution resize path and report decoded pixels avoided, wall time, absolute peak RSS, MAE, and PSNR from isolated processes"
        },
        {
          "status": "planned",
          "text": "Continue broadening the compatibility corpus with more phone and camera models, image editors, common web upload sources, and a Motion Photo fixture"
        },
        {
          "status": "supported",
          "text": "Add checksum-pinned generated Adobe RGB, 4:4:0, 4:1:1, SOF1, sequential multi-scan, and unusual progressive scan fixtures"
        },
        {
          "status": "supported",
          "text": "Add structured malformed-marker, entropy, table, restart, sampling, and scan-progression regressions with strict allocation and source-cleanup checks"
        },
        {
          "status": "supported",
          "text": "Keep opt-in Rust/WASM baseline decoding at pixel parity, including tolerant restart recovery and bounded TypeScript fallback after setup or midstream failures"
        }
      ]
    },
    {
      "id": "png",
      "name": "PNG",
      "experimental": false,
      "packageFormat": "png",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "No APNG frame decode or indexed/16-bit output",
      "description": "Decodes every legal grayscale, truecolor, indexed, and alpha combination at 1-16 bits, including Adam7, palettes, transparency, and supported color profiles. Encodes streaming 8-bit grayscale, RGB, or RGBA PNG with adaptive filters and opt-in EXIF and compatible ICC preservation.",
      "memory": "Sequential scanlines and bounded output blocks; Adam7 retains compact requested samples",
      "recommendation": "Exact alpha, screenshots, graphics, and lossless round trips.",
      "evidence": [
        "tests/png.test.ts",
        "tests/png-compatibility.test.ts",
        "tests/metadata-preservation.test.ts",
        "tests/wasm-png.test.ts"
      ],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "The implemented PNG paths are lossless"
      },
      "claims": [
        {
          "status": "supported",
          "text": "Standard eight-byte PNG signature and `IHDR` detection"
        },
        {
          "status": "supported",
          "text": "Non-interlaced PNG images"
        },
        {
          "status": "supported",
          "text": "Zlib/Deflate image-data decompression"
        },
        {
          "status": "supported",
          "text": "Consecutive single or multiple `IDAT` chunks"
        },
        {
          "status": "supported",
          "text": "Incremental compressed-data reads and streaming decompression"
        },
        {
          "status": "supported",
          "text": "PNG row filters 0-4: None, Sub, Up, Average, and Paeth"
        },
        {
          "status": "supported",
          "text": "`IDAT` CRC validation"
        },
        {
          "status": "supported",
          "text": "Rejection of unknown critical chunks"
        },
        {
          "status": "supported",
          "text": "Header-only metadata inspection without inflating image data"
        },
        {
          "status": "supported",
          "text": "APNG frame-count inspection from `acTL`"
        },
        {
          "status": "supported",
          "text": "Adam7 interlaced PNG decode"
        },
        {
          "status": "planned",
          "text": "APNG frame decode, composition, timing, disposal, and blending"
        },
        {
          "status": "supported",
          "text": "CRC validation for every chunk during full decode, including `IHDR`, `PLTE`, `tRNS`, `IDAT`, ancillary chunks, and `IEND`"
        },
        {
          "status": "supported",
          "text": "Critical-chunk ordering, uniqueness, and dependency validation, including consecutive `IDAT`, indexed-palette, and transparency rules"
        },
        {
          "status": "planned",
          "text": "Apple CgBI PNG normalization if real upload fixtures justify supporting that non-standard variant"
        },
        {
          "status": "supported",
          "text": "Grayscale, color type 0, at 1, 2, 4, 8, and 16 bits"
        },
        {
          "status": "supported",
          "text": "Truecolor RGB, color type 2, at 8 and 16 bits"
        },
        {
          "status": "supported",
          "text": "Indexed color, color type 3, at 1, 2, 4, and 8 bits"
        },
        {
          "status": "supported",
          "text": "Grayscale with alpha, color type 4, at 8 and 16 bits"
        },
        {
          "status": "supported",
          "text": "Truecolor RGBA, color type 6, at 8 and 16 bits"
        },
        {
          "status": "supported",
          "text": "Palette lookup through `PLTE`"
        },
        {
          "status": "supported",
          "text": "Palette alpha through `tRNS`"
        },
        {
          "status": "supported",
          "text": "Grayscale and truecolor color-key transparency through `tRNS`"
        },
        {
          "status": "supported",
          "text": "Packed sub-byte sample extraction and expansion to 8-bit output"
        },
        {
          "status": "supported",
          "text": "16-bit sample normalization to the most-significant 8 bits"
        },
        {
          "status": "supported",
          "text": "Output as `gray8`, `rgb8`, or `rgba8` according to decoded alpha needs"
        },
        {
          "status": "planned",
          "text": "Exact 16-bit-per-channel pipeline output without reducing samples to 8 bits"
        },
        {
          "status": "planned",
          "text": "Optional lower-bit-depth or indexed output preservation for workflows that do not need expanded pixels"
        },
        {
          "status": "supported",
          "text": "Structural grayscale, indexed, and RGB color-family classification from the PNG color type"
        },
        {
          "status": "supported",
          "text": "Alpha-presence reporting from the color type or `tRNS`"
        },
        {
          "status": "supported",
          "text": "Embedded ICC profile (`iCCP`) parsing and color-managed conversion"
        },
        {
          "status": "supported",
          "text": "`sRGB`, `gAMA`, and `cHRM` parsing with defined color-conversion behavior"
        },
        {
          "status": "supported",
          "text": "Common full-range RGB `cICP` signaling for sRGB and Display P3"
        },
        {
          "status": "supported",
          "text": "EXIF (`eXIf`) metadata parsing for opt-in preservation and orientation handling through the public pipeline"
        },
        {
          "status": "planned",
          "text": "Physical pixel dimensions (`pHYs`)"
        },
        {
          "status": "planned",
          "text": "Text chunks (`tEXt`, `zTXt`, and `iTXt`) with decompression limits"
        },
        {
          "status": "planned",
          "text": "Significant bits (`sBIT`), suggested palettes, background color, and histogram metadata where application workflows need them"
        },
        {
          "status": "supported",
          "text": "Opt-in compatible ICC and EXIF preservation, with metadata stripped by default"
        },
        {
          "status": "supported",
          "text": "Sequential scanline decode without a source-sized RGBA bitmap"
        },
        {
          "status": "supported",
          "text": "Bounded 32-row output blocks with only the current and previous encoded scanlines retained for filtering"
        },
        {
          "status": "supported",
          "text": "Fused crop output so pixels outside the requested horizontal region are not expanded into output blocks"
        },
        {
          "status": "supported",
          "text": "Public crop, resize, PNG-to-PNG, and PNG-to-other-codec pipelines"
        },
        {
          "status": "supported",
          "text": "Declared inflated scanline-size validation before decompression"
        },
        {
          "status": "supported",
          "text": "Adam7 reconstruction that retains compact native samples only for the requested even rows instead of allocating a full source-sized RGBA frame"
        },
        {
          "status": "planned",
          "text": "Decoder-driven resize planning to avoid expanding source samples that cannot contribute to a large downscale"
        },
        {
          "status": "planned",
          "text": "Early termination after the requested bottom crop row while still defining whether remaining `IDAT` data and checksums must be validated"
        },
        {
          "status": "planned",
          "text": "Fully row-bounded Adam7 reconstruction whose retained state does not scale with the requested output height"
        },
        {
          "status": "supported",
          "text": "First-party non-interlaced PNG encoding"
        },
        {
          "status": "supported",
          "text": "8-bit grayscale output from `gray8` input"
        },
        {
          "status": "supported",
          "text": "8-bit truecolor RGB output from `rgb8` input"
        },
        {
          "status": "supported",
          "text": "8-bit truecolor RGBA output from `rgba8` input"
        },
        {
          "status": "supported",
          "text": "Exact alpha preservation"
        },
        {
          "status": "supported",
          "text": "Zlib compression levels 0-9"
        },
        {
          "status": "supported",
          "text": "Adaptive per-row selection across filters 0-4 when compression is enabled"
        },
        {
          "status": "supported",
          "text": "Filter-0 output when compression level is 0"
        },
        {
          "status": "supported",
          "text": "Streaming, top-to-bottom `IDAT` output without a full-frame staging buffer"
        },
        {
          "status": "supported",
          "text": "CRC generation for every emitted chunk"
        },
        {
          "status": "supported",
          "text": "Public `image.png()` and `image.encode('png')` APIs"
        },
        {
          "status": "supported",
          "text": "Buffer and file sinks with cleanup of failed file output"
        },
        {
          "status": "planned",
          "text": "Indexed palette output with deterministic color quantization"
        },
        {
          "status": "planned",
          "text": "1-, 2-, and 4-bit grayscale or indexed output when the source permits it"
        },
        {
          "status": "planned",
          "text": "16-bit grayscale, RGB, grayscale-alpha, and RGBA output"
        },
        {
          "status": "planned",
          "text": "Grayscale-alpha output without expanding grayscale to RGBA"
        },
        {
          "status": "planned",
          "text": "Adam7 interlaced output"
        },
        {
          "status": "planned",
          "text": "APNG encoding"
        },
        {
          "status": "planned",
          "text": "Configurable filter selection or filter strategy in addition to the current adaptive heuristic"
        },
        {
          "status": "planned",
          "text": "Additional Deflate strategy and memory controls where they improve Lambda peak RSS or output size"
        },
        {
          "status": "supported",
          "text": "Compatible ICC and EXIF metadata writing when explicitly preserved"
        },
        {
          "status": "planned",
          "text": "sRGB, gamma, chromaticity, physical-dimension, and text metadata writing"
        },
        {
          "status": "supported",
          "text": "Explicit control over ICC and EXIF stripping versus preservation"
        },
        {
          "status": "supported",
          "text": "Validate dimensions, color-type/bit-depth combinations, chunk extents, palette bounds, transparency lengths, filter values, and decoded row counts"
        },
        {
          "status": "supported",
          "text": "Apply configurable input-size, dimension, pixel-count, frame-count, and decoded-byte limits before large allocations"
        },
        {
          "status": "supported",
          "text": "Bound palette and chunk counts and reject truncated or extra scanlines"
        },
        {
          "status": "supported",
          "text": "Verify representative RGBA round trips against an independent PNG decoder"
        },
        {
          "status": "supported",
          "text": "Verify an indexed 8-bit PNG and a 16-bit grayscale PNG against an independent PNG decoder"
        },
        {
          "status": "supported",
          "text": "Verify exact crop pixels and alpha preservation"
        },
        {
          "status": "supported",
          "text": "Verify adaptive filtering reduces representative smooth-image output size"
        },
        {
          "status": "supported",
          "text": "Benchmark large, transparent, indexed, cropped, resized, high-entropy, and 100-megapixel production-style workflows in isolated processes"
        },
        {
          "status": "supported",
          "text": "Add pinned deterministic fixtures for every legal non-interlaced color-type and bit-depth combination, every filter, multiple `IDAT` layouts, and each `tRNS` form"
        },
        {
          "status": "supported",
          "text": "Add a pinned deterministic Adam7 compatibility corpus covering every legal color-type and bit-depth combination, crop behavior, and small-image pass edges"
        },
        {
          "status": "planned",
          "text": "Add APNG fixtures covering default-image rules, frame rectangles, delay denominators, disposal operations, and blend operations"
        },
        {
          "status": "supported",
          "text": "Add focused malformed fixtures for CRC failures, duplicate and misplaced chunks and non-consecutive `IDAT`; bytes after the complete `IEND` datastream are ignored for compatibility with padded or concatenated real-world files"
        },
        {
          "status": "supported",
          "text": "Keep opt-in scalar and SIMD Rust/WASM non-interlaced 8-bit decoding at exact pixel parity for trailing `IEND` data, full-range `cICP`, and ICC v4 RGB `mAB`, with bounded TypeScript fallback after setup or midstream accelerator failures"
        },
        {
          "status": "planned",
          "text": "Add malformed chunk-order, CRC, Deflate, palette, transparency, and decompression-bomb fuzzing with strict allocation limits"
        }
      ]
    },
    {
      "id": "webp",
      "name": "WebP",
      "experimental": false,
      "packageFormat": "webp",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Static images only; compressed RIFF input and compact VP8L transform maps remain source-sized",
      "description": "Decodes static VP8 lossy, VP8L lossless, extended alpha, and odd RIFF padding. Encodes first-party static lossy, exact lossless, or near-lossless WebP with effort-based size optimization plus opt-in EXIF and compatible ICC preservation. Animation is detected and rejected for pixel decode.",
      "memory": "VP8 uses two macroblock rows; VP8L uses a fixed maximum 4 MiB entropy history plus scanline transform buffers. Decode still retains compressed input and compact transform maps. Lossless encode retains one 32-bit transformed frame, a fixed maximum 4 MiB match table, and one encoded payload.",
      "recommendation": "Use lossless WebP for graphics, interface captures, screenshots, and other repeated structure; use lossy WebP for photographs, or PNG when exact lossless photographic preservation is required. Compare sizes for the actual source because lossless WebP can be larger than PNG on photographic content. Use effort 0 for faster lossless encoding or effort 6 for the smallest output.",
      "evidence": [
        "tests/webp.test.ts",
        "tests/metadata-preservation.test.ts",
        "tests/lossy-codec-quality.test.ts",
        "tests/imazen-corpus-harness.test.ts"
      ],
      "lossyPixelValidation": {
        "status": "independent-oracle",
        "oracle": "Sharp 0.35.3 with libwebp",
        "tolerance": "Lossy decode RGB PSNR above 39 dB versus the independent libwebp output",
        "evidence": ["tests/lossy-codec-quality.test.ts"]
      },
      "claims": [
        {
          "status": "supported",
          "text": "RIFF `WEBP` detection and bounded chunk-extent parsing"
        },
        {
          "status": "supported",
          "text": "Simple lossy WebP with a `VP8 ` image chunk"
        },
        {
          "status": "supported",
          "text": "Simple lossless WebP with a `VP8L` image chunk"
        },
        {
          "status": "supported",
          "text": "Extended static WebP with a `VP8X` canvas"
        },
        {
          "status": "supported",
          "text": "Extended lossy WebP with a separate `ALPH` chunk"
        },
        {
          "status": "supported",
          "text": "RIFF odd-length chunk padding"
        },
        {
          "status": "supported",
          "text": "Canvas dimensions and alpha-presence metadata"
        },
        {
          "status": "supported",
          "text": "Animated-image detection and `ANMF` frame counting"
        },
        {
          "status": "supported",
          "text": "Explicit rejection of animated WebP pixel decode"
        },
        {
          "status": "planned",
          "text": "Animated WebP frame parsing, timing, blending, disposal, and canvas composition"
        },
        {
          "status": "planned",
          "text": "Complete `VP8X` reserved-bit, feature-flag, chunk-order, uniqueness, and chunk-dependency validation"
        },
        {
          "status": "planned",
          "text": "Incremental RIFF parsing; metadata and pixel decode currently retain the complete compressed WebP input"
        },
        {
          "status": "supported",
          "text": "8-bit ARGB lossless pixel reconstruction"
        },
        {
          "status": "supported",
          "text": "Normal and simple Huffman code representations"
        },
        {
          "status": "supported",
          "text": "Literal pixels"
        },
        {
          "status": "supported",
          "text": "LZ77 backward references and two-dimensional distance mapping"
        },
        {
          "status": "supported",
          "text": "Color caches"
        },
        {
          "status": "supported",
          "text": "Spatially varying Huffman entropy groups"
        },
        {
          "status": "supported",
          "text": "Predictor transform"
        },
        {
          "status": "supported",
          "text": "Color transform"
        },
        {
          "status": "supported",
          "text": "Subtract-green transform"
        },
        {
          "status": "supported",
          "text": "Color-indexing transform and packed palette indices"
        },
        {
          "status": "supported",
          "text": "Exact alpha reconstruction"
        },
        {
          "status": "supported",
          "text": "Bounded-row or tiled lossless reconstruction without retaining a full 32-bit source pixel plane"
        },
        {
          "status": "supported",
          "text": "Avoid duplicate full-frame storage while reversing color-indexing and other transforms"
        },
        {
          "status": "supported",
          "text": "Intra-coded VP8 key frames, bitstream versions 0-3"
        },
        {
          "status": "supported",
          "text": "Boolean entropy decoding and updated coefficient probabilities"
        },
        {
          "status": "supported",
          "text": "Segmentation maps, segment quantizers, and segment filter levels"
        },
        {
          "status": "supported",
          "text": "One, two, four, and eight coefficient token partitions"
        },
        {
          "status": "supported",
          "text": "Macroblock and 4x4 luma intra prediction modes"
        },
        {
          "status": "supported",
          "text": "Chroma intra prediction"
        },
        {
          "status": "supported",
          "text": "Skip signaling, coefficient token decoding, dequantization, and inverse transforms"
        },
        {
          "status": "supported",
          "text": "Normal and simple in-loop deblocking filters, including sharpness and reference/mode deltas"
        },
        {
          "status": "supported",
          "text": "YUV 4:2:0 to 8-bit RGB conversion"
        },
        {
          "status": "supported",
          "text": "Raw extended alpha"
        },
        {
          "status": "supported",
          "text": "VP8L-compressed extended alpha"
        },
        {
          "status": "supported",
          "text": "None, horizontal, vertical, and gradient alpha filtering"
        },
        {
          "status": "supported",
          "text": "Bounded macroblock-row VP8 reconstruction without full Y, U, V, and RGBA frame allocations"
        },
        {
          "status": "planned",
          "text": "Crop- and resize-aware reconstruction that avoids RGB conversion for pixels which cannot contribute to the output"
        },
        {
          "status": "planned",
          "text": "Higher-quality chroma-siting-aware upsampling instead of nearest chroma sample selection"
        },
        {
          "status": "supported",
          "text": "Alpha-plane reconstruction in bounded rows"
        },
        {
          "status": "supported",
          "text": "Static image width, height, alpha, bit-depth, and frame-count reporting"
        },
        {
          "status": "supported",
          "text": "Opaque, binary-alpha, and partial-alpha output through `rgba8`"
        },
        {
          "status": "supported",
          "text": "Embedded ICC profile (`ICCP`) parsing and color-managed conversion"
        },
        {
          "status": "supported",
          "text": "EXIF metadata parsing for opt-in preservation and orientation handling through the public pipeline"
        },
        {
          "status": "planned",
          "text": "XMP metadata parsing"
        },
        {
          "status": "supported",
          "text": "Opt-in compatible ICC and EXIF preservation, with metadata stripped by default"
        },
        {
          "status": "supported",
          "text": "Region selection while decoded rows advance"
        },
        {
          "status": "supported",
          "text": "Bounded `rgba8` output blocks during VP8 and VP8L reconstruction"
        },
        {
          "status": "supported",
          "text": "Public crop, resize, WebP-to-WebP, and WebP-to-other-codec pipelines"
        },
        {
          "status": "planned",
          "text": "True region decode rather than cropping a fully reconstructed source frame"
        },
        {
          "status": "planned",
          "text": "Decoder-driven scaled output for large downscales"
        },
        {
          "status": "supported",
          "text": "First-party static VP8L encoding"
        },
        {
          "status": "supported",
          "text": "Exact 8-bit RGB and alpha preservation"
        },
        {
          "status": "supported",
          "text": "`gray8`, `rgb8`, and `rgba8` pipeline input"
        },
        {
          "status": "supported",
          "text": "Ordered pixel input staged in one 32-bit transformed frame with two predictor rows; the encoded payload is buffered so the RIFF length is known before output begins"
        },
        {
          "status": "supported",
          "text": "Block-adaptive predictor transform across all 14 VP8L modes with VP8L-specified top-row, left-column, and right-edge behavior"
        },
        {
          "status": "supported",
          "text": "Subtract-green transform"
        },
        {
          "status": "supported",
          "text": "LZ77 backward references with adjacent-pixel, previous-row, and 16 recent hash-bucket match candidates plus two-dimensional VP8L distance coding"
        },
        {
          "status": "supported",
          "text": "Adaptive 8-to-10-bit color-cache emission for repeated transformed colors"
        },
        {
          "status": "supported",
          "text": "Per-image adaptive canonical Huffman trees with a complete-tree fallback"
        },
        {
          "status": "supported",
          "text": "Spatially varying Huffman entropy groups"
        },
        {
          "status": "supported",
          "text": "Cross-color and packed color-indexing transform selection"
        },
        {
          "status": "supported",
          "text": "Compression `effort` control from 0 through 6"
        },
        {
          "status": "supported",
          "text": "Near-lossless preprocessing through `nearLossless` quality from 0 through 100"
        },
        {
          "status": "supported",
          "text": "Output below PureJsImage PNG across the pinned deterministic graphic, JPEG-decoded, and production-style transparent logo fixtures"
        },
        {
          "status": "supported",
          "text": "Public `image.webp({ lossless: true })` and `image.encode('webp', { lossless: true })` APIs"
        },
        {
          "status": "supported",
          "text": "First-party static intra-only VP8 encoding"
        },
        {
          "status": "supported",
          "text": "Quality control from 1-100"
        },
        {
          "status": "supported",
          "text": "YUV 4:2:0 output"
        },
        {
          "status": "supported",
          "text": "`gray8`, `rgb8`, and `rgba8` pipeline input"
        },
        {
          "status": "supported",
          "text": "Exact alpha preservation through an uncompressed `ALPH` chunk when needed"
        },
        {
          "status": "supported",
          "text": "4x4 luma and 8x8 chroma DC prediction"
        },
        {
          "status": "supported",
          "text": "Forward transforms, quantization, coefficient coding, and standard coefficient probabilities"
        },
        {
          "status": "supported",
          "text": "Public `image.webp()` and `image.encode('webp')` APIs"
        },
        {
          "status": "planned",
          "text": "Bounded macroblock-row encoding; the current encoder retains full Y, U, V, optional alpha, reconstruction, and output buffers"
        },
        {
          "status": "planned",
          "text": "Rate-distortion-driven luma and chroma prediction-mode selection"
        },
        {
          "status": "planned",
          "text": "16x16 luma prediction and Walsh-Hadamard Y2 coding where beneficial"
        },
        {
          "status": "planned",
          "text": "Adaptive coefficient probabilities and optimized token partitions"
        },
        {
          "status": "planned",
          "text": "Segmentation, skip decisions, and per-segment quantization"
        },
        {
          "status": "planned",
          "text": "Normal or simple loop-filter selection and tuning"
        },
        {
          "status": "planned",
          "text": "Compressed and filtered `ALPH` output"
        },
        {
          "status": "planned",
          "text": "Better quality-to-quantizer mapping and compression-effort controls"
        },
        {
          "status": "planned",
          "text": "Output-size targeting and perceptual quality tuning"
        },
        {
          "status": "planned",
          "text": "Animated WebP encoding"
        },
        {
          "status": "supported",
          "text": "ICC and EXIF writing when explicitly preserved"
        },
        {
          "status": "planned",
          "text": "XMP writing or preservation"
        },
        {
          "status": "supported",
          "text": "Explicit control over ICC and EXIF stripping versus preservation"
        },
        {
          "status": "supported",
          "text": "Validate RIFF and chunk extents, VP8/VP8L dimensions, lossless transform structure, Huffman trees, references, partitions, and entropy reads"
        },
        {
          "status": "supported",
          "text": "Apply configurable input-size, dimension, pixel-count, frame-count, and decoded-byte limits before decoding"
        },
        {
          "status": "supported",
          "text": "Reject truncated files, unsupported animations, VP8 interframes, reserved color-space modes, and unsupported alpha compression explicitly"
        },
        {
          "status": "supported",
          "text": "Verify six independently encoded, checksum-pinned static fixtures from the official WebP galleries and Wikimedia Commons"
        },
        {
          "status": "supported",
          "text": "Check exact lossless reference pixels and tolerance-bounded lossy reference pixels"
        },
        {
          "status": "supported",
          "text": "Cover odd dimensions, transparent lossless graphics, lossy photographs, and compressed lossy alpha in the permanent benchmark profile"
        },
        {
          "status": "supported",
          "text": "Benchmark metadata, decode, conversion, crop, resize, lossy encode, and lossless encode in isolated processes"
        },
        {
          "status": "supported",
          "text": "Gate VP8 and VP8L decode memory with reproducible 4000x3000 pressure fixtures and oracle-derived output samples"
        },
        {
          "status": "supported",
          "text": "Gate lossy decode against a pinned libwebp encode and gate lossy encode through an independent libwebp decode with PSNR floors in the focused test suite"
        },
        {
          "status": "supported",
          "text": "Decode benchmark WebP output in a separate libwebp-backed oracle process and require pinned pixels before accepting a timing"
        },
        {
          "status": "supported",
          "text": "Decode lossless encoder output through pinned Sharp/libwebp and require exact RGBA pixels, including deterministic high-entropy and graphic fixtures"
        },
        {
          "status": "supported",
          "text": "Require pinned deterministic PNG and JPEG-decoded benchmark fixtures to remain smaller as lossless WebP than as PureJsImage PNG, and record the pinned production-style logo result alongside libwebp in an isolated size and peak-RSS"
        },
        {
          "status": "supported",
          "text": "Document and benchmark the lossless encoder's source-sized 32-bit transformed frame and potentially source-sized buffered payload"
        },
        {
          "status": "planned",
          "text": "Account for cumulative VP8/VP8L planes, transforms, alpha, and output in a dedicated working-memory limit; the general decoded-byte limit does not yet represent every simultaneous allocation"
        },
        {
          "status": "planned",
          "text": "Expand the pinned corpus across independent libwebp versions, browsers, graphics tools, and real upload sources"
        },
        {
          "status": "supported",
          "text": "Cover ICC and EXIF preservation with focused round-trip fixtures"
        },
        {
          "status": "planned",
          "text": "Add animated, XMP, unusual partition, alpha-preprocessing, and transform-stress fixtures as those capabilities are implemented"
        },
        {
          "status": "planned",
          "text": "Add malformed RIFF, chunk, Huffman, LZ77, VP8 partition, coefficient, and decompression-bomb fuzzing with strict allocation limits"
        },
        {
          "status": "supported",
          "text": "Complete the 225-file Imazen WebP corpus decode-to-PNG baseline with 223 successful static decodes and two structured animated-input rejections"
        }
      ]
    },
    {
      "id": "bmp",
      "name": "BMP",
      "experimental": false,
      "packageFormat": "bmp",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Common Windows and OS/2 raster subsets; no embedded JPEG or PNG",
      "description": "Decodes common Windows and OS/2 headers, indexed 1/4/8-bit pixels, RLE4/RLE8, RGB555/RGB565, top-down images, bitfields, and explicit alpha. Encodes 24-bit RGB and 32-bit RGBA BMP.",
      "memory": "Region-based row reads; RLE uses compact full-frame index storage",
      "recommendation": "Legacy Windows bitmap interoperability.",
      "evidence": [
        "tests/bmp.test.ts",
        "browser-tests/compatibility.pw.ts",
        "tests/imazen-corpus-harness.test.ts"
      ],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "The implemented BMP paths are uncompressed or losslessly compressed"
      },
      "claims": [
        {
          "status": "supported",
          "text": "Windows bitmap files with the `BM` signature"
        },
        {
          "status": "supported",
          "text": "OS/2 1.x / Windows 2 `BITMAPCOREHEADER` (12 bytes)"
        },
        {
          "status": "supported",
          "text": "Windows `BITMAPINFOHEADER` (40 bytes)"
        },
        {
          "status": "supported",
          "text": "52-byte and 56-byte bitfield headers"
        },
        {
          "status": "supported",
          "text": "OS/2 2.x 64-byte DIB headers"
        },
        {
          "status": "supported",
          "text": "Windows `BITMAPV4HEADER` (108 bytes)"
        },
        {
          "status": "supported",
          "text": "Windows `BITMAPV5HEADER` (124 bytes)"
        },
        {
          "status": "supported",
          "text": "Header-only width, height, bit depth, and explicit-alpha inspection"
        },
        {
          "status": "supported",
          "text": "Bottom-up and top-down row order"
        },
        {
          "status": "supported",
          "text": "Four-byte row alignment and odd-width row padding"
        },
        {
          "status": "planned",
          "text": "Bitmap-array, color-icon, color-pointer, and other non-`BM` OS/2 file signatures"
        },
        {
          "status": "planned",
          "text": "Standalone DIB pixel data without a 14-byte bitmap file header"
        },
        {
          "status": "planned",
          "text": "Embedded or linked V5 color-profile validation and exposure"
        },
        {
          "status": "supported",
          "text": "1-bit indexed pixels"
        },
        {
          "status": "supported",
          "text": "4-bit indexed pixels"
        },
        {
          "status": "supported",
          "text": "8-bit indexed pixels"
        },
        {
          "status": "supported",
          "text": "OS/2 three-byte BGR palette entries"
        },
        {
          "status": "supported",
          "text": "Windows four-byte BGR palette entries"
        },
        {
          "status": "supported",
          "text": "Palette sizes smaller than the bit-depth maximum through `biClrUsed`"
        },
        {
          "status": "supported",
          "text": "Uncompressed 16-bit RGB555"
        },
        {
          "status": "supported",
          "text": "Uncompressed 24-bit BGR"
        },
        {
          "status": "supported",
          "text": "Uncompressed 32-bit BGRX treated as opaque"
        },
        {
          "status": "supported",
          "text": "16-bit and 32-bit `BI_BITFIELDS`"
        },
        {
          "status": "supported",
          "text": "16-bit and 32-bit `BI_ALPHABITFIELDS`"
        },
        {
          "status": "supported",
          "text": "RGB555, RGB565, reordered channels, and other non-overlapping contiguous channel masks with full-range 8-bit scaling"
        },
        {
          "status": "supported",
          "text": "Embedded RGB masks from V2/V3/V4/V5 headers and explicit alpha masks from V3/V4/V5 headers or appended mask blocks"
        },
        {
          "status": "planned",
          "text": "2-bit indexed OS/2 pixels"
        },
        {
          "status": "planned",
          "text": "Non-contiguous channel masks if compatible real-world files require them"
        },
        {
          "status": "planned",
          "text": "Producer-specific alpha in 32-bit `BI_RGB` files without an explicit alpha mask"
        },
        {
          "status": "planned",
          "text": "High-dynamic-range or scRGB BMP variants"
        },
        {
          "status": "supported",
          "text": "Uncompressed `BI_RGB`"
        },
        {
          "status": "supported",
          "text": "`BI_RLE4` encoded runs"
        },
        {
          "status": "supported",
          "text": "`BI_RLE4` absolute runs and word padding"
        },
        {
          "status": "supported",
          "text": "`BI_RLE8` encoded runs"
        },
        {
          "status": "supported",
          "text": "`BI_RLE8` absolute runs and word padding"
        },
        {
          "status": "supported",
          "text": "RLE end-of-line, end-of-bitmap, and delta commands"
        },
        {
          "status": "supported",
          "text": "`BI_BITFIELDS`"
        },
        {
          "status": "supported",
          "text": "`BI_ALPHABITFIELDS`"
        },
        {
          "status": "planned",
          "text": "Embedded `BI_JPEG`"
        },
        {
          "status": "planned",
          "text": "Embedded `BI_PNG`"
        },
        {
          "status": "planned",
          "text": "`BI_CMYK`, `BI_CMYKRLE4`, and `BI_CMYKRLE8`"
        },
        {
          "status": "supported",
          "text": "Structural indexed or RGB pixel conversion to `rgb8`"
        },
        {
          "status": "supported",
          "text": "Explicit masked-alpha conversion to `rgba8`"
        },
        {
          "status": "planned",
          "text": "Calibrated RGB endpoints and gamma from V4/V5 headers"
        },
        {
          "status": "planned",
          "text": "Embedded ICC profile conversion to sRGB"
        },
        {
          "status": "planned",
          "text": "Rendering intent, resolution, palette importance, and application metadata exposure"
        },
        {
          "status": "planned",
          "text": "Metadata preservation or explicit stripping controls when re-encoding"
        },
        {
          "status": "supported",
          "text": "Direct region reads for uncompressed and bitfield images"
        },
        {
          "status": "supported",
          "text": "Bounded 32-row decode blocks without a source-sized RGB or RGBA bitmap for uncompressed and bitfield images"
        },
        {
          "status": "supported",
          "text": "Horizontal crop conversion without materializing pixels outside the requested output region"
        },
        {
          "status": "supported",
          "text": "Direct seeking to requested top-down or bottom-up source rows"
        },
        {
          "status": "supported",
          "text": "Public crop, resize, BMP-to-BMP, and BMP-to-other-codec pipelines"
        },
        {
          "status": "supported",
          "text": "Explicit RLE fallback that retains one byte of palette index data per source pixel to reorder the bottom-up command stream"
        },
        {
          "status": "planned",
          "text": "Bounded RLE row reconstruction or a disk-backed fallback that avoids a source-sized index plane"
        },
        {
          "status": "planned",
          "text": "Decoder-driven scaled output for large downscales"
        },
        {
          "status": "supported",
          "text": "First-party Windows BMP encoding"
        },
        {
          "status": "supported",
          "text": "Top-down output for streaming row order"
        },
        {
          "status": "supported",
          "text": "Uncompressed 24-bit `BI_RGB` with a 40-byte `BITMAPINFOHEADER`"
        },
        {
          "status": "supported",
          "text": "Uncompressed 32-bit `BI_BITFIELDS` with a 108-byte `BITMAPV4HEADER`"
        },
        {
          "status": "supported",
          "text": "Explicit RGBA masks and sRGB color-space declaration for alpha output"
        },
        {
          "status": "supported",
          "text": "Correct four-byte row padding"
        },
        {
          "status": "supported",
          "text": "`gray8`, `rgb8`, and `rgba8` pipeline input"
        },
        {
          "status": "supported",
          "text": "Automatic alpha output for `rgba8` input unless `alpha: false` is requested"
        },
        {
          "status": "supported",
          "text": "Opaque alpha insertion when 32-bit output is requested from gray or RGB input"
        },
        {
          "status": "supported",
          "text": "Streaming, top-to-bottom output with a single encoded-row buffer"
        },
        {
          "status": "supported",
          "text": "Public `image.bmp()` and `image.encode('bmp')` APIs"
        },
        {
          "status": "planned",
          "text": "Indexed 1-, 4-, and 8-bit output with deterministic palette generation"
        },
        {
          "status": "planned",
          "text": "RLE4 and RLE8 output"
        },
        {
          "status": "planned",
          "text": "16-bit RGB555 and RGB565 output"
        },
        {
          "status": "planned",
          "text": "Configurable 24-bit versus 32-bit output independent of source pixel type"
        },
        {
          "status": "planned",
          "text": "Configurable bottom-up output for consumers that reject negative heights"
        },
        {
          "status": "planned",
          "text": "Explicit alpha-discard versus background-compositing behavior when writing opaque BMP from RGBA input"
        },
        {
          "status": "planned",
          "text": "Configurable resolution instead of the current fixed 2835 pixels per metre"
        },
        {
          "status": "planned",
          "text": "V5 ICC profile, rendering intent, and color metadata writing or preservation"
        },
        {
          "status": "planned",
          "text": "OS/2 BMP and standalone DIB output if required by real consumers"
        },
        {
          "status": "planned",
          "text": "Validate output-size arithmetic and reject files that exceed BMP's 32-bit offsets or file-size fields"
        },
        {
          "status": "supported",
          "text": "Validate the declared file size does not exceed the input or precede the pixels, plus pixel offset, DIB size, dimensions, plane count, bit-depth/compression combinations, row extents, and palette bounds"
        },
        {
          "status": "supported",
          "text": "Validate channel masks are non-empty, contiguous, and non-overlapping"
        },
        {
          "status": "supported",
          "text": "Validate RLE commands, runs, deltas, row boundaries, padding, and the final end marker"
        },
        {
          "status": "supported",
          "text": "Apply configurable input-size, dimension, pixel-count, and decoded-byte limits before decoding"
        },
        {
          "status": "supported",
          "text": "Reject truncated pixels, invalid planes, invalid masks, and RLE overruns explicitly"
        },
        {
          "status": "supported",
          "text": "Verify 14 public-domain BMP Suite fixtures with pinned reference pixels"
        },
        {
          "status": "supported",
          "text": "Cover OS/2, Windows V3/V5, 1/4/8-bit palettes, RLE4/RLE8, top-down rows, odd-width padding, RGB555/RGB565, reordered 32-bit masks, and explicit alpha"
        },
        {
          "status": "supported",
          "text": "Round-trip encoded 24-bit and 32-bit output through the first-party decoder and verify exact pixels"
        },
        {
          "status": "supported",
          "text": "Require the benchmark's independent BMP decoder to recognize encoded output and its dimensions"
        },
        {
          "status": "supported",
          "text": "Benchmark metadata, decode, crop, resize, conversion, and encode workflows in isolated processes, including a deterministic 4000x3000 image"
        },
        {
          "status": "planned",
          "text": "Add focused fixtures for every accepted DIB header size and every RLE command boundary rather than relying on shared parser paths"
        },
        {
          "status": "planned",
          "text": "Verify encoded opaque and alpha pixels with an independent BMP decoder"
        },
        {
          "status": "supported",
          "text": "Complete the 125-file Imazen BMP corpus decode-to-PNG baseline with all supported valid files decoded and every invalid input rejected safely"
        },
        {
          "status": "planned",
          "text": "Add malformed-header, palette, mask, offset, stride, RLE, and allocation fuzzing with strict limits"
        }
      ]
    },
    {
      "id": "tiff",
      "name": "TIFF",
      "experimental": false,
      "packageFormat": "tiff",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Broad validated IFD-graph and strip/tile decode plus public TIFF document, lightweight tag metadata, native scientific-raster, explicit calibrated ordinary TIFF ScientificDocument, typed scientific GeoTIFF spatial references, a generated compression audit and public COG structural inspector, OME-TIFF, deterministic profile, whole-slide and explicit Aperio ScientificDocument access with configurable WSI limits, bounded HTTP-range access, and explicit scientific display-mapping APIs; structured strip, tile, Classic TIFF, BigTIFF, multi-page, and SubIFD-pyramid RGB/RGBA output; no implicit Z/time interpretation of ordinary pages without ImageJ or DigitalMicrograph evidence, inferred FEI field-of-view calibration without fixture proof, implicit display conversion for arbitrary scientific multiband data, general CMYK ICC profile classes, multi-area vendor slide composition, or alternate compression encode profiles",
      "description": "Decodes Classic TIFF and BigTIFF top-level frames and reduced-resolution SubIFDs across common display and scientific sample layouts. A checked compression registry distinguishes fully COG-tested paths, implemented but weakly COG-tested paths, recognized unsupported assignments, and known unimplemented assignments; unsupported compression diagnostics include the numeric ID and assigned name. Supported display compression includes first-party LERC/LERC-plus-Deflate, Zstandard, CCITT, JPEG, JPEG 2000, SGILog, and explicitly composed WebP in addition to TIFF baseline schemes, while the native raster surface is intentionally narrower. Public APIs expose bounded tag reads and payload-free tag metadata, a COG structural inspector, native-precision N-channel rasters, an explicitly registered ordinary TIFF scientific reader with compatible-page axes, incompatible series, SubIFD levels, bounded selected metadata, standard TIFF, ImageJ, DigitalMicrograph, FEI SFEG/Helios, or Zeiss SEM calibration evidence, and typed GeoTIFF CRS, affine, inverse, bounds, raster interpretation, nodata, and JSON-safe source metadata while keeping reads in raster pixel coordinates. OME Z/C/T planes, deterministic vendor profiles, whole-slide region access, an explicitly registered configurable Aperio scientific-document reader, validator-protected HTTP range reads, and explicit range/scale/palette mapping of scientific planes to display pixels remain separate public paths. Structured document encoding writes Deflate-predicted RGB/RGBA strips or tiles as Classic TIFF or BigTIFF, including top-level pages and reduced-resolution SubIFD pyramids.",
      "memory": "Selected-frame, ordinary TIFF scientific-dataset, GeoTIFF, OME plane, whole-slide region, and Aperio scientific-dataset reads remain strip- or tile-bounded; IFD traversal, profile detection, and scientific document construction do not read unselected pixel segments or complete ICC payloads merely to enumerate metadata. The ordinary reader admits selected optional tag values under aggregate and per-tag byte limits and records oversized or unreadable optional metadata without blocking pixels. TIFF document options independently bound physical segment count, the raw-plus-converted segment-table construction peak, and each encoded segment before the corresponding payload read. Aperio readers use explicit source, dimension, directory, region-pixel, decoded-byte, and associated-image limits while allowing large lazy sources, and tiled regions decode sequential native-tile intersections. Direct TIFF display and raster reads preflight the aggregate live decoded segments, largest intersecting encoded segment, largest output block, and predictor scratch before segment payload reads. HTTP range reads use a bounded deduplicating LRU cache and reject resource changes. LERC, Zstandard, bit-order normalization, color conversion, prediction, raster/display output, and embedded codec pixels are bounded to the current metadata table or admitted segment set and emitted in bounded rows. JPEG 2000 reconstructs complete component state only for the current TIFF segment, not the source slide. Encoding retains compressed segment payloads until their offsets are known but never stages a full uncompressed frame.",
      "recommendation": "Broad display-image input compatibility, native ordinary scientific and GeoTIFF raster access, validated OME and whole-slide pyramids, explicit Aperio scientific documents, structurally inspected and deterministic-corpus-tested selective remote COG reads, explicit frame/pyramid selection, and structured Deflate RGB/RGBA strip, tile, BigTIFF, multi-page, and SubIFD-pyramid output.",
      "evidence": [
        "tests/tiff.test.ts",
        "tests/tiff-lerc.test.ts",
        "tests/zstd.test.ts",
        "tests/source-contract.test.ts",
        "tests/external-tiff-profile.test.ts",
        "browser-tests/compatibility.pw.ts",
        "tests/metadata-preservation.test.ts",
        "tests/imazen-corpus-harness.test.ts",
        "tests/tiff-competitor-harness.test.ts",
        "tests/scientific-render.test.ts",
        "tests/scientific-tiff-reader.test.ts",
        "tests/scientific-tiff-jpeg.test.ts",
        "tests/tiff-cog.test.ts",
        "tests/tiff-cog-benchmark.test.ts",
        "tests/scientific-aperio-reader.test.ts",
        "tests/scientific-whole-slide-bridge.test.ts"
      ],
      "lossyPixelValidation": {
        "status": "independent-oracle",
        "oracle": "ImageMagick 7.1.2 with LibTIFF 4.7, tifffile with imagecodecs, libwebp, and OpenSlide 3.4.1",
        "tolerance": "16-bit indexed color, packed, FillOrder 2, unsigned 24-/32-bit display, floating-point display, numeric CMYK display, CMYK-alpha, CIELab, SGILog24/32 color, Zstandard-compressed samples, lossless WebP paths, OME native planes, and canonical TIFF-encoded RGB/RGBA reopened through independent tools are exact; the CMYK lut16 ICC path differs by at most one 8-bit code value from ImageMagick/LittleCMS for its pinned fixture; LogL CIE Y reconstruction and unsigned 64-bit and signed samples are exact at native precision in pinned fixtures; the pinned irreversible Aperio JPEG 2000 tile differs from OpenSlide by at most two 8-bit code values across 54 of 196,608 channels; explicitly composed lossy WebP inherits the WebP codec's independently validated PSNR threshold",
        "evidence": [
          "tests/tiff.test.ts",
          "tests/jpeg2000.test.ts",
          "tests/lossy-codec-quality.test.ts"
        ]
      },
      "claims": [
        {
          "status": "supported",
          "text": "Classic TIFF 6.0 files with 32-bit offsets"
        },
        {
          "status": "supported",
          "text": "Little-endian (`II`) and big-endian (`MM`) byte order"
        },
        {
          "status": "supported",
          "text": "Explicit top-level frame selection, defaulting to the first image"
        },
        {
          "status": "supported",
          "text": "Frame counting through the top-level IFD chain"
        },
        {
          "status": "supported",
          "text": "Strip-based images"
        },
        {
          "status": "supported",
          "text": "Chunky pixel layout (`PlanarConfiguration=1`)"
        },
        {
          "status": "supported",
          "text": "Planar pixel layout (`PlanarConfiguration=2`)"
        },
        {
          "status": "supported",
          "text": "Region decode without materializing a full RGBA source image"
        },
        {
          "status": "supported",
          "text": "Orientation metadata (`Orientation` values 1-8)"
        },
        {
          "status": "supported",
          "text": "Tiled images, including padded edges and legacy tile tables stored in strip tags"
        },
        {
          "status": "supported",
          "text": "BigTIFF with validated 64-bit IFDs, counts, values, and offsets"
        },
        {
          "status": "supported",
          "text": "Classic TIFF and BigTIFF SubIFD traversal with cycle, offset, and global directory-count validation plus alias-safe shared-directory reuse"
        },
        {
          "status": "supported",
          "text": "Reduced-resolution pyramid selection through `resolutionLevel`, including nested and chained SubIFDs"
        },
        {
          "status": "supported",
          "text": "Bounded validator-protected HTTP range input with request deduplication, an LRU byte cap, and selective COG-style tile reads"
        },
        {
          "status": "supported",
          "text": "Public bounded COG structural inspection reporting TIFF/BigTIFF, IFD/SubIFD layout, overview and tile dimensions, compression and sample layout, and likely remote-read issues"
        },
        {
          "status": "supported",
          "text": "Public `openTiffDocument()` entry with stable top-level and SubIFD directory objects"
        },
        {
          "status": "supported",
          "text": "Bounded typed `getTag()` reads, payload-free `getTagInfo()` metadata, plus per-directory display and native raster decoders"
        },
        {
          "status": "supported",
          "text": "Configurable physical-segment count, segment-table construction-peak, and per-segment encoded-byte limits rejected before oversized payload reads"
        },
        {
          "status": "supported",
          "text": "Native-precision planar or interleaved N-channel `RasterBlock` output without implicit RGB conversion"
        },
        {
          "status": "supported",
          "text": "Explicit ordinary TIFF `ScientificDocument` reader with native precision/components, contiguous compatible-page series, labeled page axes, SubIFD resolution levels, bounded selected metadata, identities, cancellation, and region reads"
        },
        {
          "status": "supported",
          "text": "Expose GeoTIFF CRS, six-parameter affine and invertible inverse, model bounds, raster interpretation, scalar or component nodata, and JSON-safe source metadata on ordinary scientific TIFF descriptors and SubIFD levels while keeping reads in raster pixel coordinates"
        },
        {
          "status": "supported",
          "text": "Explicit `rasterToPixels()` display conversion with declared per-channel ranges"
        },
        {
          "status": "supported",
          "text": "First-party GeoTIFF model, coordinate conversion, bounding-box, GeoKey, GDAL metadata, and nodata helpers"
        },
        {
          "status": "supported",
          "text": "OME-TIFF Z/C/T datasets with validated dimension orders, channel metadata, physical pixel sizes, and explicit or implicit `TiffData` mappings"
        },
        {
          "status": "supported",
          "text": "OME reduced-resolution SubIFD plane selection and separate-channel plane assembly"
        },
        {
          "status": "supported",
          "text": "Explicit bounded scientific plane display mapping with declared or sampled ranges, scales, palettes, and optional scalar-surface relief"
        },
        {
          "status": "supported",
          "text": "Deterministic TIFF profile registry with detector-failure isolation and equal-priority ambiguity rejection"
        },
        {
          "status": "supported",
          "text": "First-party standard TIFF, ImageJ, DigitalMicrograph, FEI SFEG/Helios, and Zeiss SEM calibration profiles with normalized origins and steps, per-axis evidence, structured spatial/intensity status, format-default resolution evidence, bounded raw metadata, normalized acquisition fields, strict private-tag detection, and non-fatal validation warnings"
        },
        {
          "status": "supported",
          "text": "Generic bounded `WholeSlideImage` levels, region reads, associated images, and physical metadata"
        },
        {
          "status": "supported",
          "text": "First-party Aperio SVS pyramid, associated-image, MPP, objective, and JPEG 2000 tile integration"
        },
        {
          "status": "supported",
          "text": "Explicit Aperio ScientificDocument reader with configurable large-source WSI limits, calibrated format-consistent pyramid levels, lightweight ICC presence/length metadata, distinct associated-image datasets, identities, cancellation, release forwarding, and bounded local or HTTP Range region reads"
        },
        {
          "status": "supported",
          "text": "Separately compiled Leica SCN single-area example using only published package imports"
        },
        {
          "status": "planned",
          "text": "Automatic display semantics for arbitrary scientific multiband data"
        },
        {
          "status": "planned",
          "text": "Multi-area Leica scene composition and additional vendor-specific whole-slide profiles"
        },
        {
          "status": "supported",
          "text": "1-, 2-, 4-, 6-, 8-, 10-, 12-, 14-, 16-, 24-, 32-, and 64-bit grayscale (`WhiteIsZero` and `BlackIsZero`)"
        },
        {
          "status": "supported",
          "text": "1-, 2-, 4-, 8-, and 16-bit indexed color with a TIFF color map"
        },
        {
          "status": "supported",
          "text": "2-, 4-, 8-, 10-, 12-, 14-, 16-, 24-, 32-, and 64-bit RGB"
        },
        {
          "status": "supported",
          "text": "8-bit grayscale plus alpha"
        },
        {
          "status": "supported",
          "text": "8-bit RGBA"
        },
        {
          "status": "supported",
          "text": "Associated and unassociated alpha samples"
        },
        {
          "status": "supported",
          "text": "16-bit grayscale-alpha and RGBA"
        },
        {
          "status": "supported",
          "text": "Unsigned four-component CMYK / `Separated`, including `DotRange`"
        },
        {
          "status": "supported",
          "text": "Five-sample unsigned CMYK plus associated or unassociated alpha"
        },
        {
          "status": "supported",
          "text": "Chunky subsampled YCbCr and planar 1x1 YCbCr"
        },
        {
          "status": "supported",
          "text": "8-/16-bit RGB, indexed, and JPEG-backed ICC-profile color conversion"
        },
        {
          "status": "supported",
          "text": "Signed 8- and 16-bit grayscale and RGB with raw numeric preservation"
        },
        {
          "status": "supported",
          "text": "IEEE float16, float32, and float64 grayscale and RGB with raw numeric preservation"
        },
        {
          "status": "supported",
          "text": "Signed 8-/16-bit and float16/float32/float64 CMYK with deterministic display-range normalization and direct RGB output"
        },
        {
          "status": "supported",
          "text": "Unsigned 24-/32-bit samples preserved in `gray32` / `rgb32` blocks and unsigned 64-bit samples preserved in `gray64` / `rgb64` blocks"
        },
        {
          "status": "supported",
          "text": "Deterministic display conversion using `SMinSampleValue` / `SMaxSampleValue` or documented full-type defaults without an 8-/16-bit raw intermediate"
        },
        {
          "status": "supported",
          "text": "SGILog luminance reconstructed in native `yf32` CIE Y blocks with deterministic gamma-2 display conversion"
        },
        {
          "status": "supported",
          "text": "SGILog24 and SGILog32 color reconstructed in native `xyzf32` CIE XYZ blocks with CCIR 709 display conversion"
        },
        {
          "status": "supported",
          "text": "TIFF 6 8-bit CIELab L* and L*a*b* display conversion from D65 to sRGB with unassociated alpha"
        },
        {
          "status": "supported",
          "text": "Embedded CMYK lut16 A2B0 ICC-profile conversion with profile precedence over numeric CMYK display"
        },
        {
          "status": "supported",
          "text": "Uncompressed strips"
        },
        {
          "status": "supported",
          "text": "PackBits"
        },
        {
          "status": "supported",
          "text": "LZW with standard MSB/early-change and legacy LSB/late-change code packing, including bounded final-strip padding"
        },
        {
          "status": "supported",
          "text": "Deflate / Adobe Deflate"
        },
        {
          "status": "supported",
          "text": "CCITT Group 4 (`T6`) bilevel fax, including multi-strip and `FillOrder=2` input"
        },
        {
          "status": "supported",
          "text": "CCITT Modified Huffman and Group 3 (`T4`) fax, including mixed 1D/2D rows and legacy 1D rows without EOL markers"
        },
        {
          "status": "supported",
          "text": "Horizontal differencing predictor for uniform 2-, 4-, 6-, 8-, 10-, 12-, 14-, 16-, 24-, 32-, and 64-bit integer or floating-point samples"
        },
        {
          "status": "supported",
          "text": "Floating-point predictor 3 byte unshuffle and accumulation for float16, float32, and float64 samples"
        },
        {
          "status": "supported",
          "text": "JPEG-in-TIFF (`Compression=7`) complete and abbreviated streams with `JPEGTables`"
        },
        {
          "status": "supported",
          "text": "Native scientific raster for JPEG-in-TIFF three-band YCbCr-converted RGB and four-band photometric RGB ExtraSamples=0, including JPEGTables, edge tiles, SubIFD overviews, region reads, and explicit unsupported photometric/planar errors"
        },
        {
          "status": "supported",
          "text": "Old-style JPEG (`Compression=6`) complete interchange streams, multi-strip scans, omitted `RowsPerStrip`, and baseline Q/DC/AC table reconstruction"
        },
        {
          "status": "supported",
          "text": "Aperio JPEG 2000 (`Compression=33003` YCbCr and `33005` MCT) tiles through the reusable codestream decoder"
        },
        {
          "status": "supported",
          "text": "WebP-in-TIFF (`Compression=50001`) through explicit `createTiffCodec({ embeddedCodecs: [webpCodec] })` composition"
        },
        {
          "status": "supported",
          "text": "SGILog (`Compression=34676`) and SGILog24 (`Compression=34677`) with bounded row RLE and exact segment sizing"
        },
        {
          "status": "supported",
          "text": "Zstandard (`Compression=50000`) through the reusable first-party bounded decompressor"
        },
        {
          "status": "supported",
          "text": "LERC and LERC plus Deflate (`Compression=34887`) with bounded first-party LERC2 decoding"
        },
        {
          "status": "supported",
          "text": "Generated compression audit distinguishing fully COG-tested, weakly COG-tested, recognized unsupported, and not-implemented assignments, with display-versus-native-raster boundaries"
        },
        {
          "status": "supported",
          "text": "Deterministic tiled Classic TIFF, BigTIFF, SubIFD, Deflate, LZW, PackBits, JPEG-in-TIFF three-band and four-band, RGB/RGBA, nodata, and rotated-affine COG fixtures"
        },
        {
          "status": "planned",
          "text": "ThunderScan and other extension compressions"
        },
        {
          "status": "supported",
          "text": "Reversed bit fill order (`FillOrder=2`) normalized per strip or tile before prediction"
        },
        {
          "status": "supported",
          "text": "Classic little-endian TIFF and BigTIFF with automatic or explicit container selection"
        },
        {
          "status": "supported",
          "text": "Chunky 8-bit RGB and RGBA with unassociated alpha metadata"
        },
        {
          "status": "supported",
          "text": "Independently Deflate-compressed strips or tiles with horizontal differencing (`Predictor=2`)"
        },
        {
          "status": "supported",
          "text": "Automatic roughly 128 KiB strips or explicit `rowsPerStrip`; tile dimensions validated as multiples of 16"
        },
        {
          "status": "supported",
          "text": "Bounded current-segment pixel and predictor scratch without a full uncompressed frame"
        },
        {
          "status": "supported",
          "text": "Compatible RGB ICC profile writing when explicitly preserved"
        },
        {
          "status": "supported",
          "text": "Multi-page top-level IFD chains and reduced-resolution SubIFD pyramids"
        },
        {
          "status": "supported",
          "text": "Strict `compression`, `predictor`, `layout`, `compressionLevel`, `format`, strip, and tile options on the public encode APIs"
        },
        {
          "status": "planned",
          "text": "Uncompressed, PackBits, LZW, JPEG, and other compression profiles"
        },
        {
          "status": "planned",
          "text": "Grayscale and palette encoding"
        },
        {
          "status": "planned",
          "text": "16-bit channel encoding"
        },
        {
          "status": "planned",
          "text": "Associated-alpha encoding"
        },
        {
          "status": "planned",
          "text": "EXIF, XMP, resolution, and application metadata preservation"
        },
        {
          "status": "supported",
          "text": "Validate IFD extents, field types, counts, and offset arithmetic before reading or allocating"
        },
        {
          "status": "supported",
          "text": "Traverse top-level and SubIFD graphs with bounded directory counts, cycle rejection, and alias-safe shared-directory reuse"
        },
        {
          "status": "supported",
          "text": "Expose stable IFD offsets and graph lookup, bounded defensive-copy source reads, per-directory immutable tag caching with per-call limits, and typed explicit profile opening through public TIFF APIs"
        },
        {
          "status": "supported",
          "text": "Validate strip/tile counts, byte ranges, decoded sizes, and predictor boundaries"
        },
        {
          "status": "supported",
          "text": "Bound decompression output to the declared strip or tile geometry"
        },
        {
          "status": "supported",
          "text": "Preflight aggregate decoded-segment, output-block, and predictor-scratch peaks before direct TIFF segment reads; stream tiled Aperio regions one native intersection at a time"
        },
        {
          "status": "supported",
          "text": "Reject unsupported photometric interpretations, sample formats, and compressions explicitly, naming both compression ID and assigned name"
        },
        {
          "status": "supported",
          "text": "Verify decoded pixels against pinned LibTIFF fixtures"
        },
        {
          "status": "supported",
          "text": "Verify packed 10-, 12-, and 14-bit output exactly at native 16-bit depth against ImageMagick/LibTIFF"
        },
        {
          "status": "supported",
          "text": "Verify low packed depths, CMYK-alpha, and lossless WebP-in-TIFF output exactly against ImageMagick/LibTIFF"
        },
        {
          "status": "supported",
          "text": "Verify explicitly composed lossy WebP-in-TIFF against the independently validated WebP decoder contract"
        },
        {
          "status": "supported",
          "text": "Verify float16, float32, float64, and floating Predictor 3 display output exactly against ImageMagick/LibTIFF"
        },
        {
          "status": "supported",
          "text": "Verify signed integer and IEEE floating-point raw values at native precision in both byte orders"
        },
        {
          "status": "supported",
          "text": "Verify unsigned 24-/32-bit display output exactly against ImageMagick/LibTIFF and unsigned 64-bit raw values exactly above JavaScript's safe-integer range"
        },
        {
          "status": "supported",
          "text": "Verify CCITT Group 4 output against independently encoded ImageMagick/LibTIFF fixtures"
        },
        {
          "status": "supported",
          "text": "Verify TIFF 6 CIELab samples exactly against an independent colour-science oracle and CMYK lut16 ICC output within one 8-bit code value of ImageMagick/LittleCMS"
        },
        {
          "status": "supported",
          "text": "Verify FillOrder 2 packed strip and padded edge-tile output against independently written fixtures decoded by ImageMagick/LibTIFF"
        },
        {
          "status": "supported",
          "text": "Verify tiled LZW and BigTIFF output against independently encoded ImageMagick/LibTIFF fixtures"
        },
        {
          "status": "supported",
          "text": "Verify standalone Zstandard raw, RLE, compressed, multi-block, checksum, repeated-table, repeated-offset, and hostile-input behavior against independently generated reference frames"
        },
        {
          "status": "supported",
          "text": "Verify selected classic TIFF and BigTIFF pyramid levels independently and decode no unselected pixel segments"
        },
        {
          "status": "supported",
          "text": "Verify 16-bit ColorMap scaling, floating-point CMYK display, and signed CMYK sample reconstruction exactly against independent ImageMagick and tifffile oracles"
        },
        {
          "status": "supported",
          "text": "Verify canonical Deflate-predicted RGB and RGBA output exactly after ImageMagick/LibTIFF reopen"
        },
        {
          "status": "supported",
          "text": "Verify first-party LERC and LERC-plus-Deflate pixels against the independent Esri decoder and reject corrupt masks, headers, dimensions, checksums, and missing TIFF metadata"
        },
        {
          "status": "supported",
          "text": "Verify bounded HTTP range caching, resource validators, failure propagation, and selective tile reads without fetching unrelated segment payloads"
        },
        {
          "status": "supported",
          "text": "Assert COG overview selection in a simulated-remote viewport benchmark and report requests, fetched bytes, cache hits, first decoded tile-block latency, and decoded pixels without fetching the complete source"
        },
        {
          "status": "supported",
          "text": "Verify tiled RGB/RGBA, BigTIFF, multi-page, and SubIFD-pyramid writer output through independent GeoTIFF.js reopen"
        },
        {
          "status": "supported",
          "text": "Compare PureJsImage, GeoTIFF.js, UTIF.js, image-js, and Jimp against sharp with an ImageMagick fallback on the targeted TIFF feature corpus"
        },
        {
          "status": "supported",
          "text": "Complete the 154-file Imazen TIFF corpus decode-to-PNG baseline with every supported valid file decoded and all remaining inputs classified at structured boundaries"
        }
      ]
    },
    {
      "id": "gif",
      "name": "GIF",
      "experimental": false,
      "packageFormat": "gif",
      "read": {
        "status": "limited",
        "label": "Static / explicit frame 0"
      },
      "write": {
        "status": "unsupported",
        "label": "No"
      },
      "boundary": "Static images decode directly; animated inputs require explicit frame 0 selection; no animation editing or GIF output",
      "description": "Parses GIF87a/GIF89a, palettes, transparency, interlace, LZW data, frame rectangles, and static images. Metadata counts animation frames. Animated pixel decode fails unless frame 0 is explicitly selected; later frames and GIF encoding are unsupported.",
      "memory": "Retains compact first-frame palette indices, then emits bounded RGBA rows",
      "recommendation": "Static GIF uploads or explicit first-frame extraction from animated GIFs.",
      "evidence": [
        "tests/gif.test.ts",
        "browser-tests/compatibility.pw.ts",
        "tests/imazen-corpus-harness.test.ts"
      ],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "GIF decode reproduces the stored palette indices and does not claim a lossy continuous-tone path"
      },
      "claims": [
        {
          "status": "supported",
          "text": "GIF87a and GIF89a detection"
        },
        {
          "status": "supported",
          "text": "Logical-screen width and height"
        },
        {
          "status": "supported",
          "text": "Global color tables"
        },
        {
          "status": "supported",
          "text": "Per-frame local color tables"
        },
        {
          "status": "supported",
          "text": "Frame rectangles and offsets within the logical screen"
        },
        {
          "status": "supported",
          "text": "Non-interlaced image data"
        },
        {
          "status": "supported",
          "text": "Four-pass interlaced image data"
        },
        {
          "status": "supported",
          "text": "GIF data sub-block chains"
        },
        {
          "status": "supported",
          "text": "Metadata frame counting across the complete file"
        },
        {
          "status": "supported",
          "text": "Metadata transparency detection from graphics control extensions"
        },
        {
          "status": "supported",
          "text": "Safe skipping of comment, application, plain-text, and other extension sub-blocks during metadata and first-frame parsing"
        },
        {
          "status": "planned",
          "text": "Decode and composite every animation frame"
        },
        {
          "status": "planned",
          "text": "Frame delays from graphics control extensions"
        },
        {
          "status": "planned",
          "text": "Disposal methods 0-3"
        },
        {
          "status": "planned",
          "text": "Animation loop counts from Netscape/ANIMEXTS application extensions"
        },
        {
          "status": "planned",
          "text": "Logical-screen background-color semantics where they affect animation composition"
        },
        {
          "status": "planned",
          "text": "Pixel aspect ratio exposure"
        },
        {
          "status": "planned",
          "text": "Plain-text extension rendering"
        },
        {
          "status": "supported",
          "text": "GIF LZW minimum code sizes 2-8"
        },
        {
          "status": "supported",
          "text": "Clear and end codes"
        },
        {
          "status": "supported",
          "text": "Variable-width codes up to the 12-bit, 4096-entry dictionary limit"
        },
        {
          "status": "supported",
          "text": "Dictionary reset and the code-equals-next-available special case"
        },
        {
          "status": "supported",
          "text": "Exact indexed-pixel count validation"
        },
        {
          "status": "supported",
          "text": "Palette-index bounds validation"
        },
        {
          "status": "supported",
          "text": "Transparent palette indices from graphics control extensions"
        },
        {
          "status": "supported",
          "text": "Indexed-color expansion to `rgba8`"
        },
        {
          "status": "supported",
          "text": "Transparent logical-screen pixels outside the first frame rectangle"
        },
        {
          "status": "planned",
          "text": "Preserve indexed pixels and palettes for workflows that do not require RGBA expansion"
        },
        {
          "status": "supported",
          "text": "Decode the first image descriptor for static GIFs and explicit frame 0 selections"
        },
        {
          "status": "supported",
          "text": "Composite that frame at its declared offset on a transparent logical screen"
        },
        {
          "status": "supported",
          "text": "Preserve transparent pixels in PNG and other alpha-capable output"
        },
        {
          "status": "supported",
          "text": "Deterministically flatten transparency when converting to JPEG with a requested background"
        },
        {
          "status": "supported",
          "text": "Public crop, resize, GIF-to-PNG, and GIF-to-JPEG pipelines for static GIFs and explicit frame 0 selections"
        },
        {
          "status": "supported",
          "text": "Reject implicit animated GIF pixel decode with `UNSUPPORTED_OPERATION`"
        },
        {
          "status": "supported",
          "text": "Explicit API selection of frame 0"
        },
        {
          "status": "planned",
          "text": "Explicit API selection of later frames by index"
        },
        {
          "status": "planned",
          "text": "Explicit API selection by animation timestamp"
        },
        {
          "status": "planned",
          "text": "Poster-frame or representative-frame selection policies"
        },
        {
          "status": "supported",
          "text": "Bounded 32-row RGBA output blocks after index decoding"
        },
        {
          "status": "supported",
          "text": "Compact one-byte index storage for the first frame rather than a source-sized RGBA bitmap"
        },
        {
          "status": "supported",
          "text": "Fixed-size 4096-entry LZW dictionary and decode stack"
        },
        {
          "status": "planned",
          "text": "Incremental parsing and LZW decoding from `ImageSource`; the current pixel decoder retains the complete compressed GIF input"
        },
        {
          "status": "planned",
          "text": "Row-bounded non-interlaced LZW output without retaining the complete frame index plane"
        },
        {
          "status": "planned",
          "text": "Bounded interlace reordering or a disk-backed fallback"
        },
        {
          "status": "planned",
          "text": "Crop- and resize-aware decode that avoids expanding unused palette pixels"
        },
        {
          "status": "planned",
          "text": "Animation composition with a bounded canvas strategy and explicit memory behavior for disposal method 3"
        },
        {
          "status": "supported",
          "text": "Width, height, frame count, transparency presence, indexed color-space, and declared color-table depth reporting"
        },
        {
          "status": "planned",
          "text": "Frame rectangles, delays, disposal methods, transparency indices, and interlace flags in public metadata"
        },
        {
          "status": "planned",
          "text": "Loop count, comments, application identifiers, and plain-text metadata"
        },
        {
          "status": "planned",
          "text": "Metadata preservation or explicit stripping controls when converting"
        },
        {
          "status": "planned",
          "text": "Static GIF encoding"
        },
        {
          "status": "planned",
          "text": "Animated GIF encoding"
        },
        {
          "status": "planned",
          "text": "Public `image.gif()` and `image.encode('gif')` APIs"
        },
        {
          "status": "planned",
          "text": "Deterministic RGB/RGBA-to-indexed color quantization"
        },
        {
          "status": "planned",
          "text": "Global color-table generation with 2-256 entries"
        },
        {
          "status": "planned",
          "text": "Optional local color tables"
        },
        {
          "status": "planned",
          "text": "Binary transparency with a selected transparent palette index"
        },
        {
          "status": "planned",
          "text": "Configurable dithering"
        },
        {
          "status": "planned",
          "text": "GIF LZW encoding with dictionary clears and sub-block emission"
        },
        {
          "status": "planned",
          "text": "Optional interlaced output"
        },
        {
          "status": "planned",
          "text": "Frame cropping to the smallest changed or non-transparent rectangle"
        },
        {
          "status": "planned",
          "text": "Comment and application-extension writing when requested"
        },
        {
          "status": "planned",
          "text": "Multiple frames with per-frame rectangles"
        },
        {
          "status": "planned",
          "text": "Frame delays with defined rounding from milliseconds to centiseconds"
        },
        {
          "status": "planned",
          "text": "Disposal methods 0-3"
        },
        {
          "status": "planned",
          "text": "Per-frame transparency and local palettes"
        },
        {
          "status": "planned",
          "text": "Netscape loop-count extension"
        },
        {
          "status": "planned",
          "text": "Global-palette optimization across frames"
        },
        {
          "status": "planned",
          "text": "Frame differencing and unchanged-region optimization"
        },
        {
          "status": "planned",
          "text": "Deterministic animation output for reproducible builds"
        },
        {
          "status": "planned",
          "text": "Streaming frame input without retaining every source frame in RGBA form"
        },
        {
          "status": "supported",
          "text": "Validate signatures, screen dimensions, frame rectangles, color-table extents, extension sizes, sub-block extents, and LZW code sizes"
        },
        {
          "status": "supported",
          "text": "Apply configurable input-size, dimension, pixel-count, frame-count, and decoded-byte limits"
        },
        {
          "status": "supported",
          "text": "Bound block scans, sub-block scans, LZW code reads, dictionary chains, and decoded pixel counts"
        },
        {
          "status": "supported",
          "text": "Reject missing palettes, invalid code sizes, unavailable dictionary codes, out-of-range palette indices, and truncated image data explicitly"
        },
        {
          "status": "supported",
          "text": "Compare local-palette, offset, transparency, and interlaced first-frame pixels exactly against an independent development oracle"
        },
        {
          "status": "supported",
          "text": "Benchmark first-frame PNG/JPEG conversion for a pinned 70-frame GIF and a production-style transparent GIF workflow"
        },
        {
          "status": "planned",
          "text": "Pin a broader GIF compatibility corpus from browsers, image editors, cameras, screen-recording tools, and real upload sources"
        },
        {
          "status": "planned",
          "text": "Add focused global-palette, minimum/maximum dictionary, repeated-clear, unusual sub-block, empty-frame, and logical-screen background fixtures"
        },
        {
          "status": "planned",
          "text": "Add animation fixtures covering every disposal mode, partial rectangles, local palettes, zero/short delays, transparency, and finite/infinite loops"
        },
        {
          "status": "planned",
          "text": "Add malformed extension, sub-block, palette, LZW, frame-count, and decompression-bomb fuzzing with strict allocation limits"
        },
        {
          "status": "supported",
          "text": "Complete the 39-file Imazen GIF corpus first-frame decode-to-PNG baseline, including all documented valid, edge-case, and invalid inputs"
        }
      ]
    },
    {
      "id": "ico",
      "name": "ICO",
      "experimental": false,
      "packageFormat": "ico",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "unsupported",
        "label": "No"
      },
      "boundary": "Static ICO decode only; no CUR or ICO output",
      "description": "Decodes multi-image Windows icons backed by embedded PNG or common DIB pixels. Selection is deterministic; AND masks, partial alpha, and the legacy all-zero-alpha fallback are preserved.",
      "memory": "Decodes one selected entry; DIB pixels are emitted in bounded rows",
      "recommendation": "Favicon and Windows icon input converted to a web output format.",
      "evidence": ["tests/ico.test.ts"],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "The implemented ICO entries contain lossless PNG or DIB pixel data"
      },
      "claims": [
        {
          "status": "supported",
          "text": "Decode `.ico` files only; do not implement ICO encoding"
        },
        {
          "status": "supported",
          "text": "Support multi-image icon files and deterministic image selection"
        },
        {
          "status": "supported",
          "text": "Support both PNG-backed and DIB-backed icon entries"
        },
        {
          "status": "supported",
          "text": "Reuse the first-party PNG decoder and keep the DIB row kernel specialized for ICO mask and legacy-alpha semantics without introducing a runtime dependency"
        },
        {
          "status": "supported",
          "text": "Treat `.ico` and MIME metadata as hints; select the codec from file contents"
        },
        {
          "status": "supported",
          "text": "Keep cursor, animated-icon, executable-resource, and shell-resource formats outside v1"
        },
        {
          "status": "supported",
          "text": "Parse the six-byte `ICONDIR` header and require reserved value 0, icon type 1, and a non-zero bounded image count"
        },
        {
          "status": "supported",
          "text": "Parse every 16-byte `ICONDIRENTRY` with checked width, height, palette, planes, bit depth, byte length, and offset fields"
        },
        {
          "status": "supported",
          "text": "Interpret directory width or height byte 0 as 256 pixels"
        },
        {
          "status": "supported",
          "text": "Validate every entry extent before inspecting or decoding its payload"
        },
        {
          "status": "planned",
          "text": "Report every embedded image's dimensions, bit depth, storage type, alpha capability, and directory index"
        },
        {
          "status": "supported",
          "text": "Default to the largest image, then highest useful bit depth and alpha, with original directory order as the final tie-breaker"
        },
        {
          "status": "planned",
          "text": "For a requested resize, select the smallest suitable source that is not smaller than the target; fall back to the largest entry"
        },
        {
          "status": "planned",
          "text": "Allow explicit directory-index selection"
        },
        {
          "status": "supported",
          "text": "Reject zero-length, overlapping-invalid, out-of-file, or contradictory entries explicitly"
        },
        {
          "status": "supported",
          "text": "Detect an embedded PNG by its signature within the validated ICO entry"
        },
        {
          "status": "supported",
          "text": "Require the complete PNG datastream to remain inside that entry"
        },
        {
          "status": "supported",
          "text": "Decode indexed, grayscale, RGB, grayscale-alpha, and RGBA PNG entries through the existing first-party PNG codec"
        },
        {
          "status": "supported",
          "text": "Support common 256x256 PNG icon entries"
        },
        {
          "status": "supported",
          "text": "Preserve exact PNG alpha"
        },
        {
          "status": "supported",
          "text": "Reject APNG animation inside an ICO entry rather than silently selecting an arbitrary frame"
        },
        {
          "status": "supported",
          "text": "Avoid copying the embedded PNG when a bounded view can be passed to the decoder"
        },
        {
          "status": "supported",
          "text": "Parse common `BITMAPCOREHEADER`, `BITMAPINFOHEADER`, V4, and V5 DIB headers without requiring the normal 14-byte BMP file header"
        },
        {
          "status": "supported",
          "text": "Validate that the stored DIB height describes the combined XOR image and AND mask and derive the actual icon height safely"
        },
        {
          "status": "supported",
          "text": "Decode bottom-up XOR pixels and four-byte row padding"
        },
        {
          "status": "supported",
          "text": "Decode 1-, 4-, and 8-bit palette entries"
        },
        {
          "status": "supported",
          "text": "Decode 16-bit RGB555/RGB565 and valid bitfield layouts"
        },
        {
          "status": "supported",
          "text": "Decode 24-bit BGR and 32-bit BGRA entries"
        },
        {
          "status": "supported",
          "text": "Decode the one-bit AND mask with its independent four-byte row padding"
        },
        {
          "status": "supported",
          "text": "Apply the AND mask to palette, 16-bit, and 24-bit entries"
        },
        {
          "status": "supported",
          "text": "Prefer meaningful 32-bit alpha while honoring the AND mask where required"
        },
        {
          "status": "supported",
          "text": "Handle legacy 32-bit icons whose alpha bytes are all zero using a pinned, Windows-compatible opaque/AND-mask fallback"
        },
        {
          "status": "supported",
          "text": "Preserve partial alpha rather than reducing it to one-bit transparency"
        },
        {
          "status": "supported",
          "text": "Emit bounded `rgba8` pixel blocks into the normal crop, resize, and encoder pipeline"
        },
        {
          "status": "supported",
          "text": "Register `.ico` and the supported ICO MIME types"
        },
        {
          "status": "supported",
          "text": "Return selected-image dimensions and total embedded image count from metadata"
        },
        {
          "status": "supported",
          "text": "Support ICO-to-PNG, ICO-to-JPEG with explicit alpha flattening, ICO-to-WebP, crop, resize, and contain workflows"
        },
        {
          "status": "supported",
          "text": "Keep selection deterministic across metadata inspection and pixel decode"
        },
        {
          "status": "planned",
          "text": "RLE4 and RLE8 DIB-backed entries through the existing BMP RLE logic"
        },
        {
          "status": "planned",
          "text": "Unusual but valid DIB header sizes encountered in real Windows resources"
        },
        {
          "status": "planned",
          "text": "Top-down DIB entries when independently verified consumers accept them"
        },
        {
          "status": "planned",
          "text": "Entries whose directory bit depth disagrees with the embedded PNG or DIB, using payload metadata while reporting the discrepancy"
        },
        {
          "status": "planned",
          "text": "Duplicate sizes with different color depths or alpha representations"
        },
        {
          "status": "planned",
          "text": "Color-profile handling for PNG and V5 DIB entries"
        },
        {
          "status": "planned",
          "text": "Resolution metadata exposure where present"
        },
        {
          "status": "planned",
          "text": "Selection by exact size, minimum size, maximum size, or preferred storage type"
        },
        {
          "status": "planned",
          "text": "Windows cursor (`.cur`, directory type 2) decode with hotspot metadata"
        },
        {
          "status": "planned",
          "text": "Direct extraction of ICO resources from PE executables, DLLs, or resource files as a separately scoped container feature"
        },
        {
          "status": "planned",
          "text": "Browser- and Windows-specific selection presets if their behavior differs materially from the default policy"
        },
        {
          "status": "planned",
          "text": "Region decode within the selected DIB entry"
        },
        {
          "status": "planned",
          "text": "ICO encoding"
        },
        {
          "status": "planned",
          "text": "Animated cursor (`.ani`) decode"
        },
        {
          "status": "planned",
          "text": "Executing or interpreting shell extensions and executable resources"
        },
        {
          "status": "planned",
          "text": "Embedded JPEG or undocumented vendor payloads"
        },
        {
          "status": "planned",
          "text": "Returning all icon images as one composited canvas"
        },
        {
          "status": "planned",
          "text": "Guessing dimensions or pixels from malformed directory entries"
        },
        {
          "status": "supported",
          "text": "Bound input bytes, image count, dimensions, selected pixels, palette entries, PNG expansion, DIB stride, XOR bytes, AND-mask bytes, and decoded output before allocation"
        },
        {
          "status": "supported",
          "text": "Use checked arithmetic for directory size, entry extents, row strides, doubled DIB heights, palette sizes, masks, and pixel counts"
        },
        {
          "status": "supported",
          "text": "Inspect directory metadata before decoding any payload"
        },
        {
          "status": "supported",
          "text": "Decode only the selected image unless the caller explicitly requests another entry"
        },
        {
          "status": "supported",
          "text": "Never materialize every embedded image merely to choose one"
        },
        {
          "status": "supported",
          "text": "Keep PNG and DIB payloads as bounded views into the original input"
        },
        {
          "status": "supported",
          "text": "Preserve bounded-row behavior for the selected image without a duplicate source-sized RGBA bitmap"
        },
        {
          "status": "supported",
          "text": "Reject recursive container tricks, truncated PNG chunks, malformed DIB headers, overlapping masks, and decompression bombs explicitly"
        },
        {
          "status": "supported",
          "text": "Pin redistributable first-party mixed-size, 24-bit DIB, and 32-bit DIB icon fixtures"
        },
        {
          "status": "planned",
          "text": "Cover 16x16, 32x32, 48x48, and 256x256 entries"
        },
        {
          "status": "planned",
          "text": "Cover PNG-backed icons plus 1/4/8/16/24/32-bit DIB entries"
        },
        {
          "status": "planned",
          "text": "Cover opaque, one-bit mask, partial-alpha, all-zero-alpha fallback, odd widths, duplicate sizes, and mixed PNG/DIB files"
        },
        {
          "status": "planned",
          "text": "Validate metadata and selected pixels against Windows and at least one independent ICO decoder"
        },
        {
          "status": "planned",
          "text": "Test target-aware and explicit-index selection deterministically"
        },
        {
          "status": "supported",
          "text": "Verify benchmark output before recording speed or memory"
        },
        {
          "status": "supported",
          "text": "Benchmark metadata, PNG-backed decode, DIB-backed decode, selection, ICO-to-PNG, and favicon resize workflows in isolated processes"
        },
        {
          "status": "planned",
          "text": "Add malformed directory, offset, length, palette, DIB height, stride, bitfield, PNG extent, XOR, AND-mask, and allocation-limit fixtures"
        },
        {
          "status": "planned",
          "text": "Every Group 1 item is implemented and covered by pinned fixtures"
        },
        {
          "status": "planned",
          "text": "Unsupported compatibility and deferred inputs fail explicitly"
        },
        {
          "status": "planned",
          "text": "Independent decoders confirm image count, selection, dimensions, and RGBA pixels"
        },
        {
          "status": "supported",
          "text": "Common mixed-size favicons decode and resize without decoding every entry"
        },
        {
          "status": "planned",
          "text": "`npm run check` and the isolated ICO fixture verification pass"
        }
      ]
    },
    {
      "id": "jpeg2000",
      "name": "JPEG 2000 / JP2",
      "experimental": false,
      "packageFormat": "jp2",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "unsupported",
        "label": "No"
      },
      "boundary": "Static Part 1 JP2 decode for 1-16-bit integer grayscale, RGB, sYCC, palette, and cdef alpha images using the documented MQ-coded wavelet subset; excludes POC, packed packet headers, arithmetic-bypass and pass-termination styles, JPX/JPM, HTJ2K, animation, and encode",
      "description": "Decodes common static Part 1 JP2 images with reversible 5/3 or irreversible 9/7 wavelets, all five progression orders, multiple tiles and tile-parts, RCT/ICT, maxshift ROI, restricted RGB matrix/TRC ICC profiles, palettes, channel mapping, and straight or premultiplied alpha.",
      "memory": "Metadata inspection reads bounded headers only. Decode retains the compressed jp2c plus the selected-resolution component planes for one tile row, emits ordered 32-row pixel blocks, skips unrelated tiles for regions, and selects lower wavelet levels for large resize; full-resolution single-tile decode remains an explicit full-component fallback.",
      "recommendation": "Static image/jp2 uploads within the documented Part 1 subset, including common lossless and lossy grayscale, RGB, and sYCC files.",
      "evidence": [
        "tests/jpeg2000.test.ts",
        "tests/jpeg2000-hardening.test.ts",
        "browser-tests/compatibility.pw.ts"
      ],
      "lossyPixelValidation": {
        "status": "independent-oracle",
        "oracle": "Pinned FFmpeg and OpenJPEG JP2 fixtures",
        "tolerance": "Irreversible 9/7 decoded sample error at most 1 for the pinned oracle pixels",
        "evidence": ["tests/jpeg2000.test.ts", "benchmark/jpeg2000/verify-corpus.ts"]
      },
      "claims": [
        {
          "status": "supported",
          "text": "Prioritize decoding static `image/jp2` uploads"
        },
        {
          "status": "supported",
          "text": "Implement JPEG 2000 decoding in this repository without a runtime codec dependency, bundled native library, WebAssembly module, or copied third-party implementation"
        },
        {
          "status": "supported",
          "text": "Use independent implementations only as development-time fixture and benchmark oracles"
        },
        {
          "status": "supported",
          "text": "Study [`runk/jpeg2000`](https://github.com/runk/jpeg2000) as a development reference for pure-JavaScript codestream behavior, while keeping the PureJsImage implementation original and independently structured"
        },
        {
          "status": "supported",
          "text": "Detect JP2 from its contents; a `.jp2` extension or `image/jp2` header is a hint and never proof that the input is valid"
        },
        {
          "status": "supported",
          "text": "Target the Part 1 JP2 file format and Part 1 JPEG 2000 codestream first"
        },
        {
          "status": "supported",
          "text": "Decode one static image from one contiguous codestream"
        },
        {
          "status": "planned",
          "text": "Make reduced-resolution, crop-aware, bounded-memory decode the primary Lambda path"
        },
        {
          "status": "supported",
          "text": "Do not implement JPEG 2000 encoding as part of this plan"
        },
        {
          "status": "supported",
          "text": "Recognize the 12-byte JP2 signature box, including its fixed signature payload"
        },
        {
          "status": "supported",
          "text": "Parse big-endian box headers with 32-bit lengths, extended 64-bit lengths, and boxes extending to end-of-file"
        },
        {
          "status": "supported",
          "text": "Validate every box header, length, nesting level, and end offset before reading or allocating"
        },
        {
          "status": "supported",
          "text": "Require the JP2 signature, file type (`ftyp`), JP2 header (`jp2h`), and contiguous codestream (`jp2c`) structure expected by a baseline JP2 file"
        },
        {
          "status": "supported",
          "text": "Validate the `jp2 ` brand and compatible-brand list"
        },
        {
          "status": "supported",
          "text": "Enforce required box ordering, uniqueness, and containment rules"
        },
        {
          "status": "supported",
          "text": "Skip unknown and application-specific boxes by their validated extents"
        },
        {
          "status": "supported",
          "text": "Reject truncated, overlapping, recursively nested, or contradictory box structures explicitly"
        },
        {
          "status": "planned",
          "text": "Read the `jp2c` box through a bounded byte reader rather than copying the complete codestream"
        },
        {
          "status": "supported",
          "text": "Parse the image header (`ihdr`) dimensions, component count, bit depth, compression type, color-space-known flag, and intellectual-property flag"
        },
        {
          "status": "supported",
          "text": "Parse per-component bit depth (`bpcc`) when components do not share one precision and signedness"
        },
        {
          "status": "supported",
          "text": "Parse all color specification (`colr`) boxes and choose the supported entry by precedence and approximation"
        },
        {
          "status": "supported",
          "text": "Parse palette (`pclr`), component mapping (`cmap`), and channel definition (`cdef`) boxes as one validated channel-mapping graph"
        },
        {
          "status": "supported",
          "text": "Parse capture and display resolution (`res `, `resc`, and `resd`) without allowing rational or exponent arithmetic to overflow"
        },
        {
          "status": "supported",
          "text": "Cross-check `ihdr` dimensions, component count, precision, and compression claims against the codestream `SIZ` marker"
        },
        {
          "status": "supported",
          "text": "Reject contradictory required metadata instead of silently choosing the more convenient value"
        },
        {
          "status": "supported",
          "text": "Report width, height, component count, channel count, channel precision, alpha presence, color description, lossless capability, tile geometry, and available resolution levels from metadata inspection"
        },
        {
          "status": "supported",
          "text": "Register `.jp2` and `image/jp2` on the public decode surface"
        },
        {
          "status": "supported",
          "text": "Accept `Buffer` and `Uint8Array` inputs through the configured library's `open` path"
        },
        {
          "status": "planned",
          "text": "Preserve the original Twilio media content type as provenance only; use content detection for codec selection"
        },
        {
          "status": "supported",
          "text": "Return a clear unsupported-format error for raw J2K codestreams, JPX, JPM, Motion JPEG 2000, and HTJ2K rather than misparsing them as baseline JP2"
        },
        {
          "status": "supported",
          "text": "Allow bounded metadata inspection without starting entropy or wavelet decode"
        },
        {
          "status": "supported",
          "text": "Parse and validate `SOC`, `SIZ`, `COD`, `COC`, `QCD`, `QCC`, `SOT`, `SOD`, and `EOC` markers"
        },
        {
          "status": "planned",
          "text": "Handle marker segments split across input chunks without concatenating the entire codestream"
        },
        {
          "status": "supported",
          "text": "Validate reference-grid origins, image extents, tile origins, tile sizes, component sampling, precision, and signedness before allocation"
        },
        {
          "status": "supported",
          "text": "Support one tile and multiple independently reconstructed tiles"
        },
        {
          "status": "supported",
          "text": "Support multiple tile-parts per tile and verify tile-part indexes, counts, declared lengths, and ordering"
        },
        {
          "status": "supported",
          "text": "Apply main-header coding and quantization defaults plus valid component-specific and tile-specific overrides"
        },
        {
          "status": "supported",
          "text": "Support one or more quality layers without assuming every layer is present in one packet"
        },
        {
          "status": "supported",
          "text": "Support all five Part 1 progression orders: LRCP, RLCP, RPCL, PCRL, and CPRL"
        },
        {
          "status": "supported",
          "text": "Validate every resolution, component, precinct, layer, packet, code-block, and byte-range calculation before reading packet data"
        },
        {
          "status": "supported",
          "text": "Generate the precinct and packet sequence for every supported progression order"
        },
        {
          "status": "supported",
          "text": "Decode packet inclusion and zero-bit-plane tag trees with bounded depth and node counts"
        },
        {
          "status": "supported",
          "text": "Parse code-block contribution counts, coding-pass counts, segment lengths, and layer accumulation without integer overflow"
        },
        {
          "status": "supported",
          "text": "Implement JPEG 2000 bit stuffing and packet-header alignment exactly"
        },
        {
          "status": "supported",
          "text": "Implement the MQ binary arithmetic decoder, context state transitions, renormalization, byte input, and termination checks"
        },
        {
          "status": "supported",
          "text": "Implement significance-propagation, magnitude-refinement, and cleanup coding passes"
        },
        {
          "status": "supported",
          "text": "Reconstruct coefficient signs, magnitudes, and subband contexts"
        },
        {
          "status": "supported",
          "text": "Support context-reset and vertical-causal code-block styles"
        },
        {
          "status": "planned",
          "text": "Support selective arithmetic bypass, termination after each pass, and predictable termination code-block styles"
        },
        {
          "status": "supported",
          "text": "Validate segmentation symbols when signaled"
        },
        {
          "status": "supported",
          "text": "Reject malformed tag trees, impossible pass counts, invalid segment lengths, coefficient-plane overflow, and arithmetic reads past packet bounds"
        },
        {
          "status": "supported",
          "text": "Decode no-quantization, scalar-derived, and scalar-expounded quantization styles"
        },
        {
          "status": "supported",
          "text": "Apply subband guard bits, exponents, mantissas, maxshift ROI, and coefficient scaling with bounded coefficient magnitudes"
        },
        {
          "status": "supported",
          "text": "Implement exact reversible 5/3 inverse wavelet reconstruction for lossless images"
        },
        {
          "status": "supported",
          "text": "Implement irreversible 9/7 inverse wavelet reconstruction for lossy images with defined numeric precision and output rounding"
        },
        {
          "status": "supported",
          "text": "Handle symmetric wavelet extension at odd image, tile, component, and resolution boundaries"
        },
        {
          "status": "supported",
          "text": "Reconstruct unsigned component sample ranges at 1-16-bit precision and reject signed component display explicitly"
        },
        {
          "status": "supported",
          "text": "Implement the reversible color transform for lossless RGB codestreams"
        },
        {
          "status": "supported",
          "text": "Implement the irreversible color transform for lossy RGB codestreams"
        },
        {
          "status": "supported",
          "text": "Combine tiles without gaps, overlaps, seams, or incorrect edge samples"
        },
        {
          "status": "supported",
          "text": "One-component unsigned grayscale at 1-16 bits per sample"
        },
        {
          "status": "supported",
          "text": "Three-component unsigned RGB at 8 and 16 bits per sample"
        },
        {
          "status": "supported",
          "text": "Enumerated grayscale, sRGB, and sYCC JP2 color spaces"
        },
        {
          "status": "supported",
          "text": "Correct sYCC chroma offsets, component sampling, and conversion to the pipeline output color space"
        },
        {
          "status": "supported",
          "text": "Restricted RGB matrix/TRC ICC profiles"
        },
        {
          "status": "supported",
          "text": "Palette and component mapping for indexed images"
        },
        {
          "status": "supported",
          "text": "Unassociated and premultiplied opacity channels declared by `cdef`"
        },
        {
          "status": "supported",
          "text": "Correct channel ordering when codestream component order differs from display channel order"
        },
        {
          "status": "supported",
          "text": "Convert high-precision samples to `gray8`, `rgb8`, or `rgba8` with a documented rounding policy rather than truncating low bits accidentally"
        },
        {
          "status": "supported",
          "text": "Emit bounded, ordered pixel blocks into the existing crop, resize, and encoder pipeline"
        },
        {
          "status": "supported",
          "text": "Support JP2-to-JPEG, JP2-to-PNG, JP2-to-WebP, crop, resize, and resize-plus-encode workflows"
        },
        {
          "status": "planned",
          "text": "Progression-order changes (`POC`)"
        },
        {
          "status": "planned",
          "text": "Packed packet headers in main (`PPM`) and tile-part (`PPT`) headers"
        },
        {
          "status": "supported",
          "text": "Start-of-packet (`SOP`) and end-of-packet-header (`EPH`) markers"
        },
        {
          "status": "planned",
          "text": "Tile-part length (`TLM`), packet length (`PLM`/`PLT`), component registration (`CRG`), and comment (`COM`) markers"
        },
        {
          "status": "supported",
          "text": "Maxshift region-of-interest (`RGN`) reconstruction"
        },
        {
          "status": "planned",
          "text": "Arbitrary unsigned and signed integer component precision up to the project's documented safe maximum"
        },
        {
          "status": "planned",
          "text": "Components with different sampling factors, precisions, and signedness"
        },
        {
          "status": "planned",
          "text": "Bi-level and low-bit-depth palette images"
        },
        {
          "status": "planned",
          "text": "CMYK and other four-channel images when an applicable ICC profile is present"
        },
        {
          "status": "planned",
          "text": "Additional valid Part 1 multi-component arrangements with an explicit output mapping"
        },
        {
          "status": "planned",
          "text": "Decode only a caller-selected quality-layer prefix"
        },
        {
          "status": "planned",
          "text": "Decode only a caller-selected component set when color reconstruction does not require the omitted components"
        },
        {
          "status": "planned",
          "text": "Treat optional XML, UUID, UUID-info, and intellectual-property boxes as bounded opaque metadata"
        },
        {
          "status": "planned",
          "text": "Expose capture and display resolution through image metadata"
        },
        {
          "status": "supported",
          "text": "Public reduced-resolution decode that selects an existing wavelet resolution level before reconstruction"
        },
        {
          "status": "supported",
          "text": "Automatically choose the nearest useful wavelet resolution level for a large resize instead of reconstructing discarded full-resolution samples"
        },
        {
          "status": "planned",
          "text": "Precinct- and code-block-aware region decode for crops"
        },
        {
          "status": "planned",
          "text": "Tile selection and tile-by-tile decode APIs for very large scientific, medical, scanned-document, or geospatial images"
        },
        {
          "status": "planned",
          "text": "Progressive preview decode by quality layer"
        },
        {
          "status": "planned",
          "text": "Optional 16-bit pipeline output when the shared pixel model supports it"
        },
        {
          "status": "planned",
          "text": "Raw Part 1 codestream (`.j2k`, `.j2c`, or `image/j2c`) decode through a separately detected public alias"
        },
        {
          "status": "planned",
          "text": "Known EXIF, XMP, or application metadata carried in UUID/XML boxes, with strict size limits and provenance"
        },
        {
          "status": "planned",
          "text": "Color-managed Lab and uncommon ICC-based component models"
        },
        {
          "status": "planned",
          "text": "Decode diagnostics describing which tile, packet, marker, or box caused a failure without exposing uploaded data"
        },
        {
          "status": "planned",
          "text": "JPEG 2000 encoding or JP2 rewriting"
        },
        {
          "status": "planned",
          "text": "JPX (`image/jpx`) multiple codestreams, compositing layers, animation, and Part 2 extensions"
        },
        {
          "status": "planned",
          "text": "JPM (`image/jpm`) compound documents"
        },
        {
          "status": "planned",
          "text": "Motion JPEG 2000 (`video/mj2`)"
        },
        {
          "status": "planned",
          "text": "JPIP remote and incremental delivery protocols"
        },
        {
          "status": "planned",
          "text": "HTJ2K (`image/jph`) high-throughput block coding"
        },
        {
          "status": "planned",
          "text": "JPEG 2000 Part 2 arbitrary wavelets, arbitrary multi-component transforms, and other extended codestream syntax"
        },
        {
          "status": "planned",
          "text": "JPSEC encrypted, authenticated, or protected codestreams"
        },
        {
          "status": "planned",
          "text": "External data references"
        },
        {
          "status": "planned",
          "text": "Floating-point or vendor-private sample models outside the Part 1 integer reconstruction contract"
        },
        {
          "status": "supported",
          "text": "Bound input bytes, box count, nesting depth, metadata bytes, dimensions, pixels, components, tiles, tile-parts, resolution levels, precincts, code-blocks, layers, packets, coding passes, and decoded working bytes separately"
        },
        {
          "status": "supported",
          "text": "Use checked arithmetic for reference grids, component coordinates, subband extents, precinct indexes, packet counts, coefficient counts, strides, and allocation sizes"
        },
        {
          "status": "planned",
          "text": "Keep compressed codestream data in the original input and read bounded packet/code-block ranges instead of duplicating `jp2c`"
        },
        {
          "status": "supported",
          "text": "Retain compact code-block coefficients only for the selected tile row and resolution"
        },
        {
          "status": "supported",
          "text": "Reconstruct intersecting tile rows independently and release their coefficients and wavelet buffers after emission"
        },
        {
          "status": "supported",
          "text": "Make reduced-resolution resize decode use lower wavelet levels directly"
        },
        {
          "status": "supported",
          "text": "Avoid a full source-sized RGB or RGBA bitmap at the decoder/pipeline boundary"
        },
        {
          "status": "supported",
          "text": "Account for simultaneous compressed input, packet indexes, tag trees, coefficients, inverse-wavelet buffers, component planes, color conversion, resize state, and encoded output in the working-memory budget"
        },
        {
          "status": "supported",
          "text": "Keep the full selected-resolution component fallback explicit and benchmark it separately from the bounded output-row path"
        },
        {
          "status": "planned",
          "text": "Ensure crop requests do not entropy-decode or inverse-transform unrelated precincts when the codestream organization makes them independently addressable"
        },
        {
          "status": "supported",
          "text": "Treat all box lengths, marker lengths, offsets, counts, coding parameters, tag trees, packet headers, arithmetic bytes, coefficient states, and tile coordinates as hostile input"
        },
        {
          "status": "supported",
          "text": "Reject dimensions or component geometry that disagree between JP2 boxes and the codestream"
        },
        {
          "status": "supported",
          "text": "Reject duplicate mandatory markers, illegal marker ordering, missing end markers, impossible tile-part lengths, and unsupported coding styles explicitly"
        },
        {
          "status": "supported",
          "text": "Never scan unbounded input looking for a marker after a declared packet or tile-part extent has failed validation"
        },
        {
          "status": "supported",
          "text": "Bound MQ decoding and packet reads to their declared code-block segments"
        },
        {
          "status": "supported",
          "text": "Prevent decompression bombs caused by huge reference grids, tiny tiles, excessive components, deep decompositions, many precincts, or many layers"
        },
        {
          "status": "supported",
          "text": "Fail closed on unsupported Part 2, HTJ2K, JPSEC, and vendor-private syntax"
        },
        {
          "status": "planned",
          "text": "Add fuzz targets for both the JP2 box parser and raw Part 1 codestream parser before declaring the codec production-ready"
        },
        {
          "status": "planned",
          "text": "Audit `runk/jpeg2000` at a pinned commit and record which markers, progression orders, transforms, color paths, malformed-input checks, and memory strategies it actually supports"
        },
        {
          "status": "planned",
          "text": "Treat `runk/jpeg2000` primarily as a codestream reference unless that audit demonstrates complete JP2 box behavior; its documented entry point accepts a JPEG 2000 codestream directly"
        },
        {
          "status": "planned",
          "text": "Run the same pinned fixtures through `runk/jpeg2000`, OpenJPEG, and PureJsImage and investigate every metadata, pixel, or failure-classification disagreement"
        },
        {
          "status": "planned",
          "text": "Do not copy or mechanically translate its PDF.js-derived implementation, internal data structures, or tests into production code"
        },
        {
          "status": "planned",
          "text": "Pin a sanitized, redistributable fixture representative of an actual `image/jp2` Twilio upload, without customer data"
        },
        {
          "status": "supported",
          "text": "Pin fixtures from at least two independent JPEG 2000 encoders"
        },
        {
          "status": "supported",
          "text": "Include lossless 5/3 and lossy 9/7 images"
        },
        {
          "status": "supported",
          "text": "Include grayscale, RGB, sYCC, palette, 16-bit, alpha, tiled, odd-dimension, subsampled-component, multi-layer, and every progression-order case required by the implemented groups"
        },
        {
          "status": "supported",
          "text": "Include small correctness fixtures plus realistic photographic and scanned document images"
        },
        {
          "status": "planned",
          "text": "Include a realistic large tiled image"
        },
        {
          "status": "planned",
          "text": "Record source, license, encoder, JP2 brand, dimensions, components, bit depths, color space, transform, quantization, tiles, decomposition levels, precincts, code-block size, layers, progression order, and checksums"
        },
        {
          "status": "supported",
          "text": "Validate container metadata against independent OpenJPEG and ImageMagick inspection"
        },
        {
          "status": "supported",
          "text": "Validate pixels against OpenJPEG and ImageMagick or FFmpeg oracles"
        },
        {
          "status": "supported",
          "text": "Require exact pixels for reversible 5/3 lossless fixtures"
        },
        {
          "status": "supported",
          "text": "Use documented tolerances for irreversible 9/7 output"
        },
        {
          "status": "supported",
          "text": "Use documented tolerances for restricted ICC color-managed output"
        },
        {
          "status": "planned",
          "text": "Use official JPEG 2000 conformance cases where their licensing permits redistribution or reproducible local preparation"
        },
        {
          "status": "supported",
          "text": "Verify benchmark output before recording time or memory; unsupported or incorrect output is a failed benchmark"
        },
        {
          "status": "planned",
          "text": "Benchmark metadata, full decode, JP2-to-JPEG, JP2-to-PNG, crop, resize, reduced-resolution resize, and resize-plus-encode workflows"
        },
        {
          "status": "supported",
          "text": "Measure cold and warm absolute peak RSS, RSS delta, external memory, and ArrayBuffer memory in isolated processes"
        },
        {
          "status": "planned",
          "text": "Compare the primary upload workflows with a development-only OpenJPEG oracle; record Jimp as unsupported rather than presenting failed decode as a performance result"
        },
        {
          "status": "planned",
          "text": "Add malformed box, marker, tile, packet, tag-tree, code-block, MQ, quantization, wavelet, color, and allocation-limit regression fixtures"
        },
        {
          "status": "supported",
          "text": "The documented Group 0 and Group 1 subset is implemented and covered by pinned fixtures"
        },
        {
          "status": "supported",
          "text": "Every unsupported Group 2-4 input is rejected explicitly rather than decoded incorrectly"
        },
        {
          "status": "supported",
          "text": "Lossless reference fixtures reproduce exact pixels"
        },
        {
          "status": "supported",
          "text": "Lossy reference fixtures remain within documented pixel tolerances"
        },
        {
          "status": "supported",
          "text": "Twilio-style `image/jp2` Buffer input can be inspected, resized, and converted to JPEG or PNG through the public pipeline"
        },
        {
          "status": "supported",
          "text": "A large downscale uses a lower wavelet resolution and does not allocate a source-sized RGB or RGBA bitmap"
        },
        {
          "status": "supported",
          "text": "Independent oracles confirm dimensions, precision, color, alpha, and decoded pixels"
        },
        {
          "status": "supported",
          "text": "`npm run check` and the isolated JP2 fixture and benchmark verification pass"
        }
      ]
    },
    {
      "id": "avif",
      "name": "AVIF",
      "experimental": false,
      "packageFormat": "avif",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "limited",
        "label": "Limited"
      },
      "boundary": "Common still-image AVIF decode plus selected independently decodable spatial layers and animation key samples; dependent inter frames and uncommon documented AV1/ISOBMFF syntax remain explicit unsupported boundaries. Decode supports the documented compatible 8/10/12-bit monochrome, YUV 4:2:0, YUV 4:2:2, and YUV 4:4:4 syntax; alpha auxiliaries; grids; orientation; exact integer and half-integer clean apertures; spatial segmentation maps with alternate quantizer and loop-filter features; gain maps; SDR and HDR-to-SDR NCLX color conversion; compatible ICC conversion and preservation; EXIF preservation; super-resolution; film grain; and post-filters. Constrained encode accepts gray8, rgb8, and rgba8 input, composites alpha against white or an explicit solid background, writes one single-tile reduced-still-picture `av01` primary item, preserves requested EXIF and compatible RGB ICC metadata, and uses deterministic 4x4 DC-predicted transform blocks without encoder search.",
      "description": "Production decode supports common static AVIF still images across independently validated libaom, dav1d, rav1e, SVT-AV1, Sharp/libvips, FFmpeg, ImageMagick/libheif, and Chromium workflows. The supported path covers compatible static 8-bit monochrome and YUV 4:2:0, YUV 4:2:2, and YUV 4:4:4 images; coded-lossless 10-bit and 12-bit YUV 4:2:0 and YUV 4:4:4 images; filter-free lossy 10-bit and 12-bit YUV 4:2:0, YUV 4:2:2, and YUV 4:4:4 images; and the documented compatible high-depth post-filter combinations. Every supported high-depth path retains native samples through reconstruction and filtering before explicit RGBA conversion. Decode also includes compatible non-reduced sequences, complete multi-tile frames, contiguous tile-group OBUs, explicit independently decodable spatial-layer and animated sync-sample selection, full-range monochrome alpha auxiliaries, opaque and alpha-bearing grids, exact integer and half-integer clean apertures, ordered orientation, palette screen content, intra-block copy, single-tile super-resolution, 8-bit film grain, compatible SDR NCLX and ICC conversion, PQ and HLG tone mapping including Rec.2020/PQ matrix 10 constant-luminance conversion to the library's SDR RGBA output, ISO gain-map HDR-to-SDR composition, documented in-loop filters, and the restricted Sharp/libaom quantization-matrix path. EXIF and compatible RGB ICC metadata can be retained explicitly and are stripped on re-encode by default. Encoding accepts gray8, rgb8, and rgba8 pixels and produces deterministic opaque 8-bit Main Profile YUV 4:2:0 still images with one reduced still-picture key frame, one tile, full-superblock 4x4 partitioning, DC prediction, lossless 4x4 transforms, and context-0 coefficient coding. Quantization is fixed at context 0; public quality control is not implemented. Alpha is composited against white by default or an explicit solid background; transparent output is rejected. Dependent inter frames and enhancement layers, show-existing frames, animation iteration and timing exposure, lsel=0xFFFF progressive output, decoder timing, frame IDs, dependent inter-frame dimension overrides, non-half-integer clean apertures, multi-tile super-resolution, multi-tile intra-block copy, partial or noncontiguous tile groups, gain maps with alpha, broader ICC conversion, unvalidated high-depth post-filter combinations, HDR pixel output, broader AV1 syntax, and broader AVIF encoding remain unsupported and fail explicitly.",
      "memory": "Metadata reads are bounded and all decoded RGBA is emitted in ordered 32-row blocks without a source-sized RGBA bitmap. AVIF track sample counts are checked against maxFrames before sample-table allocation. Every decoder path enforces a 64 MiB aggregate coded-payload and conservatively estimated working-state limit. Compatible opaque, single-item, filter-free AV1 frames reconstruct through two-superblock YUV, prediction, palette, and coefficient-context rings, with finalized bands copied before reuse. Layered items and animation tracks retain unselected OBUs or samples only as bounded source views; only the selected complete frame enters reconstruction, without OBU concatenation or copies. Compatible filter-free alpha auxiliaries with aligned orientation reconstruct through a synchronized second row ring. Compatible full-aperture 2x, 4x, and 8x resize input is box-filtered directly from bounded YUV rows before RGBA conversion. Supported clean-aperture regions convert only contributing samples; mirroring and rotation remain ordered block transforms backed by the runtime temporary store when reverse row access is required; opaque grids retain one contributing tile row, CDEF uses delayed 8-row bands, and restoration retains deblocked stripe-boundary rows plus delayed 4-row output bands. Compatible filter-free single-tile super-resolution reuses bounded upscaled luma and chroma band buffers while retaining the source chroma halo across ring reuse. Gain-map resampling retains two decoded gain rows and one aligned base block; gain-map grids inherit bounded contributing tile-row retention. Film-grain frames retain padded full-frame YUV plus bounded template and two-stripe noise buffers. Filtered super-resolution, rotated-alpha, grid, and multi-tile paths retain padded full-frame YUV reconstruction state; filtered super-resolution additionally retains the upscaled YUV planes. Sequential multi-tile decoders allocate entropy, transform, palette, CDEF, and skip contexts for one tile rectangle at a time and merge compact frame-wide post-filter metadata. Filtered 10-bit and 12-bit paths also retain padded full-frame native-depth YUV through post-filtering. The constrained encoder retains padded full-frame target and reconstructed 8-bit YUV planes plus frame-wide coefficient contexts and one encoded tile payload; it never retains a source-sized RGBA copy. Encoder dimensions, pixels, estimated working bytes, and the 4096-wide single-tile boundary are checked before allocation.",
      "recommendation": "Decode common AVIF still images in Node.js and modern browsers; use the exact capability boundary for animation and uncommon AV1 syntax, and treat AVIF encoding as constrained.",
      "evidence": [
        "tests/avif.test.ts",
        "tests/metadata-preservation.test.ts",
        "tests/corruption-fuzz.test.ts",
        "tests/av1.test.ts",
        "tests/av1-post-filter.test.ts",
        "tests/lossy-codec-quality.test.ts",
        "browser-tests/compatibility.pw.ts"
      ],
      "lossyPixelValidation": {
        "status": "independent-oracle",
        "oracle": "Sharp 0.35.3/libaom, avifdec and avifgainmaputil 1.3.0 with libaom 3.12.1 and dav1d 1.5.1, FFmpeg/zimg with libaom and dav1d, Colour's BT.2020 constant-luminance equations, and Chromium",
        "tolerance": "Pinned native YUV fixtures for the documented entropy, transform, high-bit-depth, tile, super-resolution, film-grain, segmentation-map, intra-block-copy, and post-filter paths match agreeing libaom and dav1d output byte for byte where exact reconstruction is expected. Quantization-matrix YUV error is at most 3 with PSNR at least 55 dB; supported displayed RGB paths meet their fixture-specific exact-hash, maximum-error, mean-error, or PSNR contracts. Straight and premultiplied alpha output matches Sharp/libavif exactly after semantic unpremultiplication; grid, orientation, gain-map, ICC, and clean-aperture results use pinned Sharp, libavif, Chromium, deterministic-source, or FFmpeg/zimg oracles. Explicitly selected animated color and alpha sync samples match pinned FFmpeg/dav1d PNGs within channel-specific maximum errors. Three PQ SDR tone-map fixtures use checksum-pinned FFmpeg/zimg Reinhard evidence: P3/PQ maximum error 2 and PSNR above 50 dB, identity Rec.2020/PQ maximum error 1 and PSNR above 54 dB, and chroma-derived P3/PQ maximum error 1 and PSNR above 53 dB. HLG uses independently calculated neutral and saturated BT.2100 shared-luminance OOTF vectors plus a pinned end-to-end AVIF RGBA hash in Node.js, Chromium, and Firefox; FFmpeg/zimg's componentwise HLG transfer is explicitly not used as its numeric oracle. All supported browser workflows pin portable TypeScript RGBA output independently.",
        "evidence": [
          "tests/avif.test.ts",
          "tests/lossy-codec-quality.test.ts",
          "tests/av1-post-filter.test.ts",
          "benchmark/avif/verify-qmatrix-fixtures.ts",
          "benchmark/avif/verify-intrabc-fixture.ts",
          "benchmark/avif/verify-segmentation-fixture.ts",
          "benchmark/avif/verify-tiled-lossless-fixture.ts",
          "benchmark/avif/verify-lossy-multitile-fixture.ts",
          "benchmark/avif/verify-high-bit-expanded-fixtures.ts",
          "benchmark/results/avif-high-bit-lossy-2026-08-09.md",
          "benchmark/results/avif-high-bit-post-filters-2026-08-09.md",
          "benchmark/avif/verify-layered-fixture.ts",
          "benchmark/results/avif-layered-selection-2026-08-09.md",
          "benchmark/avif/verify-superres-fixture.ts",
          "benchmark/avif/verify-film-grain-fixture.ts",
          "benchmark/avif/verify-mirror-fixtures.ts",
          "benchmark/results/avif-imir-2026-08-09.md",
          "benchmark/avif/verify-nonstill-sequence-fixture.ts",
          "benchmark/avif/verify-common-photo-syntax-fixtures.ts",
          "benchmark/avif/verify-still-picture-entropy-fixtures.ts",
          "benchmark/avif/verify-color-fixtures.ts",
          "benchmark/avif/matrix10-reference.ts",
          "benchmark/results/avif-compatibility-survey-2026-08-10.md",
          "benchmark/results/avif-imazen-compatibility-2026-08-11.md",
          "benchmark/results/avif-imazen-compatibility-2026-08-11.json",
          "benchmark/results/avif-memory-bounded-filtered-2026-08-10.json",
          "benchmark/results/avif-memory-auxiliary-film-grain-2026-08-10.json",
          "benchmark/results/avif-memory-high-depth-2026-08-09.json"
        ]
      },
      "claims": [
        {
          "status": "supported",
          "text": "Implement AVIF and AV1 in this repository without a production codec dependency, native library, or WebAssembly module"
        },
        {
          "status": "supported",
          "text": "Keep independent AVIF implementations as development-only research, fixture, and benchmark oracles"
        },
        {
          "status": "supported",
          "text": "Make metadata inspection available without decoding AV1 pixels"
        },
        {
          "status": "supported",
          "text": "Prioritize static still-image decode before animation"
        },
        {
          "status": "supported",
          "text": "Prioritize opaque 8-bit Main Profile YUV 4:2:0 photographs before high-bit-depth, alpha, and uncommon chroma layouts"
        },
        {
          "status": "supported",
          "text": "Return explicit unsupported errors for features outside the implemented pixel path rather than fabricating a normal-looking image"
        },
        {
          "status": "supported",
          "text": "Treat bounded-memory AVIF-to-resize and AVIF-to-AVIF workflows as the long-term AWS Lambda architecture target"
        },
        {
          "status": "supported",
          "text": "Implement the initial constrained AVIF encoder"
        },
        {
          "status": "supported",
          "text": "Publish AVIF read support as `Yes` for common still-image workflows while keeping uncommon AV1 syntax and dependent animation as explicit unsupported boundaries"
        },
        {
          "status": "supported",
          "text": "Content detection through an `ftyp` box declaring `avif` or `avis`"
        },
        {
          "status": "supported",
          "text": "Explicit `avifCodec` registration and automatic detection through the configured library instance"
        },
        {
          "status": "supported",
          "text": "32-bit box sizes, extended 64-bit sizes, and boxes extending to the end of their parent"
        },
        {
          "status": "supported",
          "text": "`uuid` box header sizing"
        },
        {
          "status": "supported",
          "text": "Validated parent bounds, safe-integer offsets, box counts, and metadata payload limits"
        },
        {
          "status": "supported",
          "text": "Required `ftyp` and `meta` discovery"
        },
        {
          "status": "supported",
          "text": "Primary-item selection through `pitm`"
        },
        {
          "status": "supported",
          "text": "Item information through version 2 and 3 `infe` entries in `iinf`"
        },
        {
          "status": "supported",
          "text": "Item properties and associations through `ipco` and `ipma`"
        },
        {
          "status": "supported",
          "text": "Item references through version 0 and 1 `iref`"
        },
        {
          "status": "supported",
          "text": "Item locations through version 0-2 `iloc`"
        },
        {
          "status": "supported",
          "text": "File-relative `mdat` item extents"
        },
        {
          "status": "supported",
          "text": "`idat`-relative item extents"
        },
        {
          "status": "supported",
          "text": "Multiple extents per coded item"
        },
        {
          "status": "supported",
          "text": "Bounded extraction with overlap, truncation, overflow, and extent-source validation"
        },
        {
          "status": "planned",
          "text": "Incremental AV1 item reads without concatenating multi-extent payloads"
        },
        {
          "status": "planned",
          "text": "Multiple `meta` boxes or fragmented media representations"
        },
        {
          "status": "planned",
          "text": "External data references"
        },
        {
          "status": "supported",
          "text": "Primary `av01` image items"
        },
        {
          "status": "supported",
          "text": "Grid item dimensions, rows, columns, and `dimg` tile relationships during metadata and bitstream inspection"
        },
        {
          "status": "supported",
          "text": "Alpha auxiliary-item discovery through `auxl` and the standard alpha `auxC` identifiers"
        },
        {
          "status": "supported",
          "text": "Spatial extents through `ispe`"
        },
        {
          "status": "supported",
          "text": "Standard and extended `pixi` channel-depth parsing"
        },
        {
          "status": "supported",
          "text": "AV1 configuration through `av1C`"
        },
        {
          "status": "supported",
          "text": "NCLX color primaries, transfer characteristics, matrix coefficients, and full-range signaling"
        },
        {
          "status": "supported",
          "text": "ICC-profile presence through `prof` and `rICC`"
        },
        {
          "status": "supported",
          "text": "Rotation through `irot` and conversion to pipeline orientation metadata"
        },
        {
          "status": "supported",
          "text": "Width, height, alpha presence, bit depth, chroma subsampling, AV1 profile, color-space description, frame count, and orientation reporting"
        },
        {
          "status": "supported",
          "text": "Cross-check `pixi` bit depth against `av1C`"
        },
        {
          "status": "supported",
          "text": "Cross-check `av1C` profile, bit depth, chroma, level, and tier against the authoritative AV1 sequence header during bitstream inspection"
        },
        {
          "status": "supported",
          "text": "Pixel decoding and composition of compatible opaque grid items"
        },
        {
          "status": "supported",
          "text": "Pixel decoding and composition of compatible alpha auxiliary items"
        },
        {
          "status": "supported",
          "text": "Validated integer-dimension clean-aperture cropping through `clap` with exact integer or half-integer sample origins; other fractions remain unsupported"
        },
        {
          "status": "supported",
          "text": "Mirroring through `imir`, ordered `clap`/`irot`/`imir` validation, and composition into pipeline orientation metadata"
        },
        {
          "status": "planned",
          "text": "Pixel-aspect-ratio and other transformative item properties"
        },
        {
          "status": "supported",
          "text": "ISO 21496-1 gain-map metadata, `dimg` relationships, and preferred alternative selection through `altr` entity groups"
        },
        {
          "status": "planned",
          "text": "Depth maps, thumbnails, overlays, derived images other than grids and compatible gain maps, and other auxiliary-image semantics"
        },
        {
          "status": "supported",
          "text": "EXIF item discovery and opt-in preservation through `keepExif()`"
        },
        {
          "status": "planned",
          "text": "XMP item discovery and metadata exposure"
        },
        {
          "status": "supported",
          "text": "Compatible RGB matrix/TRC ICC profile parsing, color-managed conversion, and opt-in preservation through `keepIcc()`"
        },
        {
          "status": "supported",
          "text": "Metadata stripping by default and explicit EXIF and ICC preservation controls when re-encoding"
        },
        {
          "status": "supported",
          "text": "Low-overhead OBU headers with explicit LEB128 payload sizes"
        },
        {
          "status": "supported",
          "text": "Temporal and spatial OBU extension identifiers"
        },
        {
          "status": "supported",
          "text": "Sequence-header discovery and uniqueness validation"
        },
        {
          "status": "supported",
          "text": "Reduced still-picture sequence headers"
        },
        {
          "status": "supported",
          "text": "AV1 profile, level, tier, bit depth, monochrome, chroma subsampling, color configuration, operating points, and coded dimensions"
        },
        {
          "status": "supported",
          "text": "Sequence feature flags needed by the still decoder, including 64/128 superblocks, filter-intra, intra-edge filtering, CDEF, restoration, and super-resolution signaling"
        },
        {
          "status": "supported",
          "text": "Preservation of bounded OBU payload ranges for later frame parsing"
        },
        {
          "status": "supported",
          "text": "Compatible non-reduced sequence headers with one operating point, `still_picture=0`, and one shown key frame at maximum or explicitly overridden dimensions"
        },
        {
          "status": "planned",
          "text": "General non-reduced sequence headers with decoder timing, multiple operating points, frame IDs, or inter-frame dimension overrides"
        },
        {
          "status": "planned",
          "text": "Multiple operating-point selection"
        },
        {
          "status": "planned",
          "text": "Annex B AV1 byte streams"
        },
        {
          "status": "planned",
          "text": "Inter-frame or general video decoding"
        },
        {
          "status": "supported",
          "text": "One complete AV1 frame OBU or one frame-header OBU followed by complete contiguous tile-group OBUs per coded image item"
        },
        {
          "status": "supported",
          "text": "Reduced still-picture headers and compatible non-reduced shown key frames"
        },
        {
          "status": "supported",
          "text": "AV1 Main, High, and Professional Profiles with 8-bit monochrome, YUV 4:2:0, YUV 4:2:2, and YUV 4:4:4 output"
        },
        {
          "status": "supported",
          "text": "Coded-lossless 10-bit and 12-bit YUV 4:2:0 and YUV 4:4:4 output with native high-depth planes and explicit conversion to the 8-bit RGBA contract"
        },
        {
          "status": "supported",
          "text": "Lossless and lossy quantization paths used by the permanent fixtures"
        },
        {
          "status": "supported",
          "text": "64x64 and 128x128 superblocks"
        },
        {
          "status": "supported",
          "text": "Complete compatible lossy 8-bit and coded-lossless high-bit-depth multi-tile frames in one frame OBU, plus compatible 8-bit frames split across complete contiguous tile-group OBUs"
        },
        {
          "status": "supported",
          "text": "Range-coded symbol decoding with adaptive CDF updates and final-state validation"
        },
        {
          "status": "supported",
          "text": "Skip signaling, keyframe intra modes, angle deltas, transform selection, and coefficient contexts"
        },
        {
          "status": "supported",
          "text": "Coefficient all-zero contexts use full coded block dimensions across bounded reconstruction chunks, and palette-mode signaling retains its above-size context across 64-pixel row boundaries"
        },
        {
          "status": "supported",
          "text": "`NONE`, `SPLIT`, horizontal, vertical, horizontal-4, vertical-4, and tip-split intra partition traversal"
        },
        {
          "status": "supported",
          "text": "Exact structural top-right and bottom-left edge availability across the partition tree and at superblock/frame boundaries"
        },
        {
          "status": "supported",
          "text": "DC, vertical, horizontal, all directional, smooth, Paeth, and filter-intra prediction modes used by common photographic input"
        },
        {
          "status": "supported",
          "text": "Chroma-from-luma prediction"
        },
        {
          "status": "supported",
          "text": "Intra-edge filtering and edge upsampling"
        },
        {
          "status": "supported",
          "text": "Square and rectangular transform traversal through 64x64"
        },
        {
          "status": "supported",
          "text": "DCT, ADST, flipped-ADST, and identity inverse-transform combinations needed by the permanent common-photo corpus"
        },
        {
          "status": "supported",
          "text": "Lossless 4x4 Walsh-Hadamard inverse transforms"
        },
        {
          "status": "supported",
          "text": "Nonzero coefficient reconstruction in quantizer contexts 0, 1, 2, and 3"
        },
        {
          "status": "supported",
          "text": "8-bit, 10-bit, and 12-bit dequantization and inverse transforms using the normative depth-specific AV1 lookup tables"
        },
        {
          "status": "supported",
          "text": "Quantization-matrix reconstruction for every supported two-dimensional transform size, including flat level 15 matrices"
        },
        {
          "status": "supported",
          "text": "Matrix lookup in the inverse-transform kernels' coefficient-axis order, including AV1's adjusted 32x32 matrix dimensions for 64-point transforms"
        },
        {
          "status": "supported",
          "text": "Block delta-Q reconstruction in the supported one-tile intra-only path"
        },
        {
          "status": "supported",
          "text": "Odd-dimension edge clipping without decoding transforms outside the coded frame"
        },
        {
          "status": "supported",
          "text": "Monochrome replication, direct YUV 4:4:4 sampling, horizontal YUV 4:2:2 interpolation, bilinear YUV 4:2:0 sampling, and container-signaled NCLX conversion to RGBA, including the full-range identity color transform"
        },
        {
          "status": "supported",
          "text": "Linear and extended-sRGB plus linear BT.2020 NCLX conversion to sRGB, and compatible RGB matrix/TRC ICC conversion to sRGB"
        },
        {
          "status": "supported",
          "text": "Compatible same-size, single-channel ISO gain-map composition in linear light for HDR base images with an SDR alternate"
        },
        {
          "status": "supported",
          "text": "Straight and premultiplied alpha auxiliary composition using full-range 8-bit monochrome alpha, including normalization to straight RGBA output"
        },
        {
          "status": "supported",
          "text": "Opaque image grids with consistent independently coded tile dimensions and cropped right or bottom edge tiles"
        },
        {
          "status": "supported",
          "text": "Public crop, resize, AVIF-to-PNG, AVIF-to-JPEG, AVIF-to-WebP, and AVIF-to-other-implemented-codec pipelines after frame reconstruction"
        },
        {
          "status": "supported",
          "text": "Multiple independently decoded AV1 tiles"
        },
        {
          "status": "planned",
          "text": "Tile-list OBUs or partial, overlapping, reordered, or missing tile groups"
        },
        {
          "status": "supported",
          "text": "Alpha-bearing image grids"
        },
        {
          "status": "supported",
          "text": "Skipped intra block copy with adaptive integer motion-vector coding"
        },
        {
          "status": "supported",
          "text": "Residual intra-block-copy transform partitions, transform types, coefficients, inverse transforms, and reconstruction used by the pinned monochrome fixture"
        },
        {
          "status": "supported",
          "text": "Full-block transform-size contexts, nearest reference-motion candidate stacks, and subsampled bilinear chroma prediction used by four pinned Microsoft still-picture intra-block-copy frames"
        },
        {
          "status": "supported",
          "text": "Decode transform-depth symbols for skipped intra blocks when transform-size selection is enabled"
        },
        {
          "status": "planned",
          "text": "Other intra-block-copy and screen-content tools outside pinned syntax"
        },
        {
          "status": "supported",
          "text": "Clear palette contexts after intra-block-copy blocks and honor block delta-Q state in the restricted one-tile path"
        },
        {
          "status": "supported",
          "text": "Spatial segment-ID decoding for frame-independent intra-only maps using the adaptive AV1 segment CDF and neighboring segment predictor"
        },
        {
          "status": "supported",
          "text": "Segment-specific alternate quantizers, reduced transform-set CDFs, and luma/chroma loop-filter adjustments"
        },
        {
          "status": "supported",
          "text": "Reject pre-skip reference-frame, skip, and global-motion segment features plus mixed lossless/lossy segment combinations before reconstruction"
        },
        {
          "status": "planned",
          "text": "Temporal segmentation updates, delta loop filters, and segmentation plus block delta-Q combinations outside the pinned intra-only subset"
        },
        {
          "status": "planned",
          "text": "Every legal transform-size, transform-type, coefficient-context, and quantizer-context combination"
        },
        {
          "status": "supported",
          "text": "Normative eight-tap horizontal super-resolution for filter-free one-tile 8-bit frames"
        },
        {
          "status": "supported",
          "text": "Film grain synthesis"
        },
        {
          "status": "supported",
          "text": "Parse loop-filter header syntax sufficiently to remain synchronized"
        },
        {
          "status": "supported",
          "text": "Parse CDEF header syntax and per-unit CDEF indexes"
        },
        {
          "status": "supported",
          "text": "Parse restoration types and restoration-unit sizes"
        },
        {
          "status": "supported",
          "text": "Consume none, Wiener, self-guided, and switchable restoration-unit syntax"
        },
        {
          "status": "supported",
          "text": "Maintain Wiener and self-guided reference parameters while reading units"
        },
        {
          "status": "supported",
          "text": "Apply the AV1 deblocking loop filter for the supported intra-only frame state, including luma/chroma strengths, transform edges, wide/narrow filters, odd dimensions, and frame boundaries"
        },
        {
          "status": "supported",
          "text": "Apply CDEF to luma and chroma planes with directional strength adjustment and frame-edge sample availability"
        },
        {
          "status": "supported",
          "text": "Apply Wiener loop restoration with stripe-aware deblocked/CDEF source selection"
        },
        {
          "status": "supported",
          "text": "Apply self-guided loop restoration with stripe-aware source selection"
        },
        {
          "status": "supported",
          "text": "Apply filters in deblock, CDEF, then loop-restoration order when super-resolution is not signaled"
        },
        {
          "status": "supported",
          "text": "Apply super-resolution between CDEF and loop restoration for filtered frames"
        },
        {
          "status": "supported",
          "text": "Match dav1d and libaom post-filter YUV pixels exactly for deterministic disabled, deblock, luma/chroma CDEF, Wiener, self-guided, odd-dimension, frame-edge, multiple-restoration-unit, and filtered super-resolution fixtures; the numeric tolerance is zero"
        },
        {
          "status": "supported",
          "text": "Apply deblocking, CDEF, and restoration once across a complete lossy multi-tile frame and match agreeing dav1d and libaom native YUV byte for byte"
        },
        {
          "status": "supported",
          "text": "8-bit monochrome"
        },
        {
          "status": "supported",
          "text": "Coded-lossless and filter-free lossy 10-bit and 12-bit YUV 4:2:0"
        },
        {
          "status": "supported",
          "text": "8-bit YUV 4:2:2"
        },
        {
          "status": "supported",
          "text": "Filter-free lossy 10-bit and 12-bit YUV 4:2:2"
        },
        {
          "status": "supported",
          "text": "8-bit YUV 4:4:4"
        },
        {
          "status": "supported",
          "text": "Coded-lossless and filter-free lossy 10-bit and 12-bit YUV 4:4:4 identity-color decode, including compatible coded-lossless multi-tile frames"
        },
        {
          "status": "supported",
          "text": "Lossy 10-bit YUV 4:4:4 decode with filter-free output and compatible deblocking, CDEF, and Wiener restoration"
        },
        {
          "status": "supported",
          "text": "Filtered lossy 10-bit YUV 4:2:0 and 4:2:2 with compatible deblocking, CDEF, and Wiener restoration, plus self-guided-restored lossy 10-bit YUV 4:2:0 and YUV 4:4:4"
        },
        {
          "status": "supported",
          "text": "Filtered lossy 12-bit YUV 4:2:0 with compatible deblocking, CDEF, and Wiener or self-guided restoration"
        },
        {
          "status": "supported",
          "text": "Filtered lossy 12-bit YUV 4:2:2 and YUV 4:4:4 with compatible deblocking and CDEF"
        },
        {
          "status": "supported",
          "text": "Filtered lossy 12-bit YUV 4:2:2 with deblocking plus mixed self-guided luma and Wiener chroma restoration, and YUV 4:4:4 with deblocking plus self-guided luma restoration"
        },
        {
          "status": "supported",
          "text": "Filtered lossy 12-bit 642x386 YUV 4:2:2 with all-plane Wiener or self-guided restoration and YUV 4:4:4 with mixed self-guided, Wiener, and switchable plane restoration"
        },
        {
          "status": "supported",
          "text": "Apply deblocking, CDEF, and restoration in normative order across multiple 256-sample restoration units and partial right/bottom frame edges"
        },
        {
          "status": "planned",
          "text": "Other high-depth post-filter combinations outside the pinned YUV 4:2:0 and 642x386 YUV 4:2:2/4:4:4 restoration matrix"
        },
        {
          "status": "supported",
          "text": "Full-range high-bit-depth reconstruction without premature truncation before explicit conversion to the library's 8-bit RGBA output contract"
        },
        {
          "status": "supported",
          "text": "Compatible full-range 8-bit monochrome alpha auxiliaries"
        },
        {
          "status": "supported",
          "text": "Premultiplied-alpha signaling and normalization to straight RGBA"
        },
        {
          "status": "supported",
          "text": "Multi-item opaque grids with cropped right and bottom edge composition"
        },
        {
          "status": "supported",
          "text": "Compatible non-reduced shown key-frame headers without decoder timing or frame IDs, including selected key-frame dimension overrides below the sequence maximum"
        },
        {
          "status": "supported",
          "text": "One still frame stored as a frame-header OBU followed by multiple complete contiguous tile-group OBUs"
        },
        {
          "status": "supported",
          "text": "Explicit lsel spatial-layer selection from a1lx-indexed multi-frame items when the selected output is an independently decodable shown key frame, including a lower-resolution base layer with a frame-dimension override"
        },
        {
          "status": "supported",
          "text": "Classify shown key, inter, intra-only, switch, and show-existing frame headers before reconstruction and explicitly reject dependent enhancement layers"
        },
        {
          "status": "planned",
          "text": "Dependent enhancement layers and rendering all intermediate layers"
        },
        {
          "status": "supported",
          "text": "Convert compatible PQ and HLG NCLX signaling directly to tone-mapped SDR RGBA unless a compatible SDR gain-map alternate is selected"
        },
        {
          "status": "supported",
          "text": "Rec.2020/PQ NCLX matrix 10 constant-luminance conversion"
        },
        {
          "status": "planned",
          "text": "Broader ICC-managed conversion"
        },
        {
          "status": "supported",
          "text": "Detect the `avis` sequence brand and avoid reporting a false one-frame metadata count or silently decoding its primary still item"
        },
        {
          "status": "supported",
          "text": "Parse AVIF tracks and sample tables with bounded counts, exact cross-timescale timing alignment, sample extents, sync-sample indices, and color/alpha relationships"
        },
        {
          "status": "supported",
          "text": "Decode an explicitly selected independently decodable color and alpha key sample and reject dependent, inter, show-existing, and out-of-range selections"
        },
        {
          "status": "supported",
          "text": "Accept only single full-duration identity edit lists and explicitly reject trimmed animation edits and track-level clean apertures"
        },
        {
          "status": "planned",
          "text": "Dependent animated AV1 frame reconstruction, timing exposure, repetition, blending, disposal, and canvas composition"
        },
        {
          "status": "planned",
          "text": "Animated AVIF frame iteration"
        },
        {
          "status": "planned",
          "text": "Animated AVIF encoding"
        },
        {
          "status": "supported",
          "text": "Public `image.avif()` and `image.encode('avif')` APIs"
        },
        {
          "status": "supported",
          "text": "AVIF `ftyp`, `meta`, item properties, item locations, and `mdat` writer"
        },
        {
          "status": "supported",
          "text": "One opaque `av01` primary item"
        },
        {
          "status": "supported",
          "text": "Reduced still-picture AV1 sequence and one shown key frame"
        },
        {
          "status": "supported",
          "text": "8-bit Main Profile YUV 4:2:0"
        },
        {
          "status": "supported",
          "text": "Gray, RGB, and RGBA pipeline input, with RGBA composited against white by default or an explicit solid background"
        },
        {
          "status": "supported",
          "text": "BT.709 RGB-to-YUV conversion and deterministic 4:2:0 subsampling"
        },
        {
          "status": "planned",
          "text": "Quality control from the public 1-100 scale to AV1 quantization"
        },
        {
          "status": "supported",
          "text": "Deterministic full-superblock 4x4 partitioning with DC prediction and lossless 4x4 transforms"
        },
        {
          "status": "supported",
          "text": "Reject widths above 4,096 pixels, heights above 65,536 pixels, and padded single-tile areas above 4,096 by 2,304 pixels"
        },
        {
          "status": "supported",
          "text": "Deterministic valid output accepted by independent AVIF decoders"
        },
        {
          "status": "planned",
          "text": "Output-size and perceptual-quality benchmarks against libaom, rav1e, and SVT-AV1"
        },
        {
          "status": "planned",
          "text": "Alpha auxiliary-item encoding"
        },
        {
          "status": "planned",
          "text": "Lossless AVIF encoding"
        },
        {
          "status": "planned",
          "text": "YUV 4:4:4 and 4:2:2 output"
        },
        {
          "status": "planned",
          "text": "10-bit and 12-bit output"
        },
        {
          "status": "planned",
          "text": "Wide-gamut and HDR color signaling"
        },
        {
          "status": "planned",
          "text": "Adaptive partition, prediction, transform, and quantizer decisions"
        },
        {
          "status": "planned",
          "text": "Loop-filter, CDEF, and restoration decisions"
        },
        {
          "status": "planned",
          "text": "Multi-tile and grid output for large images"
        },
        {
          "status": "supported",
          "text": "EXIF item and compatible RGB ICC profile writing when explicitly preserved"
        },
        {
          "status": "planned",
          "text": "XMP and other metadata writing or preservation"
        },
        {
          "status": "planned",
          "text": "Animation"
        },
        {
          "status": "supported",
          "text": "Metadata inspection reads bounded box payloads without decoding image pixels"
        },
        {
          "status": "supported",
          "text": "Item extraction validates compressed byte ranges before allocation"
        },
        {
          "status": "supported",
          "text": "Public decoded output is emitted as ordered 32-row `rgba8` pixel blocks"
        },
        {
          "status": "supported",
          "text": "Configurable input-size, dimension, pixel-count, frame-count, and decoded byte limits are applied before public pixel decode"
        },
        {
          "status": "supported",
          "text": "Post-filtered, rotated-alpha, and grid paths' padded full-frame YUV allocations are documented as temporary fallbacks rather than the Lambda northstar"
        },
        {
          "status": "supported",
          "text": "RGBA conversion emits requested regions in ordered 32-row blocks without retaining a source-sized RGBA bitmap"
        },
        {
          "status": "supported",
          "text": "Opaque grids decode and retain only one contributing tile row while composing ordered output bands"
        },
        {
          "status": "supported",
          "text": "Loop restoration writes through three delayed 4-row luma bands rather than allocating another padded full-frame YUV output"
        },
        {
          "status": "supported",
          "text": "CDEF snapshots bounded source windows and delays one 8-row luma output band instead of retaining an additional padded YUV frame"
        },
        {
          "status": "supported",
          "text": "Compatible opaque filter-free single-item frames reconstruct through reusable two-superblock YUV, prediction, palette, and coefficient-context rings, copying finalized bands before their storage is reused"
        },
        {
          "status": "supported",
          "text": "Compatible filter-free single-tile super-resolution reuses bounded upscaled luma and chroma band buffers and retains the source chroma halo across reconstruction-ring reuse"
        },
        {
          "status": "supported",
          "text": "Compatible aligned filter-free alpha auxiliaries reconstruct through a synchronized second row ring before per-block alpha composition"
        },
        {
          "status": "supported",
          "text": "Compatible gain-map composition synchronizes bounded base and gain-map row decoders without retaining a source-sized RGBA frame"
        },
        {
          "status": "supported",
          "text": "Every decoder path rejects coded payload plus conservatively estimated live working state above the 64 MiB codec limit"
        },
        {
          "status": "supported",
          "text": "AVIF track sample counts are rejected against maxFrames before allocating duration, offset, size, description-index, or sync-sample arrays"
        },
        {
          "status": "supported",
          "text": "Sequential multi-tile decode retains only one tile rectangle of entropy, transform, palette, CDEF, and skip contexts while merging compact frame-wide post-filter metadata; padded full-frame YUV remains an explicit fallback"
        },
        {
          "status": "supported",
          "text": "Constrained encode checks dimensions, pixel count, estimated padded YUV working state, AV1 single-tile width, and padded superblock area before allocation"
        },
        {
          "status": "supported",
          "text": "Constrained encode retains padded target and reconstructed YUV 4:2:0 planes, frame-wide coefficient contexts, and one tile payload without a source-sized RGBA copy"
        },
        {
          "status": "supported",
          "text": "Measure the checksum-pinned 3840x2160 8x2-tile deblock-plus-CDEF fixture in three isolated cold processes: median absolute peak RSS 165,031,936 bytes, RSS growth 61,734,912 bytes, external growth 33,290,386 bytes, and ArrayBuffer growth 32,738,320 bytes"
        },
        {
          "status": "planned",
          "text": "Decode one tile or bounded superblock working set at a time"
        },
        {
          "status": "supported",
          "text": "Avoid retaining a full source-resolution RGBA bitmap"
        },
        {
          "status": "supported",
          "text": "Feed compatible full-aperture 2x, 4x, and 8x resize directly from bounded box-filtered YUV rows before RGBA conversion"
        },
        {
          "status": "planned",
          "text": "Avoid RGB entirely for compatible AVIF-to-resize-to-AVIF workflows"
        },
        {
          "status": "planned",
          "text": "Release coefficient, prediction, filter, and restoration state as soon as its output halo is complete"
        },
        {
          "status": "supported",
          "text": "Apply a codec-specific working-memory limit covering compressed item bytes, tile state, coefficient contexts, YUV planes, filter halos, and RGBA conversion state"
        },
        {
          "status": "supported",
          "text": "Benchmark isolated cold-process peak RSS across 512x384, 1024x768, and 2048x1536 source dimensions with full-size and 4x downscaled output"
        },
        {
          "status": "supported",
          "text": "Benchmark a 2048x1536 filter-free denominator-12 super-resolution decode: bounded bands cut median absolute maximum RSS by 15.2%, peak RSS growth by 54.4%, external growth by 49.6%, and ArrayBuffer growth by 50.5%"
        },
        {
          "status": "planned",
          "text": "Demonstrate the project's 80% memory-reduction target against equivalent Jimp-compatible workflows where a comparison is possible"
        },
        {
          "status": "supported",
          "text": "Reject malformed box sizes, nesting, extents, references, item IDs, property associations, dimensions, and metadata contradictions explicitly"
        },
        {
          "status": "supported",
          "text": "Reject malformed OBU sizes, duplicate sequence headers, truncated frame headers, tile overruns, invalid arithmetic symbols, impossible partitions, coefficient scans, and transform bounds explicitly"
        },
        {
          "status": "supported",
          "text": "Inspect all 55 checksum-pinned permanent corpus AVIF files and their coded items across `mdat`, `idat`, multiple extents, tracks, grids, alpha, gain maps, mirroring, clean apertures, 8/10/12-bit, 4:0:0/4:2:0/4:2:2/4:4:4, progressive storage, SDR/HDR signaling, layered frame units, reduced and full still-picture headers, and non-still sequence headers"
        },
        {
          "status": "supported",
          "text": "Pass metadata expectations for all 55 permanent corpus AVIF files"
        },
        {
          "status": "supported",
          "text": "Decode exact independent reference pixels for the embedded 2x2 lossless fixture and the 4x4 lossy fixture"
        },
        {
          "status": "supported",
          "text": "Decode and pin RGBA regression hashes for Kodak 768x512 color; Fox 1204x800 YUV 4:2:0, monochrome, YUV 4:2:2, and YUV 4:4:4 photographs; deterministic straight and premultiplied alpha fixtures; and a 1024x770 cropped-edge image grid"
        },
        {
          "status": "supported",
          "text": "Decode and auto-orient both `imir` axes exactly; compose the pinned integer-`clap`, `irot`, `imir`, 2x2 color-grid, and alpha-grid fixture exactly against its deterministic source pixels"
        },
        {
          "status": "supported",
          "text": "Pin separate Sharp and Chromium behavior for combined grid-item transforms"
        },
        {
          "status": "supported",
          "text": "Benchmark both full-size photographs through the public AVIF-to-PNG workflow"
        },
        {
          "status": "supported",
          "text": "Report the current broad decode corpus as 8 compatible, 17 explicitly unsupported, zero invalid, and zero unexpected"
        },
        {
          "status": "supported",
          "text": "Match Sharp/libaom, FFmpeg/dav1d, and FFmpeg/libaom luma exactly and exceed 60 dB displayed-RGB PSNR against Chromium for the checksum-pinned 8-bit monochrome Fox fixture"
        },
        {
          "status": "supported",
          "text": "Match FFmpeg/dav1d and FFmpeg/libaom YUV 4:4:4 planes exactly and exceed 50 dB displayed-RGB PSNR against Sharp/libaom and Chromium for the checksum-pinned 8-bit YUV 4:4:4 Fox fixture"
        },
        {
          "status": "supported",
          "text": "Match FFmpeg/dav1d and FFmpeg/libaom YUV 4:2:2 planes exactly and exceed 50 dB displayed-RGB PSNR against Sharp/libaom for the checksum-pinned 8-bit YUV 4:2:2 Fox fixture"
        },
        {
          "status": "supported",
          "text": "Exercise YUV 4:2:2 decode in Chromium through the portable TypeScript codec and pin its RGBA output; Chromium's native AVIF decoder rejects this Professional Profile source and is not used as its browser oracle"
        },
        {
          "status": "supported",
          "text": "Reconstruct the deterministic coded-lossless 10-bit 2x2 AV1 tile fixture exactly against its source and agreeing dav1d/libaom native YUV"
        },
        {
          "status": "supported",
          "text": "Match agreeing dav1d and libaom native YUV byte for byte for a pinned lossy 10-bit YUV 4:4:4 frame with deblocking, CDEF, and Wiener restoration active on all three planes"
        },
        {
          "status": "supported",
          "text": "Match agreeing dav1d and libaom native YUV byte for byte for pinned filter-free lossy 10-bit and 12-bit YUV 4:2:0, 4:2:2, and 4:4:4 frames"
        },
        {
          "status": "supported",
          "text": "Match agreeing libaom and dav1d native YUV byte for byte for nine pinned filtered lossy high-depth frames: 10-bit YUV 4:2:0 with deblocking, CDEF, and Wiener; 10-bit YUV 4:2:2 with CDEF and Wiener; 10-bit YUV 4:2:0 with self-guided restoration; 10-bit YUV 4:4:4 with self-guided restoration; 12-bit YUV 4:2:0 with deblocking, CDEF, and Wiener or self-guided restoration; and 12-bit YUV 4:2:0, 4:2:2, and 4:4:4 with deblocking and CDEF"
        },
        {
          "status": "supported",
          "text": "Exercise all nine pinned filtered high-depth fixtures through the portable codec entry in Chromium and pin independent portable and native Chromium RGBA hashes and maximum RGB differences"
        },
        {
          "status": "supported",
          "text": "Select an independently decodable shown-key spatial layer from a pinned three-frame a1lx/lsel item and match agreeing dav1d/libaom native YUV exactly"
        },
        {
          "status": "supported",
          "text": "Match agreeing FFmpeg/dav1d and FFmpeg/libaom native YUV byte for byte for three checksum-pinned filter-free denominator-12 YUV 4:2:0 and 4:4:4 super-resolution fixtures, including a multi-band 4:2:0 chroma boundary"
        },
        {
          "status": "supported",
          "text": "Match agreeing FFmpeg/dav1d and FFmpeg/libaom native YUV byte for byte for a checksum-pinned lossy 8-bit YUV 4:2:0 2x2 tile frame exercising deblocking, CDEF, and restoration"
        },
        {
          "status": "supported",
          "text": "Exercise lossy multi-tile AVIF decode through the portable TypeScript codec in Chromium and pin its RGBA output"
        },
        {
          "status": "supported",
          "text": "Match agreeing FFmpeg/dav1d and FFmpeg/libaom native YUV byte for byte for a checksum-pinned 3840x2160 YUV 4:2:0 8x2 tile frame with deblocking and CDEF, and exercise its ordered 32-row RGBA output in Node.js and Chromium"
        },
        {
          "status": "supported",
          "text": "Match a checksum-pinned non-reduced 8-bit YUV 4:2:0 frame split across four tile-group OBUs byte for byte against agreeing dav1d and libaom native YUV, and exercise its pinned RGBA output in Chromium"
        },
        {
          "status": "supported",
          "text": "Match a checksum-pinned `still_picture=0` static AVIF's 1920x1080 native YUV byte for byte against agreeing dav1d and libaom output, and pin its portable RGBA output in Chromium"
        },
        {
          "status": "supported",
          "text": "Match three checksum-pinned FFmpeg/libaom and Sharp/libaom common-photo AVIF fixtures byte for byte against agreeing dav1d and libaom native YUV, and pin their portable RGBA outputs in Chromium"
        },
        {
          "status": "supported",
          "text": "Exercise single-band and multi-band filter-free AV1 super-resolution through the portable TypeScript codec in Chromium and pin their RGBA output"
        },
        {
          "status": "supported",
          "text": "Match agreeing FFmpeg/dav1d and FFmpeg/libaom native YUV byte for byte for a checksum-pinned CDEF-plus-Wiener denominator-12 YUV 4:2:0 super-resolution fixture with a non-block-aligned coded width"
        },
        {
          "status": "supported",
          "text": "Exercise filtered AV1 super-resolution through the portable TypeScript codec in Chromium and pin its RGBA output"
        },
        {
          "status": "supported",
          "text": "Match agreeing dav1d and libaom native YUV byte for byte for a checksum-pinned AV1 film-grain test vector and hold displayed RGBA to maximum channel error 2 against both native decoders"
        },
        {
          "status": "supported",
          "text": "Exercise AV1 film-grain synthesis through the portable TypeScript codec in Chromium and pin its RGBA output"
        },
        {
          "status": "supported",
          "text": "Match Sharp/libavif RGBA exactly for checksum-pinned straight and premultiplied alpha fixtures after normalizing premultiplied color to the library's straight-RGBA pixel contract"
        },
        {
          "status": "supported",
          "text": "Exceed 54 dB RGBA PSNR against Sharp/libavif for the checksum-pinned cropped-edge 1x5 image grid"
        },
        {
          "status": "supported",
          "text": "Exercise straight alpha, premultiplied alpha, and image-grid composition through the portable TypeScript codec in Chromium and pin each PNG output"
        },
        {
          "status": "supported",
          "text": "Match compatible RGB matrix/TRC ICC output exactly against Sharp/libvips for two checksum-pinned fixtures"
        },
        {
          "status": "supported",
          "text": "Preserve checksum-pinned EXIF and compatible RGB ICC bytes through AVIF re-encoding in Node.js and Chromium while stripping both by default"
        },
        {
          "status": "supported",
          "text": "Hold linear BT.2020 conversion to maximum channel error 13 and mean error at most 0.5 against an FFmpeg/zimg staged-sRGB oracle"
        },
        {
          "status": "supported",
          "text": "Hold four checksum-pinned single-image, grid, and resampled ISO gain-map outputs to mean channel error at most 1.35 and RGB PSNR at least 39 dB against libavif 1.3.0, and reject a non-preferred tmap"
        },
        {
          "status": "supported",
          "text": "Exercise Rec.2020, RGB ICC, and single-image, grid, and resampled gain-map SDR output through the portable TypeScript codec in Chromium and pin each RGBA output"
        },
        {
          "status": "supported",
          "text": "Keep `@stacksjs/ts-avif` development-only; the published package is not a production dependency"
        },
        {
          "status": "supported",
          "text": "Add exact post-filter comparisons against both dav1d and libaom for five checksum-pinned deterministic fixtures"
        },
        {
          "status": "supported",
          "text": "Decode five checksum-pinned default Sharp 0.35.3/libaom q30 through q90 quantization-matrix fixtures after exact dav1d/libaom oracle agreement"
        },
        {
          "status": "supported",
          "text": "Hold quantization-matrix output to maximum YUV sample error 3 and at least 55 dB PSNR, plus displayed RGB PSNR above 39 dB against Sharp/libaom"
        },
        {
          "status": "supported",
          "text": "Match Sharp/libavif RGB exactly for checksum-pinned lossy and lossless quantizer-context-0 YUV 4:4:4 fixtures, including lossless identity color"
        },
        {
          "status": "supported",
          "text": "Match Sharp/libavif RGBA exactly for the checksum-pinned 33x11 draw-points screen-content fixture using luma and chroma palettes"
        },
        {
          "status": "supported",
          "text": "Match agreeing libaom and dav1d native YUV exactly for the checksum-pinned 320x280 skipped intra-block-copy fixture"
        },
        {
          "status": "supported",
          "text": "Match agreeing libaom and dav1d native YUV exactly for the checksum-pinned 1280x720 monochrome residual intra-block-copy fixture"
        },
        {
          "status": "supported",
          "text": "Match agreeing libaom and dav1d native YUV exactly for the checksum-pinned 512x128 YUV 4:4:4 skipped intra-block-copy plus block delta-Q fixture"
        },
        {
          "status": "supported",
          "text": "Match agreeing libaom and dav1d native YUV exactly for a checksum-pinned rav1e 512x512 YUV 4:2:0 keyframe with four spatial alternate-quantizer segments"
        },
        {
          "status": "supported",
          "text": "Exercise the rav1e spatial-segmentation fixture through the portable codec entry in Chromium and pin its RGBA output"
        },
        {
          "status": "supported",
          "text": "Match agreeing libaom and dav1d native YUV exactly for the checksum-pinned SVT-AV1 512x512 frame with a skipped 64x64 intra transform-selection block"
        },
        {
          "status": "supported",
          "text": "Exercise the SVT-AV1 skipped-transform fixture through the portable codec entry in Chromium and pin its RGBA output"
        },
        {
          "status": "supported",
          "text": "Match agreeing libaom and dav1d native YUV exactly for four pinned 1280x720 and 3840x2160 Microsoft YUV 4:2:0 frames that exercise reduced and full still-picture headers plus non-skipped intra-block copy"
        },
        {
          "status": "supported",
          "text": "Exercise the pinned 1280x720 reduced-header still-picture fixture through the portable codec entry in Chromium and pin its RGBA output"
        },
        {
          "status": "supported",
          "text": "Reject checksum-pinned entropy mutations whose intra-block-copy motion vectors overlap the current superblock or escape the decoded plane"
        },
        {
          "status": "supported",
          "text": "Apply the checksum-pinned 8x6 integer clean aperture to its 16x12 coded image and match Sharp/libavif RGBA exactly"
        },
        {
          "status": "supported",
          "text": "Exercise integer- and half-integer-origin clean-aperture cropping through the portable codec in Chromium and Firefox and pin both RGBA outputs"
        },
        {
          "status": "supported",
          "text": "Apply a checksum-pinned half-integer-origin clean aperture to a 722x1024 coded image and match Sharp/libvips within 0.01 normalized RGBA RMSE"
        },
        {
          "status": "supported",
          "text": "Parse bounded AVIF animation track/sample metadata and match five explicitly selected independent color/alpha key samples to pinned FFmpeg/dav1d PNG oracles"
        },
        {
          "status": "supported",
          "text": "Exercise independent animated color/alpha key-sample selection and dependent-frame rejection through the portable codec in Chromium and Firefox"
        },
        {
          "status": "supported",
          "text": "Tone-map three checksum-pinned PQ YUV 4:4:4 fixtures to SDR against FFmpeg/zimg Reinhard evidence with maximum channel error at most 2 and PSNR above 50 dB"
        },
        {
          "status": "supported",
          "text": "Validate HLG shared-luminance OOTF math against independently calculated neutral and saturated BT.2100 vectors and pin the end-to-end AVIF RGBA hash"
        },
        {
          "status": "supported",
          "text": "Exercise PQ and HLG direct tone mapping through the portable codec in Chromium and Firefox and pin all five RGBA outputs"
        },
        {
          "status": "supported",
          "text": "Decode a checksum-pinned Rec.2020/PQ matrix 10 constant-luminance fixture with clean-aperture cropping; match twelve libavif/dav1d native-YUV plus independent BT.2020 equation samples within one code value and pin full RGBA output in Node.js, Chromium, and Firefox"
        },
        {
          "status": "supported",
          "text": "Reconstruct native 10-bit and 12-bit planes exactly for two checksum-pinned coded-lossless YUV 4:4:4 fixtures and hold displayed RGB maximum error to 1 against Sharp/libavif"
        },
        {
          "status": "supported",
          "text": "Reconstruct native coded-lossless 10-bit and 12-bit YUV 4:2:0 planes and filter-free lossy 10-bit YUV 4:4:4 planes byte for byte against agreeing dav1d and libaom for three checksum-pinned fixtures"
        },
        {
          "status": "supported",
          "text": "Exercise coded-lossless high-bit YUV 4:2:0 and filter-free lossy 10-bit YUV 4:4:4 decode through the portable codec entry in Chromium"
        },
        {
          "status": "supported",
          "text": "Exercise palette-coded 8-bit and coded-lossless 10-bit and 12-bit decoding through the portable codec entry in Chromium"
        },
        {
          "status": "supported",
          "text": "Exercise skipped intra-block-copy decoding through the portable codec entry in Chromium"
        },
        {
          "status": "supported",
          "text": "Keep delta loop-filter syntax explicitly unsupported in the restricted quantization-matrix path"
        },
        {
          "status": "supported",
          "text": "Normalize deterministic bit-flip corruption as `ImageError` across checksum-pinned single-band and multi-band super-resolution, high-bit tile, premultiplied-alpha, restoration-unit, and cropped-grid AVIF syntax classes"
        },
        {
          "status": "supported",
          "text": "Reject truncated restoration-unit symbols, invalid Wiener and self-guided parameters, edge-unit grids, odd frame dimensions, and over-limit restoration state before unsafe reads or allocations"
        },
        {
          "status": "supported",
          "text": "Match full-size Kodak and Fox post-filter pixels exactly against agreeing dav1d and libaom native YUV output"
        },
        {
          "status": "supported",
          "text": "Measure checksum-pinned filtered 10-bit and 12-bit YUV 4:2:0 full-size decode and downscale workflows in isolated cold processes"
        },
        {
          "status": "planned",
          "text": "Move filtered high-depth reconstruction and post-filtering from the explicit padded full-frame native-YUV fallback to the bounded-row architecture"
        },
        {
          "status": "supported",
          "text": "Survey 237 AVIF files spanning 137 conformance/edge/invalid cases and a 100-file GB82 matrix encoded by Sharp/libvips and FFmpeg/libaom; complete all 100 common-photo inputs and 103 conformance inputs"
        },
        {
          "status": "planned",
          "text": "Expand the compatibility corpus with rav1e, SVT-AV1, browser encoders, ImageMagick, cameras, and real web uploads"
        },
        {
          "status": "planned",
          "text": "Add malformed ISOBMFF, OBU, entropy, partition, coefficient, restoration, allocation, and decompression-bomb fuzzing"
        },
        {
          "status": "planned",
          "text": "Add a conformance corpus for every checked AV1 syntax combination rather than relying on shared photographic fixtures"
        },
        {
          "status": "supported",
          "text": "Validate deterministic constrained-encoder samples with Sharp/libavif and FFmpeg/libaom, including odd dimensions across 64x64 superblocks"
        },
        {
          "status": "planned",
          "text": "Validate every encoded output with at least two independent decoders"
        }
      ]
    },
    {
      "id": "heif",
      "name": "HEIF / HEIC (experimental)",
      "experimental": true,
      "packageFormat": "heif",
      "read": {
        "status": "limited",
        "label": "Experimental"
      },
      "write": {
        "status": "unsupported",
        "label": "No"
      },
      "boundary": "Experimental opt-in common intra-only HEVC still subsets; excluded from the default allCodecs set; no auxiliary alpha or encoding",
      "description": "Optional experimental decoder available only through the direct purejsimage/codecs/experimental/heic entry. Decodes common opaque Main, Main Still Picture, and selected Main 10 YUV 4:2:0 intra stills, direct images, and grid primaries. It is not registered by the default allCodecs set.",
      "memory": "Explicitly registered grid workflows decode requested tile rows; large compatible inputs remain explicitly measured",
      "recommendation": "Evaluate compatibility and applicable HEVC patent licensing obligations before opting in, especially for commercial distribution or services.",
      "evidence": ["tests/heif.test.ts"],
      "lossyPixelValidation": {
        "status": "independent-oracle",
        "oracle": "ImageMagick 7.1.2 with libheif 1.20.2",
        "tolerance": "Normalized displayed sRGB RMSE at most 0.035 for compatible corpus entries",
        "evidence": ["tests/heif.test.ts", "benchmark/heif/compatibility/run.ts"]
      },
      "claims": [
        {
          "status": "supported",
          "text": "Prioritize decode for user-upload workflows, including photos uploaded from iPhones, photo libraries, and messaging services"
        },
        {
          "status": "supported",
          "text": "Implement one shared internal codec for `.heif` and `.heic`; the public `experimentalHeicCodec` and `experimentalHeifCodec` names alias that decoder"
        },
        {
          "status": "supported",
          "text": "Scope the first release to HEVC-coded still images in HEIF containers"
        },
        {
          "status": "supported",
          "text": "Keep AV1-coded AVIF in the existing `avifCodec` rather than routing it through the HEIF public surface"
        },
        {
          "status": "supported",
          "text": "Do not implement HEIF or HEIC encoding, container writing, or public `.heif()` / `.heic()` output APIs"
        },
        {
          "status": "supported",
          "text": "Publish HEIF/HEIC only through the experimental direct import and exclude it from the root export, `allCodecs`, and automatic demo registration"
        },
        {
          "status": "supported",
          "text": "Ship the implementation in the npm package without automatically registering or activating it when HEIF/HEIC input is detected"
        },
        {
          "status": "supported",
          "text": "State that MIT copyright permission grants no third-party HEVC patent rights and that users must assess obligations for their own use"
        },
        {
          "status": "supported",
          "text": "Keep all non-PureJsImage decoders and encoders as development-only fixture oracles; the published package must retain no runtime dependencies"
        },
        {
          "status": "supported",
          "text": "Bounded ISO Base Media File Format box parsing exists in the AVIF codec"
        },
        {
          "status": "supported",
          "text": "Existing AVIF parsing covers item information, primary-item selection, item locations, `idat`/`mdat` extents, properties, references, grids, alpha relationships, color information, and rotation"
        },
        {
          "status": "supported",
          "text": "Extract bounded box traversal, brand parsing, checked offsets, and sized integers into an internal ISOBMFF module with format-neutral types, limits, and error context"
        },
        {
          "status": "supported",
          "text": "Extract shared primary-item, item-info, item-location, property-association, and item-reference parsing while retaining typed codec-specific property decoders"
        },
        {
          "status": "supported",
          "text": "Preserve the current AVIF behavior and fixture coverage through that extraction"
        },
        {
          "status": "supported",
          "text": "Detect the common HEIF and HEVC brand families without trusting filename extensions or MIME types"
        },
        {
          "status": "supported",
          "text": "Accept compatible generic HEIF/MIAF brands when the primary item and its required properties identify a supported HEVC still image"
        },
        {
          "status": "supported",
          "text": "Reject AVIF, unsupported coded-image item types, protected items, external data references, and malformed brand/property combinations explicitly"
        },
        {
          "status": "supported",
          "text": "Parse `hvc1` image items and their required `hvcC` decoder configuration"
        },
        {
          "status": "supported",
          "text": "Inspect `grid` primary items and validate their tile references, geometry, and consistent HEVC decoder configurations without claiming pixel decode"
        },
        {
          "status": "supported",
          "text": "Parse HEVC configuration arrays and length-prefixed VPS, SPS, PPS, and image-item NAL units with strict extent and count limits"
        },
        {
          "status": "supported",
          "text": "Parse the hvcC array-completeness bit independently from its reserved bit"
        },
        {
          "status": "supported",
          "text": "Support multiple extents without concatenating the complete compressed item when a bounded reader can traverse them directly"
        },
        {
          "status": "supported",
          "text": "Parse and validate `imir` mirror and `clap` clean-aperture properties, including transform order, aperture bounds, display dimensions, and composed orientation metadata"
        },
        {
          "status": "planned",
          "text": "Add the remaining properties needed by the common-decode group below"
        },
        {
          "status": "supported",
          "text": "Select and decode one declared primary image"
        },
        {
          "status": "supported",
          "text": "Decode a directly coded `hvc1` primary item"
        },
        {
          "status": "supported",
          "text": "Decode `grid` derived images and validate every tile reference, tile geometry, edge crop, and final canvas extent"
        },
        {
          "status": "supported",
          "text": "Decode grid tiles directly into the requested crop/resize workflow rather than first assembling a source-sized RGBA canvas"
        },
        {
          "status": "planned",
          "text": "Support multiple slices and tiles within one coded HEVC picture"
        },
        {
          "status": "supported",
          "text": "Apply `irot`, `imir`, and `clap` in the defined order"
        },
        {
          "status": "supported",
          "text": "Independently validate displayed real-world `imir` and `clap` pixels"
        },
        {
          "status": "supported",
          "text": "Return display dimensions after clean-aperture and orientation transforms"
        },
        {
          "status": "planned",
          "text": "Define and test precedence between native HEIF transforms and EXIF orientation so a photo is never rotated twice"
        },
        {
          "status": "supported",
          "text": "HEVC Main and Main Still Picture profile decode for 8-bit YUV 4:2:0"
        },
        {
          "status": "supported",
          "text": "HEVC Main 10 profile reconstruction for 10-bit YUV 4:2:0"
        },
        {
          "status": "supported",
          "text": "Claim displayed Main 10/PQ compatibility only for the independently validated 8-bit display policy documented below; HLG is not yet promoted"
        },
        {
          "status": "planned",
          "text": "VPS, SPS, PPS, NAL-unit, picture, and slice-header syntax required by supported still pictures"
        },
        {
          "status": "supported",
          "text": "Implement bounded EBSP-to-RBSP validation and parse common SPS and PPS syntax through exact RBSP trailing bits, including coding-tree geometry, scaling lists, reference-picture sets, VUI/HRD, PCM, tile layout, deblocking, and slice-header control flags"
        },
        {
          "status": "supported",
          "text": "Inspect IDR slice-segment headers, resolve their PPS and SPS, bound CTB addresses and entry-point offsets, and validate ordering across multiple slices without reading the CABAC payload"
        },
        {
          "status": "supported",
          "text": "CABAC context initialization, binary arithmetic decoding, bypass bins, and termination with strict end-of-stream checks"
        },
        {
          "status": "supported",
          "text": "Coding-tree-unit and coding-unit partition reconstruction"
        },
        {
          "status": "supported",
          "text": "Planar, DC, and angular intra prediction for luma and chroma"
        },
        {
          "status": "supported",
          "text": "Transform-unit parsing, inverse quantization, inverse transforms, and residual reconstruction for supported transform sizes"
        },
        {
          "status": "supported",
          "text": "Default and signaled scaling lists used by the target profiles"
        },
        {
          "status": "supported",
          "text": "Deblocking and sample-adaptive offset filtering before releasing pixels"
        },
        {
          "status": "planned",
          "text": "Constrained intra prediction, transform skip, PCM, and other tools that valid target-profile still images can signal"
        },
        {
          "status": "supported",
          "text": "Entropy-coding synchronization and WPP entry-point offsets used by Apple Main Still Picture tiles"
        },
        {
          "status": "planned",
          "text": "Tiles within a coded picture, dependent slice segments, and their entry-point layouts"
        },
        {
          "status": "planned",
          "text": "Complete chroma-location, limited/full-range, and odd-dimension handling without off-by-one reads or color-plane shifts"
        },
        {
          "status": "supported",
          "text": "Reject inter-predicted pictures and multilayer NAL units explicitly in the still-image inspection path"
        },
        {
          "status": "supported",
          "text": "Reject profiles outside Main, Main 10, and Main Still Picture, non-IDR random-access pictures, and SPS/PPS range, multilayer, 3D, screen-content, or unspecified extensions explicitly in the inspection path"
        },
        {
          "status": "supported",
          "text": "Parse `colr` properties containing `nclx`, restricted ICC (`rICC`), and unrestricted ICC (`prof`) data"
        },
        {
          "status": "supported",
          "text": "Correctly render the compatible sRGB and Display P3 cases to the pipeline's declared output color space"
        },
        {
          "status": "supported",
          "text": "Resolve matching explicit nclx/VUI matrices, and resolve absent or unspecified matrices only for the pinned SDR/ICC Main or Main Still Picture 4:2:0 HEVC-family evidence policy; reject conflicts and ambiguity explicitly"
        },
        {
          "status": "supported",
          "text": "Convert 8-bit YUV to pipeline pixel blocks without a duplicate full-frame RGB or RGBA allocation"
        },
        {
          "status": "supported",
          "text": "Match the Main 10/PQ displayed SDR oracle at 0.001007 normalized RMSE using signaled-matrix conversion, nearest 4:2:0 chroma, 8-bit rounding, and hard clipping while preserving PQ code values"
        },
        {
          "status": "planned",
          "text": "Preserve opaque, binary-alpha, and partial-alpha values when a supported auxiliary alpha item is present"
        },
        {
          "status": "supported",
          "text": "Decode a valid SDR base image even when unsupported depth, matte, or gain map auxiliary items are also present, with invalid auxiliary payloads proving that `pitm` primary selection wins"
        },
        {
          "status": "supported",
          "text": "Return stable metadata for width, height, bit depth, alpha, frame count, primary item, color description, and orientation"
        },
        {
          "status": "supported",
          "text": "Expose `.heif` and `.heic` detection through the normal image pipeline only after the experimental codec is explicitly imported and registered"
        },
        {
          "status": "supported",
          "text": "Parse bounded EXIF item extents and expose the metadata fields supported by PureJsImage"
        },
        {
          "status": "planned",
          "text": "Parse bounded XMP MIME items without making XMP parsing necessary for pixel decode"
        },
        {
          "status": "supported",
          "text": "Ignore unknown non-essential metadata and auxiliary items safely while decoding a valid SDR primary"
        },
        {
          "status": "supported",
          "text": "Preserve compatible EXIF and ICC metadata according to explicit caller options and output-codec support, with stripping as the default"
        },
        {
          "status": "planned",
          "text": "Preserve XMP metadata when explicitly requested"
        },
        {
          "status": "planned",
          "text": "Auxiliary alpha images, including independent dimensions and grid alpha"
        },
        {
          "status": "planned",
          "text": "Thumbnail (`thmb`) relationships and an explicit thumbnail-selection API"
        },
        {
          "status": "planned",
          "text": "Identity-derived images (`iden`) without recursive-reference loops"
        },
        {
          "status": "planned",
          "text": "Pixel aspect ratio (`pasp`) and additional display-aperture behavior"
        },
        {
          "status": "supported",
          "text": "PQ 10-bit inputs with a documented libheif-compatible 8-bit display policy: preserve PQ code values, apply the signaled YCbCr matrix with nearest 4:2:0 chroma, round to 8-bit, and hard-clip to the SDR display gamut"
        },
        {
          "status": "planned",
          "text": "Independently validate HLG displayed pixels; its existing linear-light BT.2020-to-sRGB Reinhard path remains unit-tested but is not corpus-promoted"
        },
        {
          "status": "planned",
          "text": "Optional higher-precision output when the core pixel model supports more than 8 bits per channel"
        },
        {
          "status": "planned",
          "text": "Monochrome HEVC still images"
        },
        {
          "status": "planned",
          "text": "Additional MIAF-conformant brands and constraints"
        },
        {
          "status": "planned",
          "text": "Multiple top-level still images with explicit index selection while retaining primary-image decode as the default"
        },
        {
          "status": "planned",
          "text": "Metadata-only inspection without parsing or allocating HEVC coefficient or sample state"
        },
        {
          "status": "planned",
          "text": "Apple HDR gain-map discovery and reconstruction"
        },
        {
          "status": "planned",
          "text": "ISO 21496 gain-map and HEIF tone-map (`tmap`) derived-image support"
        },
        {
          "status": "planned",
          "text": "Preserve a backward-compatible SDR base when gain-map reconstruction is unavailable"
        },
        {
          "status": "planned",
          "text": "Auxiliary depth and disparity image discovery and opt-in extraction"
        },
        {
          "status": "planned",
          "text": "Portrait-effects, semantic-segmentation, and other auxiliary matte access"
        },
        {
          "status": "planned",
          "text": "Overlay-derived images (`iovl`)"
        },
        {
          "status": "planned",
          "text": "HEVC Range Extension 4:2:2 and 4:4:4 chroma formats"
        },
        {
          "status": "planned",
          "text": "Twelve-bit and higher-precision HEVC still images"
        },
        {
          "status": "planned",
          "text": "Lossless HEVC still-image modes"
        },
        {
          "status": "planned",
          "text": "Region-of-interest APIs for independently addressable tiles"
        },
        {
          "status": "planned",
          "text": "Timed HEIF/HEIC image sequences, animation, frame timing, looping, and inter-picture HEVC prediction"
        },
        {
          "status": "planned",
          "text": "Live Photo paired video/audio assets"
        },
        {
          "status": "planned",
          "text": "Burst, stereo, multilayer, and multi-view presentation semantics"
        },
        {
          "status": "planned",
          "text": "AVC-, JPEG-, VVC-, EVC-, or other non-HEVC image payloads exposed through `heifCodec`"
        },
        {
          "status": "planned",
          "text": "Encrypted or otherwise protected image items"
        },
        {
          "status": "planned",
          "text": "External item data references or network-backed extents"
        },
        {
          "status": "planned",
          "text": "Editing-history interpretation and vendor-private photo-library data"
        },
        {
          "status": "planned",
          "text": "A generic API that exposes every item and relationship in the container"
        },
        {
          "status": "planned",
          "text": "Treat every box, item, property, NAL unit, parameter set, slice, tile, entropy read, and arithmetic operation as hostile input"
        },
        {
          "status": "planned",
          "text": "Validate dimensions, chroma geometry, bit depth, CTU counts, tile and slice boundaries, transform sizes, coefficient counts, and decoded-byte budgets before allocation or indexing"
        },
        {
          "status": "planned",
          "text": "Reject recursive derived-image graphs, duplicate/conflicting required properties, overlapping invalid extents, and allocation-size overflow"
        },
        {
          "status": "planned",
          "text": "Bound compressed input, metadata, image count, item count, property count, reference count, NAL count, dimensions, pixels, and working memory separately"
        },
        {
          "status": "planned",
          "text": "Reconstruct a directly coded image in bounded CTU rows, retaining only the neighboring samples and filter state required by HEVC"
        },
        {
          "status": "planned",
          "text": "Retain compact coefficient or syntax state only where the bitstream requires it; do not make a full RGBA source bitmap the decoder boundary"
        },
        {
          "status": "planned",
          "text": "Decode grids tile-by-tile and release a tile as soon as it cannot contribute to the requested output"
        },
        {
          "status": "planned",
          "text": "Push crop and downscale requirements into grid selection and HEVC sample reconstruction wherever correctness permits"
        },
        {
          "status": "planned",
          "text": "Account for concurrent YUV planes, reference rows, filter rows, alpha, color conversion, resize state, output buffers, and compressed output in the working-memory limit"
        },
        {
          "status": "planned",
          "text": "Benchmark any temporary full-frame fallback as a separate, explicit path; it must not define the primary Lambda workflow"
        },
        {
          "status": "supported",
          "text": "Pin redistributable or reproducibly downloadable fixtures from multiple iPhone/iOS generations and at least two independent non-Apple encoders"
        },
        {
          "status": "supported",
          "text": "Cover landscape and portrait orientation, mirrored orientation, grids, odd dimensions, crop apertures, sRGB, Display P3, 8-bit Main, and 10-bit Main"
        },
        {
          "status": "supported",
          "text": "Cover auxiliary alpha, EXIF, XMP, ICC, thumbnails, unsupported auxiliary data, HDR base images, and gain maps as their groups are implemented"
        },
        {
          "status": "supported",
          "text": "Record fixture provenance, encoder, brands, item graph, profile, bit depth, chroma format, color metadata, dimensions, and checksums in the corpus"
        },
        {
          "status": "supported",
          "text": "Validate metadata against independent development-only parsers"
        },
        {
          "status": "supported",
          "text": "Validate supported iPhone benchmark pixels against an independent HEIF/HEVC oracle with documented tolerances for color conversion, resizing, and lossy JPEG output"
        },
        {
          "status": "supported",
          "text": "Verify every benchmark output before recording timing or memory results"
        },
        {
          "status": "supported",
          "text": "Benchmark metadata, full HEIC-to-PNG decode, auto-oriented resize-to-JPEG, and crop-resize-to-PNG workflows in isolated processes"
        },
        {
          "status": "planned",
          "text": "Add distinct raw full-decode and full-size HEIC-to-JPEG workflows"
        },
        {
          "status": "supported",
          "text": "Measure cold and warm absolute peak RSS, RSS delta, external memory, and ArrayBuffer memory on realistic phone-photo dimensions"
        },
        {
          "status": "supported",
          "text": "Include large single-image and multi-tile inputs that expose source-sized intermediate allocations"
        },
        {
          "status": "planned",
          "text": "Add malformed-box, extent, item-graph, `hvcC`, parameter-set, slice, CABAC, coefficient, tile, and decompression-bomb regression fixtures"
        },
        {
          "status": "planned",
          "text": "Run coverage-guided fuzzing with strict time, allocation, and output limits"
        },
        {
          "status": "planned",
          "text": "Group 0 and Group 1 are implemented and covered by pinned fixtures"
        },
        {
          "status": "planned",
          "text": "Unsupported Group 2-4 inputs fail explicitly or return the correct SDR primary image when the unsupported item is non-essential"
        },
        {
          "status": "planned",
          "text": "The primary crop/resize workflow has bounded memory for direct and grid HEVC images"
        },
        {
          "status": "planned",
          "text": "Independent oracles confirm dimensions, orientation, color, alpha, and decoded pixels"
        },
        {
          "status": "supported",
          "text": "`npm run check` and the isolated HEIC fixture/benchmark verification pass"
        }
      ]
    },
    {
      "id": "gsf",
      "name": "Gwyddion Simple Field",
      "experimental": false,
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Single-channel Gwyddion Simple Field 1.0 numeric rasters with exact little-endian float32 payloads; exposed as a scientific dataset rather than an ordinary photographic codec",
      "description": "Reads and writes Gwyddion Simple Field 1.0 surfaces while preserving physical extents, offsets, value units, titles, and unknown header metadata. Native float32 samples remain unchanged until an explicit scientific display mapping is requested.",
      "memory": "Header parsing is bounded; region reads fetch requested row ranges and emit bounded RasterBlocks; writing allocates the encoded single-file result required by the byte-returning API.",
      "recommendation": "Portable AFM, profilometry, and scalar-surface interchange when a simple float32 field plus physical metadata is sufficient.",
      "evidence": [
        "tests/gsf.test.ts",
        "tests/scientific-render.test.ts",
        "browser-tests/scientific.pw.ts"
      ],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "GSF stores exact IEEE float32 samples; roundtrip tests compare native bit patterns and metadata without lossy display conversion."
      },
      "claims": [
        {
          "status": "supported",
          "text": "Exact `Gwyddion Simple Field 1.0\\n` magic line"
        },
        {
          "status": "supported",
          "text": "Strict UTF-8 `key = value` header parsing with one to four NUL alignment bytes"
        },
        {
          "status": "supported",
          "text": "Required positive `XRes` and `YRes` dimensions with checked allocation arithmetic"
        },
        {
          "status": "supported",
          "text": "Exact little-endian IEEE float32 payload with top-to-bottom rows and no trailing bytes"
        },
        {
          "status": "supported",
          "text": "Single scalar labeled-axis `ScientificDataset` with native float32 samples"
        },
        {
          "status": "supported",
          "text": "`XReal`, `YReal`, `XOffset`, `YOffset`, `XYUnits`, `ZUnits`, and `Title` mapping"
        },
        {
          "status": "supported",
          "text": "Unknown header-field preservation as generic metadata"
        },
        {
          "status": "supported",
          "text": "Bounded rectangular row-range reads through portable `ImageSource` inputs"
        },
        {
          "status": "supported",
          "text": "Node and browser operation without Canvas or runtime dependencies in the reader"
        },
        {
          "status": "supported",
          "text": "Deterministic GSF 1.0 header, alignment, and little-endian float32 payload output"
        },
        {
          "status": "supported",
          "text": "Physical metadata, title, and application metadata writing"
        },
        {
          "status": "supported",
          "text": "Exact finite, NaN, and infinity float32 roundtrips"
        },
        {
          "status": "supported",
          "text": "Reject missing or malformed required fields, invalid UTF-8, invalid padding, impossible extents, truncation, trailing data, and configured limit violations"
        },
        {
          "status": "supported",
          "text": "Keep display palettes, range mapping, and relief separate from quantitative source samples"
        },
        {
          "status": "planned",
          "text": "Multi-channel, compressed, or alternate-sample GSF extensions; these are not part of GSF 1.0"
        }
      ]
    },
    {
      "id": "envi",
      "name": "ENVI Standard",
      "experimental": false,
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "unsupported",
        "label": "No"
      },
      "boundary": "Paired ENVI Standard header and flat-binary rasters using BSQ, BIL, or BIP and data types 1, 2, 3, 4, 5, 12, or 13; complex and 64-bit integer samples and ENVI writing are explicitly unsupported",
      "description": "Reads paired ENVI headers and binary rasters as native numeric scientific datasets. It preserves spectral wavelengths, units, FWHM, band names, nodata, default bands, sensor metadata, descriptions, and unknown fields while supporting calculated region and band reads.",
      "memory": "Header parsing and output blocks are bounded. BSQ and BIL spatial/band requests read only calculable row ranges; BIP avoids materializing the cube but necessarily reads interleaved samples spanning all bands for each requested spatial row.",
      "recommendation": "Hyperspectral and other multiband flat-binary rasters that need native numeric values, wavelength-aware channel selection, and local or range-backed ROI access.",
      "evidence": [
        "tests/envi.test.ts",
        "tests/scientific-render.test.ts",
        "browser-tests/scientific.pw.ts"
      ],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "Supported ENVI integer and floating-point types are reconstructed exactly at their native sample type before any optional display conversion."
      },
      "claims": [
        {
          "status": "supported",
          "text": "Paired portable header and binary `ImageSource` inputs"
        },
        {
          "status": "supported",
          "text": "Node `.hdr` path convenience with associated binary resolution or an explicit data path"
        },
        {
          "status": "supported",
          "text": "BSQ, BIL, and BIP interleave"
        },
        {
          "status": "supported",
          "text": "Data types 1 uint8, 2 int16, 3 int32, 4 float32, 5 float64, 12 uint16, and 13 uint32"
        },
        {
          "status": "supported",
          "text": "Little-endian and big-endian sample reconstruction"
        },
        {
          "status": "supported",
          "text": "Explicit header offsets, omitted-offset default of zero, and exact binary payload sizing"
        },
        {
          "status": "supported",
          "text": "Multiline brace arrays and descriptions"
        },
        {
          "status": "supported",
          "text": "Band names, wavelengths, wavelength units, FWHM, nodata, default bands, sensor type, and unknown metadata"
        },
        {
          "status": "supported",
          "text": "Spectral metadata on generic raster channels with nearest-wavelength selection"
        },
        {
          "status": "supported",
          "text": "Multi-band native RasterBlock output"
        },
        {
          "status": "supported",
          "text": "Calculated spatial and band ROI reads without full-cube materialization"
        },
        {
          "status": "supported",
          "text": "Browser File, Blob, ArrayBuffer, Uint8Array, and explicit ImageSource compatibility"
        },
        {
          "status": "planned",
          "text": "Complex data types 6 and 9"
        },
        {
          "status": "planned",
          "text": "Signed and unsigned 64-bit integer data types 14 and 15; the current raster sample model cannot preserve them losslessly"
        },
        {
          "status": "planned",
          "text": "ENVI header and binary writing"
        },
        {
          "status": "planned",
          "text": "Compression or nonstandard ENVI container extensions"
        },
        {
          "status": "supported",
          "text": "Reject malformed or missing dimensions, fields, interleave, endian flags, arrays, offsets, truncation, trailing data, overflow, and configured limit violations"
        },
        {
          "status": "supported",
          "text": "Keep display range, scale, palette, and false-color composition separate from quantitative source samples"
        }
      ]
    },
    {
      "id": "nanoscope-spm",
      "name": "Bruker Nanoscope SPM investigation",
      "experimental": false,
      "read": {
        "status": "planned",
        "label": "Investigation only"
      },
      "write": {
        "status": "unsupported",
        "label": "No"
      },
      "boundary": "No parser or content detector is implemented; the .spm extension is shared by unrelated formats, and Nanoscope image, spectroscopy, force-volume, and version-specific scaling variants require independent fixtures and a narrower validated contract",
      "description": "The available Nanoscope documentation and CC0 University of Minnesota corpus establish a viable future read-only investigation, but not a sufficiently narrow implementation contract. PureJsImage deliberately stops before guessing at header variants, channel scaling, force curves, or volume layouts.",
      "memory": "No parser is implemented. A future reader must validate the declared header length, Ctrl-Z boundary, data offsets, dimensions, channel counts, sample storage, scale references, and allocation graph before reading raster payloads.",
      "recommendation": "Convert required files with trusted instrument software or export GSF/TIFF until a checked Nanoscope subset is implemented.",
      "evidence": [],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "No Nanoscope pixel decoder or display path is implemented."
      },
      "claims": [
        {
          "status": "planned",
          "text": "Pin a small CC0 corpus inventory with file hashes, acquisition mode, NanoScope version, expected channels, dimensions, units, and independently exported numeric samples"
        },
        {
          "status": "planned",
          "text": "Define content signatures that distinguish Nanoscope III-or-newer files from ISO 28600, FemtoScan, Nanoeducator, NanoSystem, Nanotop, and other `.spm` formats"
        },
        {
          "status": "planned",
          "text": "Specify the accepted header-list grammar, text encoding, Ctrl-Z/data-length rules, duplicate parameters, and maximum header size"
        },
        {
          "status": "planned",
          "text": "Define a read-only image subset before spectroscopy, force-volume, curve-map, or volume support"
        },
        {
          "status": "planned",
          "text": "Resolve image dimensions, data offsets and lengths, bytes per sample, byte order, scan direction, physical extent, units, and channel scaling without heuristics"
        },
        {
          "status": "planned",
          "text": "Cross-check every accepted file against trusted NanoScope export and an independent reader without copying GPL or third-party parser code"
        },
        {
          "status": "planned",
          "text": "Add truncated header/data, overlapping offsets, duplicate channel, impossible scale-reference, oversized dimension, and allocation-overflow regressions"
        },
        {
          "status": "planned",
          "text": "Demonstrate bounded selected-channel and spatial-region reads through `ImageSource`"
        },
        {
          "status": "planned",
          "text": "Keep the API explicitly experimental and read-only until multiple acquisition/version families pass exact native-sample validation"
        }
      ]
    },
    {
      "id": "jpegxl",
      "name": "JPEG XL",
      "experimental": false,
      "packageFormat": "jpegxl",
      "read": {
        "status": "limited",
        "label": "Limited"
      },
      "write": {
        "status": "unsupported",
        "label": "No"
      },
      "boundary": "Decodes independently verified lossless Modular subsets: single-group 8-bit RGB/RGBA, native 8/10/12/16-bit grayscale, native 9/12-bit RGBA, 8-bit grayscale with alpha, and compatible multi-group 8-bit grayscale with unshifted group channels and a shared non-delta palette. Supports global or local MA trees, prefix or ANS residuals, bounded LZ77 with group-aware special distances, the documented predictors, zero or one RCT, permuted or ordered table-of-contents entries, and group-aware crops. Custom color encodings, delta palettes, Squeeze and shifted/DC group channels, VarDCT, multiple frames, and fragmented jxlp pixel decode remain unsupported",
      "description": "Recognizes raw codestreams and containers, validates and indexes jxlc or ordered jxlp ranges, and decodes the documented pinned lossless Modular subsets. Native grayscale emits gray8 or big-endian gray16 with its original display range; RGB/RGBA emits rgba8 or big-endian rgba16. Compatible multi-group decode validates ordered or permuted table-of-contents entries and dependencies, supports global or per-group local MA trees, reconstructs only crop-intersecting groups, stitches ordered output rows across group boundaries, and releases completed group bands. Unsupported JPEG XL syntax fails explicitly.",
      "memory": "The single-group path retains compact signed channel planes. Compatible multi-group crops retain only the intersecting groups in one group-row band, share global Palette state, size each LZ77 ring to its bounded entropy stream, account grouped planes against maxDecodedBytes, and release the band after output. Both paths emit one bounded native output row without allocating a second source-sized RGBA bitmap. A checksum-pinned 4096x4096 permuted-TOC fixture records isolated full-decode and 64x64 crop memory.",
      "recommendation": "Use native gray8/gray16 or rgba16 decoder blocks for scientific workflows within the documented lossless Modular subset. Multi-group grayscale crops are group-aware and bounded by the intersecting band, including files with permuted table-of-contents entries and per-group local MA trees. Use the normal pipeline for display conversion, and retain an explicit unsupported-operation path for broader JPEG XL files.",
      "evidence": [
        "tests/jpegxl.test.ts",
        "tests/jpegxl-bitstream.test.ts",
        "browser-tests/compatibility.pw.ts",
        "tests/library.test.ts"
      ],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "The implemented JPEG XL pixel subset is lossless Modular only; lossy VarDCT remains unsupported"
      },
      "claims": [
        {
          "status": "supported",
          "text": "Prioritize static `image/jxl` decode for upload-processing workflows"
        },
        {
          "status": "supported",
          "text": "Decode bare JPEG XL codestreams and single-`jxlc` box-based containers for the implemented Modular subset"
        },
        {
          "status": "planned",
          "text": "Implement both Modular and VarDCT decoding; neither mode alone covers the common lossless and lossy image set"
        },
        {
          "status": "planned",
          "text": "Decode JPEG-lossless-transcode codestreams to pixels without requiring bit-exact reconstruction of the original `.jpg` file"
        },
        {
          "status": "supported",
          "text": "Make one full-canvas still image the first public milestone"
        },
        {
          "status": "planned",
          "text": "Apply orientation and color conversion during the pipeline rather than returning incorrectly oriented or raw XYB samples"
        },
        {
          "status": "supported",
          "text": "Keep `libjxl`, `djxl`, `jxlinfo`, and other implementations as pinned development-only references and oracles"
        },
        {
          "status": "supported",
          "text": "Implement production decoding in this repository without a runtime codec dependency, native library, WebAssembly module, or copied third-party code"
        },
        {
          "status": "supported",
          "text": "Do not implement JPEG XL encoding, container writing, or a public `.jxl()` output API"
        },
        {
          "status": "supported",
          "text": "Recognize the two-byte bare-codestream signature"
        },
        {
          "status": "supported",
          "text": "Recognize the 12-byte JPEG XL container signature box and fixed signature payload"
        },
        {
          "status": "supported",
          "text": "Use content detection for codec selection; `.jxl` and `image/jxl` are hints rather than proof of valid input"
        },
        {
          "status": "supported",
          "text": "Distinguish a bare codestream from a container before parsing any image dimensions or allocating decode state"
        },
        {
          "status": "supported",
          "text": "Reject truncated signatures and lookalike box files explicitly"
        },
        {
          "status": "supported",
          "text": "Parse big-endian box headers with 32-bit lengths, extended 64-bit lengths, and boxes extending to end-of-file"
        },
        {
          "status": "planned",
          "text": "Validate every box length, nesting level, order, and end offset before reading or allocating"
        },
        {
          "status": "supported",
          "text": "Parse the signature and file type (`ftyp`) boxes and validate the JPEG XL brand and supported file-format version"
        },
        {
          "status": "supported",
          "text": "Read one complete codestream from a `jxlc` box without copying it"
        },
        {
          "status": "planned",
          "text": "Reassemble normally ordered `jxlp` partial-codestream boxes through a bounded segmented reader rather than concatenating them"
        },
        {
          "status": "supported",
          "text": "Validate `jxlp` indexes, final-fragment signaling, uniqueness, ordering, and total compressed-byte limits"
        },
        {
          "status": "planned",
          "text": "Parse JPEG XL level (`jxll`) and frame-index (`jxli`) boxes sufficiently to validate and skip them safely"
        },
        {
          "status": "supported",
          "text": "Skip unknown non-essential boxes by validated extent"
        },
        {
          "status": "supported",
          "text": "Reject conflicting `jxlc`/`jxlp` representations, missing codestream data, duplicate required boxes, and malformed box ordering"
        },
        {
          "status": "supported",
          "text": "Locate bounded EXIF (`Exif`), XML (`xml `), JUMBF (`jumb`), and JPEG reconstruction (`jbrd`) boxes without parsing them during pixel decode"
        },
        {
          "status": "supported",
          "text": "Recognize Brotli-compressed metadata (`brob`) and skip it safely until a bounded first-party Brotli decoder is available"
        },
        {
          "status": "supported",
          "text": "Expose metadata presence and byte sizes without returning unchecked box contents by default"
        },
        {
          "status": "planned",
          "text": "Define explicit metadata preservation and stripping behavior for JXL-to-other-codec pipelines"
        },
        {
          "status": "planned",
          "text": "Keep JPEG bitstream reconstruction data independent from image pixel decode"
        },
        {
          "status": "supported",
          "text": "Parse basic image information without entropy-decoding image groups for the implemented subset"
        },
        {
          "status": "planned",
          "text": "Report width, height, orientation, bit depth, exponent bits, color channel count, extra channels, alpha, animation, preview, intrinsic dimensions, color description, frame count, and codec level"
        },
        {
          "status": "supported",
          "text": "Apply configurable input, dimension, pixel, channel, frame, and metadata limits before starting full decode"
        },
        {
          "status": "supported",
          "text": "Register `jpegxlCodec` with format `jpegxl` and MIME type `image/jxl` on the public codec surface"
        },
        {
          "status": "supported",
          "text": "Implement a bounded least-significant-bit-first bit reader with exact end-of-section checks"
        },
        {
          "status": "supported",
          "text": "Decode JPEG XL fixed-width fields, compact integers, U32 distributions, signed values, and bounded enumerations"
        },
        {
          "status": "supported",
          "text": "Parse the codestream and frame-header fields, group dimensions, and section sizes required by the implemented lossless Modular subset"
        },
        {
          "status": "supported",
          "text": "Implement the bounded prefix and ANS entropy structures exercised by the pinned conformance fixture, including context maps and final-state validation"
        },
        {
          "status": "supported",
          "text": "Implement bounded LZ77 distances, lengths, repeat offsets, and copies across entropy-coded streams"
        },
        {
          "status": "supported",
          "text": "Reject invalid distributions, impossible symbols, non-final ANS states, LZ77 underflow/overflow, and reads past a declared section"
        },
        {
          "status": "planned",
          "text": "Support JPEG XL Level 5 codestream features within tighter configurable project limits"
        },
        {
          "status": "planned",
          "text": "Detect Level 10 inputs and reject them unless every required feature and resource limit is supported"
        },
        {
          "status": "supported",
          "text": "Parse the global and group headers, unshifted channel dimensions, group origins, section dependencies, and stream identifiers required by compatible multi-group Modular images"
        },
        {
          "status": "supported",
          "text": "Decode meta-adaptive trees with bounded depth, node count, property ranges, and context count"
        },
        {
          "status": "planned",
          "text": "Implement the required Modular predictors, including weighted prediction and its state updates"
        },
        {
          "status": "supported",
          "text": "Decode residuals through the selected predictor and reconstruct signed channel samples without overflow"
        },
        {
          "status": "planned",
          "text": "Implement palette transforms, including delta palettes and palette-index prediction"
        },
        {
          "status": "supported",
          "text": "Implement and independently verify the pinned fixture's reversible color transform"
        },
        {
          "status": "planned",
          "text": "Implement squeeze transforms for horizontal, vertical, and multi-channel reconstruction, including odd dimensions"
        },
        {
          "status": "planned",
          "text": "Apply inverse Modular transforms in the exact reverse dependency order"
        },
        {
          "status": "supported",
          "text": "Support single-group and compatible multi-group Modular images with shared global or per-group local MA trees and unshifted grouped channels"
        },
        {
          "status": "supported",
          "text": "Support native 8/10/12/16-bit lossless grayscale and the documented RGB/RGBA subset"
        },
        {
          "status": "planned",
          "text": "Support Modular sub-images used by VarDCT for low-frequency and control data"
        },
        {
          "status": "supported",
          "text": "Verify the implemented mathematically lossless Modular fixture with exact samples"
        },
        {
          "status": "planned",
          "text": "Parse LF global data, LF groups, HF global data, HF passes, and pass-group sections with validated sizes and dependencies"
        },
        {
          "status": "planned",
          "text": "Decode quantizer fields, dequantization matrices, block strategies, coefficient orders, context models, and chroma-from-luma factors"
        },
        {
          "status": "planned",
          "text": "Reconstruct DC and low-frequency images before dependent high-frequency groups"
        },
        {
          "status": "planned",
          "text": "Decode progressive high-frequency passes and accumulate coefficients in the correct order"
        },
        {
          "status": "planned",
          "text": "Implement every transform strategy required by the common corpus, including square DCT, rectangular DCT, AFV, and Hornuss families"
        },
        {
          "status": "planned",
          "text": "Apply inverse transforms, coefficient scaling, quantization bias, and block placement with defined numeric precision"
        },
        {
          "status": "planned",
          "text": "Reconstruct XYB samples and perform the inverse opsin transform"
        },
        {
          "status": "planned",
          "text": "Decode valid chroma subsampling and upsampling modes"
        },
        {
          "status": "planned",
          "text": "Implement Gaborish and edge-preserving restoration filters with the required group-boundary halo"
        },
        {
          "status": "planned",
          "text": "Decode and render patches, splines, and synthetic noise when signaled by a valid static image"
        },
        {
          "status": "planned",
          "text": "Decode VarDCT images created from ordinary lossy sources"
        },
        {
          "status": "planned",
          "text": "Decode the image pixels of JPEG-lossless-transcode codestreams"
        },
        {
          "status": "planned",
          "text": "Compare lossy output with conformance references using documented numeric tolerances"
        },
        {
          "status": "supported",
          "text": "Decode one visible full-canvas frame with the default replace behavior"
        },
        {
          "status": "planned",
          "text": "Skip a declared preview and decode the main image by default"
        },
        {
          "status": "planned",
          "text": "Reject animation, multiple visible frames, non-default blending, reference frame dependencies, and partial-canvas frame composition until Group 2"
        },
        {
          "status": "planned",
          "text": "Apply all eight orientation values exactly once"
        },
        {
          "status": "planned",
          "text": "Return display dimensions after orientation"
        },
        {
          "status": "supported",
          "text": "Emit bounded, ordered `gray8`, big-endian `gray16`, `rgba8`, or big-endian `rgba16` pixel blocks for the implemented subset"
        },
        {
          "status": "planned",
          "text": "Support JXL-to-JPEG, JXL-to-PNG, JXL-to-WebP, crop, resize, and resize-plus-encode workflows"
        },
        {
          "status": "supported",
          "text": "Native integer grayscale at 8, 10, 12, and 16 bits per sample"
        },
        {
          "status": "planned",
          "text": "Complete integer RGB coverage at 8, 10, 12, and 16 bits per sample"
        },
        {
          "status": "supported",
          "text": "One alpha extra channel with independent precision"
        },
        {
          "status": "planned",
          "text": "Unassociated and premultiplied alpha with correct unpremultiplication or preservation behavior"
        },
        {
          "status": "planned",
          "text": "Parse the encoded color encoding: color space, white point, primaries, transfer function, and rendering intent"
        },
        {
          "status": "planned",
          "text": "Decode compressed embedded ICC profiles with strict decoded-size limits"
        },
        {
          "status": "planned",
          "text": "Render common sRGB, linear sRGB, Display P3, and gray inputs to the pipeline's declared output color space"
        },
        {
          "status": "supported",
          "text": "Handle grayscale and RGB codestream color representations for the compatible Modular subset"
        },
        {
          "status": "planned",
          "text": "Handle XYB codestream color representations"
        },
        {
          "status": "supported",
          "text": "Preserve native 9-bit and 12-bit integer samples in `rgba16` with per-channel display ranges, normalizing only when an 8-bit transform or encoder requires it"
        },
        {
          "status": "planned",
          "text": "Reject unsupported color encodings or extra-channel semantics rather than treating their samples as sRGB or alpha"
        },
        {
          "status": "planned",
          "text": "Embedded preview decode and explicit preview selection"
        },
        {
          "status": "planned",
          "text": "Multiple frames required internally by a still image"
        },
        {
          "status": "planned",
          "text": "Frame crops, reference slots, save-as-reference behavior, and blend modes"
        },
        {
          "status": "planned",
          "text": "Coalesced first-frame output for animated inputs without claiming full animation support"
        },
        {
          "status": "planned",
          "text": "Out-of-order `jxlp` fragments permitted by newer container versions"
        },
        {
          "status": "planned",
          "text": "JPEG bitstream reconstruction from `jbrd` to the exact original JPEG file"
        },
        {
          "status": "planned",
          "text": "HDR inputs using PQ, HLG, linear-light, and floating-point samples"
        },
        {
          "status": "planned",
          "text": "Tone-mapping metadata, intensity target, luminance range, and a documented SDR conversion policy"
        },
        {
          "status": "planned",
          "text": "Wide-gamut Rec. 2020, Adobe RGB, ProPhoto RGB, and uncommon ICC profiles"
        },
        {
          "status": "planned",
          "text": "CMYK through a black extra channel and an applicable color profile"
        },
        {
          "status": "planned",
          "text": "Spot-color, selection-mask, depth, and black extra-channel discovery and opt-in extraction"
        },
        {
          "status": "planned",
          "text": "Multiple alpha channels with explicit caller selection"
        },
        {
          "status": "planned",
          "text": "Intrinsic-size and pixel-density metadata"
        },
        {
          "status": "planned",
          "text": "Metadata decode for EXIF, XMP/XML, and JUMBF"
        },
        {
          "status": "planned",
          "text": "Bounded first-party decompression of `brob` metadata boxes"
        },
        {
          "status": "planned",
          "text": "JPEG XL Level 10 features that remain within explicit project limits"
        },
        {
          "status": "planned",
          "text": "Progressive preview output from DC, low-frequency, and successive high-frequency passes"
        },
        {
          "status": "planned",
          "text": "Public reduced-resolution decode without reconstructing discarded high-frequency detail"
        },
        {
          "status": "supported",
          "text": "Group-aware region decode for compatible multi-group Modular crops"
        },
        {
          "status": "planned",
          "text": "Decoder-driven downscale that selects only the resolution and passes capable of contributing to the requested output"
        },
        {
          "status": "supported",
          "text": "Expose native high-bit integer decoder output through the shared `rgba16` pixel model"
        },
        {
          "status": "planned",
          "text": "Optional floating-point pipeline output"
        },
        {
          "status": "planned",
          "text": "Opt-in extraction of depth, thermal, CFA, spot-color, and selection-mask extra channels"
        },
        {
          "status": "planned",
          "text": "Non-coalesced frame access for applications that need individual frames"
        },
        {
          "status": "planned",
          "text": "Diagnostics identifying the box, frame, LF group, pass group, entropy stream, transform, or extra channel that caused a failure"
        },
        {
          "status": "planned",
          "text": "Animated output, animation timing, looping, and full multi-frame composition"
        },
        {
          "status": "planned",
          "text": "Re-encoding or editing frame references"
        },
        {
          "status": "planned",
          "text": "Producing an original JPEG reconstruction as a default decode result"
        },
        {
          "status": "planned",
          "text": "Unbounded or arbitrary user access to container boxes"
        },
        {
          "status": "planned",
          "text": "Encrypted, externally referenced, or vendor-private container extensions"
        },
        {
          "status": "planned",
          "text": "Undocumented experimental codestream extensions"
        },
        {
          "status": "planned",
          "text": "Treating every extra channel as displayable image data"
        },
        {
          "status": "planned",
          "text": "Bound compressed bytes, box count, metadata bytes, dimensions, pixels, frames, channels, extra channels, groups, LF groups, pass groups, passes, histograms, contexts, tree nodes, transforms, patches, splines, and decoded working bytes separately"
        },
        {
          "status": "planned",
          "text": "Use checked arithmetic for canvas and group geometry, channel shifts, strides, sample counts, coefficient counts, section sizes, patch extents, spline points, LZ77 copies, and allocations"
        },
        {
          "status": "planned",
          "text": "Read `jxlc` and `jxlp` through segmented views without duplicating the compressed codestream"
        },
        {
          "status": "supported",
          "text": "Decode compatible Modular groups in dependency order, retaining only crop-intersecting groups in one group-row band and releasing the band after output"
        },
        {
          "status": "planned",
          "text": "Release VarDCT entropy tables, coefficients, restoration buffers, and reference state as soon as later groups cannot reference them"
        },
        {
          "status": "supported",
          "text": "Use compact signed channel planes and one bounded output row rather than a second source-sized RGBA decoder boundary for the implemented Modular subset"
        },
        {
          "status": "supported",
          "text": "Push crop requirements into compatible Modular group selection"
        },
        {
          "status": "planned",
          "text": "Push resize and reduced-resolution requirements into group and pass selection"
        },
        {
          "status": "planned",
          "text": "Account for concurrent input, section indexes, entropy state, LF images, coefficients, Modular transforms, restoration halos, extra channels, color conversion, resize state, and encoded output"
        },
        {
          "status": "planned",
          "text": "Make any full-frame state required by patches, reference frames, or Modular transforms compact, explicit, and separately benchmarked"
        },
        {
          "status": "planned",
          "text": "Do not let an optional feature silently turn the normal static-photo path into a source-sized float RGB or RGBA allocation"
        },
        {
          "status": "planned",
          "text": "Treat every box, compact integer, dimension, section size, entropy distribution, tree node, symbol, LZ77 copy, transform, coefficient, group, patch, spline, frame, ICC field, and extra channel as hostile input"
        },
        {
          "status": "planned",
          "text": "Validate the complete allocation graph before allocating large planes or coefficient buffers"
        },
        {
          "status": "planned",
          "text": "Reject recursive or excessively deep trees, invalid context maps, impossible ANS states, oversized histograms, transform cycles, and invalid channel dependencies"
        },
        {
          "status": "planned",
          "text": "Validate patch source/destination rectangles, spline point counts, filter halos, frame crops, blend rectangles, and reference indexes before access"
        },
        {
          "status": "planned",
          "text": "Bound compressed ICC and Brotli metadata expansion independently from pixel decode"
        },
        {
          "status": "planned",
          "text": "Reject unsupported extensions using their declared lengths without attempting best-effort entropy decode"
        },
        {
          "status": "planned",
          "text": "Add fuzz targets for the bare codestream parser, container parser, entropy decoder, Modular transforms, VarDCT reconstruction, color metadata, and frame composition"
        },
        {
          "status": "planned",
          "text": "Turn every upstream libjxl security advisory relevant to accepted syntax into a local hostile-input regression test without copying its fix"
        },
        {
          "status": "planned",
          "text": "Pin `libjxl` and its `djxl`/`jxlinfo` tools at an exact development-oracle version"
        },
        {
          "status": "planned",
          "text": "Study libjxl's module boundaries, supported features, test taxonomy, low-memory behavior, and security history without copying or mechanically translating its implementation"
        },
        {
          "status": "supported",
          "text": "Pin the official JPEG XL conformance corpus and reference decoded outputs at an exact commit"
        },
        {
          "status": "planned",
          "text": "Run every applicable conformance codestream through PureJsImage and record unsupported cases separately from incorrect pixels"
        },
        {
          "status": "planned",
          "text": "Use a second independent decoder, such as a pinned `jxl-oxide` build, to investigate disagreements with libjxl"
        },
        {
          "status": "planned",
          "text": "Never use conformance to replace project-specific hostile-input, memory, crop, resize, and pipeline tests"
        },
        {
          "status": "planned",
          "text": "Pin redistributable fixtures from at least two independent encoders"
        },
        {
          "status": "planned",
          "text": "Include bare and container files, `jxlc` and `jxlp`, Modular and VarDCT, lossless and lossy, JPEG-transcoded, grayscale, RGB, alpha, 8/10/12/16-bit, ICC, orientation, odd dimensions, multiple groups, and progressive passes"
        },
        {
          "status": "planned",
          "text": "Include realistic photos, transparent graphics, screenshots, high-entropy images, wide-gamut images, and a large downscale workload"
        },
        {
          "status": "planned",
          "text": "Record provenance, license, encoder/version, container form, dimensions, orientation, bit depth, channels, extra channels, color encoding, mode, frames, groups, passes, level, feature flags, and checksums"
        },
        {
          "status": "supported",
          "text": "Verify native high-bit samples for lossless Modular fixtures against official conformance outputs"
        },
        {
          "status": "planned",
          "text": "Use conformance-defined or documented numeric tolerances for VarDCT, XYB, ICC, restoration-filter, and HDR output"
        },
        {
          "status": "supported",
          "text": "Verify every recorded benchmark output before recording speed or memory"
        },
        {
          "status": "supported",
          "text": "Record isolated full-decode and crop memory for a checksum-pinned 4096x4096 multi-group fixture with a permuted table of contents and per-group local MA trees"
        },
        {
          "status": "planned",
          "text": "Benchmark metadata, full decode, JXL-to-JPEG, JXL-to-PNG, crop, resize, reduced-resolution resize, and resize-plus-encode workflows"
        },
        {
          "status": "planned",
          "text": "Measure cold and warm absolute peak RSS, RSS delta, external memory, and ArrayBuffer memory in isolated processes"
        },
        {
          "status": "planned",
          "text": "Compare upload workflows with pinned `djxl`; record Jimp as unsupported rather than treating failed decode as a performance result"
        },
        {
          "status": "planned",
          "text": "Include malformed container, fragment, header, entropy, LZ77, MA-tree, palette, squeeze, VarDCT, patch, spline, ICC, frame, and allocation-limit fixtures"
        },
        {
          "status": "planned",
          "text": "Group 0 and Group 1 are implemented and covered by pinned fixtures"
        },
        {
          "status": "planned",
          "text": "Unimplemented Group 2-4 features fail explicitly rather than producing plausible but incorrect pixels"
        },
        {
          "status": "planned",
          "text": "Lossless Modular and JPEG-transcoded reference images decode to the expected pixels"
        },
        {
          "status": "planned",
          "text": "VarDCT output meets the conformance tolerances"
        },
        {
          "status": "planned",
          "text": "Static `image/jxl` Buffer input can be inspected, oriented, resized, and converted to JPEG or PNG through the public pipeline"
        },
        {
          "status": "planned",
          "text": "The common large-photo resize path does not allocate a full source-resolution float RGB or RGBA bitmap"
        },
        {
          "status": "planned",
          "text": "Independent oracles confirm dimensions, orientation, color, alpha, and decoded pixels"
        },
        {
          "status": "planned",
          "text": "`npm run check` and the isolated JPEG XL fixture and benchmark verification pass"
        }
      ]
    },
    {
      "id": "hdr",
      "name": "Radiance HDR / RGBE",
      "experimental": false,
      "packageFormat": "hdr",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Radiance RGBE pictures with standard scanline RLE or legacy scanlines; no XYZE or color-correction pipeline",
      "description": "Decodes Radiance RGBE pixels to native float32 RGB rows, including every legal axis direction, standard channel RLE, legacy scanlines, EXPOSURE, and GAMMA. Encodes deterministic RGBE with standard scanline RLE.",
      "memory": "Common Y-major decode and all encode paths use bounded scanline storage; uncommon X-major input uses a compact source-sized RGBE transpose buffer, and region access retains one numeric offset per source scanline",
      "recommendation": "Radiance environment maps and other RGBE interchange where native HDR samples must remain floating point.",
      "evidence": ["tests/hdr.test.ts", "tests/small-codec-interoperability.test.ts"],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "RGBE is decoded and encoded with its defined shared-exponent quantization and no additional lossy transform"
      },
      "claims": [
        {
          "status": "supported",
          "text": "`#?RADIANCE` and `#?RGBE` signatures"
        },
        {
          "status": "supported",
          "text": "`FORMAT=32-bit_rle_rgbe`"
        },
        {
          "status": "supported",
          "text": "Standard per-channel scanline RLE, including 128-byte literal packets"
        },
        {
          "status": "supported",
          "text": "Legacy flat RGBE scanlines and legacy repeat packets"
        },
        {
          "status": "supported",
          "text": "`+X`, `-X`, `+Y`, and `-Y` resolution orientations"
        },
        {
          "status": "supported",
          "text": "Native `rgbf32` output without 8-bit clipping"
        },
        {
          "status": "supported",
          "text": "Region decode with bounded scanline buffers"
        },
        {
          "status": "planned",
          "text": "XYZE pixel data"
        },
        {
          "status": "planned",
          "text": "Multiple pictures in one stream"
        },
        {
          "status": "supported",
          "text": "Width, height, bit depth, floating-point sample format, and orientation text"
        },
        {
          "status": "supported",
          "text": "Multiplicative `EXPOSURE` fields"
        },
        {
          "status": "supported",
          "text": "`GAMMA`"
        },
        {
          "status": "planned",
          "text": "Automatic application of exposure, gamma, primaries, or color-correction fields"
        },
        {
          "status": "supported",
          "text": "Deterministic RGBE conversion from `rgbf32` and normalized display pixels"
        },
        {
          "status": "supported",
          "text": "Standard scanline RLE for legal scanline widths"
        },
        {
          "status": "supported",
          "text": "Legacy flat output for widths outside the standard RLE range"
        },
        {
          "status": "supported",
          "text": "Optional `EXPOSURE` and `GAMMA` fields"
        },
        {
          "status": "supported",
          "text": "Header, dimension, allocation, scanline length, packet length, and truncation checks"
        },
        {
          "status": "supported",
          "text": "Real 1K Poly Haven CC0 HDR benchmark inputs"
        },
        {
          "status": "supported",
          "text": "Deterministic exponent-extreme and orientation tests"
        }
      ]
    },
    {
      "id": "qoi",
      "name": "QOI",
      "experimental": false,
      "packageFormat": "qoi",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Complete QOI Specification v1 RGB and RGBA still images",
      "description": "Decodes and encodes every QOI chunk operation with strict dimensions, pixel counts, channel fields, colorspace fields, and end markers.",
      "memory": "Sequential decode and encode use bounded row blocks plus the fixed 64-entry QOI index",
      "recommendation": "Simple lossless RGB or RGBA interchange.",
      "evidence": ["tests/qoi.test.ts", "tests/small-codec-interoperability.test.ts"],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "QOI is lossless"
      },
      "claims": [
        {
          "status": "supported",
          "text": "QOI Specification v1 header and end marker"
        },
        {
          "status": "supported",
          "text": "Three-channel RGB and four-channel RGBA files"
        },
        {
          "status": "supported",
          "text": "sRGB with linear alpha and all-channels-linear colorspace fields"
        },
        {
          "status": "supported",
          "text": "`QOI_OP_INDEX`"
        },
        {
          "status": "supported",
          "text": "`QOI_OP_DIFF`"
        },
        {
          "status": "supported",
          "text": "`QOI_OP_LUMA`"
        },
        {
          "status": "supported",
          "text": "`QOI_OP_RUN`, including the maximum legal run"
        },
        {
          "status": "supported",
          "text": "`QOI_OP_RGB`"
        },
        {
          "status": "supported",
          "text": "`QOI_OP_RGBA`"
        },
        {
          "status": "supported",
          "text": "Sequential bounded-row output"
        },
        {
          "status": "supported",
          "text": "Deterministic RGB and RGBA output"
        },
        {
          "status": "supported",
          "text": "Every QOI chunk operation"
        },
        {
          "status": "supported",
          "text": "Explicit channel and colorspace selection"
        },
        {
          "status": "supported",
          "text": "Dimension and decoded-byte allocation limits"
        },
        {
          "status": "supported",
          "text": "Exact pixel-count and end-marker validation"
        },
        {
          "status": "supported",
          "text": "Truncated header, chunk, and marker rejection"
        },
        {
          "status": "supported",
          "text": "Official MIT QOI reference encoder interoperability fixture"
        },
        {
          "status": "supported",
          "text": "Independently encoded CC0 benchmark images"
        }
      ]
    },
    {
      "id": "netpbm",
      "name": "Netpbm and PFM",
      "experimental": false,
      "packageFormat": "netpbm",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Single-image PBM, PGM, PPM, standard PAM grayscale/RGB tuples, and Netpbm PFM convention",
      "description": "Decodes and encodes PBM P1/P4, PGM P2/P5, PPM P3/P6, PAM P7 grayscale and RGB tuples with optional alpha, and little- or big-endian float32 PFM.",
      "memory": "Header parsing is capped and integer decode and encode use bounded rows; PFM decode uses bounded rows while PFM encode retains one float frame to reverse top-down input into the required bottom-to-top raster",
      "recommendation": "Portable anymap interchange, simple test fixtures, and native float32 PFM data.",
      "evidence": ["tests/netpbm.test.ts", "tests/small-codec-interoperability.test.ts"],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "Supported Netpbm and PFM paths preserve their declared integer or float sample values, except explicit MAXVAL scaling to a canonical integer range"
      },
      "claims": [
        {
          "status": "supported",
          "text": "PBM P1 ASCII and P4 packed binary"
        },
        {
          "status": "supported",
          "text": "PGM P2 ASCII and P5 binary"
        },
        {
          "status": "supported",
          "text": "PPM P3 ASCII and P6 binary"
        },
        {
          "status": "supported",
          "text": "PAM P7 `BLACKANDWHITE`, `BLACKANDWHITE_ALPHA`, `GRAYSCALE`, `GRAYSCALE_ALPHA`, `RGB`, and `RGB_ALPHA` tuples"
        },
        {
          "status": "supported",
          "text": "Comments and Netpbm whitespace between header tokens"
        },
        {
          "status": "supported",
          "text": "MAXVAL from 1 through 65535"
        },
        {
          "status": "supported",
          "text": "Native big-endian `gray16`, `rgb16`, and `rgba16` blocks for 16-bit samples"
        },
        {
          "status": "supported",
          "text": "Bounded row output"
        },
        {
          "status": "planned",
          "text": "Multiple concatenated images"
        },
        {
          "status": "planned",
          "text": "Nonstandard PAM tuple types"
        },
        {
          "status": "supported",
          "text": "P1 and P4 PBM"
        },
        {
          "status": "supported",
          "text": "P2 and P5 PGM"
        },
        {
          "status": "supported",
          "text": "P3 and P6 PPM"
        },
        {
          "status": "supported",
          "text": "P7 PAM grayscale, grayscale-alpha, RGB, and RGBA"
        },
        {
          "status": "supported",
          "text": "Deterministic 8-bit and 16-bit output"
        },
        {
          "status": "supported",
          "text": "`Pf` grayscale and `PF` RGB"
        },
        {
          "status": "supported",
          "text": "Little-endian and big-endian float32 samples"
        },
        {
          "status": "supported",
          "text": "Non-unit finite scale magnitudes"
        },
        {
          "status": "supported",
          "text": "Negative, greater-than-one, NaN, and infinite samples"
        },
        {
          "status": "supported",
          "text": "Native `grayf32` and `rgbf32` output"
        },
        {
          "status": "supported",
          "text": "Deterministic little- or big-endian encoding"
        },
        {
          "status": "supported",
          "text": "Capped token and header parsing"
        },
        {
          "status": "supported",
          "text": "Dimension, MAXVAL, tuple, sample-range, raster-size, and truncation checks"
        },
        {
          "status": "supported",
          "text": "CC0 Imazen PNM conformance fixtures"
        },
        {
          "status": "supported",
          "text": "FFmpeg PFM interoperability fixture derived from a CC0 Poly Haven HDR"
        }
      ]
    },
    {
      "id": "tga",
      "name": "TGA / TARGA",
      "experimental": false,
      "packageFormat": "tga",
      "read": {
        "status": "supported",
        "label": "Yes"
      },
      "write": {
        "status": "supported",
        "label": "Yes"
      },
      "boundary": "Uncompressed and RLE color-mapped, truecolor, and grayscale TGA still images; no interleaving or developer-area metadata",
      "description": "Decodes indexed, grayscale, RGB555/RGB5551, 24-bit BGR, and 32-bit BGRA TGA in all four origin directions. Encodes deterministic 24-bit RGB or 32-bit RGBA with optional TGA RLE.",
      "memory": "Uncompressed decode and all encode paths use bounded rows; RLE decode retains compact packet state per source row, and palettes are bounded by the declared color-map length",
      "recommendation": "Legacy TGA still-image interchange.",
      "evidence": ["tests/tga.test.ts", "tests/small-codec-interoperability.test.ts"],
      "lossyPixelValidation": {
        "status": "not-applicable",
        "rationale": "Supported TGA paths are uncompressed or losslessly run-length encoded"
      },
      "claims": [
        {
          "status": "supported",
          "text": "Uncompressed and RLE color-mapped images, types 1 and 9"
        },
        {
          "status": "supported",
          "text": "Uncompressed and RLE truecolor images, types 2 and 10"
        },
        {
          "status": "supported",
          "text": "Uncompressed and RLE grayscale images, types 3 and 11"
        },
        {
          "status": "supported",
          "text": "8-bit and 16-bit color-map indices with nonzero color-map origins"
        },
        {
          "status": "supported",
          "text": "15-bit RGB555 and 16-bit RGB5551"
        },
        {
          "status": "supported",
          "text": "24-bit BGR and 32-bit BGRA"
        },
        {
          "status": "supported",
          "text": "8-bit grayscale"
        },
        {
          "status": "supported",
          "text": "Top-left, top-right, bottom-left, and bottom-right origins"
        },
        {
          "status": "supported",
          "text": "Image ID metadata"
        },
        {
          "status": "supported",
          "text": "Region decode with bounded row output"
        },
        {
          "status": "planned",
          "text": "Interleaved two-way or four-way raster storage"
        },
        {
          "status": "planned",
          "text": "Extension-area and developer-area metadata"
        },
        {
          "status": "supported",
          "text": "Deterministic 24-bit RGB and 32-bit RGBA"
        },
        {
          "status": "supported",
          "text": "Uncompressed output"
        },
        {
          "status": "supported",
          "text": "Optional raw-packet and run-packet RLE"
        },
        {
          "status": "supported",
          "text": "TGA 2.0 footer signature"
        },
        {
          "status": "planned",
          "text": "Indexed output"
        },
        {
          "status": "supported",
          "text": "Dimension, palette extent, palette index, attribute-bit, packet-length, and truncation checks"
        },
        {
          "status": "supported",
          "text": "FFmpeg RLE interoperability fixture derived from a CC0 source image"
        },
        {
          "status": "supported",
          "text": "Checksum-pinned optional historical compatibility downloads kept outside the repository"
        }
      ]
    }
  ],
  "scientificReaders": [
    {
      "id": "purejsimage/gsf",
      "version": "1.0.0",
      "format": "Gwyddion Simple Field",
      "packageExport": "purejsimage/scientific/readers/gsf",
      "extensions": ["gsf"],
      "mediaTypes": ["application/x-gwyddion-spm"],
      "resourceModel": "single",
      "datasetKinds": ["surface"],
      "directRangeReads": true,
      "boundary": "One scalar 2D field with exact X/Y calibration and bounded metadata.",
      "evidence": ["tests/scientific-format-readers.test.ts"],
      "fixtures": ["tests/scientific-format-readers.test.ts"]
    },
    {
      "id": "purejsimage/nanonis-sxm",
      "version": "1.0.0",
      "format": "Nanonis SXM",
      "packageExport": "purejsimage/scientific/readers/nanonis-sxm",
      "extensions": ["sxm"],
      "mediaTypes": ["application/x-nanonis-sxm"],
      "resourceModel": "single",
      "datasetKinds": ["surface"],
      "directRangeReads": true,
      "boundary": "Nanonis SXM v2 FLOAT MSBFIRST images; every recorded channel and direction is separate, binary values retain declared channel units, and Y remains in top-to-bottom file order with a negative calibrated step.",
      "evidence": ["tests/scientific-surface-formats.test.ts"],
      "fixtures": [
        "tests/fixtures/scientific-surface/nanonis-afm-generic4.sxm",
        "tests/fixtures/scientific-surface/nanonis-stm-generic5.sxm"
      ]
    },
    {
      "id": "purejsimage/igor-binary-wave",
      "version": "1.0.0",
      "format": "Igor Binary Wave v5",
      "packageExport": "purejsimage/scientific/readers/igor-binary-wave",
      "extensions": ["ibw"],
      "mediaTypes": ["application/x-igor-binary-wave"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "Numeric IBW v5 waves with two through four contiguous dimensions, endian and checksum validation, linear axes, units, notes, labels, and selected XY regions; complex, text, formula-dependent, and private-option waves are rejected.",
      "evidence": ["tests/scientific-surface-formats.test.ts"],
      "fixtures": [
        "tests/fixtures/scientific-surface/asylum-afm-v5.ibw",
        "tests/fixtures/scientific-surface/igor-win-v5-rank1.ibw"
      ]
    },
    {
      "id": "purejsimage/digital-surf",
      "version": "1.0.0",
      "format": "Digital Surf SUR/PRO",
      "packageExport": "purejsimage/scientific/readers/digital-surf",
      "extensions": ["sur", "pro"],
      "mediaTypes": ["application/x-digitalsurf-sur"],
      "resourceModel": "single",
      "datasetKinds": ["surface"],
      "directRangeReads": false,
      "boundary": "Digital Surf integer surface, multilayer, and profile records with bounded stored or zlib-stream payloads, exact scale/offset conversion, special-point masks, physical axes, units, object enumeration, comments, and private-zone bounds; spectral maps are rejected.",
      "evidence": ["tests/scientific-surface-formats.test.ts"],
      "fixtures": ["tests/fixtures/scientific-surface/digital-surf-compressed.sur"]
    },
    {
      "id": "purejsimage/x3p",
      "version": "1.0.0",
      "format": "X3P surface exchange",
      "packageExport": "purejsimage/scientific/readers/x3p",
      "extensions": ["x3p"],
      "mediaTypes": ["application/x-x3p"],
      "resourceModel": "single",
      "datasetKinds": ["surface"],
      "directRangeReads": true,
      "boundary": "ISO 5436-2 SUR matrices with incremental X/Y axes, one Z layer, numeric binary point data, optional validity masks, exact Z increment/offset conversion, bounded ZIP/ZIP64 indexing, and stored-member range views.",
      "evidence": ["tests/scientific-surface-formats.test.ts"],
      "fixtures": [
        "tests/fixtures/scientific-surface/iso5436-sample1.x3p",
        "tests/fixtures/scientific-surface/iso5436-sample4.x3p"
      ]
    },
    {
      "id": "purejsimage/envi",
      "version": "1.0.0",
      "format": "ENVI",
      "packageExport": "purejsimage/scientific/readers/envi",
      "extensions": ["hdr", "img", "dat", "raw"],
      "mediaTypes": ["application/x-envi"],
      "resourceModel": "companion-pair",
      "datasetKinds": ["image", "volume", "spectrum-image"],
      "directRangeReads": true,
      "boundary": "Header-plus-binary scalar cubes with BSQ, BIL, or BIP layout and exact selected-region reads.",
      "evidence": ["tests/envi.test.ts"],
      "fixtures": ["tests/envi.test.ts"]
    },
    {
      "id": "purejsimage/fits",
      "version": "1.0.0",
      "format": "FITS",
      "packageExport": "purejsimage/scientific/readers/fits",
      "extensions": ["fits", "fit", "fts"],
      "mediaTypes": ["application/fits", "image/fits"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "Supported image HDUs with ranked axes, native numeric samples, and linear physical coordinates.",
      "evidence": ["tests/fits.test.ts"],
      "fixtures": ["tests/fits.test.ts"]
    },
    {
      "id": "purejsimage/mrc",
      "version": "1.0.0",
      "format": "MRC/CCP4",
      "packageExport": "purejsimage/scientific/readers/mrc",
      "extensions": ["mrc", "map", "ccp4"],
      "mediaTypes": ["application/x-mrc", "application/x-ccp4"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "One scalar image or volume for the documented MRC/CCP4 modes and axis mappings.",
      "evidence": ["tests/scientific-format-readers.test.ts"],
      "fixtures": ["tests/scientific-format-readers.test.ts"]
    },
    {
      "id": "purejsimage/cbf",
      "version": "1.0.0",
      "format": "CBF/imgCIF",
      "packageExport": "purejsimage/scientific/readers/cbf",
      "extensions": ["cbf"],
      "mediaTypes": ["application/x-cbf"],
      "resourceModel": "single",
      "datasetKinds": ["image"],
      "directRangeReads": false,
      "boundary": "One 2D detector image using the documented byte-offset encoding subset.",
      "evidence": ["tests/scientific-format-readers.test.ts"],
      "fixtures": ["tests/scientific-format-readers.test.ts"]
    },
    {
      "id": "purejsimage/png",
      "version": "1.0.0",
      "format": "PNG",
      "packageExport": "purejsimage/scientific/readers/png",
      "extensions": ["png"],
      "mediaTypes": ["image/png"],
      "resourceModel": "single",
      "datasetKinds": ["image"],
      "directRangeReads": false,
      "boundary": "Low-confidence codec adapter exposing canonical uint8 image datasets.",
      "evidence": ["tests/scientific-image-codec-reader.test.ts"],
      "fixtures": ["tests/scientific-image-codec-reader.test.ts"]
    },
    {
      "id": "purejsimage/jpeg",
      "version": "1.0.0",
      "format": "JPEG",
      "packageExport": "purejsimage/scientific/readers/jpeg",
      "extensions": ["jpg", "jpeg", "jpe"],
      "mediaTypes": ["image/jpeg"],
      "resourceModel": "single",
      "datasetKinds": ["image"],
      "directRangeReads": false,
      "boundary": "Low-confidence codec adapter exposing canonical uint8 image datasets.",
      "evidence": ["tests/scientific-image-codec-reader.test.ts"],
      "fixtures": ["tests/scientific-image-codec-reader.test.ts"]
    },
    {
      "id": "purejsimage/webp",
      "version": "1.0.0",
      "format": "WebP",
      "packageExport": "purejsimage/scientific/readers/webp",
      "extensions": ["webp"],
      "mediaTypes": ["image/webp"],
      "resourceModel": "single",
      "datasetKinds": ["image"],
      "directRangeReads": false,
      "boundary": "Low-confidence codec adapter exposing canonical uint8 image datasets; animated WebP remains outside the codec boundary.",
      "evidence": [
        "tests/scientific-image-codec-reader.test.ts",
        "browser-tests/compatibility.pw.ts"
      ],
      "fixtures": ["tests/scientific-image-codec-reader.test.ts"]
    },
    {
      "id": "purejsimage/bmp",
      "version": "1.0.0",
      "format": "BMP",
      "packageExport": "purejsimage/scientific/readers/bmp",
      "extensions": ["bmp", "dib"],
      "mediaTypes": ["image/bmp", "image/x-ms-bmp"],
      "resourceModel": "single",
      "datasetKinds": ["image"],
      "directRangeReads": false,
      "boundary": "Low-confidence codec adapter exposing canonical uint8 image datasets.",
      "evidence": [
        "tests/scientific-image-codec-reader.test.ts",
        "browser-tests/compatibility.pw.ts"
      ],
      "fixtures": ["tests/scientific-image-codec-reader.test.ts"]
    },
    {
      "id": "purejsimage/jp2",
      "version": "1.0.0",
      "format": "JPEG 2000 / JP2",
      "packageExport": "purejsimage/scientific/readers/jp2",
      "extensions": ["jp2"],
      "mediaTypes": ["image/jp2"],
      "resourceModel": "single",
      "datasetKinds": ["image"],
      "directRangeReads": false,
      "boundary": "Low-confidence codec adapter exposing canonical uint8 image datasets within the first-party JP2 decoder subset.",
      "evidence": [
        "tests/scientific-image-codec-reader.test.ts",
        "browser-tests/compatibility.pw.ts"
      ],
      "fixtures": ["benchmark/corpus/files/jp2/openjpeg-lossless-rgb16.jp2"]
    },
    {
      "id": "purejsimage/tiff",
      "version": "1.1.0",
      "format": "TIFF",
      "packageExport": "purejsimage/scientific/readers/tiff",
      "extensions": ["tif", "tiff"],
      "mediaTypes": ["image/tiff", "image/x-tiff"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume", "pyramid"],
      "directRangeReads": true,
      "boundary": "Native-precision compatible page series, separate incompatible series, and SubIFD or chained reduced-resolution levels with typed GeoTIFF CRS, affine, inverse, bounds, pixel interpretation, nodata, and JSON-safe source metadata; deterministic tiled Classic TIFF, BigTIFF, Deflate, LZW, PackBits, RGB/RGBA, three-band YCbCr JPEG, four-band photometric-RGB ExtraSamples=0 JPEG, and overview COG fixtures prove the applicable native-raster paths. JPEG compression 7 native samples are YCbCr-converted RGB, preserved RGB+unspecified extra components, or grayscale; four-band sources are not routed through the RGB display decoder. Old-style JPEG remains display-only. Pixel reads remain in raster coordinates without invented axis semantics.",
      "evidence": [
        "tests/scientific-tiff-reader.test.ts",
        "tests/scientific-tiff-jpeg.test.ts",
        "tests/tiff-cog.test.ts",
        "tests/tiff-cog-benchmark.test.ts",
        "tests/kyfromabove-live.test.ts"
      ],
      "fixtures": [
        "tests/scientific-tiff-reader.test.ts",
        "tests/fixtures/cog/manifest.json",
        "tests/fixtures/kyfromabove/manifest.json"
      ]
    },
    {
      "id": "purejsimage/ome-tiff",
      "version": "1.0.0",
      "format": "OME-TIFF",
      "packageExport": "purejsimage/scientific/readers/ome-tiff",
      "extensions": ["tif", "tiff"],
      "mediaTypes": ["image/tiff", "image/x-tiff"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "OME-XML-backed X/Y/Z/C/T datasets on supported TIFF sample and compression layouts; detection follows the first TIFF IFD and bounded tag-270 ranges instead of scanning a fixed file prefix.",
      "evidence": [
        "tests/scientific-format-readers.test.ts",
        "tests/scientific-tiff-reader.test.ts"
      ],
      "fixtures": [
        "tests/scientific-format-readers.test.ts",
        "tests/scientific-tiff-reader.test.ts"
      ]
    },
    {
      "id": "purejsimage/ome-zarr",
      "version": "1.1.0",
      "format": "OME-Zarr",
      "packageExport": "purejsimage/scientific/readers/ome-zarr",
      "extensions": ["zarr", "ozx"],
      "mediaTypes": ["application/vnd.ome.zarr", "application/x-zarr"],
      "resourceModel": "directory-like",
      "datasetKinds": ["image", "volume", "pyramid"],
      "directRangeReads": true,
      "boundary": "OME-NGFF 0.4 and 0.5 image multiscales, required 0.5 OMERO channel windows/colors and plate layout/version metadata, image-label colors/properties/source with 0.5 associated-pyramid parity, path-backed scale/translation, preserved pyramid-generation metadata, and rich plates/wells/acquisitions on Zarr v2 and v3 directory stores, range-first bounded public HTTP contexts with v2/v3 root discovery, or a ZIP archive with root-level or a single nested zarr.json/.zgroup (including *.zarr / *.ome.zarr names and ignored __MACOSX/ sidecars), plus explicit OME.series and consecutive bioformats2raw.layout fallback roots. Integer arrays include exact signed/unsigned 64-bit canonical bytes and BigInt access. Regular and sharding_indexed chunk grids; bytes, gzip, zlib, zstd, crc32c, transpose, shuffle, and Blosc 1 with byte shuffle or 8-element-aligned bitshuffle and LZ4/zlib/zstd or memcpy; missing chunks become fill values; selected planes fetch only intersecting chunks. BloscLZ, Snappy, malformed bitshuffle blocks, complex/boolean/structured dtypes, tables, storage_transformers, non-regular chunk grids, RFC-9 zip-comment/jsonFirst requirements, multi-root ZIPs, and writers are rejected.",
      "evidence": [
        "tests/scientific-ome-zarr.test.ts",
        "tests/scientific-blosc.test.ts",
        "tests/lz4-block.test.ts",
        "tests/ome-zarr-http.test.ts",
        "tests/ome-zarr-compatibility.test.ts"
      ],
      "fixtures": [
        "tests/fixtures/scientific-ome-zarr/corpus.json",
        "benchmark/ome-zarr/official-corpus.json"
      ]
    },
    {
      "id": "purejsimage/aperio-svs",
      "version": "1.0.0",
      "format": "Aperio SVS",
      "packageExport": "purejsimage/scientific/readers/aperio-svs",
      "extensions": ["svs"],
      "mediaTypes": ["image/tiff", "image/x-tiff"],
      "resourceModel": "single",
      "datasetKinds": ["pyramid", "image"],
      "directRangeReads": true,
      "boundary": "One bounded calibrated whole-slide pyramid plus separate supported associated images.",
      "evidence": ["tests/scientific-aperio-reader.test.ts"],
      "fixtures": ["tests/scientific-aperio-reader.test.ts"]
    },
    {
      "id": "purejsimage/digital-micrograph",
      "version": "1.0.0",
      "format": "Gatan DigitalMicrograph",
      "packageExport": "purejsimage/scientific/readers/digital-micrograph",
      "extensions": ["dm3", "dm4"],
      "mediaTypes": [
        "application/x-gatan-dm3",
        "application/x-gatan-dm4",
        "application/x-digital-micrograph"
      ],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume", "spectrum-image"],
      "directRangeReads": true,
      "boundary": "Rank-2 images, rank-3 X/Y/Z volumes, evidence-gated X/Y/energy EELS spectrum images, evidence-gated C-ordered 4D-STEM diffraction planes, and otherwise neutral rank-4 axes, plus fixture-proven little-endian packed BGRA; no rank-1, complex, encrypted, external, big-endian packed color, or undocumented packed content.",
      "evidence": ["tests/digital-micrograph-index.test.ts"],
      "fixtures": [
        "benchmark/digital-micrograph/corpus.json",
        "benchmark/digital-micrograph/semantic-corpus.json",
        "benchmark/digital-micrograph/generated-fixture.ts",
        "benchmark/digital-micrograph/verify-semantic-corpus.ts",
        "tests/digital-micrograph-index.test.ts"
      ]
    },
    {
      "id": "purejsimage/tia-ser",
      "version": "1.0.0",
      "format": "FEI/Thermo TIA SER",
      "packageExport": "purejsimage/scientific/readers/tia-ser",
      "extensions": ["ser"],
      "mediaTypes": [
        "application/x-fei-ser",
        "application/x-thermo-tia-ser",
        "application/x-tia-ser"
      ],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume", "spectrum-image", "spectrum"],
      "directRangeReads": true,
      "boundary": "TIA SER versions 0x0210 and 0x0220 with scalar element types 1 through 8, request-bounded batched metadata indexing, lazy payload reads, compatible image or spectrum collections, native calibrated series reads, and explicit valid or invalid element metadata; no complex elements or companion EMI metadata.",
      "evidence": ["tests/tia-ser-reader.test.ts"],
      "fixtures": [
        "benchmark/tia-ser/corpus.json",
        "benchmark/tia-ser/generated-fixture.ts",
        "benchmark/tia-ser/verify-corpus.ts",
        "tests/tia-ser-reader.test.ts"
      ]
    },
    {
      "id": "purejsimage/tia-emi",
      "version": "1.0.0",
      "format": "FEI/Thermo TIA EMI",
      "packageExport": "purejsimage/scientific/readers/tia-emi",
      "extensions": ["emi"],
      "mediaTypes": [
        "application/x-fei-emi",
        "application/x-thermo-tia-emi",
        "application/x-tia-emi"
      ],
      "resourceModel": "companion-set",
      "datasetKinds": ["image", "volume", "spectrum-image", "spectrum"],
      "directRangeReads": true,
      "boundary": "Bounded ObjectInfo XML from the TIA EMI binary envelope plus consecutively numbered sibling SER resources resolved through ScientificCompanionResolver; EMI acquisition metadata enriches SER-backed datasets, strongly corroborated diffraction calibration is interpreted as reciprocal space, contradictory mode hints preserve SER facts, and every dataset identity includes its EMI and contributing SER resource.",
      "evidence": ["tests/tia-emi-reader.test.ts"],
      "fixtures": [
        "benchmark/tia-ser/emi-corpus.json",
        "benchmark/tia-ser/generated-emi-fixture.ts",
        "benchmark/tia-ser/verify-emi-corpus.ts",
        "tests/tia-emi-reader.test.ts"
      ]
    },
    {
      "id": "purejsimage/ncem-emd",
      "version": "1.0.0",
      "format": "NCEM EMD 0.2",
      "packageExport": "purejsimage/scientific/readers/ncem-emd",
      "extensions": ["emd"],
      "mediaTypes": ["application/x-hdf5"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume", "spectrum-image", "spectrum"],
      "directRangeReads": true,
      "boundary": "Berkeley/openNCEM EMD 0.2 numeric groups below /data or /signals with scalar integer or decimal-string version attributes, exact labeled coordinates, bounded scalar or array acquisition attributes, and selected HDF5 hyperslab reads; Direct Electron .de5 and later EMD revisions remain unsupported.",
      "evidence": ["tests/ncem-emd-reader.test.ts", "tests/ncem-emd.test.ts"],
      "fixtures": [
        "benchmark/ncem-emd/corpus.json",
        "benchmark/ncem-emd/generated-fixture.ts",
        "tests/ncem-emd-reader.test.ts"
      ]
    },
    {
      "id": "purejsimage/velox-emd",
      "version": "1.0.0",
      "format": "FEI/Thermo Velox EMD",
      "packageExport": "purejsimage/scientific/readers/velox-emd",
      "extensions": ["emd"],
      "mediaTypes": ["application/x-hdf5"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "Velox HDF5 image hierarchy with rank-3 numeric image, diffraction, dense-map, DPC complex, or positive-half FFT arrays; bounded per-frame JSON metadata, explicit detector datasets and frame axes, exact native samples, and specific pruned-spectrum-image errors. Sparse SpectrumStream data and dense Spectrum entries remain outside this E2 boundary.",
      "evidence": ["tests/velox-emd-reader.test.ts"],
      "fixtures": ["benchmark/velox-emd/generated-fixture.ts", "tests/velox-emd-reader.test.ts"]
    },
    {
      "id": "purejsimage/rpl",
      "version": "1.0.0",
      "format": "Lispix RPL/RAW",
      "packageExport": "purejsimage/scientific/readers/rpl",
      "extensions": ["rpl", "raw"],
      "mediaTypes": ["application/x-rpl", "application/x-lispix-raw"],
      "resourceModel": "companion-pair",
      "datasetKinds": ["image", "spectrum-image"],
      "directRangeReads": true,
      "boundary": "One numeric header-plus-RAW array in image, vector, or depth-one order with exact declared endian, offset, dimensions, axis calibration, and selected plane or series reads.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": [
        "benchmark/scientific-interchange/corpus.json",
        "tests/scientific-interchange-formats.test.ts"
      ]
    },
    {
      "id": "purejsimage/emsa",
      "version": "1.0.0",
      "format": "EMSA/MAS spectrum",
      "packageExport": "purejsimage/scientific/readers/emsa",
      "extensions": ["msa", "emsa"],
      "mediaTypes": ["application/x-emsa-mas"],
      "resourceModel": "single",
      "datasetKinds": ["spectrum"],
      "directRangeReads": false,
      "boundary": "Bounded EMSA/MAS text spectra using Y or XY data, with exact point counts, native float64 series values, calibrated or lookup spectral coordinates, units, and preserved header fields.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": [
        "benchmark/scientific-interchange/corpus.json",
        "tests/scientific-interchange-formats.test.ts"
      ]
    },
    {
      "id": "purejsimage/nrrd",
      "version": "1.0.0",
      "format": "NRRD",
      "packageExport": "purejsimage/scientific/readers/nrrd",
      "extensions": ["nrrd", "nhdr"],
      "mediaTypes": ["application/x-nrrd"],
      "resourceModel": "companion-pair",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": false,
      "boundary": "NRRD0001 through NRRD0005 scalar numeric arrays with attached or one-file detached raw data, bounded gzip data, endian conversion, linear spacing or direction-vector calibration, origin, units, labels, kinds, and key/value metadata; ASCII, bzip2, and multi-file sequences are rejected.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": ["tests/scientific-interchange-formats.test.ts"]
    },
    {
      "id": "purejsimage/meta-image",
      "version": "1.0.0",
      "format": "MetaImage MHD/MHA",
      "packageExport": "purejsimage/scientific/readers/meta-image",
      "extensions": ["mhd", "mha"],
      "mediaTypes": ["application/x-metaimage"],
      "resourceModel": "companion-pair",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "Binary numeric MHA LOCAL or MHD plus one raw companion, with scalar or bounded interleaved components, endian conversion, spacing, origin, and preserved direction; compressed, ASCII, HeaderSize -1, and multi-file series are rejected.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": ["tests/scientific-interchange-formats.test.ts"]
    },
    {
      "id": "purejsimage/nifti",
      "version": "1.0.0",
      "format": "NIfTI-1/2",
      "packageExport": "purejsimage/scientific/readers/nifti",
      "extensions": ["nii", "gz"],
      "mediaTypes": ["application/x-nifti"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": false,
      "boundary": "Single-file NIfTI-1 and NIfTI-2 scalar numeric arrays, optionally bounded whole-file gzip, with endian conversion, scl_slope/inter transformation, voxel spacing and units, and preserved qform/sform metadata; paired hdr/img and complex, RGB, binary, and extension payloads are outside this subset.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": ["tests/scientific-interchange-formats.test.ts"]
    },
    {
      "id": "purejsimage/dicom",
      "version": "1.0.0",
      "format": "DICOM Part 10 Image",
      "packageExport": "purejsimage/scientific/readers/dicom",
      "extensions": ["dcm", "dicom"],
      "mediaTypes": ["application/dicom"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "Local DICOM Part 10 image instances using Implicit or Explicit VR Little Endian native uncompressed MONOCHROME1/2 pixels, Encapsulated Uncompressed Explicit VR Little Endian, RLE Lossless, JPEG Baseline 8-bit, JPEG Lossless Process 14 Selection Value 1, JPEG 2000 Lossless, and JPEG 2000, with 8-bit or 16-bit allocation as the transfer syntax permits, signed or unsigned stored values, 12-bit-in-16 normalization, homogeneous multi-frame selection, Pixel Spacing, linear rescale slope/intercept metadata, and Window Center/Width presets. Stored samples are not rescaled, windowed, or inverted. Selected encapsulated frames read only their offset table and fragments. Encapsulated Uncompressed and RLE require one fragment per frame. JPEG families may split a frame across fragments only with a valid Basic Offset Table. Empty offset tables with ambiguous multi-fragment frame boundaries remain unsupported; the reader does not scan for JPEG EOI markers to guess frames. Color, LUT-based presentation, DICOMweb, series discovery, private-tag interpretation, JPEG Lossless Process 14 other selection values, JPEG-LS, HTJ2K, and other compressed transfer syntaxes remain unsupported. Not validated for diagnostic use.",
      "evidence": [
        "tests/scientific-dicom-reader.test.ts",
        "tests/dicom-presentation.test.ts",
        "tests/dicom-rle.test.ts",
        "tests/dicom-parser.test.ts",
        "tests/dicom-codestream.test.ts",
        "tests/jpeg-lossless.test.ts"
      ],
      "fixtures": ["tests/fixtures/dicom/corpus.json", "tests/scientific-dicom-reader.test.ts"]
    },
    {
      "id": "purejsimage/npy",
      "version": "1.0.0",
      "format": "NumPy NPY",
      "packageExport": "purejsimage/scientific/readers/npy",
      "extensions": ["npy"],
      "mediaTypes": ["application/x-npy"],
      "resourceModel": "single",
      "datasetKinds": ["image", "volume"],
      "directRangeReads": true,
      "boundary": "Exactly one NPY v1, v2, or v3 C- or Fortran-contiguous scalar boolean, integer, float16, float32, or float64 array with generic index axes and selected plane or series reads; scalar, structured, object, complex, datetime, Unicode, and NPZ arrays are rejected.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": ["tests/scientific-interchange-formats.test.ts"]
    },
    {
      "id": "purejsimage/blockfile",
      "version": "1.0.0",
      "format": "NanoMegas ASTAR blockfile",
      "packageExport": "purejsimage/scientific/readers/blockfile",
      "extensions": ["blo"],
      "mediaTypes": ["application/x-nanomegas-blo"],
      "resourceModel": "single",
      "datasetKinds": ["image", "spectrum-image"],
      "directRangeReads": true,
      "boundary": "NanoMegas ASTAR blockfiles with bounded square uint8 diffraction frames, per-frame ID validation, a virtual-bright-field navigator, scan calibration, diffraction scale, and acquisition metadata.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": [
        "benchmark/scientific-interchange/corpus.json",
        "tests/scientific-interchange-formats.test.ts"
      ]
    },
    {
      "id": "purejsimage/mib",
      "version": "1.0.0",
      "format": "Quantum Detectors Merlin MIB",
      "packageExport": "purejsimage/scientific/readers/mib",
      "extensions": ["mib"],
      "mediaTypes": ["application/x-merlin-mib"],
      "resourceModel": "companion-pair",
      "datasetKinds": ["image", "spectrum-image"],
      "directRangeReads": true,
      "boundary": "Processed Merlin U08, U16, or U32 frame sequences with 384- or 768-byte per-frame headers, vertical normalization, optional acquisition HDR metadata, and optional rectangular scan navigation; raw packed R64 detector words are explicitly rejected.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": [
        "benchmark/scientific-interchange/corpus.json",
        "tests/scientific-interchange-formats.test.ts"
      ]
    },
    {
      "id": "purejsimage/ebsd-text",
      "version": "1.0.0",
      "format": "ANG/CTF orientation map",
      "packageExport": "purejsimage/scientific/readers/ebsd-text",
      "extensions": ["ang", "ctf"],
      "mediaTypes": ["application/x-ebsd-ang", "application/x-ebsd-ctf"],
      "resourceModel": "single",
      "datasetKinds": ["orientation-map"],
      "directRangeReads": false,
      "boundary": "Bounded UTF-8 ANG square-grid and CTF rectangular orientation maps with validated row-major positions, physical scan axes, Euler angles, phase, and quality columns; staggered and hexagonal grids are rejected instead of silently reshaped.",
      "evidence": ["tests/scientific-interchange-formats.test.ts"],
      "fixtures": ["tests/scientific-interchange-formats.test.ts"]
    }
  ]
}
