{"version":3,"file":"exrjs.cjs","sources":["../src/core/types.js","../src/lib/half.js","../src/core/constants.js","../src/io/binary-writer.js","../src/meta/attributes.js","../src/image/channels.js","../src/block/index.js","../src/compression/b44/index.js","../src/compression/piz/huffman.js","../src/compression/piz/wavelet.js","../src/compression/piz/index.js","../src/compression/pxr24.js","../src/compression/optimize.js","../src/compression/rle.js","../src/compression/zip.js","../src/compression/index.js","../src/meta/header.js","../src/meta/read-attributes.js","../src/meta/read-header.js","../src/meta/index.js","../src/image/layer.js","../src/image/image.js","../src/block/read-block.js","../src/io/binary-reader.js","../src/api/read.js","../src/api/index.js"],"sourcesContent":["// Core data types for EXR images\n\n// 2D vector for coordinates and dimensions\nexport class Vec2 {\n  constructor(x, y) {\n    this.x = x\n    this.y = y\n  }\n\n  area() {\n    return this.x * this.y\n  }\n\n  // Convert 2D position to flat array index\n  flatIndex(width) {\n    return this.y * width + this.x\n  }\n\n  add(other) {\n    return new Vec2(this.x + other.x, this.y + other.y)\n  }\n\n  sub(other) {\n    return new Vec2(this.x - other.x, this.y - other.y)\n  }\n\n  mul(scalar) {\n    return new Vec2(this.x * scalar, this.y * scalar)\n  }\n\n  div(scalar) {\n    return new Vec2(Math.floor(this.x / scalar), Math.floor(this.y / scalar))\n  }\n\n  equals(other) {\n    return this.x === other.x && this.y === other.y\n  }\n\n  clone() {\n    return new Vec2(this.x, this.y)\n  }\n\n  toString() {\n    return `Vec2(${this.x}, ${this.y})`\n  }\n}\n\n// Integer rectangle bounds (data window, display window, block bounds)\nexport class IntegerBounds {\n  constructor(position, size) {\n    this.position = position\n    this.size = size\n  }\n\n  // Create bounds from dimensions starting at origin\n  static fromDimensions(width, height) {\n    return new IntegerBounds(new Vec2(0, 0), new Vec2(width, height))\n  }\n\n  // Create bounds from min/max coordinates\n  static fromMinMax(minX, minY, maxX, maxY) {\n    return new IntegerBounds(\n      new Vec2(minX, minY),\n      new Vec2(maxX - minX, maxY - minY),\n    )\n  }\n\n  end() {\n    return new Vec2(\n      this.position.x + this.size.x,\n      this.position.y + this.size.y,\n    )\n  }\n\n  area() {\n    return this.size.area()\n  }\n\n  // Check if a position is within bounds\n  contains(pos) {\n    const end = this.end()\n    return (\n      pos.x >= this.position.x &&\n      pos.x < end.x &&\n      pos.y >= this.position.y &&\n      pos.y < end.y\n    )\n  }\n\n  // Intersect with another bounds\n  intersect(other) {\n    const minX = Math.max(this.position.x, other.position.x)\n    const minY = Math.max(this.position.y, other.position.y)\n    const maxX = Math.min(this.end().x, other.end().x)\n    const maxY = Math.min(this.end().y, other.end().y)\n\n    if (minX >= maxX || minY >= maxY) {\n      return null\n    }\n\n    return IntegerBounds.fromMinMax(minX, minY, maxX, maxY)\n  }\n\n  clone() {\n    return new IntegerBounds(this.position.clone(), this.size.clone())\n  }\n\n  toString() {\n    return `IntegerBounds(${this.position}, ${this.size})`\n  }\n}\n\n// Sample type enumeration - the type of each pixel sample value\nexport const SampleType = Object.freeze({\n  // 16-bit IEEE 754 half-precision float\n  F16: 'f16',\n  // 32-bit IEEE 754 single-precision float\n  F32: 'f32',\n  // 32-bit unsigned integer\n  U32: 'u32',\n})\n\n// Get the number of bytes per sample for a given sample type\nexport function bytesPerSample(sampleType) {\n  switch (sampleType) {\n    case SampleType.F16:\n      return 2\n    case SampleType.F32:\n    case SampleType.U32:\n      return 4\n    default:\n      throw new Error(`Unknown sample type: ${sampleType}`)\n  }\n}\n\n// Get the TypedArray constructor for a given sample type\nexport function typedArrayForSampleType(sampleType) {\n  switch (sampleType) {\n    case SampleType.F16:\n      return Uint16Array // F16 stored as raw bits in Uint16\n    case SampleType.F32:\n      return Float32Array\n    case SampleType.U32:\n      return Uint32Array\n    default:\n      throw new Error(`Unknown sample type: ${sampleType}`)\n  }\n}\n\n// Compression method enumeration\nexport const Compression = Object.freeze({\n  // No compression\n  Uncompressed: 0,\n  // Run-length encoding\n  RLE: 1,\n  // zlib compression, one scan line at a time\n  ZIP1: 2,\n  // zlib compression, 16 scan lines at a time\n  ZIP16: 3,\n  // PIZ-based wavelet compression\n  PIZ: 4,\n  // lossy 24-bit float compression\n  PXR24: 5,\n  // lossy 4x4 pixel block compression, fixed rate\n  B44: 6,\n  // lossy 4x4 pixel block compression, flat fields compressed more\n  B44A: 7,\n})\n\n// Get the number of scan lines per block for a compression method\nexport function scanLinesPerBlock(compression) {\n  switch (compression) {\n    case Compression.Uncompressed:\n    case Compression.RLE:\n    case Compression.ZIP1:\n      return 1\n    case Compression.ZIP16:\n    case Compression.PXR24:\n      return 16\n    case Compression.PIZ:\n    case Compression.B44:\n    case Compression.B44A:\n      return 32\n    default:\n      return 1\n  }\n}\n\n// Line order enumeration\nexport const LineOrder = Object.freeze({\n  // Scan lines are stored in increasing Y order\n  Increasing: 0,\n  // Scan lines are stored in decreasing Y order\n  Decreasing: 1,\n  // Scan lines are stored in unspecified order (for tiled images)\n  Unspecified: 2,\n})\n\n// Block storage mode\nexport class Blocks {\n  constructor(type, tileSize = null, levelMode = 0, roundingMode = 0) {\n    this.type = type\n    this.tileSize = tileSize\n    this.levelMode = levelMode\n    this.roundingMode = roundingMode\n  }\n\n  static ScanLines = new Blocks('scanlines')\n\n  // Create tiled block mode\n  static Tiles(size) {\n    return new Blocks('tiles', size, 0, 0) // Singular, RoundDown\n  }\n\n  // Create tiled block mode with mip maps\n  static MipMaps(size, roundingMode = 0) {\n    return new Blocks('tiles', size, 1, roundingMode) // MipMap\n  }\n\n  // Create tiled block mode with rip maps\n  static RipMaps(size, roundingMode = 0) {\n    return new Blocks('tiles', size, 2, roundingMode) // RipMap\n  }\n\n  isTiled() {\n    return this.type === 'tiles'\n  }\n\n  hasMipMaps() {\n    return this.levelMode === 1\n  }\n\n  hasRipMaps() {\n    return this.levelMode === 2\n  }\n\n  hasLevels() {\n    return this.levelMode !== 0\n  }\n}\n\n// Level mode for mip/rip maps\nexport const LevelMode = Object.freeze({\n  // Single resolution\n  Singular: 0,\n  // Mip maps (powers of 2 reduction in both dimensions)\n  MipMap: 1,\n  // Rip maps (independent powers of 2 reduction in each dimension)\n  RipMap: 2,\n})\n\n// Rounding mode for level size calculations\nexport const RoundingMode = Object.freeze({\n  // Round down\n  Down: 0,\n  // Round up\n  Up: 1,\n})\n\n// Calculate the size at a given mip level\nexport function mipLevelSize(fullSize, level, roundingMode) {\n  if (level === 0) return fullSize\n\n  let size = fullSize\n  for (let i = 0; i < level; i++) {\n    if (roundingMode === RoundingMode.Up) {\n      size = Math.ceil(size / 2)\n    } else {\n      size = Math.floor(size / 2)\n    }\n    if (size < 1) size = 1\n  }\n  return size\n}\n\n// Calculate the number of mip levels for a given dimension\nexport function mipLevelCount(fullSize) {\n  if (fullSize <= 0) return 0\n  return 1 + Math.floor(Math.log2(fullSize))\n}\n\n// Calculate mip level counts for an image\n// For mip maps: both dimensions use max(width, height) level count\n// For rip maps: each dimension has its own level count\nexport function getLevelCounts(size, levelMode) {\n  if (levelMode === LevelMode.Singular) {\n    return new Vec2(1, 1)\n  } else if (levelMode === LevelMode.MipMap) {\n    const maxDim = Math.max(size.x, size.y)\n    const count = mipLevelCount(maxDim)\n    return new Vec2(count, count)\n  } else if (levelMode === LevelMode.RipMap) {\n    return new Vec2(mipLevelCount(size.x), mipLevelCount(size.y))\n  }\n  return new Vec2(1, 1)\n}\n\n// Calculate the size of a level for mip/rip maps\nexport function getLevelSize(fullSize, levelIndex, levelMode, roundingMode) {\n  if (levelMode === LevelMode.Singular) {\n    return fullSize.clone()\n  } else if (levelMode === LevelMode.MipMap) {\n    // For mip maps, x and y level must be equal\n    const level = levelIndex.x\n    return new Vec2(\n      mipLevelSize(fullSize.x, level, roundingMode),\n      mipLevelSize(fullSize.y, level, roundingMode),\n    )\n  } else if (levelMode === LevelMode.RipMap) {\n    // For rip maps, x and y levels can differ\n    return new Vec2(\n      mipLevelSize(fullSize.x, levelIndex.x, roundingMode),\n      mipLevelSize(fullSize.y, levelIndex.y, roundingMode),\n    )\n  }\n  return fullSize.clone()\n}\n","// IEEE 754 Half-precision (16-bit) floating point conversion\n// Format: 1 sign bit, 5 exponent bits, 10 mantissa bits\n// Bias: 15\n// Range: ~6.1e-5 to 65504\n\n// Reusable typed arrays for bit manipulation\nconst f32View = new Float32Array(1)\nconst u32View = new Uint32Array(f32View.buffer)\n\n// Convert 32-bit float to 16-bit half-precision\n// @param {number} value - 32-bit float\n// @returns {number} - 16-bit half-precision as unsigned integer\nexport function floatToHalf(value) {\n  f32View[0] = value\n  const bits = u32View[0]\n\n  // Extract components\n  const sign = (bits >>> 16) & 0x8000\n  const exp = (bits >>> 23) & 0xff\n  const mantissa = bits & 0x7fffff\n\n  // Handle special cases\n  if (exp === 0) {\n    // Zero or denormalized (too small for f16)\n    return sign // Flush to signed zero\n  }\n\n  if (exp === 255) {\n    // Infinity or NaN\n    if (mantissa === 0) {\n      return sign | 0x7c00 // Infinity\n    }\n    // NaN - preserve some mantissa bits\n    return sign | 0x7c00 | (mantissa >>> 13)\n  }\n\n  // Normalized number\n  // Convert exponent from bias-127 to bias-15\n  const newExp = exp - 127 + 15\n\n  if (newExp >= 31) {\n    // Overflow to infinity\n    return sign | 0x7c00\n  }\n\n  if (newExp <= 0) {\n    // Denormalized in f16 or underflow\n    if (newExp < -10) {\n      // Too small, flush to zero\n      return sign\n    }\n\n    // Denormalized: shift mantissa right\n    const shift = 1 - newExp\n    const denormMantissa = (mantissa | 0x800000) >>> (13 + shift)\n    return sign | denormMantissa\n  }\n\n  // Normal case: truncate mantissa to 10 bits\n  return sign | (newExp << 10) | (mantissa >>> 13)\n}\n\n// Convert 32-bit float to 16-bit half-precision with rounding\n// @param {number} value - 32-bit float\n// @returns {number} - 16-bit half-precision as unsigned integer\nexport function floatToHalfRounded(value) {\n  f32View[0] = value\n  const bits = u32View[0]\n\n  const sign = (bits >>> 16) & 0x8000\n  const exp = (bits >>> 23) & 0xff\n  const mantissa = bits & 0x7fffff\n\n  if (exp === 0) {\n    return sign\n  }\n\n  if (exp === 255) {\n    if (mantissa === 0) {\n      return sign | 0x7c00\n    }\n    return sign | 0x7c00 | (mantissa >>> 13)\n  }\n\n  const newExp = exp - 127 + 15\n\n  if (newExp >= 31) {\n    return sign | 0x7c00\n  }\n\n  if (newExp <= 0) {\n    if (newExp < -10) {\n      return sign\n    }\n    const shift = 1 - newExp\n    const denormMantissa = (mantissa | 0x800000) >>> (13 + shift)\n    return sign | denormMantissa\n  }\n\n  // Round to nearest even\n  const truncatedMantissa = mantissa >>> 13\n  const remainder = mantissa & 0x1fff\n\n  // Round up if remainder > 0.5 or remainder == 0.5 and result would be odd\n  if (remainder > 0x1000 || (remainder === 0x1000 && truncatedMantissa & 1)) {\n    const result = sign | (newExp << 10) | truncatedMantissa\n    return result + 1 // This handles carry into exponent correctly\n  }\n\n  return sign | (newExp << 10) | truncatedMantissa\n}\n\n// Convert 16-bit half-precision to 32-bit float\n// @param {number} half - 16-bit half-precision as unsigned integer\n// @returns {number} - 32-bit float\nexport function halfToFloat(half) {\n  const sign = (half & 0x8000) >>> 15\n  const exp = (half & 0x7c00) >>> 10\n  const mantissa = half & 0x03ff\n\n  if (exp === 0) {\n    if (mantissa === 0) {\n      // Zero\n      u32View[0] = sign << 31\n      return f32View[0]\n    }\n    // Denormalized - convert to normalized f32\n    let e = -14\n    let m = mantissa\n    while ((m & 0x400) === 0) {\n      m <<= 1\n      e--\n    }\n    m &= 0x3ff\n    u32View[0] = (sign << 31) | ((e + 127) << 23) | (m << 13)\n    return f32View[0]\n  }\n\n  if (exp === 31) {\n    if (mantissa === 0) {\n      // Infinity\n      u32View[0] = (sign << 31) | 0x7f800000\n      return f32View[0]\n    }\n    // NaN\n    u32View[0] = (sign << 31) | 0x7f800000 | (mantissa << 13)\n    return f32View[0]\n  }\n\n  // Normalized number\n  const newExp = exp - 15 + 127\n  u32View[0] = (sign << 31) | (newExp << 23) | (mantissa << 13)\n  return f32View[0]\n}\n\n// Check if a value can be represented exactly in half-precision\n// @param {number} value - 32-bit float\n// @returns {boolean}\nexport function isExactHalf(value) {\n  const half = floatToHalf(value)\n  const back = halfToFloat(half)\n  return Object.is(value, back)\n}\n\n// Clamp a value to the half-precision representable range\n// @param {number} value\n// @returns {number}\nexport function clampToHalfRange(value) {\n  if (Number.isNaN(value)) return value\n  if (value > 65504) return 65504\n  if (value < -65504) return -65504\n  // Values very close to zero get flushed\n  if (Math.abs(value) < 6.103515625e-5 && value !== 0) {\n    return value > 0 ? 6.103515625e-5 : -6.103515625e-5\n  }\n  return value\n}\n\n// Convert a Float32Array to half-precision Uint16Array\n// @param {Float32Array} floats\n// @returns {Uint16Array}\nexport function float32ArrayToHalf(floats) {\n  const result = new Uint16Array(floats.length)\n  for (let i = 0; i < floats.length; i++) {\n    result[i] = floatToHalf(floats[i])\n  }\n  return result\n}\n\n// Convert a half-precision Uint16Array to Float32Array\n// @param {Uint16Array} halves\n// @returns {Float32Array}\nexport function halfToFloat32Array(halves) {\n  const result = new Float32Array(halves.length)\n  for (let i = 0; i < halves.length; i++) {\n    result[i] = halfToFloat(halves[i])\n  }\n  return result\n}\n","// EXR file format constants\n\n// Magic number identifying an EXR file\nexport const MAGIC_NUMBER = 0x01312f76 // Little-endian: 0x76, 0x2f, 0x31, 0x01\n\n// Current EXR version\nexport const EXR_VERSION = 2\n\n// Version flags\nexport const VersionFlags = Object.freeze({\n  // Single-part tiled image\n  TILED: 1 << 9,\n  // Attribute or channel names longer than 31 characters\n  LONG_NAMES: 1 << 10,\n  // Deep data (not yet supported)\n  DEEP_DATA: 1 << 11,\n  // Multi-part file\n  MULTI_PART: 1 << 12,\n})\n\n// Maximum attribute name/value length without LONG_NAMES flag\nexport const MAX_SHORT_NAME_LENGTH = 31\n\n// Maximum attribute name/value length with LONG_NAMES flag\nexport const MAX_LONG_NAME_LENGTH = 255\n\n// Attribute type names as written in the file\nexport const AttributeType = Object.freeze({\n  BOX2I: 'box2i',\n  BOX2F: 'box2f',\n  CHLIST: 'chlist',\n  CHROMATICITIES: 'chromaticities',\n  COMPRESSION: 'compression',\n  DOUBLE: 'double',\n  ENVMAP: 'envmap',\n  FLOAT: 'float',\n  INT: 'int',\n  KEYCODE: 'keycode',\n  LINE_ORDER: 'lineOrder',\n  M33F: 'm33f',\n  M44F: 'm44f',\n  PREVIEW: 'preview',\n  RATIONAL: 'rational',\n  STRING: 'string',\n  STRING_VECTOR: 'stringvector',\n  TILE_DESC: 'tiledesc',\n  TIMECODE: 'timecode',\n  V2I: 'v2i',\n  V2F: 'v2f',\n  V3I: 'v3i',\n  V3F: 'v3f',\n})\n\n// Required header attributes\nexport const RequiredAttributes = Object.freeze([\n  'channels',\n  'compression',\n  'dataWindow',\n  'displayWindow',\n  'lineOrder',\n  'pixelAspectRatio',\n  'screenWindowCenter',\n  'screenWindowWidth',\n])\n\n// Additional required attributes for tiled images\nexport const TiledAttributes = Object.freeze(['tiles'])\n\n// Additional required attributes for multi-part files\nexport const MultiPartAttributes = Object.freeze(['name', 'type'])\n\n// Layer type identifiers\nexport const LayerType = Object.freeze({\n  SCANLINE: 'scanlineimage',\n  TILED: 'tiledimage',\n  DEEP_SCANLINE: 'deepscanline',\n  DEEP_TILED: 'deeptile',\n})\n\n// Default tile size\nexport const DEFAULT_TILE_SIZE = 64\n\n// Compression IDs as written in the file\nexport const CompressionId = Object.freeze({\n  NO_COMPRESSION: 0,\n  RLE_COMPRESSION: 1,\n  ZIPS_COMPRESSION: 2,\n  ZIP_COMPRESSION: 3,\n  PIZ_COMPRESSION: 4,\n  PXR24_COMPRESSION: 5,\n  B44_COMPRESSION: 6,\n  B44A_COMPRESSION: 7,\n  DWAA_COMPRESSION: 8,\n  DWAB_COMPRESSION: 9,\n})\n","// Little-endian binary writer with automatic buffer growth\n\nimport { floatToHalf } from '../lib/half.js'\n\nconst DEFAULT_CAPACITY = 65536\nconst GROWTH_FACTOR = 2\n\n// Binary writer for constructing EXR files\n// All multi-byte values are written in little-endian format\nexport class BinaryWriter {\n  constructor(initialCapacity = DEFAULT_CAPACITY) {\n    this.buffer = new ArrayBuffer(initialCapacity)\n    this.view = new DataView(this.buffer)\n    this.u8 = new Uint8Array(this.buffer)\n    this.position = 0\n  }\n\n  // Ensure buffer has capacity for additional bytes\n  ensureCapacity(additional) {\n    const required = this.position + additional\n    if (required <= this.buffer.byteLength) {\n      return\n    }\n\n    // Grow buffer\n    let newCapacity = this.buffer.byteLength\n    while (newCapacity < required) {\n      newCapacity *= GROWTH_FACTOR\n    }\n\n    const newBuffer = new ArrayBuffer(newCapacity)\n    new Uint8Array(newBuffer).set(this.u8.subarray(0, this.position))\n    this.buffer = newBuffer\n    this.view = new DataView(this.buffer)\n    this.u8 = new Uint8Array(this.buffer)\n  }\n\n  // Write unsigned 8-bit integer\n  writeU8(value) {\n    this.ensureCapacity(1)\n    this.u8[this.position++] = value\n  }\n\n  // Write signed 8-bit integer\n  writeI8(value) {\n    this.ensureCapacity(1)\n    this.view.setInt8(this.position++, value)\n  }\n\n  // Write unsigned 16-bit integer (little-endian)\n  writeU16(value) {\n    this.ensureCapacity(2)\n    this.view.setUint16(this.position, value, true)\n    this.position += 2\n  }\n\n  // Write signed 16-bit integer (little-endian)\n  writeI16(value) {\n    this.ensureCapacity(2)\n    this.view.setInt16(this.position, value, true)\n    this.position += 2\n  }\n\n  // Write unsigned 32-bit integer (little-endian)\n  writeU32(value) {\n    this.ensureCapacity(4)\n    this.view.setUint32(this.position, value, true)\n    this.position += 4\n  }\n\n  // Write signed 32-bit integer (little-endian)\n  writeI32(value) {\n    this.ensureCapacity(4)\n    this.view.setInt32(this.position, value, true)\n    this.position += 4\n  }\n\n  // Write unsigned 64-bit integer (little-endian)\n  writeU64(value) {\n    this.ensureCapacity(8)\n    this.view.setBigUint64(this.position, BigInt(value), true)\n    this.position += 8\n  }\n\n  // Write signed 64-bit integer (little-endian)\n  writeI64(value) {\n    this.ensureCapacity(8)\n    this.view.setBigInt64(this.position, BigInt(value), true)\n    this.position += 8\n  }\n\n  // Write 32-bit float (little-endian)\n  writeF32(value) {\n    this.ensureCapacity(4)\n    this.view.setFloat32(this.position, value, true)\n    this.position += 4\n  }\n\n  // Write 64-bit float (little-endian)\n  writeF64(value) {\n    this.ensureCapacity(8)\n    this.view.setFloat64(this.position, value, true)\n    this.position += 8\n  }\n\n  // Write 16-bit half-precision float (little-endian)\n  writeF16(value) {\n    this.writeU16(floatToHalf(value))\n  }\n\n  // Write raw bytes\n  writeBytes(bytes) {\n    const data = bytes instanceof ArrayBuffer ? new Uint8Array(bytes) : bytes\n    this.ensureCapacity(data.length)\n    this.u8.set(data, this.position)\n    this.position += data.length\n  }\n\n  // Write null-terminated string (ASCII/UTF-8)\n  writeNullTerminatedString(str) {\n    const encoder = new TextEncoder()\n    const bytes = encoder.encode(str)\n    this.writeBytes(bytes)\n    this.writeU8(0) // Null terminator\n  }\n\n  // Write fixed-length string (padded with nulls if shorter)\n  writeFixedString(str, length) {\n    const encoder = new TextEncoder()\n    const bytes = encoder.encode(str)\n    this.ensureCapacity(length)\n\n    const copyLength = Math.min(bytes.length, length)\n    this.u8.set(bytes.subarray(0, copyLength), this.position)\n\n    // Pad with nulls\n    for (let i = copyLength; i < length; i++) {\n      this.u8[this.position + i] = 0\n    }\n\n    this.position += length\n  }\n\n  // Write string with length prefix (u32)\n  writeLengthPrefixedString(str) {\n    const encoder = new TextEncoder()\n    const bytes = encoder.encode(str)\n    this.writeU32(bytes.length)\n    this.writeBytes(bytes)\n  }\n\n  // Get current write position\n  getPosition() {\n    return this.position\n  }\n\n  // Set write position (for patching values later)\n  setPosition(pos) {\n    if (pos < 0 || pos > this.buffer.byteLength) {\n      throw new RangeError(`Position ${pos} out of bounds`)\n    }\n    this.position = pos\n  }\n\n  // Write a value at a specific position without changing current position\n  patchAt(pos, writeFn) {\n    const savedPosition = this.position\n    this.position = pos\n    writeFn(this)\n    this.position = savedPosition\n  }\n\n  // Reserve space and return the position for later patching\n  reserve(bytes) {\n    const pos = this.position\n    this.ensureCapacity(bytes)\n    this.position += bytes\n    return pos\n  }\n\n  // Get the written data as an ArrayBuffer\n  toArrayBuffer() {\n    return this.buffer.slice(0, this.position)\n  }\n\n  // Get the written data as a Uint8Array\n  toUint8Array() {\n    return new Uint8Array(this.buffer, 0, this.position)\n  }\n\n  // Get the current byte length of written data\n  get byteLength() {\n    return this.position\n  }\n}\n","// EXR Header Attributes\n// Attributes are key-value pairs stored in headers.\n// Each attribute has: name (null-terminated), type (null-terminated), size (i32), value (bytes)\n\nimport { AttributeType } from '../core/constants.js'\nimport { bytesPerSample, SampleType, Vec2 } from '../core/types.js'\nimport { BinaryWriter } from '../io/binary-writer.js'\n\n// Write a null-terminated string\nexport function writeNullTerminatedString(writer, str) {\n  writer.writeNullTerminatedString(str)\n}\n\n// Write an attribute to the writer\nexport function writeAttribute(writer, name, typeName, value) {\n  writeNullTerminatedString(writer, name)\n  writeNullTerminatedString(writer, typeName)\n\n  if (typeof value === 'function') {\n    // Calculate size by writing to temp buffer\n    const tempWriter = new BinaryWriter(1024)\n    value(tempWriter)\n    const bytes = tempWriter.toUint8Array()\n    writer.writeI32(bytes.length)\n    writer.writeBytes(bytes)\n  } else {\n    writer.writeI32(value.length)\n    writer.writeBytes(value)\n  }\n}\n\n// Write a box2i (integer bounds) attribute\nexport function writeBox2i(writer, name, bounds) {\n  writeAttribute(writer, name, AttributeType.BOX2I, (w) => {\n    // xMin, yMin, xMax, yMax (all i32, max is inclusive)\n    w.writeI32(bounds.position.x)\n    w.writeI32(bounds.position.y)\n    w.writeI32(bounds.position.x + bounds.size.x - 1)\n    w.writeI32(bounds.position.y + bounds.size.y - 1)\n  })\n}\n\n// Write a compression attribute\nexport function writeCompression(writer, compression) {\n  writeAttribute(writer, 'compression', AttributeType.COMPRESSION, (w) => {\n    w.writeU8(compression)\n  })\n}\n\n// Write a line order attribute\nexport function writeLineOrder(writer, lineOrder) {\n  writeAttribute(writer, 'lineOrder', AttributeType.LINE_ORDER, (w) => {\n    w.writeU8(lineOrder)\n  })\n}\n\n// Write a float attribute\nexport function writeFloat(writer, name, value) {\n  writeAttribute(writer, name, AttributeType.FLOAT, (w) => {\n    w.writeF32(value)\n  })\n}\n\n// Write a v2f (Vec2<f32>) attribute\nexport function writeV2f(writer, name, value) {\n  writeAttribute(writer, name, AttributeType.V2F, (w) => {\n    w.writeF32(value.x)\n    w.writeF32(value.y)\n  })\n}\n\n// Write a string attribute\nexport function writeString(writer, name, value) {\n  const encoder = new TextEncoder()\n  const bytes = encoder.encode(value)\n  writeAttribute(writer, name, AttributeType.STRING, bytes)\n}\n\n// Write a tiledesc attribute\nexport function writeTileDescription(\n  writer,\n  tileSize,\n  levelMode,\n  roundingMode,\n) {\n  writeAttribute(writer, 'tiles', AttributeType.TILE_DESC, (w) => {\n    w.writeU32(tileSize.x)\n    w.writeU32(tileSize.y)\n    // mode byte: bits 0-3 = level mode, bits 4-7 = rounding mode\n    const mode = (levelMode & 0x0f) | ((roundingMode & 0x0f) << 4)\n    w.writeU8(mode)\n  })\n}\n\n// Channel description for the channel list\nexport class ChannelDescription {\n  constructor(\n    name,\n    sampleType = SampleType.F32,\n    quantizeLinearly = null,\n    sampling = new Vec2(1, 1),\n  ) {\n    this.name = name\n    this.sampleType = sampleType\n    // Auto-detect quantization based on channel name\n    this.quantizeLinearly =\n      quantizeLinearly ?? !['R', 'G', 'B', 'Y', 'L'].includes(name)\n    this.sampling = sampling\n  }\n\n  // Create a channel description with just name and type\n  static named(name, sampleType = SampleType.F32) {\n    return new ChannelDescription(name, sampleType)\n  }\n\n  // Get the pixel type ID for the file format\n  get pixelTypeId() {\n    switch (this.sampleType) {\n      case SampleType.U32:\n        return 0\n      case SampleType.F16:\n        return 1\n      case SampleType.F32:\n        return 2\n      default:\n        throw new Error(`Unknown sample type: ${this.sampleType}`)\n    }\n  }\n\n  // Get bytes per sample\n  get bytesPerSample() {\n    return bytesPerSample(this.sampleType)\n  }\n}\n\n// Channel list - collection of channel descriptions\nexport class ChannelList {\n  constructor(channels) {\n    // Sort channels alphabetically by name (EXR requirement)\n    this.list = [...channels].sort((a, b) => a.name.localeCompare(b.name))\n  }\n\n  // Calculate bytes per pixel\n  get bytesPerPixel() {\n    return this.list.reduce((sum, ch) => sum + ch.bytesPerSample, 0)\n  }\n\n  // Check if all channels have the same sample type\n  get uniformSampleType() {\n    if (this.list.length === 0) return null\n    const first = this.list[0].sampleType\n    return this.list.every((ch) => ch.sampleType === first) ? first : null\n  }\n\n  // Write the channel list to a writer\n  write(writer) {\n    for (const channel of this.list) {\n      // Channel name (null-terminated)\n      writer.writeNullTerminatedString(channel.name)\n      // Pixel type (i32): 0 = uint, 1 = half, 2 = float\n      writer.writeI32(channel.pixelTypeId)\n      // pLinear (u8): 0 or 1\n      writer.writeU8(channel.quantizeLinearly ? 1 : 0)\n      // Reserved (3 bytes)\n      writer.writeU8(0)\n      writer.writeU8(0)\n      writer.writeU8(0)\n      // xSampling (i32)\n      writer.writeI32(channel.sampling.x)\n      // ySampling (i32)\n      writer.writeI32(channel.sampling.y)\n    }\n    // End of channel list (null byte)\n    writer.writeU8(0)\n  }\n}\n\n// Write channel list attribute\nexport function writeChannelList(writer, channels) {\n  writeAttribute(writer, 'channels', AttributeType.CHLIST, (w) => {\n    channels.write(w)\n  })\n}\n\n// Write the type attribute (scanlineimage, tiledimage, etc.)\nexport function writeType(writer, type) {\n  const encoder = new TextEncoder()\n  const bytes = encoder.encode(type)\n  writeAttribute(writer, 'type', AttributeType.STRING, bytes)\n}\n\n// Write an int attribute\nexport function writeInt(writer, name, value) {\n  writeAttribute(writer, name, 'int', (w) => {\n    w.writeI32(value)\n  })\n}\n","// Channel data structures for EXR images\n\nimport { bytesPerSample, SampleType, Vec2 } from '../core/types.js'\nimport { floatToHalf } from '../lib/half.js'\nimport { ChannelDescription, ChannelList } from '../meta/attributes.js'\n\n// Flat sample storage (one value per pixel per channel)\nexport class FlatSamples {\n  constructor(sampleType, data) {\n    this.sampleType = sampleType\n    this.data = data\n  }\n\n  // Create F16 samples\n  static f16(data) {\n    return new FlatSamples(SampleType.F16, data)\n  }\n\n  // Create F32 samples\n  static f32(data) {\n    return new FlatSamples(SampleType.F32, data)\n  }\n\n  // Create U32 samples\n  static u32(data) {\n    return new FlatSamples(SampleType.U32, data)\n  }\n\n  get length() {\n    return this.data.length\n  }\n\n  // Get value at index\n  valueAt(index) {\n    return this.data[index]\n  }\n\n  // Get the raw bytes for a sample at the given index (little-endian)\n  getBytesAt(index) {\n    const bytes = bytesPerSample(this.sampleType)\n    const result = new Uint8Array(bytes)\n    const view = new DataView(result.buffer)\n\n    switch (this.sampleType) {\n      case SampleType.F16:\n        view.setUint16(0, this.data[index], true)\n        break\n      case SampleType.F32:\n        view.setFloat32(0, this.data[index], true)\n        break\n      case SampleType.U32:\n        view.setUint32(0, this.data[index], true)\n        break\n    }\n\n    return result\n  }\n\n  // Write bytes for a range of samples directly into target buffer (batch operation)\n  writeBytesTo(startIndex, count, target, targetOffset) {\n    const bytes = bytesPerSample(this.sampleType)\n    const totalBytes = count * bytes\n\n    // Direct copy from underlying typed array buffer\n    const sourceBytes = new Uint8Array(\n      this.data.buffer,\n      this.data.byteOffset + startIndex * bytes,\n      totalBytes,\n    )\n    target.set(sourceBytes, targetOffset)\n  }\n\n  // Get all values as Float32Array (for mip level generation)\n  toFloat32Array(halfToFloatFn) {\n    switch (this.sampleType) {\n      case SampleType.F32:\n        // Already float32, return copy\n        return new Float32Array(this.data)\n      case SampleType.F16: {\n        // Convert from half-float\n        const result = new Float32Array(this.data.length)\n        for (let i = 0; i < this.data.length; i++) {\n          result[i] = halfToFloatFn(this.data[i])\n        }\n        return result\n      }\n      case SampleType.U32: {\n        // Convert from uint32\n        const result = new Float32Array(this.data.length)\n        for (let i = 0; i < this.data.length; i++) {\n          result[i] = this.data[i]\n        }\n        return result\n      }\n      default:\n        return new Float32Array(this.data)\n    }\n  }\n}\n\n// Single channel with name and sample data\nexport class AnyChannel {\n  constructor(\n    name,\n    samples,\n    quantizeLinearly = null,\n    sampling = new Vec2(1, 1),\n  ) {\n    this.name = name\n    this.samples = samples\n    this.quantizeLinearly =\n      quantizeLinearly ?? !['R', 'G', 'B', 'Y', 'L'].includes(name)\n    this.sampling = sampling\n  }\n\n  // Get channel description\n  toDescription() {\n    return new ChannelDescription(\n      this.name,\n      this.samples.sampleType,\n      this.quantizeLinearly,\n      this.sampling,\n    )\n  }\n}\n\n// Dynamic channel collection\nexport class AnyChannels {\n  constructor(list) {\n    // Sort alphabetically\n    this.list = [...list].sort((a, b) => a.name.localeCompare(b.name))\n    this._channelMap = new Map(this.list.map((ch) => [ch.name, ch]))\n  }\n\n  // Get the channel list for metadata\n  getChannelList() {\n    return new ChannelList(this.list.map((ch) => ch.toDescription()))\n  }\n\n  // Get sample bytes for a channel at a pixel index\n  getSampleBytes(channelName, pixelIndex) {\n    const channel = this._channelMap.get(channelName)\n    return channel.samples.getBytesAt(pixelIndex)\n  }\n\n  // Write scanline bytes for a channel directly into target buffer (batch operation)\n  writeScanlineBytes(\n    channelName,\n    startPixelIndex,\n    pixelCount,\n    target,\n    targetOffset,\n  ) {\n    const channel = this._channelMap.get(channelName)\n    channel.samples.writeBytesTo(\n      startPixelIndex,\n      pixelCount,\n      target,\n      targetOffset,\n    )\n  }\n\n  // Get all values for a channel as Float32Array (for mip level generation)\n  getChannelAsFloat32(channelName, halfToFloatFn, _pixelCount) {\n    const channel = this._channelMap.get(channelName)\n    return channel.samples.toFloat32Array(halfToFloatFn)\n  }\n}\n\n// Fixed channel configuration with pixel accessor\nexport class SpecificChannels {\n  constructor(channels, pixels) {\n    // Sort channels alphabetically for storage order\n    this._originalChannels = channels\n    this._sortedChannels = [...channels].sort((a, b) =>\n      a.name.localeCompare(b.name),\n    )\n    this._channelIndices = new Map(channels.map((ch, i) => [ch.name, i]))\n    this.pixels = pixels\n  }\n\n  // Create RGB channels\n  static rgb(pixels, sampleType = SampleType.F32) {\n    return new SpecificChannels(\n      [\n        ChannelDescription.named('R', sampleType),\n        ChannelDescription.named('G', sampleType),\n        ChannelDescription.named('B', sampleType),\n      ],\n      pixels,\n    )\n  }\n\n  // Create RGBA channels\n  static rgba(pixels, sampleType = SampleType.F32) {\n    return new SpecificChannels(\n      [\n        ChannelDescription.named('R', sampleType),\n        ChannelDescription.named('G', sampleType),\n        ChannelDescription.named('B', sampleType),\n        new ChannelDescription('A', sampleType, true), // Alpha is linear\n      ],\n      pixels,\n    )\n  }\n\n  // Builder for custom channels\n  static build() {\n    return new SpecificChannelsBuilder()\n  }\n\n  // Get the channel list for metadata\n  getChannelList() {\n    return new ChannelList(this._sortedChannels)\n  }\n\n  // Get sample bytes for a channel at a pixel index\n  getSampleBytes(channelName, pixelIndex) {\n    const channelIndex = this._channelIndices.get(channelName)\n    const channelDesc = this._originalChannels[channelIndex]\n    const bytes = bytesPerSample(channelDesc.sampleType)\n    const result = new Uint8Array(bytes)\n    const view = new DataView(result.buffer)\n\n    let value\n\n    if (typeof this.pixels === 'function') {\n      // Callback-based: pixels(pixelIndex) returns array of values\n      const values = this.pixels(pixelIndex)\n      value = values[channelIndex]\n    } else if (this.pixels instanceof Float32Array) {\n      // Interleaved Float32Array\n      const numChannels = this._originalChannels.length\n      value = this.pixels[pixelIndex * numChannels + channelIndex]\n    } else {\n      throw new Error('Unsupported pixel data type')\n    }\n\n    switch (channelDesc.sampleType) {\n      case SampleType.F16:\n        view.setUint16(0, floatToHalf(value), true)\n        break\n      case SampleType.F32:\n        view.setFloat32(0, value, true)\n        break\n      case SampleType.U32:\n        view.setUint32(0, value >>> 0, true)\n        break\n    }\n\n    return result\n  }\n\n  // Write scanline bytes for a channel directly into target buffer (batch operation)\n  writeScanlineBytes(\n    channelName,\n    startPixelIndex,\n    pixelCount,\n    target,\n    targetOffset,\n  ) {\n    const channelIndex = this._channelIndices.get(channelName)\n    const channelDesc = this._originalChannels[channelIndex]\n    const bytes = bytesPerSample(channelDesc.sampleType)\n    const numChannels = this._originalChannels.length\n    const view = new DataView(\n      target.buffer,\n      target.byteOffset + targetOffset,\n      pixelCount * bytes,\n    )\n\n    if (typeof this.pixels === 'function') {\n      // Callback-based pixels\n      switch (channelDesc.sampleType) {\n        case SampleType.F16:\n          for (let i = 0; i < pixelCount; i++) {\n            const values = this.pixels(startPixelIndex + i)\n            view.setUint16(i * 2, floatToHalf(values[channelIndex]), true)\n          }\n          break\n        case SampleType.F32:\n          for (let i = 0; i < pixelCount; i++) {\n            const values = this.pixels(startPixelIndex + i)\n            view.setFloat32(i * 4, values[channelIndex], true)\n          }\n          break\n        case SampleType.U32:\n          for (let i = 0; i < pixelCount; i++) {\n            const values = this.pixels(startPixelIndex + i)\n            view.setUint32(i * 4, values[channelIndex] >>> 0, true)\n          }\n          break\n      }\n    } else if (this.pixels instanceof Float32Array) {\n      // Interleaved Float32Array\n      switch (channelDesc.sampleType) {\n        case SampleType.F16:\n          for (let i = 0; i < pixelCount; i++) {\n            const value =\n              this.pixels[(startPixelIndex + i) * numChannels + channelIndex]\n            view.setUint16(i * 2, floatToHalf(value), true)\n          }\n          break\n        case SampleType.F32:\n          for (let i = 0; i < pixelCount; i++) {\n            const value =\n              this.pixels[(startPixelIndex + i) * numChannels + channelIndex]\n            view.setFloat32(i * 4, value, true)\n          }\n          break\n        case SampleType.U32:\n          for (let i = 0; i < pixelCount; i++) {\n            const value =\n              this.pixels[(startPixelIndex + i) * numChannels + channelIndex]\n            view.setUint32(i * 4, value >>> 0, true)\n          }\n          break\n      }\n    } else {\n      throw new Error('Unsupported pixel data type')\n    }\n  }\n\n  // Get all values for a channel as Float32Array (for mip level generation)\n  getChannelAsFloat32(channelName, _halfToFloatFn, pixelCount) {\n    const channelIndex = this._channelIndices.get(channelName)\n    const numChannels = this._originalChannels.length\n\n    if (typeof this.pixels === 'function') {\n      // Callback-based: need to call for each pixel\n      if (pixelCount === undefined) {\n        throw new Error('pixelCount required for callback-based pixels')\n      }\n      const result = new Float32Array(pixelCount)\n      for (let i = 0; i < pixelCount; i++) {\n        const values = this.pixels(i)\n        result[i] = values[channelIndex]\n      }\n      return result\n    }\n\n    if (!(this.pixels instanceof Float32Array)) {\n      throw new Error(\n        'getChannelAsFloat32 only supported for Float32Array pixels',\n      )\n    }\n\n    // Count pixels (Float32Array length / num channels)\n    const count = pixelCount ?? this.pixels.length / numChannels\n    const result = new Float32Array(count)\n\n    // Extract channel values with stride\n    for (let i = 0; i < count; i++) {\n      const value = this.pixels[i * numChannels + channelIndex]\n      result[i] = value\n    }\n\n    return result\n  }\n}\n\n// Builder for SpecificChannels\nexport class SpecificChannelsBuilder {\n  constructor() {\n    this._channels = []\n  }\n\n  // Add a channel\n  withChannel(name, sampleType = SampleType.F32) {\n    this._channels.push(ChannelDescription.named(name, sampleType))\n    return this\n  }\n\n  // Set pixel accessor and build\n  withPixels(pixels) {\n    return new SpecificChannels(this._channels, pixels)\n  }\n\n  // Set pixel function and build\n  withPixelFn(fn) {\n    return new SpecificChannels(this._channels, fn)\n  }\n}\n","// Block module - pixel block management and chunk writing\n\nimport {\n  getLevelCounts,\n  getLevelSize,\n  LevelMode,\n  scanLinesPerBlock,\n  Vec2,\n} from '../core/types.js'\n\n// Index identifying a specific block in the image\nexport class BlockIndex {\n  constructor(layer, pixelPosition, pixelSize, levelIndex = new Vec2(0, 0)) {\n    this.layer = layer\n    this.pixelPosition = pixelPosition\n    this.pixelSize = pixelSize\n    this.levelIndex = levelIndex\n  }\n}\n\n// Uncompressed pixel block data\nexport class UncompressedBlock {\n  constructor(index, data) {\n    this.index = index\n    this.data = data\n  }\n}\n\n// Compressed chunk ready for writing\nexport class Chunk {\n  constructor(\n    layer,\n    data,\n    isTile,\n    tileCoordinates = null,\n    levelIndex = null,\n    yCoordinate = null,\n  ) {\n    this.layer = layer\n    this.data = data\n    this.isTile = isTile\n    this.tileCoordinates = tileCoordinates\n    this.levelIndex = levelIndex\n    this.yCoordinate = yCoordinate\n  }\n\n  // Write this chunk to a writer (for multi-part files)\n  writeMultiPart(writer) {\n    // Part number (u32)\n    writer.writeU32(this.layer)\n    this._writeData(writer)\n  }\n\n  // Write this chunk to a writer (for single-part files)\n  writeSinglePart(writer) {\n    this._writeData(writer)\n  }\n\n  // Write the chunk data\n  _writeData(writer) {\n    if (this.isTile) {\n      // Tile coordinates\n      writer.writeI32(this.tileCoordinates.x)\n      writer.writeI32(this.tileCoordinates.y)\n      writer.writeI32(this.levelIndex.x)\n      writer.writeI32(this.levelIndex.y)\n      // Data size and data\n      writer.writeI32(this.data.length)\n      writer.writeBytes(this.data)\n    } else {\n      // Scanline y coordinate\n      writer.writeI32(this.yCoordinate)\n      // Data size and data\n      writer.writeI32(this.data.length)\n      writer.writeBytes(this.data)\n    }\n  }\n\n  // Total byte size of this chunk when written\n  get byteSize() {\n    if (this.isTile) {\n      // 4 ints for coordinates + 1 int for size + data\n      return 4 * 4 + 4 + this.data.length\n    } else {\n      // 1 int for y + 1 int for size + data\n      return 4 + 4 + this.data.length\n    }\n  }\n}\n\n// Generate block indices for a layer (single level)\nfunction generateBlockIndicesForLevel(\n  layerIndex,\n  levelSize,\n  blocks,\n  compression,\n  levelIndex,\n) {\n  const indices = []\n\n  if (blocks.isTiled()) {\n    const tileSize = blocks.tileSize\n    const tilesX = Math.ceil(levelSize.x / tileSize.x)\n    const tilesY = Math.ceil(levelSize.y / tileSize.y)\n\n    for (let ty = 0; ty < tilesY; ty++) {\n      for (let tx = 0; tx < tilesX; tx++) {\n        const pixelX = tx * tileSize.x\n        const pixelY = ty * tileSize.y\n        const width = Math.min(tileSize.x, levelSize.x - pixelX)\n        const height = Math.min(tileSize.y, levelSize.y - pixelY)\n\n        indices.push(\n          new BlockIndex(\n            layerIndex,\n            new Vec2(pixelX, pixelY),\n            new Vec2(width, height),\n            levelIndex,\n          ),\n        )\n      }\n    }\n  } else {\n    // Scanline blocks\n    const linesPerBlock = scanLinesPerBlock(compression)\n\n    for (let y = 0; y < levelSize.y; y += linesPerBlock) {\n      const height = Math.min(linesPerBlock, levelSize.y - y)\n\n      indices.push(\n        new BlockIndex(\n          layerIndex,\n          new Vec2(0, y),\n          new Vec2(levelSize.x, height),\n          levelIndex,\n        ),\n      )\n    }\n  }\n\n  return indices\n}\n\n// Generate block indices for a layer (all levels)\nexport function generateBlockIndices(\n  layerIndex,\n  layerSize,\n  blocks,\n  compression,\n) {\n  const indices = []\n  const levelCounts = getLevelCounts(layerSize, blocks.levelMode)\n\n  if (blocks.levelMode === LevelMode.MipMap) {\n    // Mip maps: level (0,0), (1,1), (2,2), etc.\n    for (let level = 0; level < levelCounts.x; level++) {\n      const levelIndex = new Vec2(level, level)\n      const levelSize = getLevelSize(\n        layerSize,\n        levelIndex,\n        blocks.levelMode,\n        blocks.roundingMode,\n      )\n      const levelBlocks = generateBlockIndicesForLevel(\n        layerIndex,\n        levelSize,\n        blocks,\n        compression,\n        levelIndex,\n      )\n      indices.push(...levelBlocks)\n    }\n  } else if (blocks.levelMode === LevelMode.RipMap) {\n    // Rip maps: all combinations of (lx, ly)\n    for (let ly = 0; ly < levelCounts.y; ly++) {\n      for (let lx = 0; lx < levelCounts.x; lx++) {\n        const levelIndex = new Vec2(lx, ly)\n        const levelSize = getLevelSize(\n          layerSize,\n          levelIndex,\n          blocks.levelMode,\n          blocks.roundingMode,\n        )\n        const levelBlocks = generateBlockIndicesForLevel(\n          layerIndex,\n          levelSize,\n          blocks,\n          compression,\n          levelIndex,\n        )\n        indices.push(...levelBlocks)\n      }\n    }\n  } else {\n    // Singular: just level (0,0)\n    indices.push(\n      ...generateBlockIndicesForLevel(\n        layerIndex,\n        layerSize,\n        blocks,\n        compression,\n        new Vec2(0, 0),\n      ),\n    )\n  }\n\n  return indices\n}\n\n// Calculate total tile count for all levels\nexport function calculateTotalTileCount(layerSize, blocks) {\n  const tileSize = blocks.tileSize\n  const levelCounts = getLevelCounts(layerSize, blocks.levelMode)\n  let totalTiles = 0\n\n  if (blocks.levelMode === LevelMode.MipMap) {\n    for (let level = 0; level < levelCounts.x; level++) {\n      const levelIndex = new Vec2(level, level)\n      const levelSize = getLevelSize(\n        layerSize,\n        levelIndex,\n        blocks.levelMode,\n        blocks.roundingMode,\n      )\n      const tilesX = Math.ceil(levelSize.x / tileSize.x)\n      const tilesY = Math.ceil(levelSize.y / tileSize.y)\n      totalTiles += tilesX * tilesY\n    }\n  } else if (blocks.levelMode === LevelMode.RipMap) {\n    for (let ly = 0; ly < levelCounts.y; ly++) {\n      for (let lx = 0; lx < levelCounts.x; lx++) {\n        const levelIndex = new Vec2(lx, ly)\n        const levelSize = getLevelSize(\n          layerSize,\n          levelIndex,\n          blocks.levelMode,\n          blocks.roundingMode,\n        )\n        const tilesX = Math.ceil(levelSize.x / tileSize.x)\n        const tilesY = Math.ceil(levelSize.y / tileSize.y)\n        totalTiles += tilesX * tilesY\n      }\n    }\n  } else {\n    const tilesX = Math.ceil(layerSize.x / tileSize.x)\n    const tilesY = Math.ceil(layerSize.y / tileSize.y)\n    totalTiles = tilesX * tilesY\n  }\n\n  return totalTiles\n}\n\n// Extract pixel data for a block from layer data\nexport function extractBlockData(blockIndex, channels, layerSize) {\n  const { pixelPosition, pixelSize } = blockIndex\n  const channelList = channels.getChannelList()\n\n  // Calculate total bytes for this block\n  const pixelCount = pixelSize.x * pixelSize.y\n  const bytesPerPixel = channelList.bytesPerPixel\n  const totalBytes = pixelCount * bytesPerPixel\n\n  const data = new Uint8Array(totalBytes)\n  let offset = 0\n\n  // For each scanline in the block\n  for (let localY = 0; localY < pixelSize.y; localY++) {\n    const globalY = pixelPosition.y + localY\n    const rowStartIndex = globalY * layerSize.x + pixelPosition.x\n\n    // For each channel (in alphabetical order), write entire scanline at once\n    for (const channelDesc of channelList.list) {\n      const scanlineBytes = pixelSize.x * channelDesc.bytesPerSample\n      channels.writeScanlineBytes(\n        channelDesc.name,\n        rowStartIndex,\n        pixelSize.x,\n        data,\n        offset,\n      )\n      offset += scanlineBytes\n    }\n  }\n\n  return data\n}\n","// B44/B44A compression for EXR\n// B44 is a lossy compression method for f16 channels only.\n// - Compresses 4x4 pixel blocks of f16 data to 14 bytes (from 32 bytes)\n// - f32 and u32 channels are stored uncompressed\n// - B44A variant compresses uniform blocks to 3 bytes\n// Fast enough for real-time playback. File size is predictable\n// (depends only on resolution, not content).\n\nimport { SampleType } from '../../core/types.js'\n\nconst BLOCK_SAMPLE_COUNT = 4\nconst BIAS = 0x20\nconst SIX_BITS = 0x3f\n\n// Shift and round a value\n// @param {number} x\n// @param {number} shift\n// @returns {number}\nfunction shiftAndRound(x, shift) {\n  const x2 = x << 1\n  const a = (1 << shift) - 1\n  const shiftPlus1 = shift + 1\n  const b = (x2 >> shiftPlus1) & 1\n  return (x2 + a + b) >> shiftPlus1\n}\n\n// Pack a 4x4 block of 16-bit pixels into 14 or 3 bytes\n// @param {Uint16Array} s - 16 pixel values\n// @param {Uint8Array} b - Output buffer (at least 14 bytes)\n// @param {boolean} optimizeFlatFields - Use 3-byte encoding for flat blocks\n// @returns {number} - Number of bytes written (3 or 14)\nfunction pack(s, b, optimizeFlatFields) {\n  const t = new Uint16Array(16)\n\n  // Transform values to put negatives below positives\n  for (let i = 0; i < 16; i++) {\n    if ((s[i] & 0x7c00) === 0x7c00) {\n      // Infinity or NaN\n      t[i] = 0x8000\n    } else if ((s[i] & 0x8000) !== 0) {\n      // Negative\n      t[i] = ~s[i] & 0xffff\n    } else {\n      // Positive\n      t[i] = s[i] | 0x8000\n    }\n  }\n\n  // Find max value\n  let tMax = t[0]\n  for (let i = 1; i < 16; i++) {\n    if (t[i] > tMax) tMax = t[i]\n  }\n\n  // Find shift value such that all differences fit in 6 bits with bias\n  let shift = -1\n  const d = new Int32Array(16)\n  const r = new Int32Array(15)\n  let rMin, rMax\n\n  do {\n    shift++\n\n    // Compute absolute differences from max, shifted and rounded\n    for (let i = 0; i < 16; i++) {\n      d[i] = shiftAndRound(tMax - t[i], shift)\n    }\n\n    // Convert to running differences with bias\n    r[0] = d[0] - d[4] + BIAS\n    r[1] = d[4] - d[8] + BIAS\n    r[2] = d[8] - d[12] + BIAS\n\n    r[3] = d[0] - d[1] + BIAS\n    r[4] = d[4] - d[5] + BIAS\n    r[5] = d[8] - d[9] + BIAS\n    r[6] = d[12] - d[13] + BIAS\n\n    r[7] = d[1] - d[2] + BIAS\n    r[8] = d[5] - d[6] + BIAS\n    r[9] = d[9] - d[10] + BIAS\n    r[10] = d[13] - d[14] + BIAS\n\n    r[11] = d[2] - d[3] + BIAS\n    r[12] = d[6] - d[7] + BIAS\n    r[13] = d[10] - d[11] + BIAS\n    r[14] = d[14] - d[15] + BIAS\n\n    rMin = r[0]\n    rMax = r[0]\n    for (let i = 1; i < 15; i++) {\n      if (r[i] < rMin) rMin = r[i]\n      if (r[i] > rMax) rMax = r[i]\n    }\n  } while (rMin < 0 || rMax > 0x3f)\n\n  // Check for flat field (B44A optimization)\n  if (rMin === BIAS && rMax === BIAS && optimizeFlatFields) {\n    // All pixels have same value - encode in 3 bytes\n    b[0] = (t[0] >>> 8) & 0xff\n    b[1] = t[0] & 0xff\n    b[2] = 0xfc // Special marker for 3-byte encoding\n    return 3\n  }\n\n  // Pack t[0], shift, and r[0..14] into 14 bytes\n  b[0] = (t[0] >>> 8) & 0xff\n  b[1] = t[0] & 0xff\n\n  b[2] = ((shift << 2) | (r[0] >>> 4)) & 0xff\n  b[3] = ((r[0] << 4) | (r[1] >>> 2)) & 0xff\n  b[4] = ((r[1] << 6) | r[2]) & 0xff\n\n  b[5] = ((r[3] << 2) | (r[4] >>> 4)) & 0xff\n  b[6] = ((r[4] << 4) | (r[5] >>> 2)) & 0xff\n  b[7] = ((r[5] << 6) | r[6]) & 0xff\n\n  b[8] = ((r[7] << 2) | (r[8] >>> 4)) & 0xff\n  b[9] = ((r[8] << 4) | (r[9] >>> 2)) & 0xff\n  b[10] = ((r[9] << 6) | r[10]) & 0xff\n\n  b[11] = ((r[11] << 2) | (r[12] >>> 4)) & 0xff\n  b[12] = ((r[12] << 4) | (r[13] >>> 2)) & 0xff\n  b[13] = ((r[13] << 6) | r[14]) & 0xff\n\n  return 14\n}\n\n// Unpack a 14-byte block into 4x4 16-bit pixels\n// @param {Uint8Array} b - 14 input bytes\n// @param {Uint16Array} s - 16 output pixels\nfunction unpack14(b, s) {\n  s[0] = (b[0] << 8) | b[1]\n\n  const shift = b[2] >>> 2\n  const bias = 0x20 << shift\n\n  s[4] =\n    (s[0] + ((((b[2] << 4) | (b[3] >>> 4)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[8] =\n    (s[4] + ((((b[3] << 2) | (b[4] >>> 6)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[12] = (s[8] + ((b[4] & SIX_BITS) << shift) - bias) & 0xffff\n\n  s[1] = (s[0] + ((b[5] >>> 2) << shift) - bias) & 0xffff\n  s[5] =\n    (s[4] + ((((b[5] << 4) | (b[6] >>> 4)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[9] =\n    (s[8] + ((((b[6] << 2) | (b[7] >>> 6)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[13] = (s[12] + ((b[7] & SIX_BITS) << shift) - bias) & 0xffff\n\n  s[2] = (s[1] + ((b[8] >>> 2) << shift) - bias) & 0xffff\n  s[6] =\n    (s[5] + ((((b[8] << 4) | (b[9] >>> 4)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[10] =\n    (s[9] + ((((b[9] << 2) | (b[10] >>> 6)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[14] = (s[13] + ((b[10] & SIX_BITS) << shift) - bias) & 0xffff\n\n  s[3] = (s[2] + ((b[11] >>> 2) << shift) - bias) & 0xffff\n  s[7] =\n    (s[6] + ((((b[11] << 4) | (b[12] >>> 4)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[11] =\n    (s[10] + ((((b[12] << 2) | (b[13] >>> 6)) & SIX_BITS) << shift) - bias) &\n    0xffff\n  s[15] = (s[14] + ((b[13] & SIX_BITS) << shift) - bias) & 0xffff\n\n  // Reverse the transform\n  for (let i = 0; i < 16; i++) {\n    if ((s[i] & 0x8000) !== 0) {\n      s[i] &= 0x7fff\n    } else {\n      s[i] = ~s[i] & 0xffff\n    }\n  }\n}\n\n// Unpack a 3-byte flat block into 4x4 identical pixels\n// @param {Uint8Array} b - 3 input bytes\n// @param {Uint16Array} s - 16 output pixels\nfunction unpack3(b, s) {\n  let value = (b[0] << 8) | b[1]\n\n  // Reverse the transform\n  if ((value & 0x8000) !== 0) {\n    value &= 0x7fff\n  } else {\n    value = ~value & 0xffff\n  }\n\n  s.fill(value)\n}\n\n// Compress data using B44/B44A\n// @param {Uint8Array} data - Uncompressed pixel data (little-endian)\n// @param {Array<{name: string, sampleType: number}>} channels - Channel descriptions\n// @param {number} width - Block width\n// @param {number} height - Block height\n// @param {boolean} optimizeFlatFields - Use B44A (3-byte encoding for flat blocks)\n// @returns {Uint8Array} - Compressed data\nexport function compressB44(\n  data,\n  channels,\n  width,\n  height,\n  optimizeFlatFields = false,\n) {\n  if (data.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  // Build channel metadata\n  const channelDataList = []\n  let tmpEndIndex = 0\n\n  for (const channel of channels) {\n    const bytesPerSample = channel.sampleType === SampleType.F16 ? 2 : 4\n\n    const channelData = {\n      tmpStartIndex: tmpEndIndex,\n      tmpEndIndex: tmpEndIndex,\n      sampleType: channel.sampleType,\n      width,\n      height,\n    }\n\n    tmpEndIndex += width * height * bytesPerSample\n    channelDataList.push(channelData)\n  }\n\n  // Reorganize input data by channel (from interleaved scanlines)\n  const tmp = new Uint8Array(data.length)\n  const _inputView = new DataView(data.buffer, data.byteOffset, data.byteLength)\n  let readOffset = 0\n\n  for (let y = 0; y < height; y++) {\n    for (const channelData of channelDataList) {\n      const bytesPerSample = channelData.sampleType === SampleType.F16 ? 2 : 4\n      const bytesPerLine = width * bytesPerSample\n\n      for (let i = 0; i < bytesPerLine; i++) {\n        tmp[channelData.tmpEndIndex + i] = data[readOffset++]\n      }\n      channelData.tmpEndIndex += bytesPerLine\n    }\n  }\n\n  // Estimate output size and allocate\n  const output = []\n  const blockBuf = new Uint8Array(14)\n\n  for (const channelData of channelDataList) {\n    // F32 and U32 are copied uncompressed\n    if (channelData.sampleType !== SampleType.F16) {\n      const byteCount = channelData.width * channelData.height * 4\n      for (let i = 0; i < byteCount; i++) {\n        output.push(tmp[channelData.tmpStartIndex + i])\n      }\n      continue\n    }\n\n    // F16: compress in 4x4 blocks\n    const xSampleCount = channelData.width\n    const ySampleCount = channelData.height\n    const xByteCount = xSampleCount * 2\n    const cdStart = channelData.tmpStartIndex\n\n    for (let y = 0; y < ySampleCount; y += BLOCK_SAMPLE_COUNT) {\n      // Calculate row offsets\n      let row0 = cdStart + y * xByteCount\n      let row1 = row0 + xByteCount\n      let row2 = row1 + xByteCount\n      let row3 = row2 + xByteCount\n\n      // Handle edge cases at bottom of image\n      if (y + 3 >= ySampleCount) {\n        if (y + 1 >= ySampleCount) row1 = row0\n        if (y + 2 >= ySampleCount) row2 = row1\n        row3 = row2\n      }\n\n      for (let x = 0; x < xSampleCount; x += BLOCK_SAMPLE_COUNT) {\n        const s = new Uint16Array(16)\n\n        // Handle edge cases at right of image\n        if (x + 3 >= xSampleCount) {\n          const n = xSampleCount - x\n          for (let i = 0; i < BLOCK_SAMPLE_COUNT; i++) {\n            const j = Math.min(i, n - 1) * 2\n            s[i + 0] = tmp[row0 + j] | (tmp[row0 + j + 1] << 8)\n            s[i + 4] = tmp[row1 + j] | (tmp[row1 + j + 1] << 8)\n            s[i + 8] = tmp[row2 + j] | (tmp[row2 + j + 1] << 8)\n            s[i + 12] = tmp[row3 + j] | (tmp[row3 + j + 1] << 8)\n          }\n        } else {\n          // Read 4 pixels from each row\n          for (let i = 0; i < 4; i++) {\n            s[i] = tmp[row0 + i * 2] | (tmp[row0 + i * 2 + 1] << 8)\n            s[i + 4] = tmp[row1 + i * 2] | (tmp[row1 + i * 2 + 1] << 8)\n            s[i + 8] = tmp[row2 + i * 2] | (tmp[row2 + i * 2 + 1] << 8)\n            s[i + 12] = tmp[row3 + i * 2] | (tmp[row3 + i * 2 + 1] << 8)\n          }\n        }\n\n        // Move to next block\n        row0 += BLOCK_SAMPLE_COUNT * 2\n        row1 += BLOCK_SAMPLE_COUNT * 2\n        row2 += BLOCK_SAMPLE_COUNT * 2\n        row3 += BLOCK_SAMPLE_COUNT * 2\n\n        // Compress block\n        const packedSize = pack(s, blockBuf, optimizeFlatFields)\n        for (let i = 0; i < packedSize; i++) {\n          output.push(blockBuf[i])\n        }\n      }\n    }\n  }\n\n  return new Uint8Array(output)\n}\n\n// Decompress B44/B44A data\n// @param {Uint8Array} compressed - Compressed data\n// @param {Array<{name: string, sampleType: number}>} channels - Channel descriptions\n// @param {number} width - Block width\n// @param {number} height - Block height\n// @param {number} expectedSize - Expected uncompressed size in bytes\n// @returns {Uint8Array} - Decompressed data\nexport function decompressB44(\n  compressed,\n  channels,\n  width,\n  height,\n  expectedSize,\n) {\n  if (compressed.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  // Build channel metadata\n  const channelDataList = []\n  let tmpIndex = 0\n\n  for (const channel of channels) {\n    const bytesPerSample = channel.sampleType === SampleType.F16 ? 2 : 4\n\n    const channelData = {\n      tmpStartIndex: tmpIndex,\n      tmpEndIndex: tmpIndex,\n      sampleType: channel.sampleType,\n      width,\n      height,\n    }\n\n    tmpIndex += width * height * bytesPerSample\n    channelDataList.push(channelData)\n  }\n\n  // Temporary buffer for decompressed channel data\n  const tmp = new Uint8Array(expectedSize)\n  let inIdx = 0\n\n  for (const channelData of channelDataList) {\n    // F32 and U32 are copied directly\n    if (channelData.sampleType !== SampleType.F16) {\n      const byteCount = channelData.width * channelData.height * 4\n\n      if (inIdx + byteCount > compressed.length) {\n        throw new Error('Not enough B44 data')\n      }\n\n      for (let i = 0; i < byteCount; i++) {\n        tmp[channelData.tmpStartIndex + i] = compressed[inIdx++]\n      }\n      continue\n    }\n\n    // F16: decompress 4x4 blocks\n    const xSampleCount = channelData.width\n    const ySampleCount = channelData.height\n    const xByteCount = xSampleCount * 2\n    const cdStart = channelData.tmpStartIndex\n\n    for (let y = 0; y < ySampleCount; y += BLOCK_SAMPLE_COUNT) {\n      let row0 = cdStart + y * xByteCount\n      let row1 = row0 + xByteCount\n      let row2 = row1 + xByteCount\n      let row3 = row2 + xByteCount\n\n      for (let x = 0; x < xSampleCount; x += BLOCK_SAMPLE_COUNT) {\n        const s = new Uint16Array(16)\n\n        if (inIdx + 3 > compressed.length) {\n          throw new Error('Not enough B44 data')\n        }\n\n        // Check if this is a 3-byte or 14-byte block\n        if (compressed[inIdx + 2] >= 13 << 2) {\n          // 3-byte block (flat field)\n          unpack3(compressed.subarray(inIdx, inIdx + 3), s)\n          inIdx += 3\n        } else {\n          // 14-byte block\n          if (inIdx + 14 > compressed.length) {\n            throw new Error('Not enough B44 data')\n          }\n          unpack14(compressed.subarray(inIdx, inIdx + 14), s)\n          inIdx += 14\n        }\n\n        // Calculate how many samples to copy (handle edge cases)\n        const xRestingSampleCount = Math.min(\n          BLOCK_SAMPLE_COUNT,\n          xSampleCount - x,\n        )\n\n        // Copy to output rows\n        const copyRow = (srcOffset, dstOffset, count) => {\n          for (let i = 0; i < count; i++) {\n            tmp[dstOffset + i * 2] = s[srcOffset + i] & 0xff\n            tmp[dstOffset + i * 2 + 1] = (s[srcOffset + i] >>> 8) & 0xff\n          }\n        }\n\n        if (y + 3 < ySampleCount) {\n          copyRow(0, row0, xRestingSampleCount)\n          copyRow(4, row1, xRestingSampleCount)\n          copyRow(8, row2, xRestingSampleCount)\n          copyRow(12, row3, xRestingSampleCount)\n        } else {\n          copyRow(0, row0, xRestingSampleCount)\n          if (y + 1 < ySampleCount) {\n            copyRow(4, row1, xRestingSampleCount)\n          }\n          if (y + 2 < ySampleCount) {\n            copyRow(8, row2, xRestingSampleCount)\n          }\n        }\n\n        row0 += BLOCK_SAMPLE_COUNT * 2\n        row1 += BLOCK_SAMPLE_COUNT * 2\n        row2 += BLOCK_SAMPLE_COUNT * 2\n        row3 += BLOCK_SAMPLE_COUNT * 2\n      }\n    }\n  }\n\n  // Interleave back to scanline order\n  const output = new Uint8Array(expectedSize)\n  let writeOffset = 0\n\n  for (let y = 0; y < height; y++) {\n    for (const channelData of channelDataList) {\n      const bytesPerSample = channelData.sampleType === SampleType.F16 ? 2 : 4\n      const bytesPerLine = width * bytesPerSample\n\n      for (let i = 0; i < bytesPerLine; i++) {\n        output[writeOffset++] = tmp[channelData.tmpEndIndex + i]\n      }\n      channelData.tmpEndIndex += bytesPerLine\n    }\n  }\n\n  return output\n}\n","// 16-bit Huffman compression and decompression for PIZ\n// Huffman compression and decompression routines written\n// by Christian Rouet for his PIZ image file format.\n\nconst ENCODE_BITS = 16 // literal (value) bit length\nconst DECODE_BITS = 14 // decoding bit size (>= 8)\n\nconst ENCODING_TABLE_SIZE = (1 << ENCODE_BITS) + 1 // 65537\nconst DECODING_TABLE_SIZE = 1 << DECODE_BITS // 16384\nconst DECODE_MASK = DECODING_TABLE_SIZE - 1\n\nconst SHORT_ZEROCODE_RUN = 59\nconst LONG_ZEROCODE_RUN = 63\nconst SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN\nconst LONGEST_LONG_RUN = 255 + SHORTEST_LONG_RUN\n\n// Get the code length from an encoding table entry\n// @param {number} code\n// @returns {number}\nfunction codeLength(code) {\n  return code & 63\n}\n\n// Get the Huffman code from an encoding table entry\n// @param {number} code\n// @returns {number}\nfunction codeValue(code) {\n  return code >>> 6\n}\n\n// Compress u16 data using Huffman coding\n// @param {Uint16Array} uncompressed - Data to compress\n// @returns {Uint8Array} - Compressed data\nexport function huffmanCompress(uncompressed) {\n  if (uncompressed.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  // Count frequencies\n  const frequencies = new Array(ENCODING_TABLE_SIZE).fill(0)\n  for (let i = 0; i < uncompressed.length; i++) {\n    frequencies[uncompressed[i]]++\n  }\n\n  // Build encoding table\n  const { minCodeIndex, maxCodeIndex } = buildEncodingTable(frequencies)\n\n  // Allocate output buffer (estimate: at most input size + header)\n  const output = []\n\n  // Write header placeholders (we'll fill these in later)\n  // minCodeIndex (4 bytes)\n  // maxCodeIndex (4 bytes)\n  // tableSize (4 bytes)\n  // bitCount (4 bytes)\n  // padding (4 bytes)\n  const _headerStart = 0\n  for (let i = 0; i < 20; i++) {\n    output.push(0)\n  }\n\n  const tableStart = output.length\n\n  // Pack encoding table\n  packEncodingTable(frequencies, minCodeIndex, maxCodeIndex, output)\n\n  const dataStart = output.length\n\n  // Encode data\n  const bitCount = encodeWithFrequencies(\n    frequencies,\n    uncompressed,\n    maxCodeIndex,\n    output,\n  )\n\n  // Write header\n  const tableLength = dataStart - tableStart\n  writeU32LE(output, 0, minCodeIndex)\n  writeU32LE(output, 4, maxCodeIndex)\n  writeU32LE(output, 8, tableLength)\n  writeU32LE(output, 12, bitCount)\n  writeU32LE(output, 16, 0) // padding\n\n  return new Uint8Array(output)\n}\n\n// Decompress Huffman-coded data\n// @param {Uint8Array} compressed - Compressed data\n// @param {number} expectedSize - Expected number of u16 values\n// @returns {Uint16Array} - Decompressed data\nexport function huffmanDecompress(compressed, expectedSize) {\n  if (compressed.length === 0) {\n    return new Uint16Array(0)\n  }\n\n  let offset = 0\n\n  // Read header\n  const minCodeIndex = readU32LE(compressed, offset)\n  offset += 4\n  const maxCodeIndex = readU32LE(compressed, offset)\n  offset += 4\n  const _tableSize = readU32LE(compressed, offset)\n  offset += 4\n  const bitCount = readU32LE(compressed, offset)\n  offset += 4\n  offset += 4 // skip padding\n\n  if (\n    minCodeIndex >= ENCODING_TABLE_SIZE ||\n    maxCodeIndex >= ENCODING_TABLE_SIZE\n  ) {\n    throw new Error('Invalid Huffman table size')\n  }\n\n  // Read and build encoding table\n  const { encodingTable, bytesRead } = readEncodingTable(\n    compressed,\n    offset,\n    minCodeIndex,\n    maxCodeIndex,\n  )\n  offset += bytesRead\n\n  // Build decoding table\n  const decodingTable = buildDecodingTable(\n    encodingTable,\n    minCodeIndex,\n    maxCodeIndex,\n  )\n\n  // Decode data\n  const result = decodeWithTables(\n    encodingTable,\n    decodingTable,\n    compressed.subarray(offset),\n    bitCount,\n    maxCodeIndex,\n    expectedSize,\n  )\n\n  return result\n}\n\n// Write a little-endian u32 to an array\nfunction writeU32LE(arr, offset, value) {\n  arr[offset] = value & 0xff\n  arr[offset + 1] = (value >>> 8) & 0xff\n  arr[offset + 2] = (value >>> 16) & 0xff\n  arr[offset + 3] = (value >>> 24) & 0xff\n}\n\n// Read a little-endian u32 from a buffer\nfunction readU32LE(buf, offset) {\n  return (\n    (buf[offset] |\n      (buf[offset + 1] << 8) |\n      (buf[offset + 2] << 16) |\n      (buf[offset + 3] << 24)) >>>\n    0\n  )\n}\n\n// Build a canonical Huffman encoding table from frequency counts\nfunction buildEncodingTable(frequencies) {\n  // Find min and max non-zero indices\n  let minCodeIndex = frequencies.findIndex((f) => f !== 0)\n  if (minCodeIndex === -1) minCodeIndex = 0\n\n  let maxCodeIndex = 0\n  let frequencyCount = 0\n\n  // Build heap of (position, frequency) pairs\n  const heap = []\n  for (let i = minCodeIndex; i < ENCODING_TABLE_SIZE; i++) {\n    if (frequencies[i] !== 0) {\n      heap.push({ position: i, frequency: frequencies[i] })\n      maxCodeIndex = i\n      frequencyCount++\n    }\n  }\n\n  // Add pseudo-symbol for run-length encoding\n  maxCodeIndex++\n  frequencies[maxCodeIndex] = 1\n  heap.push({ position: maxCodeIndex, frequency: 1 })\n  frequencyCount++\n\n  // Build min-heap\n  const heapCmp = (a, b) => {\n    if (a.frequency !== b.frequency) return a.frequency - b.frequency\n    return a.position - b.position\n  }\n  heap.sort(heapCmp)\n\n  // Build code lengths using Huffman algorithm\n  const sCode = new Array(ENCODING_TABLE_SIZE).fill(0)\n  const links = new Array(ENCODING_TABLE_SIZE)\n  for (let i = 0; i < ENCODING_TABLE_SIZE; i++) {\n    links[i] = i\n  }\n\n  while (frequencyCount > 1) {\n    // Pop smallest\n    const smallest = heap.shift()\n    frequencyCount--\n\n    // Add to second smallest\n    heap[0].frequency += smallest.frequency\n    const highPos = heap[0].position\n    const lowPos = smallest.position\n\n    // Re-sort heap\n    heap.sort(heapCmp)\n\n    // Update code lengths and links\n    let idx = highPos\n    while (true) {\n      sCode[idx]++\n      if (links[idx] === idx) {\n        links[idx] = lowPos\n        break\n      }\n      idx = links[idx]\n    }\n\n    idx = lowPos\n    while (true) {\n      sCode[idx]++\n      if (links[idx] === idx) {\n        break\n      }\n      idx = links[idx]\n    }\n  }\n\n  // Build canonical codes\n  buildCanonicalTable(sCode)\n\n  // Copy to frequencies\n  for (let i = 0; i < ENCODING_TABLE_SIZE; i++) {\n    frequencies[i] = sCode[i]\n  }\n\n  return { minCodeIndex, maxCodeIndex }\n}\n\n// Build canonical Huffman code table\nfunction buildCanonicalTable(codeTable) {\n  const countPerCode = new Array(59).fill(0)\n\n  for (let i = 0; i < codeTable.length; i++) {\n    if (codeTable[i] < 59) {\n      countPerCode[codeTable[i]]++\n    }\n  }\n\n  // Compute numerically lowest code for each length\n  let code = 0\n  for (let i = 58; i >= 0; i--) {\n    const nextCode = (code + countPerCode[i]) >>> 1\n    countPerCode[i] = code\n    code = nextCode\n  }\n\n  // Assign codes\n  for (let i = 0; i < codeTable.length; i++) {\n    const length = codeTable[i]\n    if (length > 0 && length < 59) {\n      codeTable[i] = length | (countPerCode[length] << 6)\n      countPerCode[length]++\n    }\n  }\n}\n\n// Pack encoding table with run-length compression of zeros\nfunction packEncodingTable(frequencies, minIndex, maxIndex, output) {\n  let codeBits = 0\n  let codeBitCount = 0\n\n  let i = minIndex\n  while (i <= maxIndex) {\n    const len = codeLength(frequencies[i])\n\n    if (len === 0) {\n      // Count zero run\n      let zeroRun = 1\n      while (i < maxIndex && zeroRun < LONGEST_LONG_RUN) {\n        if (codeLength(frequencies[i + 1]) > 0) break\n        i++\n        zeroRun++\n      }\n\n      if (zeroRun >= 2) {\n        if (zeroRun >= SHORTEST_LONG_RUN) {\n          writeBits(6, LONG_ZEROCODE_RUN, output, { codeBits, codeBitCount })\n          codeBits = output._codeBits\n          codeBitCount = output._codeBitCount\n          writeBits(8, zeroRun - SHORTEST_LONG_RUN, output, {\n            codeBits,\n            codeBitCount,\n          })\n          codeBits = output._codeBits\n          codeBitCount = output._codeBitCount\n        } else {\n          writeBits(6, SHORT_ZEROCODE_RUN + zeroRun - 2, output, {\n            codeBits,\n            codeBitCount,\n          })\n          codeBits = output._codeBits\n          codeBitCount = output._codeBitCount\n        }\n        i++\n        continue\n      }\n    }\n\n    writeBits(6, len, output, { codeBits, codeBitCount })\n    codeBits = output._codeBits\n    codeBitCount = output._codeBitCount\n    i++\n  }\n\n  // Flush remaining bits\n  if (codeBitCount > 0) {\n    output.push((codeBits << (8 - codeBitCount)) & 0xff)\n  }\n\n  // Clean up temporary state\n  delete output._codeBits\n  delete output._codeBitCount\n}\n\n// Helper to write bits to output\nfunction writeBits(count, bits, output, state) {\n  let codeBits = state.codeBits\n  let codeBitCount = state.codeBitCount\n\n  codeBits = ((codeBits << count) | bits) >>> 0\n  codeBitCount += count\n\n  while (codeBitCount >= 8) {\n    codeBitCount -= 8\n    output.push((codeBits >>> codeBitCount) & 0xff)\n  }\n\n  output._codeBits = codeBits\n  output._codeBitCount = codeBitCount\n}\n\n// Encode data using the frequency table\nfunction encodeWithFrequencies(\n  frequencies,\n  uncompressed,\n  runLengthCode,\n  output,\n) {\n  let codeBits = 0\n  let codeBitCount = 0\n  const startLen = output.length\n\n  let runStartValue = uncompressed[0]\n  let runLength = 0\n\n  for (let i = 1; i < uncompressed.length; i++) {\n    const currentValue = uncompressed[i]\n\n    if (runStartValue === currentValue && runLength < 255) {\n      runLength++\n    } else {\n      sendCode(\n        frequencies[runStartValue],\n        runLength,\n        frequencies[runLengthCode],\n        output,\n        { codeBits, codeBitCount },\n      )\n      codeBits = output._codeBits\n      codeBitCount = output._codeBitCount\n      runLength = 0\n    }\n\n    runStartValue = currentValue\n  }\n\n  // Send remaining\n  sendCode(\n    frequencies[runStartValue],\n    runLength,\n    frequencies[runLengthCode],\n    output,\n    { codeBits, codeBitCount },\n  )\n  codeBits = output._codeBits\n  codeBitCount = output._codeBitCount\n\n  const dataLength = output.length - startLen\n\n  // Flush remaining bits\n  if (codeBitCount > 0) {\n    output.push((codeBits << (8 - codeBitCount)) & 0xff)\n  }\n\n  delete output._codeBits\n  delete output._codeBitCount\n\n  return dataLength * 8 + codeBitCount\n}\n\n// Send a code with optional run-length encoding\nfunction sendCode(sCode, runCount, runCode, output, state) {\n  const sLen = codeLength(sCode)\n  const runLen = codeLength(runCode)\n\n  // Use RLE if it's shorter\n  if (sLen + runLen + 8 < sLen * (runCount + 1)) {\n    writeCode(sCode, output, state)\n    writeCode(runCode, output, state)\n    writeBits(8, runCount, output, state)\n  } else {\n    for (let i = 0; i <= runCount; i++) {\n      writeCode(sCode, output, state)\n    }\n  }\n}\n\n// Write a Huffman code\nfunction writeCode(sCode, output, state) {\n  writeBits(codeLength(sCode), codeValue(sCode), output, state)\n}\n\n// Read encoding table from compressed data\nfunction readEncodingTable(data, startOffset, minCodeIndex, maxCodeIndex) {\n  const encodingTable = new Array(ENCODING_TABLE_SIZE).fill(0)\n\n  let offset = startOffset\n  let codeBits = 0\n  let codeBitCount = 0\n\n  let codeIndex = minCodeIndex\n  while (codeIndex <= maxCodeIndex) {\n    // Read 6 bits for code length\n    while (codeBitCount < 6 && offset < data.length) {\n      codeBits = ((codeBits << 8) | data[offset]) >>> 0\n      codeBitCount += 8\n      offset++\n    }\n\n    codeBitCount -= 6\n    const codeLen = (codeBits >>> codeBitCount) & 63\n\n    if (codeLen === LONG_ZEROCODE_RUN) {\n      // Read 8 more bits for run length\n      while (codeBitCount < 8 && offset < data.length) {\n        codeBits = ((codeBits << 8) | data[offset]) >>> 0\n        codeBitCount += 8\n        offset++\n      }\n      codeBitCount -= 8\n      const zerun = ((codeBits >>> codeBitCount) & 255) + SHORTEST_LONG_RUN\n\n      for (let j = 0; j < zerun && codeIndex <= maxCodeIndex; j++) {\n        encodingTable[codeIndex++] = 0\n      }\n    } else if (codeLen >= SHORT_ZEROCODE_RUN) {\n      const duplicationCount = codeLen - SHORT_ZEROCODE_RUN + 2\n      for (let j = 0; j < duplicationCount && codeIndex <= maxCodeIndex; j++) {\n        encodingTable[codeIndex++] = 0\n      }\n    } else {\n      encodingTable[codeIndex++] = codeLen\n    }\n  }\n\n  // Build canonical codes\n  buildCanonicalTable(encodingTable)\n\n  return { encodingTable, bytesRead: offset - startOffset }\n}\n\n// Build decoding table from encoding table\nfunction buildDecodingTable(encodingTable, minCodeIndex, maxCodeIndex) {\n  // Decoding table entry types:\n  // { type: 'empty' }\n  // { type: 'short', value: number, len: number }\n  // { type: 'long', codes: number[] }\n  const decodingTable = new Array(DECODING_TABLE_SIZE)\n  for (let i = 0; i < DECODING_TABLE_SIZE; i++) {\n    decodingTable[i] = { type: 'empty' }\n  }\n\n  for (let codeIndex = minCodeIndex; codeIndex <= maxCodeIndex; codeIndex++) {\n    const encoded = encodingTable[codeIndex]\n    const code = codeValue(encoded)\n    const length = codeLength(encoded)\n\n    if (length === 0) continue\n\n    if (code >>> length !== 0) {\n      throw new Error('Invalid Huffman table entry')\n    }\n\n    if (length > DECODE_BITS) {\n      // Long code\n      const idx = code >>> (length - DECODE_BITS)\n      const entry = decodingTable[idx]\n\n      if (entry.type === 'empty') {\n        decodingTable[idx] = { type: 'long', codes: [codeIndex] }\n      } else if (entry.type === 'long') {\n        entry.codes.push(codeIndex)\n      } else {\n        throw new Error('Invalid Huffman table entry')\n      }\n    } else if (length !== 0) {\n      // Short code - fill all matching entries\n      const startIndex = code << (DECODE_BITS - length)\n      const count = 1 << (DECODE_BITS - length)\n\n      for (let i = 0; i < count; i++) {\n        decodingTable[startIndex + i] = {\n          type: 'short',\n          value: codeIndex,\n          len: length,\n        }\n      }\n    }\n  }\n\n  return decodingTable\n}\n\n// Decode data using encoding and decoding tables\nfunction decodeWithTables(\n  encodingTable,\n  decodingTable,\n  input,\n  inputBitCount,\n  runLengthCode,\n  expectedOutputSize,\n) {\n  const output = new Uint16Array(expectedOutputSize)\n  let outIdx = 0\n  let inputIdx = 0\n\n  let codeBits = 0\n  let codeBitCount = 0\n\n  // Main decoding loop\n  while (inputIdx < input.length) {\n    // Read a byte\n    codeBits = ((codeBits << 8) | input[inputIdx]) >>> 0\n    codeBitCount += 8\n    inputIdx++\n\n    // Decode while we have enough bits\n    while (codeBitCount >= DECODE_BITS) {\n      const codeIndex =\n        (codeBits >>> (codeBitCount - DECODE_BITS)) & DECODE_MASK\n      const entry = decodingTable[codeIndex]\n\n      if (entry.type === 'short') {\n        codeBitCount -= entry.len\n\n        outIdx = readCodeIntoArray(\n          entry.value,\n          runLengthCode,\n          input,\n          { inputIdx, codeBits, codeBitCount },\n          output,\n          outIdx,\n          expectedOutputSize,\n        )\n        inputIdx = input._inputIdx || inputIdx\n        codeBits = input._codeBits || codeBits\n        codeBitCount = input._codeBitCount || codeBitCount\n      } else if (entry.type === 'long') {\n        let found = false\n\n        for (const longCode of entry.codes) {\n          const encodedLongCode = encodingTable[longCode]\n          const length = codeLength(encodedLongCode)\n\n          // Read more bytes if needed\n          while (codeBitCount < length && inputIdx < input.length) {\n            codeBits = ((codeBits << 8) | input[inputIdx]) >>> 0\n            codeBitCount += 8\n            inputIdx++\n          }\n\n          if (codeBitCount >= length) {\n            const requiredCode =\n              (codeBits >>> (codeBitCount - length)) & ((1 << length) - 1)\n\n            if (codeValue(encodedLongCode) === requiredCode) {\n              codeBitCount -= length\n\n              outIdx = readCodeIntoArray(\n                longCode,\n                runLengthCode,\n                input,\n                { inputIdx, codeBits, codeBitCount },\n                output,\n                outIdx,\n                expectedOutputSize,\n              )\n              inputIdx = input._inputIdx || inputIdx\n              codeBits = input._codeBits || codeBits\n              codeBitCount = input._codeBitCount || codeBitCount\n\n              found = true\n              break\n            }\n          }\n        }\n\n        if (!found) {\n          throw new Error('Invalid Huffman code')\n        }\n      } else {\n        throw new Error('Invalid Huffman code')\n      }\n    }\n  }\n\n  // Process remaining bits\n  const count = (8 - inputBitCount) & 7\n  codeBits >>>= count\n  codeBitCount -= count\n\n  while (codeBitCount > 0) {\n    const index = (codeBits << (DECODE_BITS - codeBitCount)) & DECODE_MASK\n    const entry = decodingTable[index]\n\n    if (entry.type === 'short') {\n      if (entry.len > codeBitCount) break\n      codeBitCount -= entry.len\n\n      outIdx = readCodeIntoArray(\n        entry.value,\n        runLengthCode,\n        input,\n        { inputIdx, codeBits, codeBitCount },\n        output,\n        outIdx,\n        expectedOutputSize,\n      )\n      codeBits = input._codeBits || codeBits\n      codeBitCount = input._codeBitCount || codeBitCount\n    } else {\n      break\n    }\n  }\n\n  // Clean up\n  delete input._inputIdx\n  delete input._codeBits\n  delete input._codeBitCount\n\n  if (outIdx !== expectedOutputSize) {\n    throw new Error(\n      `Huffman decode size mismatch: got ${outIdx}, expected ${expectedOutputSize}`,\n    )\n  }\n\n  return output\n}\n\n// Read a decoded code into the output array\nfunction readCodeIntoArray(\n  code,\n  runLengthCode,\n  input,\n  state,\n  output,\n  outIdx,\n  maxLen,\n) {\n  let { inputIdx, codeBits, codeBitCount } = state\n\n  if (code === runLengthCode) {\n    // Read 8 bits for run count\n    while (codeBitCount < 8 && inputIdx < input.length) {\n      codeBits = ((codeBits << 8) | input[inputIdx]) >>> 0\n      codeBitCount += 8\n      inputIdx++\n    }\n\n    codeBitCount -= 8\n    const codeRepetitions = (codeBits >>> codeBitCount) & 0xff\n\n    if (outIdx + codeRepetitions > maxLen) {\n      throw new Error('Too much Huffman data')\n    }\n\n    if (outIdx === 0) {\n      throw new Error('Not enough Huffman data')\n    }\n\n    const repeatedCode = output[outIdx - 1]\n    for (let i = 0; i < codeRepetitions; i++) {\n      output[outIdx++] = repeatedCode\n    }\n  } else if (outIdx < maxLen) {\n    output[outIdx++] = code\n  } else {\n    throw new Error('Too much Huffman data')\n  }\n\n  input._inputIdx = inputIdx\n  input._codeBits = codeBits\n  input._codeBitCount = codeBitCount\n\n  return outIdx\n}\n","// Haar wavelet encoding and decoding for PIZ compression\n// The wavelet transform operates on 2D data, processing pixels in a\n// hierarchical manner. Each level processes pairs of values:\n// - Encode: (a, b) -> (average, difference)\n// - Decode: (avg, diff) -> (a, b)\n// Two modes are supported:\n// - 14-bit: For values < 16384 (faster, simpler math)\n// - 16-bit: For full 16-bit values (requires modular arithmetic)\n\nconst BIT_COUNT = 16\nconst OFFSET = 1 << (BIT_COUNT - 1) // 32768\nconst MOD_MASK = (1 << BIT_COUNT) - 1 // 65535\n\n// Check if a value fits in 14 bits\n// @param {number} value\n// @returns {boolean}\nfunction is14Bit(value) {\n  return value < 1 << 14\n}\n\n// 14-bit encoding: simple average and difference\n// @param {number} a\n// @param {number} b\n// @returns {[number, number]} [average, difference]\nfunction encode14bit(a, b) {\n  // Convert to signed for arithmetic\n  const as = a > 32767 ? a - 65536 : a\n  const bs = b > 32767 ? b - 65536 : b\n\n  const m = (as + bs) >> 1\n  const d = as - bs\n\n  // Convert back to unsigned 16-bit\n  return [m & 0xffff, d & 0xffff]\n}\n\n// 14-bit decoding\n// @param {number} l - low (average)\n// @param {number} h - high (difference)\n// @returns {[number, number]} [a, b]\nfunction decode14bit(l, h) {\n  // Convert to signed\n  const ls = l > 32767 ? l - 65536 : l\n  const hs = h > 32767 ? h - 65536 : h\n\n  const hi = hs\n  const ai = ls + (hi & 1) + (hi >> 1)\n\n  const a = ai\n  const b = ai - hi\n\n  return [a & 0xffff, b & 0xffff]\n}\n\n// 16-bit encoding with modular arithmetic\n// @param {number} a\n// @param {number} b\n// @returns {[number, number]} [average, difference]\nfunction encode16bit(a, b) {\n  const aOffset = (a + OFFSET) & MOD_MASK\n  let m = (aOffset + b) >> 1\n  let d = aOffset - b\n\n  if (d < 0) {\n    m = (m + OFFSET) & MOD_MASK\n  }\n  d = d & MOD_MASK\n\n  return [m, d]\n}\n\n// 16-bit decoding with modular arithmetic\n// @param {number} l - low (average)\n// @param {number} h - high (difference)\n// @returns {[number, number]} [a, b]\nfunction decode16bit(l, h) {\n  const m = l\n  const d = h\n\n  const b = (m - (d >> 1)) & MOD_MASK\n  const a = (d + b - OFFSET) & MOD_MASK\n\n  return [a, b]\n}\n\n// Encode (compress) a 2D buffer with Haar wavelet transform\n// @param {Uint16Array} buffer - Data to transform (modified in place)\n// @param {number} countX - Width\n// @param {number} countY - Height\n// @param {number} offsetX - X stride (usually 1 for single channel, or samples_per_pixel for interleaved)\n// @param {number} offsetY - Y stride (usually width * samples_per_pixel)\n// @param {number} maxValue - Maximum value in buffer (determines 14-bit vs 16-bit mode)\nexport function waveletEncode(\n  buffer,\n  countX,\n  countY,\n  offsetX,\n  offsetY,\n  maxValue,\n) {\n  const count = Math.min(countX, countY)\n  const encode = is14Bit(maxValue) ? encode14bit : encode16bit\n\n  let p = 1\n  let p2 = 2\n\n  while (p2 <= count) {\n    const offset1X = offsetX * p\n    const offset1Y = offsetY * p\n    const offset2X = offsetX * p2\n    const offset2Y = offsetY * p2\n\n    const endY = offsetY * (countY - p2)\n\n    // Process 2x2 blocks\n    let posY = 0\n    while (posY <= endY) {\n      let posX = posY\n      const endX = posX + offsetX * (countX - p2)\n\n      while (posX <= endX) {\n        const posRight = posX + offset1X\n        const posTop = posX + offset1Y\n        const posTopRight = posTop + offset1X\n\n        let [center, right] = encode(buffer[posX], buffer[posRight])\n        let [top, topRight] = encode(buffer[posTop], buffer[posTopRight])\n\n        ;[center, top] = encode(center, top)\n        ;[right, topRight] = encode(right, topRight)\n\n        buffer[posX] = center\n        buffer[posTop] = top\n        buffer[posRight] = right\n        buffer[posTopRight] = topRight\n\n        posX += offset2X\n      }\n\n      // Handle remaining odd pixel column\n      if (countX & p) {\n        const posTop = posX + offset1Y\n        const [center, top] = encode(buffer[posX], buffer[posTop])\n        buffer[posX] = center\n        buffer[posTop] = top\n      }\n\n      posY += offset2Y\n    }\n\n    // Handle remaining odd row\n    if (countY & p) {\n      let posX = posY\n      const endX = posY + offsetX * (countX - p2)\n\n      while (posX <= endX) {\n        const posRight = posX + offset1X\n        const [center, right] = encode(buffer[posX], buffer[posRight])\n        buffer[posRight] = right\n        buffer[posX] = center\n        posX += offset2X\n      }\n    }\n\n    p = p2\n    p2 <<= 1\n  }\n}\n\n// Decode (decompress) a 2D buffer with inverse Haar wavelet transform\n// @param {Uint16Array} buffer - Data to transform (modified in place)\n// @param {number} countX - Width\n// @param {number} countY - Height\n// @param {number} offsetX - X stride\n// @param {number} offsetY - Y stride\n// @param {number} maxValue - Maximum value (determines 14-bit vs 16-bit mode)\nexport function waveletDecode(\n  buffer,\n  countX,\n  countY,\n  offsetX,\n  offsetY,\n  maxValue,\n) {\n  const count = Math.min(countX, countY)\n  const decode = is14Bit(maxValue) ? decode14bit : decode16bit\n\n  // Find max level\n  let p = 1\n  while (p <= count) {\n    p <<= 1\n  }\n  p >>= 1\n  let p2 = p\n  p >>= 1\n\n  while (p >= 1) {\n    const offset1X = offsetX * p\n    const offset1Y = offsetY * p\n    const offset2X = offsetX * p2\n    const offset2Y = offsetY * p2\n\n    const endY = offsetY * (countY - p2)\n\n    let posY = 0\n    while (posY <= endY) {\n      let posX = posY\n      const endX = posX + offsetX * (countX - p2)\n\n      while (posX <= endX) {\n        const posRight = posX + offset1X\n        const posTop = posX + offset1Y\n        const posTopRight = posTop + offset1X\n\n        let [center, top] = decode(buffer[posX], buffer[posTop])\n        let [right, topRight] = decode(buffer[posRight], buffer[posTopRight])\n\n        ;[center, right] = decode(center, right)\n        ;[top, topRight] = decode(top, topRight)\n\n        buffer[posX] = center\n        buffer[posTop] = top\n        buffer[posRight] = right\n        buffer[posTopRight] = topRight\n\n        posX += offset2X\n      }\n\n      // Decode remaining odd x value\n      if (countX & p) {\n        const posTop = posX + offset1Y\n        const [center, top] = decode(buffer[posX], buffer[posTop])\n        buffer[posX] = center\n        buffer[posTop] = top\n      }\n\n      posY += offset2Y\n    }\n\n    // Decode remaining odd row\n    if (countY & p) {\n      let posX = posY\n      const endX = posX + offsetX * (countX - p2)\n\n      while (posX <= endX) {\n        const posRight = posX + offset1X\n        const [center, right] = decode(buffer[posX], buffer[posRight])\n        buffer[posX] = center\n        buffer[posRight] = right\n        posX += offset2X\n      }\n    }\n\n    p2 = p\n    p >>= 1\n  }\n}\n","// PIZ compression for EXR\n// PIZ compression uses wavelet transform + Huffman coding.\n// Best for noisy/photographic images, typically 35-55% of uncompressed size.\n// Algorithm:\n// 1. Convert to u16 values (treating f16 as raw bits, f32/u32 as two u16s)\n// 2. Build bitmap of used values\n// 3. Create lookup tables to compress value range\n// 4. Apply Haar wavelet transform to each channel\n// 5. Huffman encode the result\n\nimport { SampleType } from '../../core/types.js'\nimport { huffmanCompress, huffmanDecompress } from './huffman.js'\nimport { waveletDecode, waveletEncode } from './wavelet.js'\n\nconst U16_RANGE = 1 << 16 // 65536\nconst BITMAP_SIZE = U16_RANGE >> 3 // 8192 bytes\n\n// Build a bitmap of which u16 values are present in the data\n// @param {Uint16Array} data\n// @returns {{minNonZero: number, maxNonZero: number, bitmap: Uint8Array}}\nfunction bitmapFromData(data) {\n  const bitmap = new Uint8Array(BITMAP_SIZE)\n\n  for (let i = 0; i < data.length; i++) {\n    const value = data[i]\n    bitmap[value >> 3] |= 1 << (value & 7)\n  }\n\n  // Zero is not explicitly stored in bitmap; we assume data always contains zeros\n  bitmap[0] &= ~1\n\n  // Find min and max non-zero indices in bitmap\n  let minNonZero = -1\n  let maxNonZero = -1\n\n  for (let i = 0; i < BITMAP_SIZE; i++) {\n    if (bitmap[i] !== 0) {\n      if (minNonZero === -1) minNonZero = i\n      maxNonZero = i\n    }\n  }\n\n  if (minNonZero === -1) {\n    minNonZero = 0\n    maxNonZero = 0\n  }\n\n  return { minNonZero, maxNonZero, bitmap }\n}\n\n// Build forward lookup table from bitmap (compress value range)\n// @param {Uint8Array} bitmap\n// @returns {{maxValue: number, table: Uint16Array}}\nfunction forwardLookupTableFromBitmap(bitmap) {\n  const table = new Uint16Array(U16_RANGE)\n  let count = 0\n\n  for (let index = 0; index < U16_RANGE; index++) {\n    if (index === 0 || (bitmap[index >> 3] & (1 << (index & 7))) !== 0) {\n      table[index] = count\n      count++\n    }\n  }\n\n  return { maxValue: count - 1, table }\n}\n\n// Build reverse lookup table from bitmap (expand value range)\n// @param {Uint8Array} bitmap\n// @returns {{maxValue: number, table: Uint16Array}}\nfunction reverseLookupTableFromBitmap(bitmap) {\n  const table = []\n\n  for (let index = 0; index < U16_RANGE; index++) {\n    if (index === 0 || (bitmap[index >> 3] & (1 << (index & 7))) !== 0) {\n      table.push(index)\n    }\n  }\n\n  const maxValue = table.length - 1\n\n  // Pad to full u16 range\n  while (table.length < U16_RANGE) {\n    table.push(0)\n  }\n\n  return { maxValue, table: new Uint16Array(table) }\n}\n\n// Apply a lookup table to transform data values\n// @param {Uint16Array} data\n// @param {Uint16Array} table\nfunction applyLookupTable(data, table) {\n  for (let i = 0; i < data.length; i++) {\n    data[i] = table[data[i]]\n  }\n}\n\n// Channel metadata for PIZ compression\nclass ChannelData {\n  constructor(tmpStartIndex, resolution, ySampling, samplesPerPixel) {\n    this.tmpStartIndex = tmpStartIndex\n    this.tmpEndIndex = tmpStartIndex\n    this.resolution = resolution // { x, y }\n    this.ySampling = ySampling\n    this.samplesPerPixel = samplesPerPixel // 1 for f16, 2 for f32/u32\n  }\n}\n\n// Compress data using PIZ\n// @param {Uint8Array} data - Uncompressed pixel data (little-endian)\n// @param {Array<{name: string, sampleType: number}>} channels - Channel descriptions\n// @param {number} width - Block width\n// @param {number} height - Block height\n// @returns {Uint8Array} - Compressed data\nexport function compressPIZ(data, channels, width, height) {\n  if (data.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  // Convert bytes to u16 array\n  const u16Count = data.length / 2\n  const tmp = new Uint16Array(u16Count)\n\n  // Build channel metadata and read data into tmp buffer\n  const channelDataList = []\n  let tmpEndIndex = 0\n\n  for (const channel of channels) {\n    // Calculate samples per pixel (f16 = 1, f32/u32 = 2 u16s)\n    const samplesPerPixel = channel.sampleType === SampleType.F16 ? 1 : 2\n\n    const channelData = new ChannelData(\n      tmpEndIndex,\n      { x: width, y: height },\n      1, // sampling (TODO: support subsampling)\n      samplesPerPixel,\n    )\n\n    tmpEndIndex += width * height * samplesPerPixel\n    channelDataList.push(channelData)\n  }\n\n  // Read input bytes into tmp, reordering by channel\n  const inputView = new DataView(data.buffer, data.byteOffset, data.byteLength)\n  let readOffset = 0\n\n  for (let y = 0; y < height; y++) {\n    for (const channelData of channelDataList) {\n      const u16sPerLine = channelData.resolution.x * channelData.samplesPerPixel\n      const target = tmp.subarray(\n        channelData.tmpEndIndex,\n        channelData.tmpEndIndex + u16sPerLine,\n      )\n\n      for (let i = 0; i < u16sPerLine; i++) {\n        target[i] = inputView.getUint16(readOffset, true) // little-endian\n        readOffset += 2\n      }\n\n      channelData.tmpEndIndex += u16sPerLine\n    }\n  }\n\n  // Build bitmap and lookup table\n  const { minNonZero, maxNonZero, bitmap } = bitmapFromData(tmp)\n  const { maxValue, table } = forwardLookupTableFromBitmap(bitmap)\n\n  // Apply lookup table to compress value range\n  applyLookupTable(tmp, table)\n\n  // Apply wavelet transform to each channel\n  for (const channelData of channelDataList) {\n    for (let offset = 0; offset < channelData.samplesPerPixel; offset++) {\n      // Get the slice for this channel\n      const u16Count =\n        channelData.resolution.x *\n        channelData.resolution.y *\n        channelData.samplesPerPixel\n      const channelStart = channelData.tmpStartIndex\n\n      waveletEncode(\n        tmp.subarray(channelStart + offset, channelStart + u16Count),\n        channelData.resolution.x,\n        channelData.resolution.y,\n        channelData.samplesPerPixel,\n        channelData.resolution.x * channelData.samplesPerPixel,\n        maxValue,\n      )\n    }\n  }\n\n  // Huffman compress\n  const huffmanCompressed = huffmanCompress(tmp)\n\n  // Build output\n  // Format: [minNonZero: u16][maxNonZero: u16][bitmap...][huffmanLength: i32][huffmanData...]\n  const output = new Uint8Array(\n    4 + // minNonZero + maxNonZero\n      (minNonZero <= maxNonZero ? maxNonZero - minNonZero + 1 : 0) +\n      4 + // huffman length\n      huffmanCompressed.length,\n  )\n\n  let writeOffset = 0\n\n  // Write minNonZero (u16 LE)\n  output[writeOffset++] = minNonZero & 0xff\n  output[writeOffset++] = (minNonZero >> 8) & 0xff\n\n  // Write maxNonZero (u16 LE)\n  output[writeOffset++] = maxNonZero & 0xff\n  output[writeOffset++] = (maxNonZero >> 8) & 0xff\n\n  // Write bitmap slice\n  if (minNonZero <= maxNonZero) {\n    for (let i = minNonZero; i <= maxNonZero; i++) {\n      output[writeOffset++] = bitmap[i]\n    }\n  }\n\n  // Write huffman length (i32 LE)\n  const huffmanLen = huffmanCompressed.length\n  output[writeOffset++] = huffmanLen & 0xff\n  output[writeOffset++] = (huffmanLen >> 8) & 0xff\n  output[writeOffset++] = (huffmanLen >> 16) & 0xff\n  output[writeOffset++] = (huffmanLen >> 24) & 0xff\n\n  // Write huffman data\n  output.set(huffmanCompressed, writeOffset)\n\n  return output\n}\n\n// Decompress PIZ data\n// @param {Uint8Array} compressed - Compressed data\n// @param {Array<{name: string, sampleType: number}>} channels - Channel descriptions\n// @param {number} width - Block width\n// @param {number} height - Block height\n// @param {number} expectedSize - Expected uncompressed size in bytes\n// @returns {Uint8Array} - Decompressed data\nexport function decompressPIZ(\n  compressed,\n  channels,\n  width,\n  height,\n  expectedSize,\n) {\n  if (compressed.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  const expectedU16Count = expectedSize / 2\n  let readOffset = 0\n\n  // Read minNonZero (u16 LE)\n  const minNonZero = compressed[readOffset] | (compressed[readOffset + 1] << 8)\n  readOffset += 2\n\n  // Read maxNonZero (u16 LE)\n  const maxNonZero = compressed[readOffset] | (compressed[readOffset + 1] << 8)\n  readOffset += 2\n\n  if (maxNonZero >= BITMAP_SIZE || minNonZero >= BITMAP_SIZE) {\n    throw new Error('Invalid PIZ compression data')\n  }\n\n  // Read bitmap\n  const bitmap = new Uint8Array(BITMAP_SIZE)\n  if (minNonZero <= maxNonZero) {\n    for (let i = minNonZero; i <= maxNonZero; i++) {\n      bitmap[i] = compressed[readOffset++]\n    }\n  }\n\n  // Build reverse lookup table\n  const { maxValue, table: lookupTable } = reverseLookupTableFromBitmap(bitmap)\n\n  // Read huffman length (i32 LE)\n  const huffmanLen =\n    compressed[readOffset] |\n    (compressed[readOffset + 1] << 8) |\n    (compressed[readOffset + 2] << 16) |\n    (compressed[readOffset + 3] << 24)\n  readOffset += 4\n\n  // Decompress huffman\n  const huffmanData = compressed.subarray(readOffset, readOffset + huffmanLen)\n  const tmp = huffmanDecompress(huffmanData, expectedU16Count)\n\n  // Build channel metadata\n  const channelDataList = []\n  let tmpIndex = 0\n\n  for (const channel of channels) {\n    const samplesPerPixel = channel.sampleType === SampleType.F16 ? 1 : 2\n\n    const channelData = new ChannelData(\n      tmpIndex,\n      { x: width, y: height },\n      1,\n      samplesPerPixel,\n    )\n\n    tmpIndex += width * height * samplesPerPixel\n    channelDataList.push(channelData)\n  }\n\n  // Apply inverse wavelet transform to each channel\n  for (const channelData of channelDataList) {\n    const u16Count =\n      channelData.resolution.x *\n      channelData.resolution.y *\n      channelData.samplesPerPixel\n\n    for (let offset = 0; offset < channelData.samplesPerPixel; offset++) {\n      waveletDecode(\n        tmp.subarray(\n          channelData.tmpStartIndex + offset,\n          channelData.tmpStartIndex + u16Count,\n        ),\n        channelData.resolution.x,\n        channelData.resolution.y,\n        channelData.samplesPerPixel,\n        channelData.resolution.x * channelData.samplesPerPixel,\n        maxValue,\n      )\n    }\n  }\n\n  // Apply reverse lookup table to expand value range\n  applyLookupTable(tmp, lookupTable)\n\n  // Convert back to bytes\n  const output = new Uint8Array(expectedSize)\n  const outputView = new DataView(output.buffer)\n  let writeOffset = 0\n\n  for (let y = 0; y < height; y++) {\n    for (const channelData of channelDataList) {\n      const u16sPerLine = channelData.resolution.x * channelData.samplesPerPixel\n\n      for (let i = 0; i < u16sPerLine; i++) {\n        outputView.setUint16(\n          writeOffset,\n          tmp[channelData.tmpEndIndex + i],\n          true,\n        )\n        writeOffset += 2\n      }\n\n      channelData.tmpEndIndex += u16sPerLine\n    }\n  }\n\n  return output\n}\n","// PXR24 compression for EXR\n// Developed by Pixar Animation Studios. Lossy compression for F32 data\n// (converted to 24 bits), but lossless for F16 and U32 data.\n// Algorithm:\n// 1. Convert F32 values to 24-bit (lossy rounding of significand)\n// 2. Apply delta encoding (difference from previous pixel per channel row)\n// 3. Transpose bytes (group all MSBs together, then second bytes, etc.)\n// 4. Compress with zlib\n\nimport { unzlibSync, zlibSync } from 'fflate'\nimport { SampleType } from '../core/types.js'\n\n// Convert 32-bit float to 24-bit representation\n// This is a lossy conversion that rounds the mantissa from 23 bits to 15 bits.\n// @param {number} float - F32 value\n// @returns {number} - 24-bit representation as u32\nexport function f32ToF24(float) {\n  // Get the bit pattern of the float\n  const buffer = new ArrayBuffer(4)\n  const floatView = new Float32Array(buffer)\n  const uintView = new Uint32Array(buffer)\n  floatView[0] = float\n  const bits = uintView[0]\n\n  const sign = bits & 0x80000000\n  const exponent = bits & 0x7f800000\n  const mantissa = bits & 0x007fffff\n\n  let result\n\n  if (exponent === 0x7f800000) {\n    // Infinity or NaN\n    if (mantissa !== 0) {\n      // NaN: preserve sign and 15 leftmost bits of significand\n      // If all 15 bits would be zero, set at least one to avoid turning into infinity\n      const truncatedMantissa = mantissa >>> 8\n      result =\n        (exponent >>> 8) | truncatedMantissa | (truncatedMantissa === 0 ? 1 : 0)\n    } else {\n      // Infinity\n      result = exponent >>> 8\n    }\n  } else {\n    // Finite: round the significand to 15 bits\n    result = ((exponent | mantissa) + (mantissa & 0x00000080)) >>> 8\n\n    if (result >= 0x7f8000) {\n      // Overflow due to rounding - truncate instead\n      result = (exponent | mantissa) >>> 8\n    }\n  }\n\n  return (sign >>> 8) | result\n}\n\n// Convert 24-bit representation back to 32-bit float\n// Simply shift left by 8 bits.\n// @param {number} f24 - 24-bit representation\n// @returns {number} - F32 value\nexport function f24ToF32(f24) {\n  const buffer = new ArrayBuffer(4)\n  const uintView = new Uint32Array(buffer)\n  const floatView = new Float32Array(buffer)\n  uintView[0] = f24 << 8\n  return floatView[0]\n}\n\n// Compress data using PXR24\n// @param {Uint8Array} data - Uncompressed pixel data (native endian, per-scanline channel order)\n// @param {Array<{name: string, sampleType: number}>} channels - Channel descriptions\n// @param {number} width - Block width in pixels\n// @param {number} height - Block height in scanlines\n// @returns {Uint8Array} - Compressed data\nexport function compressPXR24(data, channels, width, height) {\n  if (data.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  // Calculate bytes per pixel in PXR24 encoding (F16=2, F32=3, U32=4)\n  const bytesPerPixelPXR24 = channels.reduce((sum, ch) => {\n    switch (ch.sampleType) {\n      case SampleType.F16:\n        return sum + 2\n      case SampleType.F32:\n        return sum + 3\n      case SampleType.U32:\n        return sum + 4\n      default:\n        return sum + 4\n    }\n  }, 0)\n\n  // Output buffer for encoded data\n  const encodedBE = new Uint8Array(bytesPerPixelPXR24 * width * height)\n  let writeOffset = 0\n\n  // Create a DataView for reading input\n  const inputView = new DataView(data.buffer, data.byteOffset, data.byteLength)\n  let readOffset = 0\n\n  // Process each scanline\n  for (let y = 0; y < height; y++) {\n    // Process each channel\n    for (const channel of channels) {\n      const sampleCount = width // TODO: handle subsampling\n\n      switch (channel.sampleType) {\n        case SampleType.F16: {\n          // 2 bytes per sample: delta encode, then transpose\n          const byte0Start = writeOffset\n          const byte1Start = writeOffset + sampleCount\n          writeOffset += sampleCount * 2\n\n          let previousPixel = 0\n          for (let x = 0; x < sampleCount; x++) {\n            const pixel = inputView.getUint16(readOffset, true) // little-endian\n            readOffset += 2\n\n            const diff = (pixel - previousPixel) & 0xffff\n            // Write in big-endian (MSB first in first block)\n            encodedBE[byte0Start + x] = (diff >>> 8) & 0xff\n            encodedBE[byte1Start + x] = diff & 0xff\n            previousPixel = pixel\n          }\n          break\n        }\n\n        case SampleType.F32: {\n          // 3 bytes per sample (lossy): convert to F24, delta encode, transpose\n          const byte0Start = writeOffset\n          const byte1Start = writeOffset + sampleCount\n          const byte2Start = writeOffset + sampleCount * 2\n          writeOffset += sampleCount * 3\n\n          let previousPixel = 0\n          for (let x = 0; x < sampleCount; x++) {\n            const floatVal = inputView.getFloat32(readOffset, true) // little-endian\n            readOffset += 4\n\n            const pixel = f32ToF24(floatVal)\n            const diff = (pixel - previousPixel) & 0xffffff\n            // Write 24-bit difference in big-endian across 3 byte planes\n            encodedBE[byte0Start + x] = (diff >>> 16) & 0xff\n            encodedBE[byte1Start + x] = (diff >>> 8) & 0xff\n            encodedBE[byte2Start + x] = diff & 0xff\n            previousPixel = pixel\n          }\n          break\n        }\n\n        case SampleType.U32: {\n          // 4 bytes per sample: delta encode, then transpose\n          const byte0Start = writeOffset\n          const byte1Start = writeOffset + sampleCount\n          const byte2Start = writeOffset + sampleCount * 2\n          const byte3Start = writeOffset + sampleCount * 3\n          writeOffset += sampleCount * 4\n\n          let previousPixel = 0\n          for (let x = 0; x < sampleCount; x++) {\n            const pixel = inputView.getUint32(readOffset, true) // little-endian\n            readOffset += 4\n\n            const diff = (pixel - previousPixel) >>> 0 // force unsigned\n            // Write in big-endian across 4 byte planes\n            encodedBE[byte0Start + x] = (diff >>> 24) & 0xff\n            encodedBE[byte1Start + x] = (diff >>> 16) & 0xff\n            encodedBE[byte2Start + x] = (diff >>> 8) & 0xff\n            encodedBE[byte3Start + x] = diff & 0xff\n            previousPixel = pixel\n          }\n          break\n        }\n      }\n    }\n  }\n\n  return zlibSync(encodedBE, { level: 4 })\n}\n\n// Decompress PXR24 data\n// @param {Uint8Array} compressed - Compressed data\n// @param {Array<{name: string, sampleType: number}>} channels - Channel descriptions\n// @param {number} width - Block width in pixels\n// @param {number} height - Block height in scanlines\n// @param {number} expectedSize - Expected uncompressed size\n// @returns {Uint8Array} - Decompressed data\nexport function decompressPXR24(\n  compressed,\n  channels,\n  width,\n  height,\n  expectedSize,\n) {\n  // Decompress with zlib\n  const encodedBE = unzlibSync(compressed)\n\n  // Output buffer\n  const output = new Uint8Array(expectedSize)\n  const outputView = new DataView(output.buffer)\n  let writeOffset = 0\n  let readOffset = 0\n\n  // Process each scanline\n  for (let y = 0; y < height; y++) {\n    // Process each channel\n    for (const channel of channels) {\n      const sampleCount = width\n\n      switch (channel.sampleType) {\n        case SampleType.F16: {\n          const byte0Start = readOffset\n          const byte1Start = readOffset + sampleCount\n          readOffset += sampleCount * 2\n\n          let pixelAccum = 0\n          for (let x = 0; x < sampleCount; x++) {\n            const diff =\n              (encodedBE[byte0Start + x] << 8) | encodedBE[byte1Start + x]\n            pixelAccum = (pixelAccum + diff) & 0xffff\n            outputView.setUint16(writeOffset, pixelAccum, true)\n            writeOffset += 2\n          }\n          break\n        }\n\n        case SampleType.F32: {\n          const byte0Start = readOffset\n          const byte1Start = readOffset + sampleCount\n          const byte2Start = readOffset + sampleCount * 2\n          readOffset += sampleCount * 3\n\n          let pixelAccum = 0\n          for (let x = 0; x < sampleCount; x++) {\n            const diff =\n              (encodedBE[byte0Start + x] << 16) |\n              (encodedBE[byte1Start + x] << 8) |\n              encodedBE[byte2Start + x]\n            pixelAccum = (pixelAccum + diff) & 0xffffff\n            // F24 to F32: shift left by 8\n            outputView.setUint32(writeOffset, pixelAccum << 8, true)\n            writeOffset += 4\n          }\n          break\n        }\n\n        case SampleType.U32: {\n          const byte0Start = readOffset\n          const byte1Start = readOffset + sampleCount\n          const byte2Start = readOffset + sampleCount * 2\n          const byte3Start = readOffset + sampleCount * 3\n          readOffset += sampleCount * 4\n\n          let pixelAccum = 0\n          for (let x = 0; x < sampleCount; x++) {\n            const diff =\n              ((encodedBE[byte0Start + x] << 24) |\n                (encodedBE[byte1Start + x] << 16) |\n                (encodedBE[byte2Start + x] << 8) |\n                encodedBE[byte3Start + x]) >>>\n              0\n            pixelAccum = (pixelAccum + diff) >>> 0\n            outputView.setUint32(writeOffset, pixelAccum, true)\n            writeOffset += 4\n          }\n          break\n        }\n      }\n    }\n  }\n\n  return output\n}\n","// Byte optimization utilities for EXR compression\n// EXR compression uses two preprocessing steps before the actual compression:\n// 1. Byte separation (de-interleaving): Separate even and odd bytes\n// 2. Delta encoding: Store differences between consecutive bytes\n// These steps improve compression ratios by grouping similar bytes together\n// and reducing the entropy of the data.\n\n// Separate bytes such that even-indexed bytes go to the first half,\n// odd-indexed bytes go to the second half.\n// Example: [A0, A1, B0, B1, C0, C1] -> [A0, B0, C0, A1, B1, C1]\n// This is called \"de-interleaving\" and is the inverse of interleaving.\n// It groups the high bytes and low bytes of multi-byte values together,\n// which typically have similar patterns and compress better.\n// @param {Uint8Array} data - Data to separate (modified in place)\nexport function separateBytesFragments(data) {\n  if (data.length <= 1) return\n\n  const temp = new Uint8Array(data.length)\n  const halfLen = Math.ceil(data.length / 2)\n\n  // Even indices go to first half, odd indices go to second half\n  let firstIdx = 0\n  let secondIdx = halfLen\n\n  for (let i = 0; i < data.length; i++) {\n    if (i % 2 === 0) {\n      temp[firstIdx++] = data[i]\n    } else {\n      temp[secondIdx++] = data[i]\n    }\n  }\n\n  data.set(temp)\n}\n\n// Interleave bytes - the inverse of separateBytesFragments.\n// Example: [A0, B0, C0, A1, B1, C1] -> [A0, A1, B0, B1, C0, C1]\n// @param {Uint8Array} data - Data to interleave (modified in place)\nexport function interleaveByteBlocks(data) {\n  if (data.length <= 1) return\n\n  const temp = new Uint8Array(data.length)\n  const halfLen = Math.ceil(data.length / 2)\n\n  let outIdx = 0\n  const secondHalfLen = data.length - halfLen\n\n  for (let i = 0; i < secondHalfLen; i++) {\n    temp[outIdx++] = data[i] // First half\n    temp[outIdx++] = data[halfLen + i] // Second half\n  }\n\n  // Handle odd length - last element from first half\n  if (data.length % 2 === 1) {\n    temp[outIdx] = data[halfLen - 1]\n  }\n\n  data.set(temp)\n}\n\n// Convert sample values to differences.\n// Each byte becomes the difference from the previous byte, plus 128 (bias).\n// This is delta encoding: value[i] = original[i] - original[i-1] + 128\n// The first byte is unchanged.\n// The bias of 128 centers the differences around 128 instead of 0,\n// which works better with unsigned bytes.\n// @param {Uint8Array} data - Data to convert (modified in place)\nexport function samplesToDifferences(data) {\n  if (data.length <= 1) return\n\n  // Process from end to start so we don't overwrite values we need\n  const _prev = data[data.length - 1]\n  for (let i = data.length - 1; i >= 1; i--) {\n    const current = data[i]\n    const previous = data[i - 1]\n    // Difference with bias, wrapped to u8\n    data[i] = (current - previous + 128) & 0xff\n  }\n  // First byte stays unchanged\n}\n\n// Convert differences back to sample values.\n// The inverse of samplesToDifferences.\n// @param {Uint8Array} data - Data to convert (modified in place)\nexport function differencesToSamples(data) {\n  if (data.length <= 1) return\n\n  let prev = data[0]\n  for (let i = 1; i < data.length; i++) {\n    const diff = data[i]\n    const sample = (prev + diff - 128) & 0xff\n    data[i] = sample\n    prev = sample\n  }\n}\n\n// Apply both preprocessing steps for compression:\n// 1. Separate bytes (de-interleave)\n// 2. Delta encode\n// @param {Uint8Array} data - Data to preprocess (modified in place)\nexport function preprocessForCompression(data) {\n  separateBytesFragments(data)\n  samplesToDifferences(data)\n}\n\n// Reverse both preprocessing steps after decompression:\n// 1. Reverse delta encoding\n// 2. Interleave bytes\n// @param {Uint8Array} data - Data to postprocess (modified in place)\nexport function postprocessAfterDecompression(data) {\n  differencesToSamples(data)\n  interleaveByteBlocks(data)\n}\n","// RLE (Run-Length Encoding) compression for EXR\n// RLE compression produces slightly smaller files that can be read/written quickly.\n// Compressed size is usually 60-75% of uncompressed.\n// Works best for images with large flat areas (masks, abstract graphics).\n// Format:\n// - Positive count (0-127): Repeat the next byte (count + 1) times\n// - Negative count (-1 to -127): Copy the next (-count) bytes literally\n\nimport {\n  postprocessAfterDecompression,\n  preprocessForCompression,\n} from './optimize.js'\n\nconst MIN_RUN_LENGTH = 3\nconst MAX_RUN_LENGTH = 127\n\n// Compress data using RLE\n// @param {Uint8Array} data - Uncompressed data (in native/little endian)\n// @returns {Uint8Array} - Compressed data\nexport function compressRLE(data) {\n  if (data.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  // Make a copy and preprocess\n  const processed = new Uint8Array(data)\n  preprocessForCompression(processed)\n\n  // Worst case: no compression + overhead\n  const output = []\n  let runStart = 0\n  let runEnd = 1\n\n  while (runStart < processed.length) {\n    // Look for a run of identical bytes\n    while (\n      runEnd < processed.length &&\n      processed[runStart] === processed[runEnd] &&\n      runEnd - runStart - 1 < MAX_RUN_LENGTH\n    ) {\n      runEnd++\n    }\n\n    if (runEnd - runStart >= MIN_RUN_LENGTH) {\n      // Emit a run: positive count means repeat\n      // count = (runEnd - runStart - 1), so 0 = 1 repeat, 127 = 128 repeats\n      output.push((runEnd - runStart - 1) & 0xff)\n      output.push(processed[runStart])\n      runStart = runEnd\n    } else {\n      // Look for a literal sequence (non-repeating bytes)\n      while (\n        runEnd < processed.length &&\n        runEnd - runStart < MAX_RUN_LENGTH &&\n        // Check if next 3 bytes are not all the same (would be a run)\n        (runEnd + 1 >= processed.length ||\n          processed[runEnd] !== processed[runEnd + 1] ||\n          runEnd + 2 >= processed.length ||\n          processed[runEnd + 1] !== processed[runEnd + 2])\n      ) {\n        runEnd++\n      }\n\n      // Emit literals: negative count means copy\n      // count = (runStart - runEnd), e.g., -3 means copy 3 bytes\n      const _literalCount = runEnd - runStart\n      output.push((runStart - runEnd) & 0xff) // This gives negative value as unsigned\n      for (let i = runStart; i < runEnd; i++) {\n        output.push(processed[i])\n      }\n\n      runStart = runEnd\n      runEnd = runStart + 1\n    }\n  }\n\n  return new Uint8Array(output)\n}\n\n// Decompress RLE data\n// @param {Uint8Array} compressed - Compressed data\n// @param {number} expectedSize - Expected uncompressed size\n// @returns {Uint8Array} - Decompressed data\nexport function decompressRLE(compressed, expectedSize) {\n  const output = new Uint8Array(expectedSize)\n  let inPos = 0\n  let outPos = 0\n\n  while (inPos < compressed.length && outPos < expectedSize) {\n    // Read count as signed byte\n    const count = (compressed[inPos++] << 24) >> 24 // Sign extend\n\n    if (count < 0) {\n      // Literal: copy -count bytes\n      const literalCount = -count\n      for (let i = 0; i < literalCount && outPos < expectedSize; i++) {\n        output[outPos++] = compressed[inPos++]\n      }\n    } else {\n      // Run: repeat next byte (count + 1) times\n      const repeatCount = count + 1\n      const value = compressed[inPos++]\n      for (let i = 0; i < repeatCount && outPos < expectedSize; i++) {\n        output[outPos++] = value\n      }\n    }\n  }\n\n  // Reverse the preprocessing\n  postprocessAfterDecompression(output)\n\n  return output\n}\n","// ZIP compression for EXR (ZIP1 and ZIP16)\n// ZIP compression uses zlib deflate to compress pixel data.\n// - ZIP1: Compresses one scanline at a time\n// - ZIP16: Compresses 16 scanlines at a time (better compression)\n// This compression method is lossless and produces small files,\n// but is slower than RLE.\n\nimport { unzlibSync, zlibSync } from 'fflate'\nimport {\n  postprocessAfterDecompression,\n  preprocessForCompression,\n} from './optimize.js'\n\n// Compression level for ZIP (4 is a good balance of speed and size)\nconst ZIP_COMPRESSION_LEVEL = 4\n\n// Compress data using ZIP (zlib deflate)\n// @param {Uint8Array} data - Uncompressed data\n// @returns {Uint8Array} - Compressed data\nexport function compressZIP(data) {\n  if (data.length === 0) {\n    return new Uint8Array(0)\n  }\n\n  // Make a copy and preprocess\n  const processed = new Uint8Array(data)\n  preprocessForCompression(processed)\n\n  return zlibSync(processed, { level: ZIP_COMPRESSION_LEVEL })\n}\n\n// Decompress ZIP data\n// @param {Uint8Array} compressed - Compressed data\n// @param {number} expectedSize - Expected uncompressed size\n// @returns {Uint8Array} - Decompressed data\nexport function decompressZIP(compressed, expectedSize) {\n  // If sizes match, data was stored uncompressed (compression made it bigger)\n  if (compressed.length === expectedSize) {\n    const result = new Uint8Array(compressed)\n    postprocessAfterDecompression(result)\n    return result\n  }\n\n  // Decompress with zlib inflate\n  const decompressed = unzlibSync(compressed)\n\n  // Verify size\n  if (decompressed.length !== expectedSize) {\n    throw new Error(\n      `ZIP decompression size mismatch: got ${decompressed.length}, expected ${expectedSize}`,\n    )\n  }\n\n  const result = new Uint8Array(decompressed)\n\n  // Reverse the preprocessing\n  postprocessAfterDecompression(result)\n\n  return result\n}\n","// Compression module - EXR compression methods\n// Supported compression methods:\n// - Uncompressed: No compression, fastest I/O\n// - RLE: Run-length encoding, fast with moderate compression\n// - ZIP1: zlib per scanline, slow but small\n// - ZIP16: zlib per 16 scanlines, better compression than ZIP1\n// - PIZ: Wavelet + Huffman, best for noisy images\n// - PXR24: Lossy for f32, lossless for f16/u32\n// - B44/B44A: Lossy block compression for f16\n\nimport { Compression } from '../core/types.js'\nimport { compressB44, decompressB44 } from './b44/index.js'\nimport { compressPIZ, decompressPIZ } from './piz/index.js'\nimport { compressPXR24, decompressPXR24 } from './pxr24.js'\nimport { compressRLE, decompressRLE } from './rle.js'\nimport { compressZIP, decompressZIP } from './zip.js'\n\nexport { compressB44, decompressB44 } from './b44/index.js'\nexport * from './optimize.js'\nexport { compressPIZ, decompressPIZ } from './piz/index.js'\nexport { compressPXR24, decompressPXR24, f24ToF32, f32ToF24 } from './pxr24.js'\nexport { compressRLE, decompressRLE } from './rle.js'\nexport { compressZIP, decompressZIP } from './zip.js'\n\n// Compression context for channel-aware compression methods\n// @typedef {Object} CompressionContext\n// @property {Array<{name: string, sampleType: number}>} channels - Channel list\n// @property {number} width - Block width in pixels\n// @property {number} height - Block height in scanlines\n\n// Compress a block of pixel data\n// @param {number} method - Compression method (from Compression enum)\n// @param {Uint8Array} uncompressedLE - Little-endian uncompressed data\n// @param {CompressionContext} [context] - Optional context for channel-aware compression\n// @returns {Uint8Array} - Compressed data (or uncompressed if compression didn't help)\nexport function compressBlock(method, uncompressedLE, context = null) {\n  if (uncompressedLE.length === 0) {\n    return uncompressedLE\n  }\n\n  let compressed\n\n  switch (method) {\n    case Compression.Uncompressed:\n      return uncompressedLE\n\n    case Compression.RLE:\n      compressed = compressRLE(uncompressedLE)\n      break\n\n    case Compression.ZIP1:\n    case Compression.ZIP16:\n      compressed = compressZIP(uncompressedLE)\n      break\n\n    case Compression.PIZ:\n      if (!context) {\n        throw new Error('PIZ compression requires channel context')\n      }\n      compressed = compressPIZ(\n        uncompressedLE,\n        context.channels,\n        context.width,\n        context.height,\n      )\n      break\n\n    case Compression.PXR24:\n      if (!context) {\n        throw new Error('PXR24 compression requires channel context')\n      }\n      compressed = compressPXR24(\n        uncompressedLE,\n        context.channels,\n        context.width,\n        context.height,\n      )\n      break\n\n    case Compression.B44:\n      if (!context) {\n        throw new Error('B44 compression requires channel context')\n      }\n      compressed = compressB44(\n        uncompressedLE,\n        context.channels,\n        context.width,\n        context.height,\n        false, // B44: don't optimize flat fields\n      )\n      break\n\n    case Compression.B44A:\n      if (!context) {\n        throw new Error('B44A compression requires channel context')\n      }\n      compressed = compressB44(\n        uncompressedLE,\n        context.channels,\n        context.width,\n        context.height,\n        true, // B44A: optimize flat fields\n      )\n      break\n\n    default:\n      throw new Error(`Unknown compression method: ${method}`)\n  }\n\n  // If compressed is larger than uncompressed, return uncompressed\n  // The decompressor will detect this by comparing sizes\n  if (compressed.length >= uncompressedLE.length) {\n    return uncompressedLE\n  }\n\n  return compressed\n}\n\n// Decompress a block of pixel data\n// @param {number} method - Compression method\n// @param {Uint8Array} compressedLE - Compressed data (little-endian)\n// @param {number} expectedSize - Expected uncompressed size\n// @param {CompressionContext} [context] - Optional context for channel-aware decompression\n// @returns {Uint8Array} - Decompressed data\nexport function decompressBlock(\n  method,\n  compressedLE,\n  expectedSize,\n  context = null,\n) {\n  // If the compressed size equals expected size, data was stored uncompressed\n  if (compressedLE.length === expectedSize) {\n    return compressedLE\n  }\n\n  switch (method) {\n    case Compression.Uncompressed:\n      return compressedLE\n\n    case Compression.RLE:\n      return decompressRLE(compressedLE, expectedSize)\n\n    case Compression.ZIP1:\n    case Compression.ZIP16:\n      return decompressZIP(compressedLE, expectedSize)\n\n    case Compression.PIZ:\n      if (!context) {\n        throw new Error('PIZ decompression requires channel context')\n      }\n      return decompressPIZ(\n        compressedLE,\n        context.channels,\n        context.width,\n        context.height,\n        expectedSize,\n      )\n\n    case Compression.PXR24:\n      if (!context) {\n        throw new Error('PXR24 decompression requires channel context')\n      }\n      return decompressPXR24(\n        compressedLE,\n        context.channels,\n        context.width,\n        context.height,\n        expectedSize,\n      )\n\n    case Compression.B44:\n    case Compression.B44A:\n      if (!context) {\n        throw new Error('B44 decompression requires channel context')\n      }\n      return decompressB44(\n        compressedLE,\n        context.channels,\n        context.width,\n        context.height,\n        expectedSize,\n      )\n\n    default:\n      throw new Error(`Unknown compression method: ${method}`)\n  }\n}\n\n// Get the name of a compression method\n// @param {number} method\n// @returns {string}\nexport function compressionName(method) {\n  switch (method) {\n    case Compression.Uncompressed:\n      return 'none'\n    case Compression.RLE:\n      return 'rle'\n    case Compression.ZIP1:\n      return 'zips'\n    case Compression.ZIP16:\n      return 'zip'\n    case Compression.PIZ:\n      return 'piz'\n    case Compression.PXR24:\n      return 'pxr24'\n    case Compression.B44:\n      return 'b44'\n    case Compression.B44A:\n      return 'b44a'\n    default:\n      return 'unknown'\n  }\n}\n","// EXR Header\n// Each layer in an EXR file has a header containing attributes.\n// Headers are written as a sequence of attributes followed by a null byte.\n\nimport { calculateTotalTileCount } from '../block/index.js'\nimport { DEFAULT_TILE_SIZE, LayerType } from '../core/constants.js'\nimport {\n  Blocks,\n  Compression,\n  IntegerBounds,\n  LineOrder,\n  scanLinesPerBlock,\n  Vec2,\n} from '../core/types.js'\nimport {\n  writeBox2i,\n  writeChannelList,\n  writeCompression,\n  writeFloat,\n  writeInt,\n  writeLineOrder,\n  writeString,\n  writeTileDescription,\n  writeType,\n  writeV2f,\n} from './attributes.js'\n\n// Image-level attributes shared across all layers\nexport class ImageAttributes {\n  constructor(displayWindow) {\n    this.displayWindow = displayWindow\n    this.pixelAspect = 1.0\n    this.chromaticities = null\n    this.timeCode = null\n    this.custom = new Map()\n  }\n\n  // Create image attributes with display window matching a size\n  static withSize(size) {\n    return new ImageAttributes(IntegerBounds.fromDimensions(size.x, size.y))\n  }\n}\n\n// Layer-level attributes\nexport class LayerAttributes {\n  constructor() {\n    this.layerName = null\n    this.layerPosition = new Vec2(0, 0)\n    this.screenWindowCenter = new Vec2(0.0, 0.0)\n    this.screenWindowWidth = 1.0\n    this.custom = new Map()\n  }\n\n  // Create layer attributes with a name\n  static named(name) {\n    const attrs = new LayerAttributes()\n    attrs.layerName = name\n    return attrs\n  }\n}\n\n// Encoding settings for a layer\nexport class Encoding {\n  constructor(compression, blocks, lineOrder) {\n    this.compression = compression\n    this.blocks = blocks\n    this.lineOrder = lineOrder\n  }\n\n  // Uncompressed scanlines\n  static UNCOMPRESSED = new Encoding(\n    Compression.Uncompressed,\n    Blocks.ScanLines,\n    LineOrder.Increasing,\n  )\n\n  // RLE compressed tiles - fast encoding, good compression\n  static FAST_LOSSLESS = new Encoding(\n    Compression.RLE,\n    Blocks.Tiles(new Vec2(DEFAULT_TILE_SIZE, DEFAULT_TILE_SIZE)),\n    LineOrder.Unspecified,\n  )\n\n  // ZIP16 compressed scanlines - smaller files\n  static SMALL_LOSSLESS = new Encoding(\n    Compression.ZIP16,\n    Blocks.ScanLines,\n    LineOrder.Increasing,\n  )\n\n  // PIZ compressed tiles - best for noisy images\n  static SMALL_FAST_LOSSLESS = new Encoding(\n    Compression.PIZ,\n    Blocks.Tiles(new Vec2(256, 256)),\n    LineOrder.Unspecified,\n  )\n}\n\n// Header for a single layer\nexport class Header {\n  constructor(layerSize, channels, encoding, sharedAttributes, ownAttributes) {\n    this.layerSize = layerSize\n    this.channels = channels\n    this.encoding = encoding\n    this.sharedAttributes = sharedAttributes\n    this.ownAttributes = ownAttributes\n  }\n\n  // Get the data window bounds\n  get dataWindow() {\n    return new IntegerBounds(this.ownAttributes.layerPosition, this.layerSize)\n  }\n\n  // Calculate the number of blocks/chunks in this layer\n  get chunkCount() {\n    if (this.encoding.blocks.isTiled()) {\n      return calculateTotalTileCount(this.layerSize, this.encoding.blocks)\n    } else {\n      // Scanline blocks\n      const linesPerBlock = scanLinesPerBlock(this.encoding.compression)\n      return Math.ceil(this.layerSize.y / linesPerBlock)\n    }\n  }\n\n  // Get the layer type string\n  get layerType() {\n    return this.encoding.blocks.isTiled() ? LayerType.TILED : LayerType.SCANLINE\n  }\n\n  // Write this header to a writer\n  write(writer, isMultiPart) {\n    // Required attributes\n    writeChannelList(writer, this.channels)\n    writeCompression(writer, this.encoding.compression)\n    writeBox2i(writer, 'dataWindow', this.dataWindow)\n    writeBox2i(writer, 'displayWindow', this.sharedAttributes.displayWindow)\n    writeLineOrder(writer, this.encoding.lineOrder)\n    writeFloat(writer, 'pixelAspectRatio', this.sharedAttributes.pixelAspect)\n    writeV2f(\n      writer,\n      'screenWindowCenter',\n      this.ownAttributes.screenWindowCenter,\n    )\n    writeFloat(\n      writer,\n      'screenWindowWidth',\n      this.ownAttributes.screenWindowWidth,\n    )\n\n    // Tile description (if tiled)\n    if (this.encoding.blocks.isTiled()) {\n      writeTileDescription(\n        writer,\n        this.encoding.blocks.tileSize,\n        this.encoding.blocks.levelMode,\n        this.encoding.blocks.roundingMode,\n      )\n    }\n\n    // Multi-part attributes\n    if (isMultiPart) {\n      // name is required for multi-part files\n      const name = this.ownAttributes.layerName || ''\n      writeString(writer, 'name', name)\n      writeType(writer, this.layerType)\n      writeInt(writer, 'chunkCount', this.chunkCount)\n    }\n\n    // Custom attributes\n    for (const [_name, _value] of this.ownAttributes.custom) {\n      // TODO: Support custom attribute types\n    }\n\n    // End of header (null byte)\n    writer.writeU8(0)\n  }\n}\n\n// Write all headers to a writer\nexport function writeHeaders(writer, headers, isMultiPart) {\n  for (const header of headers) {\n    header.write(writer, isMultiPart)\n  }\n\n  // Multi-part files have an extra null byte after all headers\n  if (isMultiPart) {\n    writer.writeU8(0)\n  }\n}\n","// EXR Attribute Reading\n// Parse attributes from EXR headers.\n// Each attribute has: name (null-terminated), type (null-terminated), size (i32), value (bytes)\n\nimport { AttributeType } from '../core/constants.js'\nimport { IntegerBounds, SampleType, Vec2 } from '../core/types.js'\nimport { ChannelDescription, ChannelList } from './attributes.js'\n\n// Read a single attribute from the reader\n// @param {import('../io/binary-reader.js').BinaryReader} reader\n// @returns {{ name: string, type: string, size: number, value: any } | null} - null if header end\nexport function readAttribute(reader) {\n  // Check for header end (null byte as name)\n  if (reader.peekU8() === 0) {\n    reader.skip(1) // Consume the null byte\n    return null\n  }\n\n  const name = reader.readNullTerminatedString()\n  const type = reader.readNullTerminatedString()\n  const size = reader.readI32()\n\n  // Read raw value bytes\n  const valueBytes = reader.readBytesView(size)\n\n  // Parse value based on type\n  const value = parseAttributeValue(type, valueBytes, size)\n\n  return { name, type, size, value }\n}\n\n// Parse an attribute value based on its type\n// @param {string} type - Attribute type name\n// @param {Uint8Array} bytes - Raw value bytes\n// @param {number} size - Size in bytes\n// @returns {any}\nfunction parseAttributeValue(type, bytes, _size) {\n  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n\n  switch (type) {\n    case AttributeType.BOX2I:\n    case 'box2i':\n      return readBox2iFromView(view)\n\n    case AttributeType.COMPRESSION:\n    case 'compression':\n      return bytes[0]\n\n    case AttributeType.LINE_ORDER:\n    case 'lineOrder':\n      return bytes[0]\n\n    case AttributeType.FLOAT:\n    case 'float':\n      return view.getFloat32(0, true)\n\n    case AttributeType.V2F:\n    case 'v2f':\n      return new Vec2(view.getFloat32(0, true), view.getFloat32(4, true))\n\n    case AttributeType.V2I:\n    case 'v2i':\n      return new Vec2(view.getInt32(0, true), view.getInt32(4, true))\n\n    case AttributeType.STRING:\n    case 'string':\n      return new TextDecoder().decode(bytes)\n\n    case AttributeType.INT:\n    case 'int':\n      return view.getInt32(0, true)\n\n    case AttributeType.TILE_DESC:\n    case 'tiledesc':\n      return readTileDescFromView(view)\n\n    case AttributeType.CHLIST:\n    case 'chlist':\n      return readChannelListFromBytes(bytes)\n\n    case AttributeType.DOUBLE:\n    case 'double':\n      return view.getFloat64(0, true)\n\n    case AttributeType.RATIONAL:\n    case 'rational':\n      return {\n        numerator: view.getInt32(0, true),\n        denominator: view.getUint32(4, true),\n      }\n\n    case AttributeType.M33F:\n    case 'm33f':\n      return readMatrix(view, 9)\n\n    case AttributeType.M44F:\n    case 'm44f':\n      return readMatrix(view, 16)\n\n    case AttributeType.V3F:\n    case 'v3f':\n      return {\n        x: view.getFloat32(0, true),\n        y: view.getFloat32(4, true),\n        z: view.getFloat32(8, true),\n      }\n\n    case AttributeType.V3I:\n    case 'v3i':\n      return {\n        x: view.getInt32(0, true),\n        y: view.getInt32(4, true),\n        z: view.getInt32(8, true),\n      }\n\n    case AttributeType.BOX2F:\n    case 'box2f':\n      return {\n        min: new Vec2(view.getFloat32(0, true), view.getFloat32(4, true)),\n        max: new Vec2(view.getFloat32(8, true), view.getFloat32(12, true)),\n      }\n\n    case AttributeType.CHROMATICITIES:\n    case 'chromaticities':\n      return {\n        redX: view.getFloat32(0, true),\n        redY: view.getFloat32(4, true),\n        greenX: view.getFloat32(8, true),\n        greenY: view.getFloat32(12, true),\n        blueX: view.getFloat32(16, true),\n        blueY: view.getFloat32(20, true),\n        whiteX: view.getFloat32(24, true),\n        whiteY: view.getFloat32(28, true),\n      }\n\n    case AttributeType.TIMECODE:\n    case 'timecode':\n      return {\n        timeAndFlags: view.getUint32(0, true),\n        userData: view.getUint32(4, true),\n      }\n\n    case AttributeType.KEYCODE:\n    case 'keycode':\n      return {\n        filmMfcCode: view.getInt32(0, true),\n        filmType: view.getInt32(4, true),\n        prefix: view.getInt32(8, true),\n        count: view.getInt32(12, true),\n        perfOffset: view.getInt32(16, true),\n        perfsPerFrame: view.getInt32(20, true),\n        perfsPerCount: view.getInt32(24, true),\n      }\n\n    case AttributeType.ENVMAP:\n    case 'envmap':\n      return bytes[0] // 0 = latlong, 1 = cube\n\n    case AttributeType.PREVIEW:\n    case 'preview':\n      return {\n        width: view.getUint32(0, true),\n        height: view.getUint32(4, true),\n        pixels: bytes.slice(8), // RGBA pixels\n      }\n\n    case AttributeType.STRING_VECTOR:\n    case 'stringvector':\n      return readStringVector(bytes)\n\n    default:\n      // Unknown type - return raw bytes\n      return bytes.slice()\n  }\n}\n\n// Read box2i from DataView\n// @param {DataView} view\n// @returns {IntegerBounds}\nfunction readBox2iFromView(view) {\n  const xMin = view.getInt32(0, true)\n  const yMin = view.getInt32(4, true)\n  const xMax = view.getInt32(8, true)\n  const yMax = view.getInt32(12, true)\n\n  // Convert from inclusive max to exclusive (size)\n  return new IntegerBounds(\n    new Vec2(xMin, yMin),\n    new Vec2(xMax - xMin + 1, yMax - yMin + 1),\n  )\n}\n\n// Read tile description from DataView\n// @param {DataView} view\n// @returns {{ tileSize: Vec2, levelMode: number, roundingMode: number }}\nfunction readTileDescFromView(view) {\n  const tileWidth = view.getUint32(0, true)\n  const tileHeight = view.getUint32(4, true)\n  const mode = view.getUint8(8)\n\n  return {\n    tileSize: new Vec2(tileWidth, tileHeight),\n    levelMode: mode & 0x0f,\n    roundingMode: (mode >> 4) & 0x0f,\n  }\n}\n\n// Read channel list from bytes\n// @param {Uint8Array} bytes\n// @returns {ChannelList}\nfunction readChannelListFromBytes(bytes) {\n  const channels = []\n  let offset = 0\n\n  while (offset < bytes.length) {\n    // Check for list terminator\n    if (bytes[offset] === 0) {\n      break\n    }\n\n    // Read channel name (null-terminated)\n    let nameEnd = offset\n    while (nameEnd < bytes.length && bytes[nameEnd] !== 0) {\n      nameEnd++\n    }\n    const name = new TextDecoder().decode(bytes.subarray(offset, nameEnd))\n    offset = nameEnd + 1 // Skip null terminator\n\n    // Read channel attributes\n    const view = new DataView(bytes.buffer, bytes.byteOffset + offset, 16)\n    const pixelTypeId = view.getInt32(0, true)\n    const pLinear = view.getUint8(4)\n    // Skip 3 reserved bytes\n    const xSampling = view.getInt32(8, true)\n    const ySampling = view.getInt32(12, true)\n    offset += 16\n\n    // Convert pixel type ID to sample type\n    let sampleType\n    switch (pixelTypeId) {\n      case 0:\n        sampleType = SampleType.U32\n        break\n      case 1:\n        sampleType = SampleType.F16\n        break\n      case 2:\n        sampleType = SampleType.F32\n        break\n      default:\n        throw new Error(`Unknown pixel type ID: ${pixelTypeId}`)\n    }\n\n    channels.push(\n      new ChannelDescription(\n        name,\n        sampleType,\n        pLinear !== 0,\n        new Vec2(xSampling, ySampling),\n      ),\n    )\n  }\n\n  return new ChannelList(channels)\n}\n\n// Read matrix from DataView\n// @param {DataView} view\n// @param {number} count - Number of floats (9 for 3x3, 16 for 4x4)\n// @returns {Float32Array}\nfunction readMatrix(view, count) {\n  const matrix = new Float32Array(count)\n  for (let i = 0; i < count; i++) {\n    matrix[i] = view.getFloat32(i * 4, true)\n  }\n  return matrix\n}\n\n// Read string vector from bytes\n// @param {Uint8Array} bytes\n// @returns {string[]}\nfunction readStringVector(bytes) {\n  const strings = []\n  let offset = 0\n  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n\n  while (offset < bytes.length) {\n    const length = view.getInt32(offset, true)\n    offset += 4\n    if (length > 0 && offset + length <= bytes.length) {\n      strings.push(\n        new TextDecoder().decode(bytes.subarray(offset, offset + length)),\n      )\n      offset += length\n    } else {\n      break\n    }\n  }\n\n  return strings\n}\n\n// Map pixel type ID to sample type string\n// @param {number} pixelTypeId\n// @returns {string}\nexport function pixelTypeIdToSampleType(pixelTypeId) {\n  switch (pixelTypeId) {\n    case 0:\n      return SampleType.U32\n    case 1:\n      return SampleType.F16\n    case 2:\n      return SampleType.F32\n    default:\n      throw new Error(`Unknown pixel type ID: ${pixelTypeId}`)\n  }\n}\n\n// Map sample type string to pixel type ID\n// @param {string} sampleType\n// @returns {number}\nexport function sampleTypeToPixelTypeId(sampleType) {\n  switch (sampleType) {\n    case SampleType.U32:\n      return 0\n    case SampleType.F16:\n      return 1\n    case SampleType.F32:\n      return 2\n    default:\n      throw new Error(`Unknown sample type: ${sampleType}`)\n  }\n}\n","// EXR Header Reading\n// Parse EXR file headers including magic number, version, and attributes.\n\nimport { EXR_VERSION, MAGIC_NUMBER, VersionFlags } from '../core/constants.js'\nimport {\n  Blocks,\n  Compression,\n  LevelMode,\n  LineOrder,\n  scanLinesPerBlock,\n  Vec2,\n} from '../core/types.js'\nimport { readAttribute } from './read-attributes.js'\n\n// Parsed EXR header containing all attributes\nexport class ParsedHeader {\n  constructor() {\n    // Required attributes\n    this.channels = null\n    this.compression = Compression.Uncompressed\n    this.dataWindow = null\n    this.displayWindow = null\n    this.lineOrder = LineOrder.Increasing\n    this.pixelAspectRatio = 1.0\n    this.screenWindowCenter = new Vec2(0, 0)\n    this.screenWindowWidth = 1.0\n\n    // Optional/tiled attributes\n    this.tiles = null\n\n    // Multi-part attributes\n    this.name = null\n    this.type = null\n    this.chunkCount = null\n\n    // Custom attributes\n    this.customAttributes = new Map()\n  }\n\n  // Get image width\n  get width() {\n    return this.dataWindow?.size.x ?? 0\n  }\n\n  // Get image height\n  get height() {\n    return this.dataWindow?.size.y ?? 0\n  }\n\n  // Check if this is a tiled image\n  get isTiled() {\n    return this.tiles !== null\n  }\n\n  // Get the block storage mode\n  get blocks() {\n    if (this.tiles) {\n      return new Blocks(\n        'tiles',\n        this.tiles.tileSize,\n        this.tiles.levelMode,\n        this.tiles.roundingMode,\n      )\n    }\n    return Blocks.ScanLines\n  }\n\n  // Get scanlines per block for this header's compression\n  get scanLinesPerBlock() {\n    return scanLinesPerBlock(this.compression)\n  }\n\n  // Validate that all required attributes are present\n  // @throws {Error} if missing required attributes\n  validate() {\n    const missing = []\n    if (!this.channels) missing.push('channels')\n    if (this.compression === undefined) missing.push('compression')\n    if (!this.dataWindow) missing.push('dataWindow')\n    if (!this.displayWindow) missing.push('displayWindow')\n    if (this.lineOrder === undefined) missing.push('lineOrder')\n    if (this.pixelAspectRatio === undefined) missing.push('pixelAspectRatio')\n    if (!this.screenWindowCenter) missing.push('screenWindowCenter')\n    if (this.screenWindowWidth === undefined) missing.push('screenWindowWidth')\n\n    if (missing.length > 0) {\n      throw new Error(`Missing required attributes: ${missing.join(', ')}`)\n    }\n  }\n}\n\n// Parsed EXR file metadata\nexport class ParsedMeta {\n  constructor(version, flags, headers) {\n    this.version = version\n    this.flags = flags\n    this.headers = headers\n  }\n\n  get isTiled() {\n    return (this.flags & VersionFlags.TILED) !== 0\n  }\n\n  get hasLongNames() {\n    return (this.flags & VersionFlags.LONG_NAMES) !== 0\n  }\n\n  get isDeepData() {\n    return (this.flags & VersionFlags.DEEP_DATA) !== 0\n  }\n\n  get isMultiPart() {\n    return (this.flags & VersionFlags.MULTI_PART) !== 0\n  }\n\n  get layerCount() {\n    return this.headers.length\n  }\n}\n\n// Read and validate EXR magic number\n// @throws {Error} if magic number is invalid\nexport function readMagicNumber(reader) {\n  const magic = reader.readU32()\n  if (magic !== MAGIC_NUMBER) {\n    throw new Error(\n      `Invalid EXR magic number: 0x${magic.toString(16)} (expected 0x${MAGIC_NUMBER.toString(16)})`,\n    )\n  }\n}\n\n// Read and parse version and flags\nexport function readVersionAndFlags(reader) {\n  const versionAndFlags = reader.readU32()\n  const version = versionAndFlags & 0xff\n  const flags = versionAndFlags & 0xffffff00\n\n  if (version !== EXR_VERSION) {\n    throw new Error(\n      `Unsupported EXR version: ${version} (expected ${EXR_VERSION})`,\n    )\n  }\n\n  // Check for unsupported features\n  if (flags & VersionFlags.DEEP_DATA) {\n    throw new Error('Deep data EXR files are not supported')\n  }\n\n  return { version, flags }\n}\n\n// Read a single header\nexport function readHeader(reader) {\n  const header = new ParsedHeader()\n\n  // Read attributes until null byte\n  while (true) {\n    const attr = readAttribute(reader)\n    if (attr === null) {\n      break // End of header\n    }\n\n    // Store attribute value\n    switch (attr.name) {\n      case 'channels':\n        header.channels = attr.value\n        break\n      case 'compression':\n        header.compression = attr.value\n        break\n      case 'dataWindow':\n        header.dataWindow = attr.value\n        break\n      case 'displayWindow':\n        header.displayWindow = attr.value\n        break\n      case 'lineOrder':\n        header.lineOrder = attr.value\n        break\n      case 'pixelAspectRatio':\n        header.pixelAspectRatio = attr.value\n        break\n      case 'screenWindowCenter':\n        header.screenWindowCenter = attr.value\n        break\n      case 'screenWindowWidth':\n        header.screenWindowWidth = attr.value\n        break\n      case 'tiles':\n        header.tiles = attr.value\n        break\n      case 'name':\n        header.name = attr.value\n        break\n      case 'type':\n        header.type = attr.value\n        break\n      case 'chunkCount':\n        header.chunkCount = attr.value\n        break\n      default:\n        // Store as custom attribute\n        header.customAttributes.set(attr.name, attr.value)\n        break\n    }\n  }\n\n  return header\n}\n\n// Read all headers from an EXR file\nexport function readHeaders(reader, isMultiPart) {\n  const headers = []\n\n  if (isMultiPart) {\n    // Multi-part: read headers until empty header (just a null byte)\n    while (reader.peekU8() !== 0) {\n      headers.push(readHeader(reader))\n    }\n    // Skip the final null byte that terminates the header list\n    reader.skip(1)\n  } else {\n    // Single-part: just one header\n    headers.push(readHeader(reader))\n  }\n\n  // Validate all headers\n  for (const header of headers) {\n    header.validate()\n  }\n\n  return headers\n}\n\n// Read complete EXR metadata (magic, version, headers)\nexport function readMeta(reader) {\n  // Read magic number\n  readMagicNumber(reader)\n\n  // Read version and flags\n  const { version, flags } = readVersionAndFlags(reader)\n\n  // Determine if multi-part\n  const isMultiPart = (flags & VersionFlags.MULTI_PART) !== 0\n\n  // Read headers\n  const headers = readHeaders(reader, isMultiPart)\n\n  return new ParsedMeta(version, flags, headers)\n}\n\n// Calculate the number of chunks in a layer\nexport function calculateChunkCount(header) {\n  if (header.chunkCount !== null) {\n    return header.chunkCount\n  }\n\n  const dataWindow = header.dataWindow\n  if (!dataWindow) {\n    throw new Error('Cannot calculate chunk count without dataWindow')\n  }\n\n  if (header.isTiled) {\n    // Tiled: count tiles across all levels\n    const tiles = header.tiles\n    const { tileSize, levelMode, roundingMode } = tiles\n\n    if (levelMode === LevelMode.Singular) {\n      // Just count tiles at level 0\n      const tilesX = Math.ceil(dataWindow.size.x / tileSize.x)\n      const tilesY = Math.ceil(dataWindow.size.y / tileSize.y)\n      return tilesX * tilesY\n    } else if (levelMode === LevelMode.MipMap) {\n      // Count tiles across all mip levels\n      let total = 0\n      let levelWidth = dataWindow.size.x\n      let levelHeight = dataWindow.size.y\n\n      while (levelWidth >= 1 || levelHeight >= 1) {\n        const tilesX = Math.ceil(Math.max(1, levelWidth) / tileSize.x)\n        const tilesY = Math.ceil(Math.max(1, levelHeight) / tileSize.y)\n        total += tilesX * tilesY\n\n        if (levelWidth === 1 && levelHeight === 1) break\n\n        if (roundingMode === 1) {\n          // Round up\n          levelWidth = Math.ceil(levelWidth / 2)\n          levelHeight = Math.ceil(levelHeight / 2)\n        } else {\n          // Round down\n          levelWidth = Math.floor(levelWidth / 2)\n          levelHeight = Math.floor(levelHeight / 2)\n        }\n        levelWidth = Math.max(1, levelWidth)\n        levelHeight = Math.max(1, levelHeight)\n      }\n      return total\n    } else if (levelMode === LevelMode.RipMap) {\n      // Count tiles across all rip map levels\n      let total = 0\n      let levelWidthX = dataWindow.size.x\n\n      while (levelWidthX >= 1) {\n        let levelHeightY = dataWindow.size.y\n\n        while (levelHeightY >= 1) {\n          const tilesX = Math.ceil(Math.max(1, levelWidthX) / tileSize.x)\n          const tilesY = Math.ceil(Math.max(1, levelHeightY) / tileSize.y)\n          total += tilesX * tilesY\n\n          if (levelHeightY === 1) break\n          if (roundingMode === 1) {\n            levelHeightY = Math.ceil(levelHeightY / 2)\n          } else {\n            levelHeightY = Math.floor(levelHeightY / 2)\n          }\n          levelHeightY = Math.max(1, levelHeightY)\n        }\n\n        if (levelWidthX === 1) break\n        if (roundingMode === 1) {\n          levelWidthX = Math.ceil(levelWidthX / 2)\n        } else {\n          levelWidthX = Math.floor(levelWidthX / 2)\n        }\n        levelWidthX = Math.max(1, levelWidthX)\n      }\n      return total\n    }\n  } else {\n    // Scanline: count blocks\n    const linesPerBlock = header.scanLinesPerBlock\n    return Math.ceil(dataWindow.size.y / linesPerBlock)\n  }\n\n  return 0\n}\n\n// Read offset table for a layer\nexport function readOffsetTable(reader, chunkCount) {\n  const offsets = []\n  for (let i = 0; i < chunkCount; i++) {\n    offsets.push(reader.readU64())\n  }\n  return offsets\n}\n","// Meta module - EXR file metadata, headers, and attributes\n\nimport { EXR_VERSION, MAGIC_NUMBER, VersionFlags } from '../core/constants.js'\nimport { writeHeaders } from './header.js'\n\nexport * from './attributes.js'\nexport * from './header.js'\nexport * from './read-attributes.js'\nexport * from './read-header.js'\n\n// Requirements flags for the file\nexport class Requirements {\n  constructor() {\n    // File format version (1 or 2)\n    this.fileFormatVersion = EXR_VERSION\n    // Single-part tiled image\n    this.isSingleLayerAndTiled = false\n    // Has long names (> 31 chars)\n    this.hasLongNames = false\n    // Has deep data\n    this.hasDeepData = false\n    // Has multiple layers\n    this.hasMultipleLayers = false\n  }\n\n  // Infer requirements from headers\n  static fromHeaders(headers) {\n    const req = new Requirements()\n\n    req.hasMultipleLayers = headers.length > 1\n\n    if (headers.length === 1 && headers[0].encoding.blocks.isTiled()) {\n      req.isSingleLayerAndTiled = true\n    }\n\n    // Check for long names\n    for (const header of headers) {\n      if (\n        header.ownAttributes.layerName &&\n        header.ownAttributes.layerName.length > 31\n      ) {\n        req.hasLongNames = true\n      }\n      for (const channel of header.channels.list) {\n        if (channel.name.length > 31) {\n          req.hasLongNames = true\n        }\n      }\n    }\n\n    return req\n  }\n\n  // Write the requirements to a writer\n  write(writer) {\n    let versionAndFlags = this.fileFormatVersion & 0x0f\n\n    if (this.isSingleLayerAndTiled) {\n      versionAndFlags |= VersionFlags.TILED\n    }\n    if (this.hasLongNames) {\n      versionAndFlags |= VersionFlags.LONG_NAMES\n    }\n    if (this.hasDeepData) {\n      versionAndFlags |= VersionFlags.DEEP_DATA\n    }\n    if (this.hasMultipleLayers) {\n      versionAndFlags |= VersionFlags.MULTI_PART\n    }\n\n    writer.writeU32(versionAndFlags)\n  }\n}\n\n// Complete file metadata\nexport class MetaData {\n  constructor(requirements, headers) {\n    this.requirements = requirements\n    this.headers = headers\n  }\n\n  // Create metadata from headers\n  static fromHeaders(headers) {\n    const requirements = Requirements.fromHeaders(headers)\n    return new MetaData(requirements, headers)\n  }\n\n  // Write the magic number to a writer\n  static writeMagicNumber(writer) {\n    writer.writeU32(MAGIC_NUMBER)\n  }\n\n  // Write complete metadata (magic, version, headers) to a writer\n  write(writer) {\n    MetaData.writeMagicNumber(writer)\n    this.requirements.write(writer)\n    writeHeaders(writer, this.headers, this.requirements.hasMultipleLayers)\n  }\n\n  // Get total chunk count across all headers\n  get totalChunkCount() {\n    return this.headers.reduce((sum, h) => sum + h.chunkCount, 0)\n  }\n}\n\n// Offset table for chunk locations\nexport class OffsetTable {\n  constructor(count) {\n    this.offsets = new Array(count).fill(0n)\n  }\n\n  // Write the offset table to a writer\n  write(writer) {\n    for (const offset of this.offsets) {\n      writer.writeU64(offset)\n    }\n  }\n\n  // Byte size of the offset table\n  get byteSize() {\n    return this.offsets.length * 8\n  }\n}\n","// Layer data structure\n\nimport { Encoding, LayerAttributes } from '../meta/header.js'\n\n// Single layer with channels and encoding\nexport class Layer {\n  constructor(size, attributes, encoding, channelData) {\n    this.size = size\n    this.attributes = attributes\n    this.encoding = encoding\n    this.channelData = channelData\n  }\n\n  // Create a layer\n  static create(\n    size,\n    channelData,\n    encoding = Encoding.FAST_LOSSLESS,\n    attributes = new LayerAttributes(),\n  ) {\n    return new Layer(size, attributes, encoding, channelData)\n  }\n\n  // Create a named layer\n  static named(name, size, channelData, encoding = Encoding.FAST_LOSSLESS) {\n    return new Layer(size, LayerAttributes.named(name), encoding, channelData)\n  }\n}\n","// Image container and write functionality\n\nimport {\n  Chunk,\n  extractBlockData,\n  generateBlockIndices,\n} from '../block/index.js'\nimport { compressBlock } from '../compression/index.js'\nimport {\n  getLevelSize,\n  IntegerBounds,\n  LevelMode,\n  SampleType,\n  Vec2,\n} from '../core/types.js'\nimport { BinaryWriter } from '../io/binary-writer.js'\nimport { floatToHalf, halfToFloat } from '../lib/half.js'\nimport { Encoding, Header, ImageAttributes } from '../meta/header.js'\nimport { MetaData, OffsetTable } from '../meta/index.js'\nimport { AnyChannel, AnyChannels, FlatSamples } from './channels.js'\nimport { Layer } from './layer.js'\n\n// Complete EXR image container\nexport class Image {\n  constructor(attributes, layerData) {\n    this.attributes = attributes\n    this.layerData = layerData\n  }\n\n  // Get layers as array\n  get layers() {\n    return Array.isArray(this.layerData) ? this.layerData : [this.layerData]\n  }\n\n  // Create image from a single layer\n  static fromLayer(layer) {\n    const displayWindow = IntegerBounds.fromDimensions(\n      layer.size.x,\n      layer.size.y,\n    )\n    return new Image(new ImageAttributes(displayWindow), layer)\n  }\n\n  // Create image from channels (convenience method)\n  static fromChannels(size, channels, encoding = Encoding.FAST_LOSSLESS) {\n    const vec = size instanceof Vec2 ? size : new Vec2(size[0], size[1])\n    const layer = Layer.create(vec, channels, encoding)\n    return Image.fromLayer(layer)\n  }\n\n  // Create an empty image and add layers\n  static empty(attributes) {\n    return new Image(attributes, [])\n  }\n\n  // Add a layer to this image\n  withLayer(layer) {\n    const layers = [...this.layers, layer]\n    return new Image(this.attributes, layers)\n  }\n\n  // Start building a write operation\n  write() {\n    return new WriteImageWithOptions(this)\n  }\n}\n\n// Write operation builder\nexport class WriteImageWithOptions {\n  constructor(image) {\n    this._image = image\n    this._parallel = false\n    this._onProgress = null\n  }\n\n  // Enable parallel compression (future feature)\n  parallel() {\n    this._parallel = true\n    return this\n  }\n\n  // Disable parallel compression\n  nonParallel() {\n    this._parallel = false\n    return this\n  }\n\n  // Set progress callback\n  onProgress(callback) {\n    this._onProgress = callback\n    return this\n  }\n\n  // Write to an ArrayBuffer\n  toArrayBuffer() {\n    return writeImage(this._image, this._onProgress)\n  }\n\n  // Write to a Uint8Array\n  toUint8Array() {\n    return new Uint8Array(this.toArrayBuffer())\n  }\n}\n\n// Write an image to an ArrayBuffer\nfunction writeImage(image, onProgress) {\n  const layers = image.layers\n\n  // Build headers\n  const headers = layers.map((layer, _index) => {\n    return new Header(\n      layer.size,\n      layer.channelData.getChannelList(),\n      layer.encoding,\n      image.attributes,\n      layer.attributes,\n    )\n  })\n\n  // Create metadata\n  const metaData = MetaData.fromHeaders(headers)\n  const isMultiPart = metaData.requirements.hasMultipleLayers\n\n  // Create offset tables\n  const offsetTables = headers.map((h) => new OffsetTable(h.chunkCount))\n\n  // Calculate approximate buffer size\n  const estimatedSize = estimateFileSize(headers, layers)\n  const writer = new BinaryWriter(estimatedSize)\n\n  // Write metadata\n  metaData.write(writer)\n\n  // Reserve space for offset tables and record their positions\n  const offsetTablePositions = offsetTables.map((table) => {\n    const pos = writer.getPosition()\n    table.write(writer)\n    return pos\n  })\n\n  // Generate and write all blocks\n  const totalBlocks = headers.reduce((sum, h) => sum + h.chunkCount, 0)\n  let blocksWritten = 0\n\n  for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n    const layer = layers[layerIndex]\n    const _header = headers[layerIndex]\n    const offsetTable = offsetTables[layerIndex]\n\n    // Create mip level manager if needed\n    const hasMipLevels = layer.encoding.blocks.hasLevels()\n    const mipManager = hasMipLevels\n      ? new MipLevelManager(\n          layer.channelData,\n          layer.size,\n          layer.encoding.blocks,\n        )\n      : null\n\n    // Generate block indices for this layer\n    const blockIndices = generateBlockIndices(\n      layerIndex,\n      layer.size,\n      layer.encoding.blocks,\n      layer.encoding.compression,\n    )\n\n    // Write each block\n    for (let blockNum = 0; blockNum < blockIndices.length; blockNum++) {\n      const blockIndex = blockIndices[blockNum]\n\n      // Record offset\n      offsetTable.offsets[blockNum] = BigInt(writer.getPosition())\n\n      // Get channel data for this level\n      let channelData, levelSize\n      if (hasMipLevels) {\n        channelData = mipManager.getChannelsForLevel(blockIndex.levelIndex)\n        levelSize = mipManager.getSizeForLevel(blockIndex.levelIndex)\n      } else {\n        channelData = layer.channelData\n        levelSize = layer.size\n      }\n\n      // Extract block data\n      const blockData = extractBlockData(blockIndex, channelData, levelSize)\n\n      // Build compression context for channel-aware compression\n      const channelList = channelData.getChannelList()\n      const compressionContext = {\n        channels: channelList.list,\n        width: blockIndex.pixelSize.x,\n        height: blockIndex.pixelSize.y,\n      }\n\n      // Apply compression\n      const compressedData = compressBlock(\n        layer.encoding.compression,\n        blockData,\n        compressionContext,\n      )\n\n      // Create and write chunk\n      const chunk = createChunk(\n        layerIndex,\n        blockIndex,\n        compressedData,\n        layer.encoding.blocks,\n      )\n\n      if (isMultiPart) {\n        chunk.writeMultiPart(writer)\n      } else {\n        chunk.writeSinglePart(writer)\n      }\n\n      blocksWritten++\n      if (onProgress) {\n        onProgress(blocksWritten / totalBlocks)\n      }\n    }\n  }\n\n  // Patch offset tables with actual values\n  for (let i = 0; i < offsetTables.length; i++) {\n    const table = offsetTables[i]\n    const pos = offsetTablePositions[i]\n\n    writer.patchAt(pos, (w) => {\n      table.write(w)\n    })\n  }\n\n  return writer.toArrayBuffer()\n}\n\n// Create a chunk from block data\nfunction createChunk(layerIndex, blockIndex, data, blocks) {\n  if (blocks.isTiled()) {\n    // Calculate tile coordinates\n    const tileSize = blocks.tileSize\n    const tileX = Math.floor(blockIndex.pixelPosition.x / tileSize.x)\n    const tileY = Math.floor(blockIndex.pixelPosition.y / tileSize.y)\n\n    return new Chunk(\n      layerIndex,\n      data,\n      true,\n      new Vec2(tileX, tileY),\n      blockIndex.levelIndex,\n      null,\n    )\n  } else {\n    return new Chunk(\n      layerIndex,\n      data,\n      false,\n      null,\n      null,\n      blockIndex.pixelPosition.y,\n    )\n  }\n}\n\n// Estimate file size for buffer allocation\nfunction estimateFileSize(headers, layers) {\n  let size = 1024 // Base overhead for headers\n\n  for (let i = 0; i < headers.length; i++) {\n    const header = headers[i]\n    const layer = layers[i]\n\n    // Offset table\n    size += header.chunkCount * 8\n\n    // Pixel data (uncompressed estimate)\n    const bytesPerPixel = header.channels.bytesPerPixel\n    size += layer.size.x * layer.size.y * bytesPerPixel\n\n    // Chunk headers overhead\n    size += header.chunkCount * 20\n  }\n\n  return size\n}\n\n// Generate downscaled channel data for a mip level\n// Uses box filter (2x2 average) for downscaling\nfunction generateMipLevel(channels, sourceSize, targetSize) {\n  const channelList = channels.getChannelList()\n  const newChannels = []\n\n  for (const channelDesc of channelList.list) {\n    const newData = downsampleChannel(\n      channels,\n      channelDesc.name,\n      sourceSize,\n      targetSize,\n      channelDesc.sampleType,\n    )\n    newChannels.push(\n      new AnyChannel(\n        channelDesc.name,\n        newData,\n        channelDesc.quantizeLinearly,\n        channelDesc.sampling,\n      ),\n    )\n  }\n\n  return new AnyChannels(newChannels)\n}\n\n// Downsample a single channel using box filter\nfunction downsampleChannel(\n  channels,\n  channelName,\n  sourceSize,\n  targetSize,\n  sampleType,\n) {\n  const targetPixels = targetSize.x * targetSize.y\n\n  // Extract entire source channel as Float32 (single allocation)\n  const sourcePixelCount = sourceSize.x * sourceSize.y\n  const sourceValues = channels.getChannelAsFloat32(\n    channelName,\n    halfToFloat,\n    sourcePixelCount,\n  )\n\n  // Downsample using direct array access (no allocations in loop)\n  const values = new Float32Array(targetPixels)\n  const srcWidth = sourceSize.x\n  const srcHeight = sourceSize.y\n\n  for (let ty = 0; ty < targetSize.y; ty++) {\n    const sy0 = ty * 2\n    const sy1 = Math.min(sy0 + 1, srcHeight - 1)\n\n    for (let tx = 0; tx < targetSize.x; tx++) {\n      const sx0 = tx * 2\n      const sx1 = Math.min(sx0 + 1, srcWidth - 1)\n\n      // Sample 4 source pixels and average (unrolled for performance)\n      const v00 = sourceValues[sy0 * srcWidth + sx0]\n      const v01 = sourceValues[sy0 * srcWidth + sx1]\n      const v10 = sourceValues[sy1 * srcWidth + sx0]\n      const v11 = sourceValues[sy1 * srcWidth + sx1]\n\n      values[ty * targetSize.x + tx] = (v00 + v01 + v10 + v11) * 0.25\n    }\n  }\n\n  // Convert to target sample type\n  switch (sampleType) {\n    case SampleType.F16: {\n      const halfData = new Uint16Array(targetPixels)\n      for (let i = 0; i < targetPixels; i++) {\n        halfData[i] = floatToHalf(values[i])\n      }\n      return FlatSamples.f16(halfData)\n    }\n    case SampleType.F32:\n      return FlatSamples.f32(values)\n    case SampleType.U32: {\n      const u32Data = new Uint32Array(targetPixels)\n      for (let i = 0; i < targetPixels; i++) {\n        u32Data[i] = Math.round(values[i]) >>> 0\n      }\n      return FlatSamples.u32(u32Data)\n    }\n    default:\n      return FlatSamples.f32(values)\n  }\n}\n\n// Manages channel data for multiple mip levels\nclass MipLevelManager {\n  constructor(baseChannels, baseSize, blocks) {\n    this.baseChannels = baseChannels\n    this.baseSize = baseSize\n    this.blocks = blocks\n    this.levelData = new Map() // levelKey -> AnyChannels\n    this.levelData.set('0,0', baseChannels)\n  }\n\n  // Get channel data for a specific level\n  getChannelsForLevel(levelIndex) {\n    const key = `${levelIndex.x},${levelIndex.y}`\n\n    if (this.levelData.has(key)) {\n      return this.levelData.get(key)\n    }\n\n    // Generate the level by downscaling from appropriate source\n    const levelSize = getLevelSize(\n      this.baseSize,\n      levelIndex,\n      this.blocks.levelMode,\n      this.blocks.roundingMode,\n    )\n\n    if (this.blocks.levelMode === LevelMode.MipMap) {\n      // For mip maps, each level is derived from the previous level\n      const prevLevel = levelIndex.x - 1\n      const _prevKey = `${prevLevel},${prevLevel}`\n      const prevChannels = this.getChannelsForLevel(\n        new Vec2(prevLevel, prevLevel),\n      )\n      const prevSize = getLevelSize(\n        this.baseSize,\n        new Vec2(prevLevel, prevLevel),\n        this.blocks.levelMode,\n        this.blocks.roundingMode,\n      )\n\n      const newChannels = generateMipLevel(prevChannels, prevSize, levelSize)\n      this.levelData.set(key, newChannels)\n      return newChannels\n    } else if (this.blocks.levelMode === LevelMode.RipMap) {\n      // For rip maps, derive from the nearest available level\n      let sourceChannels, sourceSize\n\n      if (\n        levelIndex.x > 0 &&\n        this.levelData.has(`${levelIndex.x - 1},${levelIndex.y}`)\n      ) {\n        // Derive from level to the left (reduce X)\n        const sourceLevel = new Vec2(levelIndex.x - 1, levelIndex.y)\n        sourceChannels = this.getChannelsForLevel(sourceLevel)\n        sourceSize = getLevelSize(\n          this.baseSize,\n          sourceLevel,\n          this.blocks.levelMode,\n          this.blocks.roundingMode,\n        )\n      } else if (\n        levelIndex.y > 0 &&\n        this.levelData.has(`${levelIndex.x},${levelIndex.y - 1}`)\n      ) {\n        // Derive from level above (reduce Y)\n        const sourceLevel = new Vec2(levelIndex.x, levelIndex.y - 1)\n        sourceChannels = this.getChannelsForLevel(sourceLevel)\n        sourceSize = getLevelSize(\n          this.baseSize,\n          sourceLevel,\n          this.blocks.levelMode,\n          this.blocks.roundingMode,\n        )\n      } else if (levelIndex.x > 0) {\n        // Need to generate from left first\n        const sourceLevel = new Vec2(levelIndex.x - 1, levelIndex.y)\n        sourceChannels = this.getChannelsForLevel(sourceLevel)\n        sourceSize = getLevelSize(\n          this.baseSize,\n          sourceLevel,\n          this.blocks.levelMode,\n          this.blocks.roundingMode,\n        )\n      } else if (levelIndex.y > 0) {\n        // Need to generate from above first\n        const sourceLevel = new Vec2(levelIndex.x, levelIndex.y - 1)\n        sourceChannels = this.getChannelsForLevel(sourceLevel)\n        sourceSize = getLevelSize(\n          this.baseSize,\n          sourceLevel,\n          this.blocks.levelMode,\n          this.blocks.roundingMode,\n        )\n      } else {\n        // Level (0,0) should already be in cache\n        return this.baseChannels\n      }\n\n      const newChannels = generateMipLevel(\n        sourceChannels,\n        sourceSize,\n        levelSize,\n      )\n      this.levelData.set(key, newChannels)\n      return newChannels\n    }\n\n    return this.baseChannels\n  }\n\n  // Get size for a specific level\n  getSizeForLevel(levelIndex) {\n    return getLevelSize(\n      this.baseSize,\n      levelIndex,\n      this.blocks.levelMode,\n      this.blocks.roundingMode,\n    )\n  }\n}\n","// Block Reading - read and decompress pixel blocks from EXR files\n\nimport { decompressBlock } from '../compression/index.js'\nimport { SampleType } from '../core/types.js'\nimport { halfToFloat } from '../lib/half.js'\n\n// Read chunk info for a scanline block\n// @typedef {Object} ScanlineChunkInfo\n// @property {number} yCoordinate - Starting Y coordinate of the block\n// @property {number} dataSize - Size of compressed data in bytes\n// @property {Uint8Array} data - Compressed (or uncompressed) pixel data\n\n// Read chunk info for a tile\n// @typedef {Object} TileChunkInfo\n// @property {number} tileX - Tile X index\n// @property {number} tileY - Tile Y index\n// @property {number} levelX - Mip/rip level X\n// @property {number} levelY - Mip/rip level Y\n// @property {number} dataSize - Size of compressed data in bytes\n// @property {Uint8Array} data - Compressed (or uncompressed) pixel data\n\n// Read a scanline chunk from the reader\n// @param {BinaryReader} reader\n// @returns {ScanlineChunkInfo}\nexport function readScanlineChunk(reader) {\n  const yCoordinate = reader.readI32()\n  const dataSize = reader.readI32()\n  const data = reader.readBytesView(dataSize)\n\n  return { yCoordinate, dataSize, data }\n}\n\n// Read a tile chunk from the reader\n// @param {BinaryReader} reader\n// @returns {TileChunkInfo}\nexport function readTileChunk(reader) {\n  const tileX = reader.readI32()\n  const tileY = reader.readI32()\n  const levelX = reader.readI32()\n  const levelY = reader.readI32()\n  const dataSize = reader.readI32()\n  const data = reader.readBytesView(dataSize)\n\n  return { tileX, tileY, levelX, levelY, dataSize, data }\n}\n\n// Read a chunk from the reader (for multi-part files)\n// @param {BinaryReader} reader\n// @param {boolean} isTiled\n// @returns {{ partNumber: number, chunk: ScanlineChunkInfo | TileChunkInfo }}\nexport function readMultiPartChunk(reader, isTiled) {\n  const partNumber = reader.readU32()\n  const chunk = isTiled ? readTileChunk(reader) : readScanlineChunk(reader)\n  return { partNumber, chunk }\n}\n\n// Build compression context from channel list\n// @param {import('../meta/attributes.js').ChannelList} channelList\n// @param {number} width - Block width in pixels\n// @param {number} height - Block height in scanlines\n// @returns {import('../compression/index.js').CompressionContext}\nexport function buildCompressionContext(channelList, width, height) {\n  return {\n    channels: channelList.list.map((ch) => ({\n      name: ch.name,\n      sampleType: ch.sampleType,\n      bytesPerSample: ch.bytesPerSample,\n    })),\n    width,\n    height,\n  }\n}\n\n// Calculate expected uncompressed size for a block\n// @param {import('../meta/attributes.js').ChannelList} channelList\n// @param {number} width - Block width in pixels\n// @param {number} height - Block height in scanlines\n// @returns {number}\nexport function calculateUncompressedSize(channelList, width, height) {\n  const bytesPerPixel = channelList.bytesPerPixel\n  return width * height * bytesPerPixel\n}\n\n// Decompress a chunk's data\n// @param {Uint8Array} compressedData\n// @param {number} compression - Compression method\n// @param {import('../meta/attributes.js').ChannelList} channelList\n// @param {number} width - Block width\n// @param {number} height - Block height\n// @returns {Uint8Array} - Decompressed data\nexport function decompressChunkData(\n  compressedData,\n  compression,\n  channelList,\n  width,\n  height,\n) {\n  const expectedSize = calculateUncompressedSize(channelList, width, height)\n  const context = buildCompressionContext(channelList, width, height)\n\n  return decompressBlock(compression, compressedData, expectedSize, context)\n}\n\n// Reconstructed pixel data for a block\n// @typedef {Object} ReconstructedPixels\n// @property {Map<string, Float32Array|Uint32Array>} channels - Per-channel pixel data\n// @property {number} width - Block width\n// @property {number} height - Block height\n\n// Reconstruct pixel data from decompressed block data\n// EXR block data format:\n// For each scanline in block:\n//   For each channel (in alphabetical order):\n//     For each pixel in scanline:\n//       Sample bytes (1-4 bytes depending on type)\n// @param {Uint8Array} decompressedData\n// @param {import('../meta/attributes.js').ChannelList} channelList\n// @param {number} width - Block width in pixels\n// @param {number} height - Block height in scanlines\n// @returns {ReconstructedPixels}\nexport function reconstructBlockPixels(\n  decompressedData,\n  channelList,\n  width,\n  height,\n) {\n  const channels = new Map()\n  const view = new DataView(\n    decompressedData.buffer,\n    decompressedData.byteOffset,\n    decompressedData.byteLength,\n  )\n\n  // Initialize channel arrays\n  const pixelCount = width * height\n  for (const ch of channelList.list) {\n    // Always return Float32Array for ease of use (convert F16 on read)\n    if (ch.sampleType === SampleType.U32) {\n      channels.set(ch.name, new Uint32Array(pixelCount))\n    } else {\n      channels.set(ch.name, new Float32Array(pixelCount))\n    }\n  }\n\n  let offset = 0\n\n  // Read data: for each scanline, for each channel, for each pixel\n  for (let y = 0; y < height; y++) {\n    for (const ch of channelList.list) {\n      const channelData = channels.get(ch.name)\n\n      for (let x = 0; x < width; x++) {\n        const pixelIndex = y * width + x\n\n        switch (ch.sampleType) {\n          case SampleType.F16:\n            // Read 16-bit half and convert to float\n            channelData[pixelIndex] = halfToFloat(view.getUint16(offset, true))\n            offset += 2\n            break\n\n          case SampleType.F32:\n            channelData[pixelIndex] = view.getFloat32(offset, true)\n            offset += 4\n            break\n\n          case SampleType.U32:\n            channelData[pixelIndex] = view.getUint32(offset, true)\n            offset += 4\n            break\n        }\n      }\n    }\n  }\n\n  return { channels, width, height }\n}\n\n// Read all blocks for a layer into a single pixel buffer\n// @param {BinaryReader} reader\n// @param {import('../meta/read-header.js').ParsedHeader} header\n// @param {bigint[]} offsets - Chunk offsets\n// @param {boolean} isMultiPart\n// @param {number} layerIndex - Layer index for multi-part files\n// @returns {Map<string, Float32Array|Uint32Array>} - Per-channel pixel data for entire layer\nexport function readLayerPixels(\n  reader,\n  header,\n  offsets,\n  isMultiPart,\n  layerIndex = 0,\n) {\n  const channelList = header.channels\n  const dataWindow = header.dataWindow\n  const width = dataWindow.size.x\n  const height = dataWindow.size.y\n  const compression = header.compression\n  const isTiled = header.isTiled\n  const linesPerBlock = header.scanLinesPerBlock\n\n  // Initialize output channel arrays\n  const pixelCount = width * height\n  const outputChannels = new Map()\n\n  for (const ch of channelList.list) {\n    if (ch.sampleType === SampleType.U32) {\n      outputChannels.set(ch.name, new Uint32Array(pixelCount))\n    } else {\n      outputChannels.set(ch.name, new Float32Array(pixelCount))\n    }\n  }\n\n  // Read each chunk\n  for (const offset of offsets) {\n    reader.setPosition(Number(offset))\n\n    let chunk\n    let partNumber = layerIndex\n\n    if (isMultiPart) {\n      const result = readMultiPartChunk(reader, isTiled)\n      partNumber = result.partNumber\n      chunk = result.chunk\n\n      // Skip chunks from other layers\n      if (partNumber !== layerIndex) {\n        continue\n      }\n    } else {\n      chunk = isTiled ? readTileChunk(reader) : readScanlineChunk(reader)\n    }\n\n    // Calculate block dimensions\n    let blockX, blockY, blockWidth, blockHeight\n\n    if (isTiled) {\n      const tileSize = header.tiles.tileSize\n      blockX = chunk.tileX * tileSize.x\n      blockY = chunk.tileY * tileSize.y\n      blockWidth = Math.min(tileSize.x, width - blockX)\n      blockHeight = Math.min(tileSize.y, height - blockY)\n    } else {\n      blockX = 0\n      blockY = chunk.yCoordinate - dataWindow.position.y\n      blockWidth = width\n      blockHeight = Math.min(linesPerBlock, height - blockY)\n    }\n\n    // Decompress and reconstruct\n    const decompressed = decompressChunkData(\n      chunk.data,\n      compression,\n      channelList,\n      blockWidth,\n      blockHeight,\n    )\n    const pixels = reconstructBlockPixels(\n      decompressed,\n      channelList,\n      blockWidth,\n      blockHeight,\n    )\n\n    // Copy to output arrays\n    for (const [channelName, channelData] of pixels.channels) {\n      const outputData = outputChannels.get(channelName)\n\n      for (let localY = 0; localY < blockHeight; localY++) {\n        const globalY = blockY + localY\n        if (globalY >= height) break\n\n        for (let localX = 0; localX < blockWidth; localX++) {\n          const globalX = blockX + localX\n          if (globalX >= width) break\n\n          const localIndex = localY * blockWidth + localX\n          const globalIndex = globalY * width + globalX\n          outputData[globalIndex] = channelData[localIndex]\n        }\n      }\n    }\n  }\n\n  return outputChannels\n}\n\n// Convert separate channel data to interleaved RGBA\n// @param {Map<string, Float32Array>} channels\n// @param {number} width\n// @param {number} height\n// @returns {Float32Array} - Interleaved RGBA data\nexport function channelsToRgba(channels, width, height) {\n  const pixelCount = width * height\n  const rgba = new Float32Array(pixelCount * 4)\n\n  // Find channels (case-insensitive, try common names)\n  const rChannel = channels.get('R') || channels.get('r') || channels.get('red')\n  const gChannel =\n    channels.get('G') || channels.get('g') || channels.get('green')\n  const bChannel =\n    channels.get('B') || channels.get('b') || channels.get('blue')\n  const aChannel =\n    channels.get('A') || channels.get('a') || channels.get('alpha')\n\n  for (let i = 0; i < pixelCount; i++) {\n    rgba[i * 4 + 0] = rChannel ? rChannel[i] : 0\n    rgba[i * 4 + 1] = gChannel ? gChannel[i] : 0\n    rgba[i * 4 + 2] = bChannel ? bChannel[i] : 0\n    rgba[i * 4 + 3] = aChannel ? aChannel[i] : 1\n  }\n\n  return rgba\n}\n\n// Convert separate channel data to interleaved RGB\n// @param {Map<string, Float32Array>} channels\n// @param {number} width\n// @param {number} height\n// @returns {Float32Array} - Interleaved RGB data\nexport function channelsToRgb(channels, width, height) {\n  const pixelCount = width * height\n  const rgb = new Float32Array(pixelCount * 3)\n\n  const rChannel = channels.get('R') || channels.get('r') || channels.get('red')\n  const gChannel =\n    channels.get('G') || channels.get('g') || channels.get('green')\n  const bChannel =\n    channels.get('B') || channels.get('b') || channels.get('blue')\n\n  for (let i = 0; i < pixelCount; i++) {\n    rgb[i * 3 + 0] = rChannel ? rChannel[i] : 0\n    rgb[i * 3 + 1] = gChannel ? gChannel[i] : 0\n    rgb[i * 3 + 2] = bChannel ? bChannel[i] : 0\n  }\n\n  return rgb\n}\n","// Little-endian binary reader for parsing EXR files\n\nimport { halfToFloat } from '../lib/half.js'\n\n// Binary reader for parsing EXR files\n// All multi-byte values are read in little-endian format\nexport class BinaryReader {\n  constructor(buffer) {\n    if (buffer instanceof Uint8Array) {\n      this.buffer = buffer.buffer\n      this.byteOffset = buffer.byteOffset\n      this.byteLength = buffer.byteLength\n    } else {\n      this.buffer = buffer\n      this.byteOffset = 0\n      this.byteLength = buffer.byteLength\n    }\n    this.view = new DataView(this.buffer, this.byteOffset, this.byteLength)\n    this.u8 = new Uint8Array(this.buffer, this.byteOffset, this.byteLength)\n    this.position = 0\n  }\n\n  // Check if there are enough bytes remaining\n  checkBounds(count) {\n    if (this.position + count > this.byteLength) {\n      throw new RangeError(\n        `Cannot read ${count} bytes at position ${this.position}, only ${this.byteLength - this.position} bytes remaining`,\n      )\n    }\n  }\n\n  // Read unsigned 8-bit integer\n  readU8() {\n    this.checkBounds(1)\n    return this.u8[this.position++]\n  }\n\n  // Read signed 8-bit integer\n  readI8() {\n    this.checkBounds(1)\n    return this.view.getInt8(this.position++)\n  }\n\n  // Read unsigned 16-bit integer (little-endian)\n  readU16() {\n    this.checkBounds(2)\n    const value = this.view.getUint16(this.position, true)\n    this.position += 2\n    return value\n  }\n\n  // Read signed 16-bit integer (little-endian)\n  readI16() {\n    this.checkBounds(2)\n    const value = this.view.getInt16(this.position, true)\n    this.position += 2\n    return value\n  }\n\n  // Read unsigned 32-bit integer (little-endian)\n  readU32() {\n    this.checkBounds(4)\n    const value = this.view.getUint32(this.position, true)\n    this.position += 4\n    return value\n  }\n\n  // Read signed 32-bit integer (little-endian)\n  readI32() {\n    this.checkBounds(4)\n    const value = this.view.getInt32(this.position, true)\n    this.position += 4\n    return value\n  }\n\n  // Read unsigned 64-bit integer (little-endian)\n  readU64() {\n    this.checkBounds(8)\n    const value = this.view.getBigUint64(this.position, true)\n    this.position += 8\n    return value\n  }\n\n  // Read signed 64-bit integer (little-endian)\n  readI64() {\n    this.checkBounds(8)\n    const value = this.view.getBigInt64(this.position, true)\n    this.position += 8\n    return value\n  }\n\n  // Read 32-bit float (little-endian)\n  readF32() {\n    this.checkBounds(4)\n    const value = this.view.getFloat32(this.position, true)\n    this.position += 4\n    return value\n  }\n\n  // Read 64-bit float (little-endian)\n  readF64() {\n    this.checkBounds(8)\n    const value = this.view.getFloat64(this.position, true)\n    this.position += 8\n    return value\n  }\n\n  // Read 16-bit half-precision float (little-endian)\n  readF16() {\n    return halfToFloat(this.readU16())\n  }\n\n  // Read raw bytes\n  readBytes(count) {\n    this.checkBounds(count)\n    const bytes = this.u8.slice(this.position, this.position + count)\n    this.position += count\n    return bytes\n  }\n\n  // Read raw bytes as a view (no copy)\n  readBytesView(count) {\n    this.checkBounds(count)\n    const bytes = this.u8.subarray(this.position, this.position + count)\n    this.position += count\n    return bytes\n  }\n\n  // Read null-terminated string (ASCII/UTF-8)\n  readNullTerminatedString() {\n    const start = this.position\n    while (this.position < this.byteLength && this.u8[this.position] !== 0) {\n      this.position++\n    }\n    const bytes = this.u8.subarray(start, this.position)\n    if (this.position < this.byteLength) {\n      this.position++ // Skip null terminator\n    }\n    return new TextDecoder().decode(bytes)\n  }\n\n  // Read fixed-length string\n  readFixedString(length) {\n    this.checkBounds(length)\n    const bytes = this.u8.subarray(this.position, this.position + length)\n    this.position += length\n    // Find null terminator if present\n    let end = bytes.length\n    for (let i = 0; i < bytes.length; i++) {\n      if (bytes[i] === 0) {\n        end = i\n        break\n      }\n    }\n    return new TextDecoder().decode(bytes.subarray(0, end))\n  }\n\n  // Read string with length prefix (i32)\n  readLengthPrefixedString() {\n    const length = this.readI32()\n    if (length < 0) {\n      throw new Error(`Invalid string length: ${length}`)\n    }\n    this.checkBounds(length)\n    const bytes = this.u8.subarray(this.position, this.position + length)\n    this.position += length\n    return new TextDecoder().decode(bytes)\n  }\n\n  // Peek unsigned 8-bit integer without advancing position\n  peekU8() {\n    this.checkBounds(1)\n    return this.u8[this.position]\n  }\n\n  // Peek unsigned 32-bit integer without advancing position\n  peekU32() {\n    this.checkBounds(4)\n    return this.view.getUint32(this.position, true)\n  }\n\n  // Get current read position\n  getPosition() {\n    return this.position\n  }\n\n  // Set read position\n  setPosition(pos) {\n    if (pos < 0 || pos > this.byteLength) {\n      throw new RangeError(\n        `Position ${pos} out of bounds (0-${this.byteLength})`,\n      )\n    }\n    this.position = pos\n  }\n\n  // Skip bytes\n  skip(count) {\n    this.checkBounds(count)\n    this.position += count\n  }\n\n  // Get number of bytes remaining\n  remaining() {\n    return this.byteLength - this.position\n  }\n\n  // Check if there are more bytes to read\n  hasRemaining() {\n    return this.position < this.byteLength\n  }\n\n  // Check if at end of buffer\n  isAtEnd() {\n    return this.position >= this.byteLength\n  }\n\n  // Create a sub-reader for a portion of the buffer\n  subReader(length) {\n    this.checkBounds(length)\n    const subBuffer = this.u8.subarray(this.position, this.position + length)\n    this.position += length\n    return new BinaryReader(subBuffer)\n  }\n}\n","// High-level EXR Reading API\n// Simple functions and EXRReader class for reading EXR files.\n\nimport {\n  channelsToRgb,\n  channelsToRgba,\n  readLayerPixels,\n} from '../block/read-block.js'\nimport { BinaryReader } from '../io/binary-reader.js'\nimport {\n  calculateChunkCount,\n  readMeta,\n  readOffsetTable,\n} from '../meta/read-header.js'\n\n// Result from decoding an EXR buffer\n// @typedef {Object} EXRDecodeResult\n// @property {number} width - Image width in pixels\n// @property {number} height - Image height in pixels\n// @property {Float32Array} pixels - Interleaved pixel data (RGBA or RGB)\n// @property {import('../core/types.js').IntegerBounds} dataWindow - Data window bounds\n// @property {import('../core/types.js').IntegerBounds} displayWindow - Display window bounds\n// @property {number} compression - Compression method used\n// @property {Map<string, any>} attributes - Custom attributes\n\n// Resolve input to ArrayBuffer\n// @param {ArrayBuffer|Uint8Array} input\n// @returns {ArrayBuffer}\nfunction toArrayBuffer(input) {\n  if (input instanceof Uint8Array) {\n    return input.buffer.slice(\n      input.byteOffset,\n      input.byteOffset + input.byteLength,\n    )\n  }\n  return input\n}\n\n// Decode an EXR buffer and return RGBA pixel data\n// @param {ArrayBuffer|Uint8Array} buffer - EXR file data\n// @returns {EXRDecodeResult}\n// @example\n// const buffer = fs.readFileSync('image.exr');\n// const { width, height, pixels } = decodeRgba(buffer);\nexport function decodeRgba(buffer) {\n  const reader = new EXRReader(toArrayBuffer(buffer))\n\n  const width = reader.getWidth()\n  const height = reader.getHeight()\n  const pixels = reader.readRgba()\n\n  return {\n    width,\n    height,\n    pixels,\n    dataWindow: reader.getDataWindow(),\n    displayWindow: reader.getDisplayWindow(),\n    compression: reader.getCompression(),\n    attributes: reader.getAttributes(),\n  }\n}\n\n// Decode an EXR buffer and return RGB pixel data (no alpha)\n// @param {ArrayBuffer|Uint8Array} buffer - EXR file data\n// @returns {EXRDecodeResult}\nexport function decodeRgb(buffer) {\n  const reader = new EXRReader(toArrayBuffer(buffer))\n\n  const width = reader.getWidth()\n  const height = reader.getHeight()\n  const pixels = reader.readRgb()\n\n  return {\n    width,\n    height,\n    pixels,\n    dataWindow: reader.getDataWindow(),\n    displayWindow: reader.getDisplayWindow(),\n    compression: reader.getCompression(),\n    attributes: reader.getAttributes(),\n  }\n}\n\n// EXR Reader class for detailed access to EXR file contents\nexport class EXRReader {\n  // Create an EXRReader from an ArrayBuffer\n  // @param {ArrayBuffer|Uint8Array} buffer\n  constructor(buffer) {\n    this._reader = new BinaryReader(buffer)\n    this._meta = readMeta(this._reader)\n    this._offsetTables = []\n    this._pixelCache = new Map() // Cache layer pixel data\n\n    // Read offset tables for each header\n    for (let i = 0; i < this._meta.headers.length; i++) {\n      const header = this._meta.headers[i]\n      const chunkCount = calculateChunkCount(header)\n      const offsets = readOffsetTable(this._reader, chunkCount)\n      this._offsetTables.push(offsets)\n    }\n  }\n\n  // Create an EXRReader from an ArrayBuffer\n  // @param {ArrayBuffer} buffer\n  // @returns {EXRReader}\n  static fromArrayBuffer(buffer) {\n    return new EXRReader(buffer)\n  }\n\n  // ==================== Metadata Access ====================\n\n  // Get the number of layers in the file\n  // @returns {number}\n  getLayerCount() {\n    return this._meta.headers.length\n  }\n\n  // Get layer names\n  // @returns {string[]}\n  getLayerNames() {\n    return this._meta.headers.map((h, i) => h.name || `layer${i}`)\n  }\n\n  // Get header for a layer\n  // @param {number} layerIndex\n  // @returns {import('../meta/read-header.js').ParsedHeader}\n  getHeader(layerIndex = 0) {\n    return this._meta.headers[layerIndex]\n  }\n\n  // Get channel names for a layer\n  // @param {number} layerIndex\n  // @returns {string[]}\n  getChannelNames(layerIndex = 0) {\n    const header = this._meta.headers[layerIndex]\n    return header.channels.list.map((ch) => ch.name)\n  }\n\n  // Get image width for a layer\n  // @param {number} layerIndex\n  // @returns {number}\n  getWidth(layerIndex = 0) {\n    return this._meta.headers[layerIndex].width\n  }\n\n  // Get image height for a layer\n  // @param {number} layerIndex\n  // @returns {number}\n  getHeight(layerIndex = 0) {\n    return this._meta.headers[layerIndex].height\n  }\n\n  // Get data window for a layer\n  // @param {number} layerIndex\n  // @returns {import('../core/types.js').IntegerBounds}\n  getDataWindow(layerIndex = 0) {\n    return this._meta.headers[layerIndex].dataWindow\n  }\n\n  // Get display window for a layer\n  // @param {number} layerIndex\n  // @returns {import('../core/types.js').IntegerBounds}\n  getDisplayWindow(layerIndex = 0) {\n    return this._meta.headers[layerIndex].displayWindow\n  }\n\n  // Get compression method for a layer\n  // @param {number} layerIndex\n  // @returns {number}\n  getCompression(layerIndex = 0) {\n    return this._meta.headers[layerIndex].compression\n  }\n\n  // Get custom attributes for a layer\n  // @param {number} layerIndex\n  // @returns {Map<string, any>}\n  getAttributes(layerIndex = 0) {\n    return this._meta.headers[layerIndex].customAttributes\n  }\n\n  // Check if the file is multi-part\n  // @returns {boolean}\n  isMultiPart() {\n    return this._meta.isMultiPart\n  }\n\n  // Check if a layer is tiled\n  // @param {number} layerIndex\n  // @returns {boolean}\n  isTiled(layerIndex = 0) {\n    return this._meta.headers[layerIndex].isTiled\n  }\n\n  // ==================== Pixel Data Reading ====================\n\n  // Read all channels from a layer\n  // @param {number} layerIndex\n  // @returns {Map<string, Float32Array|Uint32Array>}\n  readLayer(layerIndex = 0) {\n    // Check cache\n    const cacheKey = `layer_${layerIndex}`\n    if (this._pixelCache.has(cacheKey)) {\n      return this._pixelCache.get(cacheKey)\n    }\n\n    const header = this._meta.headers[layerIndex]\n    const offsets = this._offsetTables[layerIndex]\n\n    const channels = readLayerPixels(\n      this._reader,\n      header,\n      offsets,\n      this._meta.isMultiPart,\n      layerIndex,\n    )\n\n    // Cache the result\n    this._pixelCache.set(cacheKey, channels)\n    return channels\n  }\n\n  // Read a single channel from a layer\n  // @param {string} channelName\n  // @param {number} layerIndex\n  // @returns {Float32Array|Uint32Array|null}\n  readChannel(channelName, layerIndex = 0) {\n    const channels = this.readLayer(layerIndex)\n    return channels.get(channelName) || null\n  }\n\n  // Read interleaved RGBA data from a layer\n  // @param {number} layerIndex\n  // @returns {Float32Array}\n  readRgba(layerIndex = 0) {\n    const channels = this.readLayer(layerIndex)\n    const header = this._meta.headers[layerIndex]\n    return channelsToRgba(channels, header.width, header.height)\n  }\n\n  // Read interleaved RGB data from a layer\n  // @param {number} layerIndex\n  // @returns {Float32Array}\n  readRgb(layerIndex = 0) {\n    const channels = this.readLayer(layerIndex)\n    const header = this._meta.headers[layerIndex]\n    return channelsToRgb(channels, header.width, header.height)\n  }\n\n  // Clear the pixel cache to free memory\n  clearCache() {\n    this._pixelCache.clear()\n  }\n}\n","// Public API for exrjs\n\nimport {\n  Blocks,\n  IntegerBounds,\n  LineOrder,\n  SampleType,\n  Vec2,\n} from '../core/types.js'\nimport {\n  AnyChannel,\n  AnyChannels,\n  FlatSamples,\n  SpecificChannels,\n} from '../image/channels.js'\nimport { Image } from '../image/image.js'\nimport { Layer } from '../image/layer.js'\nimport { Encoding, ImageAttributes, LayerAttributes } from '../meta/header.js'\n\n// Re-export core types\nexport {\n  Blocks,\n  Compression,\n  IntegerBounds,\n  LineOrder,\n  SampleType,\n  Vec2,\n} from '../core/types.js'\nexport {\n  AnyChannel,\n  AnyChannels,\n  FlatSamples,\n  SpecificChannels,\n} from '../image/channels.js'\nexport { Image } from '../image/image.js'\nexport { Layer } from '../image/layer.js'\nexport { ChannelDescription, ChannelList } from '../meta/attributes.js'\nexport { Encoding, ImageAttributes, LayerAttributes } from '../meta/header.js'\n\n// Reading API\nexport { decodeRgb, decodeRgba, EXRReader } from './read.js'\n\n// Encode an RGBA image to an ArrayBuffer\nexport function encodeRgba(\n  width,\n  height,\n  pixels,\n  encoding = Encoding.FAST_LOSSLESS,\n) {\n  const channels = SpecificChannels.rgba(pixels)\n  const image = Image.fromChannels(new Vec2(width, height), channels, encoding)\n  return image.write().toArrayBuffer()\n}\n\n// Encode an RGB image to an ArrayBuffer\nexport function encodeRgb(\n  width,\n  height,\n  pixels,\n  encoding = Encoding.FAST_LOSSLESS,\n) {\n  const channels = SpecificChannels.rgb(pixels)\n  const image = Image.fromChannels(new Vec2(width, height), channels, encoding)\n  return image.write().toArrayBuffer()\n}\n\n// High-level EXR writer for render passes\nexport class EXRWriter {\n  constructor(width, height) {\n    this.width = width\n    this.height = height\n    this._layers = []\n  }\n\n  // Add a render pass layer\n  addLayer(name, options = {}) {\n    const builder = new LayerBuilder(this, name, options)\n    return builder\n  }\n\n  // Encode the EXR to an ArrayBuffer\n  encode() {\n    const image = this._buildImage()\n    return image.write().toArrayBuffer()\n  }\n\n  // Build the Image object\n  _buildImage() {\n    const size = new Vec2(this.width, this.height)\n    const layers = this._layers.map((builder) => builder._build(size))\n\n    if (layers.length === 1) {\n      return Image.fromLayer(layers[0])\n    }\n\n    const displayWindow = IntegerBounds.fromDimensions(this.width, this.height)\n    return new Image(new ImageAttributes(displayWindow), layers)\n  }\n}\n\n// Builder for a single layer\nclass LayerBuilder {\n  constructor(writer, name, options) {\n    this._writer = writer\n    this._name = name\n    this._encoding = options.encoding || Encoding.FAST_LOSSLESS\n    this._channelDescriptions = []\n    this._pixelSource = null\n    this._isRgba = false\n    this._isRgb = false\n    this._sampleType = SampleType.F32\n  }\n\n  // Set RGBA channels\n  rgba(data) {\n    this._isRgba = true\n    this._pixelSource = data\n    return this\n  }\n\n  // Set RGB channels\n  rgb(data) {\n    this._isRgb = true\n    this._pixelSource = data\n    return this\n  }\n\n  // Add a single channel\n  channel(name, sampleType, data) {\n    this._channelDescriptions.push({ name, sampleType, data })\n    return this\n  }\n\n  // Set compression method\n  compression(compression) {\n    this._encoding = new Encoding(\n      compression,\n      this._encoding.blocks,\n      this._encoding.lineOrder,\n    )\n    return this\n  }\n\n  // Use tiled storage\n  tiled(tileWidth = 64, tileHeight = 64) {\n    this._encoding = new Encoding(\n      this._encoding.compression,\n      Blocks.Tiles(new Vec2(tileWidth, tileHeight)),\n      LineOrder.Unspecified,\n    )\n    return this\n  }\n\n  // Use scanline storage\n  scanlines() {\n    this._encoding = new Encoding(\n      this._encoding.compression,\n      Blocks.ScanLines,\n      LineOrder.Increasing,\n    )\n    return this\n  }\n\n  // Set sample type for RGB/RGBA channels\n  sampleType(sampleType) {\n    this._sampleType = sampleType\n    return this\n  }\n\n  // Complete this layer and return to writer\n  end() {\n    this._writer._layers.push(this)\n    return this._writer\n  }\n\n  // Build the Layer object\n  _build(size) {\n    let channelData\n\n    if (this._isRgba) {\n      channelData = SpecificChannels.rgba(this._pixelSource, this._sampleType)\n    } else if (this._isRgb) {\n      channelData = SpecificChannels.rgb(this._pixelSource, this._sampleType)\n    } else {\n      // Build from individual channels\n      const channels = this._channelDescriptions.map(\n        ({ name, sampleType, data }) => {\n          let samples\n          if (sampleType === SampleType.F16 || data instanceof Uint16Array) {\n            samples = FlatSamples.f16(data)\n          } else if (\n            sampleType === SampleType.U32 ||\n            data instanceof Uint32Array\n          ) {\n            samples = FlatSamples.u32(data)\n          } else {\n            samples = FlatSamples.f32(data)\n          }\n          return new AnyChannel(name, samples)\n        },\n      )\n      channelData = new AnyChannels(channels)\n    }\n\n    return new Layer(\n      size,\n      LayerAttributes.named(this._name),\n      this._encoding,\n      channelData,\n    )\n  }\n}\n"],"names":["zlibSync","unzlibSync"],"mappings":"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"}