AVIF codec support

August 12, 2026 ยท View on GitHub

This document is the capability contract for PureJsImage's first-party AVIF codec. A checked item is implemented in the current code. An unchecked item is planned and must not be presented as supported until its output is independently validated. The correctness section records the current fixture and benchmark coverage.

Scope decisions

  • Implement AVIF and AV1 in this repository without a production codec dependency, native library, or WebAssembly module
  • Keep independent AVIF implementations as development-only research, fixture, and benchmark oracles
  • Make metadata inspection available without decoding AV1 pixels
  • Prioritize static still-image decode before animation
  • Prioritize opaque 8-bit Main Profile YUV 4:2:0 photographs before high-bit-depth, alpha, and uncommon chroma layouts
  • Return explicit unsupported errors for features outside the implemented pixel path rather than fabricating a normal-looking image
  • Treat bounded-memory AVIF-to-resize and AVIF-to-AVIF workflows as the long-term AWS Lambda architecture target
  • Implement the initial constrained AVIF encoder
  • Publish AVIF read support as Yes for common still-image workflows while keeping uncommon AV1 syntax and dependent animation as explicit unsupported boundaries

Decode

Detection and ISOBMFF container

  • Content detection through an ftyp box declaring avif or avis
  • Explicit avifCodec registration and automatic detection through the configured library instance
  • 32-bit box sizes, extended 64-bit sizes, and boxes extending to the end of their parent
  • uuid box header sizing
  • Validated parent bounds, safe-integer offsets, box counts, and metadata payload limits
  • Required ftyp and meta discovery
  • Primary-item selection through pitm
  • Item information through version 2 and 3 infe entries in iinf
  • Item properties and associations through ipco and ipma
  • Item references through version 0 and 1 iref
  • Item locations through version 0-2 iloc
  • File-relative mdat item extents
  • idat-relative item extents
  • Multiple extents per coded item
  • Bounded extraction with overlap, truncation, overflow, and extent-source validation
  • Incremental AV1 item reads without concatenating multi-extent payloads
  • Multiple meta boxes or fragmented media representations
  • External data references

Metadata and item relationships

  • Primary av01 image items
  • Grid item dimensions, rows, columns, and dimg tile relationships during metadata and bitstream inspection
  • Alpha auxiliary-item discovery through auxl and the standard alpha auxC identifiers
  • Spatial extents through ispe
  • Standard and extended pixi channel-depth parsing
  • AV1 configuration through av1C
  • NCLX color primaries, transfer characteristics, matrix coefficients, and full-range signaling
  • ICC-profile presence through prof and rICC
  • Rotation through irot and conversion to pipeline orientation metadata
  • Width, height, alpha presence, bit depth, chroma subsampling, AV1 profile, color-space description, frame count, and orientation reporting
  • Cross-check pixi bit depth against av1C
  • Cross-check av1C profile, bit depth, chroma, level, and tier against the authoritative AV1 sequence header during bitstream inspection
  • Pixel decoding and composition of compatible opaque grid items
  • Pixel decoding and composition of compatible alpha auxiliary items
  • Validated integer-dimension clean-aperture cropping through clap with exact integer or half-integer sample origins; other fractions remain unsupported
  • Mirroring through imir, ordered clap/irot/imir validation, and composition into pipeline orientation metadata
  • Pixel-aspect-ratio and other transformative item properties
  • ISO 21496-1 gain-map metadata, dimg relationships, and preferred alternative selection through altr entity groups
  • Depth maps, thumbnails, overlays, derived images other than grids and compatible gain maps, and other auxiliary-image semantics
  • EXIF item discovery and opt-in preservation through keepExif()
  • XMP item discovery and metadata exposure
  • Compatible RGB matrix/TRC ICC profile parsing, color-managed conversion, and opt-in preservation through keepIcc()
  • Metadata stripping by default and explicit EXIF and ICC preservation controls when re-encoding

AV1 low-overhead bitstream inspection

  • Low-overhead OBU headers with explicit LEB128 payload sizes
  • Temporal and spatial OBU extension identifiers
  • Sequence-header discovery and uniqueness validation
  • Reduced still-picture sequence headers
  • AV1 profile, level, tier, bit depth, monochrome, chroma subsampling, color configuration, operating points, and coded dimensions
  • Sequence feature flags needed by the still decoder, including 64/128 superblocks, filter-intra, intra-edge filtering, CDEF, restoration, and super-resolution signaling
  • Preservation of bounded OBU payload ranges for later frame parsing
  • Compatible non-reduced sequence headers with one operating point, still_picture=0, and one shown key frame at maximum or explicitly overridden dimensions
  • General non-reduced sequence headers with decoder timing, multiple operating points, frame IDs, or inter-frame dimension overrides
  • Multiple operating-point selection
  • Annex B AV1 byte streams
  • Inter-frame or general video decoding

Implemented restricted still-image path

  • One complete AV1 frame OBU or one frame-header OBU followed by complete contiguous tile-group OBUs per coded image item
  • Reduced still-picture headers and compatible non-reduced shown key frames
  • AV1 Main, High, and Professional Profiles with 8-bit monochrome, YUV 4:2:0, YUV 4:2:2, and YUV 4:4:4 output
  • 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
  • Lossless and lossy quantization paths used by the permanent fixtures
  • 64x64 and 128x128 superblocks
  • 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
  • Range-coded symbol decoding with adaptive CDF updates and final-state validation
  • Skip signaling, keyframe intra modes, angle deltas, transform selection, and coefficient contexts
  • 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
  • NONE, SPLIT, horizontal, vertical, horizontal-4, vertical-4, and tip-split intra partition traversal
  • Exact structural top-right and bottom-left edge availability across the partition tree and at superblock/frame boundaries
  • DC, vertical, horizontal, all directional, smooth, Paeth, and filter-intra prediction modes used by common photographic input
  • Chroma-from-luma prediction
  • Intra-edge filtering and edge upsampling
  • Square and rectangular transform traversal through 64x64
  • DCT, ADST, flipped-ADST, and identity inverse-transform combinations needed by the permanent common-photo corpus
  • Lossless 4x4 Walsh-Hadamard inverse transforms
  • Nonzero coefficient reconstruction in quantizer contexts 0, 1, 2, and 3
  • 8-bit, 10-bit, and 12-bit dequantization and inverse transforms using the normative depth-specific AV1 lookup tables
  • Quantization-matrix reconstruction for every supported two-dimensional transform size, including flat level 15 matrices
  • Matrix lookup in the inverse-transform kernels' coefficient-axis order, including AV1's adjusted 32x32 matrix dimensions for 64-point transforms
  • Block delta-Q reconstruction in the supported one-tile intra-only path
  • Odd-dimension edge clipping without decoding transforms outside the coded frame
  • 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
  • Linear and extended-sRGB plus linear BT.2020 NCLX conversion to sRGB, and compatible RGB matrix/TRC ICC conversion to sRGB
  • Compatible same-size, single-channel ISO gain-map composition in linear light for HDR base images with an SDR alternate
  • Straight and premultiplied alpha auxiliary composition using full-range 8-bit monochrome alpha, including normalization to straight RGBA output
  • Opaque image grids with consistent independently coded tile dimensions and cropped right or bottom edge tiles
  • Public crop, resize, AVIF-to-PNG, AVIF-to-JPEG, AVIF-to-WebP, and AVIF-to-other-implemented-codec pipelines after frame reconstruction
  • Multiple independently decoded AV1 tiles
  • Tile-list OBUs or partial, overlapping, reordered, or missing tile groups
  • Alpha-bearing image grids
  • Skipped intra block copy with adaptive integer motion-vector coding
  • Residual intra-block-copy transform partitions, transform types, coefficients, inverse transforms, and reconstruction used by the pinned monochrome fixture
  • 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
  • Decode transform-depth symbols for skipped intra blocks when transform-size selection is enabled
  • Other intra-block-copy and screen-content tools outside pinned syntax
  • Clear palette contexts after intra-block-copy blocks and honor block delta-Q state in the restricted one-tile path
  • Spatial segment-ID decoding for frame-independent intra-only maps using the adaptive AV1 segment CDF and neighboring segment predictor
  • Segment-specific alternate quantizers, reduced transform-set CDFs, and luma/chroma loop-filter adjustments
  • Reject pre-skip reference-frame, skip, and global-motion segment features plus mixed lossless/lossy segment combinations before reconstruction
  • Temporal segmentation updates, delta loop filters, and segmentation plus block delta-Q combinations outside the pinned intra-only subset
  • Every legal transform-size, transform-type, coefficient-context, and quantizer-context combination
  • Normative eight-tap horizontal super-resolution for filter-free one-tile 8-bit frames
  • Film grain synthesis

In-loop filtering and restoration

  • Parse loop-filter header syntax sufficiently to remain synchronized
  • Parse CDEF header syntax and per-unit CDEF indexes
  • Parse restoration types and restoration-unit sizes
  • Consume none, Wiener, self-guided, and switchable restoration-unit syntax
  • Maintain Wiener and self-guided reference parameters while reading units
  • 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
  • Apply CDEF to luma and chroma planes with directional strength adjustment and frame-edge sample availability
  • Apply Wiener loop restoration with stripe-aware deblocked/CDEF source selection
  • Apply self-guided loop restoration with stripe-aware source selection
  • Apply filters in deblock, CDEF, then loop-restoration order when super-resolution is not signaled
  • Apply super-resolution between CDEF and loop restoration for filtered frames
  • 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
  • Apply deblocking, CDEF, and restoration once across a complete lossy multi-tile frame and match agreeing dav1d and libaom native YUV byte for byte

The two full-size Kodak and Fox photographic fixtures receive the complete post-filter pipeline and match agreeing dav1d and libaom native YUV byte for byte. The full-size tolerance remains zero.

Additional still-image compatibility

  • 8-bit monochrome
  • Coded-lossless and filter-free lossy 10-bit and 12-bit YUV 4:2:0
  • 8-bit YUV 4:2:2
  • Filter-free lossy 10-bit and 12-bit YUV 4:2:2
  • 8-bit YUV 4:4:4
  • 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
  • Lossy 10-bit YUV 4:4:4 decode with filter-free output and compatible deblocking, CDEF, and Wiener restoration
  • 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
  • Filtered lossy 12-bit YUV 4:2:0 with compatible deblocking, CDEF, and Wiener or self-guided restoration
  • Filtered lossy 12-bit YUV 4:2:2 and YUV 4:4:4 with compatible deblocking and CDEF
  • 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
  • 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
  • Apply deblocking, CDEF, and restoration in normative order across multiple 256-sample restoration units and partial right/bottom frame edges
  • Other high-depth post-filter combinations outside the pinned YUV 4:2:0 and 642x386 YUV 4:2:2/4:4:4 restoration matrix
  • Full-range high-bit-depth reconstruction without premature truncation before explicit conversion to the library's 8-bit RGBA output contract
  • Compatible full-range 8-bit monochrome alpha auxiliaries
  • Premultiplied-alpha signaling and normalization to straight RGBA
  • Multi-item opaque grids with cropped right and bottom edge composition
  • Compatible non-reduced shown key-frame headers without decoder timing or frame IDs, including selected key-frame dimension overrides below the sequence maximum
  • One still frame stored as a frame-header OBU followed by multiple complete contiguous tile-group OBUs
  • 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
  • Classify shown key, inter, intra-only, switch, and show-existing frame headers before reconstruction and explicitly reject dependent enhancement layers
  • Dependent enhancement layers and rendering all intermediate layers
  • Convert compatible PQ and HLG NCLX signaling directly to tone-mapped SDR RGBA unless a compatible SDR gain-map alternate is selected
  • Rec.2020/PQ NCLX matrix 10 constant-luminance conversion
  • Broader ICC-managed conversion

Animation

  • Detect the avis sequence brand and avoid reporting a false one-frame metadata count or silently decoding its primary still item
  • Parse AVIF tracks and sample tables with bounded counts, exact cross-timescale timing alignment, sample extents, sync-sample indices, and color/alpha relationships
  • Decode an explicitly selected independently decodable color and alpha key sample and reject dependent, inter, show-existing, and out-of-range selections
  • Accept only single full-duration identity edit lists and explicitly reject trimmed animation edits and track-level clean apertures
  • Dependent animated AV1 frame reconstruction, timing exposure, repetition, blending, disposal, and canvas composition
  • Animated AVIF frame iteration
  • Animated AVIF encoding

Encode

Initial constrained encoder target

  • Public image.avif() and image.encode('avif') APIs
  • AVIF ftyp, meta, item properties, item locations, and mdat writer
  • One opaque av01 primary item
  • Reduced still-picture AV1 sequence and one shown key frame
  • 8-bit Main Profile YUV 4:2:0
  • Gray, RGB, and RGBA pipeline input, with RGBA composited against white by default or an explicit solid background
  • BT.709 RGB-to-YUV conversion and deterministic 4:2:0 subsampling
  • Quality control from the public 1-100 scale to AV1 quantization
  • Deterministic full-superblock 4x4 partitioning with DC prediction and lossless 4x4 transforms
  • Reject widths above 4,096 pixels, heights above 65,536 pixels, and padded single-tile areas above 4,096 by 2,304 pixels
  • Deterministic valid output accepted by independent AVIF decoders
  • Output-size and perceptual-quality benchmarks against libaom, rav1e, and SVT-AV1

Encoder compatibility improvements

  • Alpha auxiliary-item encoding
  • Lossless AVIF encoding
  • YUV 4:4:4 and 4:2:2 output
  • 10-bit and 12-bit output
  • Wide-gamut and HDR color signaling
  • Adaptive partition, prediction, transform, and quantizer decisions
  • Loop-filter, CDEF, and restoration decisions
  • Multi-tile and grid output for large images
  • EXIF item and compatible RGB ICC profile writing when explicitly preserved
  • XMP and other metadata writing or preservation
  • Animation

Memory and execution contract

  • Metadata inspection reads bounded box payloads without decoding image pixels
  • Item extraction validates compressed byte ranges before allocation
  • Public decoded output is emitted as ordered 32-row rgba8 pixel blocks
  • Configurable input-size, dimension, pixel-count, frame-count, and decoded byte limits are applied before public pixel decode
  • Post-filtered, rotated-alpha, and grid paths' padded full-frame YUV allocations are documented as temporary fallbacks rather than the Lambda northstar
  • RGBA conversion emits requested regions in ordered 32-row blocks without retaining a source-sized RGBA bitmap
  • Opaque grids decode and retain only one contributing tile row while composing ordered output bands
  • Loop restoration writes through three delayed 4-row luma bands rather than allocating another padded full-frame YUV output
  • CDEF snapshots bounded source windows and delays one 8-row luma output band instead of retaining an additional padded YUV frame
  • 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
  • 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
  • Compatible aligned filter-free alpha auxiliaries reconstruct through a synchronized second row ring before per-block alpha composition
  • Compatible gain-map composition synchronizes bounded base and gain-map row decoders without retaining a source-sized RGBA frame
  • Every decoder path rejects coded payload plus conservatively estimated live working state above the 64 MiB codec limit
  • AVIF track sample counts are rejected against maxFrames before allocating duration, offset, size, description-index, or sync-sample arrays
  • 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
  • Constrained encode checks dimensions, pixel count, estimated padded YUV working state, AV1 single-tile width, and padded superblock area before allocation
  • 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
  • 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
  • Decode one tile or bounded superblock working set at a time
  • Avoid retaining a full source-resolution RGBA bitmap
  • Feed compatible full-aperture 2x, 4x, and 8x resize directly from bounded box-filtered YUV rows before RGBA conversion
  • Avoid RGB entirely for compatible AVIF-to-resize-to-AVIF workflows
  • Release coefficient, prediction, filter, and restoration state as soon as its output halo is complete
  • Apply a codec-specific working-memory limit covering compressed item bytes, tile state, coefficient contexts, YUV planes, filter halos, and RGBA conversion state
  • Benchmark isolated cold-process peak RSS across 512x384, 1024x768, and 2048x1536 source dimensions with full-size and 4x downscaled output
  • 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%
  • Demonstrate the project's 80% memory-reduction target against equivalent Jimp-compatible workflows where a comparison is possible

Correctness and safety contract

  • Reject malformed box sizes, nesting, extents, references, item IDs, property associations, dimensions, and metadata contradictions explicitly
  • Reject malformed OBU sizes, duplicate sequence headers, truncated frame headers, tile overruns, invalid arithmetic symbols, impossible partitions, coefficient scans, and transform bounds explicitly
  • 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
  • Pass metadata expectations for all 55 permanent corpus AVIF files
  • Decode exact independent reference pixels for the embedded 2x2 lossless fixture and the 4x4 lossy fixture
  • 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
  • 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
  • Pin separate Sharp and Chromium behavior for combined grid-item transforms
  • Benchmark both full-size photographs through the public AVIF-to-PNG workflow
  • Report the current broad decode corpus as 8 compatible, 17 explicitly unsupported, zero invalid, and zero unexpected
  • 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
  • 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
  • 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
  • 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
  • Reconstruct the deterministic coded-lossless 10-bit 2x2 AV1 tile fixture exactly against its source and agreeing dav1d/libaom native YUV
  • 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
  • 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
  • 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
  • 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
  • Select an independently decodable shown-key spatial layer from a pinned three-frame a1lx/lsel item and match agreeing dav1d/libaom native YUV exactly
  • 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
  • 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
  • Exercise lossy multi-tile AVIF decode through the portable TypeScript codec in Chromium and pin its RGBA output
  • 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
  • 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
  • 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
  • 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
  • Exercise single-band and multi-band filter-free AV1 super-resolution through the portable TypeScript codec in Chromium and pin their RGBA output
  • 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
  • Exercise filtered AV1 super-resolution through the portable TypeScript codec in Chromium and pin its RGBA output
  • 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
  • Exercise AV1 film-grain synthesis through the portable TypeScript codec in Chromium and pin its RGBA output
  • 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
  • Exceed 54 dB RGBA PSNR against Sharp/libavif for the checksum-pinned cropped-edge 1x5 image grid
  • Exercise straight alpha, premultiplied alpha, and image-grid composition through the portable TypeScript codec in Chromium and pin each PNG output
  • Match compatible RGB matrix/TRC ICC output exactly against Sharp/libvips for two checksum-pinned fixtures
  • Preserve checksum-pinned EXIF and compatible RGB ICC bytes through AVIF re-encoding in Node.js and Chromium while stripping both by default
  • Hold linear BT.2020 conversion to maximum channel error 13 and mean error at most 0.5 against an FFmpeg/zimg staged-sRGB oracle
  • 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
  • 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
  • Keep @stacksjs/ts-avif development-only; the published package is not a production dependency
  • Add exact post-filter comparisons against both dav1d and libaom for five checksum-pinned deterministic fixtures
  • Decode five checksum-pinned default Sharp 0.35.3/libaom q30 through q90 quantization-matrix fixtures after exact dav1d/libaom oracle agreement
  • 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
  • Match Sharp/libavif RGB exactly for checksum-pinned lossy and lossless quantizer-context-0 YUV 4:4:4 fixtures, including lossless identity color
  • Match Sharp/libavif RGBA exactly for the checksum-pinned 33x11 draw-points screen-content fixture using luma and chroma palettes
  • Match agreeing libaom and dav1d native YUV exactly for the checksum-pinned 320x280 skipped intra-block-copy fixture
  • Match agreeing libaom and dav1d native YUV exactly for the checksum-pinned 1280x720 monochrome residual intra-block-copy fixture
  • 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
  • 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
  • Exercise the rav1e spatial-segmentation fixture through the portable codec entry in Chromium and pin its RGBA output
  • Match agreeing libaom and dav1d native YUV exactly for the checksum-pinned SVT-AV1 512x512 frame with a skipped 64x64 intra transform-selection block
  • Exercise the SVT-AV1 skipped-transform fixture through the portable codec entry in Chromium and pin its RGBA output
  • 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
  • Exercise the pinned 1280x720 reduced-header still-picture fixture through the portable codec entry in Chromium and pin its RGBA output
  • Reject checksum-pinned entropy mutations whose intra-block-copy motion vectors overlap the current superblock or escape the decoded plane
  • Apply the checksum-pinned 8x6 integer clean aperture to its 16x12 coded image and match Sharp/libavif RGBA exactly
  • Exercise integer- and half-integer-origin clean-aperture cropping through the portable codec in Chromium and Firefox and pin both RGBA outputs
  • Apply a checksum-pinned half-integer-origin clean aperture to a 722x1024 coded image and match Sharp/libvips within 0.01 normalized RGBA RMSE
  • Parse bounded AVIF animation track/sample metadata and match five explicitly selected independent color/alpha key samples to pinned FFmpeg/dav1d PNG oracles
  • Exercise independent animated color/alpha key-sample selection and dependent-frame rejection through the portable codec in Chromium and Firefox
  • 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
  • Validate HLG shared-luminance OOTF math against independently calculated neutral and saturated BT.2100 vectors and pin the end-to-end AVIF RGBA hash
  • Exercise PQ and HLG direct tone mapping through the portable codec in Chromium and Firefox and pin all five RGBA outputs
  • 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
  • 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
  • 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
  • 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
  • Exercise palette-coded 8-bit and coded-lossless 10-bit and 12-bit decoding through the portable codec entry in Chromium
  • Exercise skipped intra-block-copy decoding through the portable codec entry in Chromium
  • Keep delta loop-filter syntax explicitly unsupported in the restricted quantization-matrix path
  • 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
  • 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
  • Match full-size Kodak and Fox post-filter pixels exactly against agreeing dav1d and libaom native YUV output
  • Measure checksum-pinned filtered 10-bit and 12-bit YUV 4:2:0 full-size decode and downscale workflows in isolated cold processes
  • Move filtered high-depth reconstruction and post-filtering from the explicit padded full-frame native-YUV fallback to the bounded-row architecture
  • 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
  • Expand the compatibility corpus with rav1e, SVT-AV1, browser encoders, ImageMagick, cameras, and real web uploads
  • Add malformed ISOBMFF, OBU, entropy, partition, coefficient, restoration, allocation, and decompression-bomb fuzzing
  • Add a conformance corpus for every checked AV1 syntax combination rather than relying on shared photographic fixtures
  • Validate deterministic constrained-encoder samples with Sharp/libavif and FFmpeg/libaom, including odd dimensions across 64x64 superblocks
  • Validate every encoded output with at least two independent decoders

Current measurements and compatibility details are recorded in: