@realsee/hdr-toolbox 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/convert.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import { mkdir, readFile, writeFile } from "node:fs/promises";
2
2
  import { dirname, extname } from "node:path";
3
3
  import sharp from "sharp";
4
+ import { defaultAvifQuality, encodeAvifGainMap, encodeAvifHdr10, readAvif, } from "./avif.js";
4
5
  import { readExr, writeExr } from "./exr.js";
5
6
  import { readHdr, writeHdr } from "./hdr.js";
7
+ import { PQ_PEAK_LINEAR } from "./hdr-transfer.js";
6
8
  import { acesSdr, agxSdr, exposureFusion, reinhardSdr } from "./tonemap.js";
7
9
  import { composeUltraHdrBuffers, extractUltraHdrBuffers } from "./ultrahdr.js";
8
- import { normalizeGainMapConfig } from "./xmp.js";
9
10
  /** Resolves a linear HDR format from an explicit option, then the path extension. */
10
11
  export function resolveLinearHdrFormat(explicit, path) {
11
12
  if (explicit)
@@ -17,6 +18,17 @@ export function resolveLinearHdrFormat(explicit, path) {
17
18
  return "hdr";
18
19
  throw new Error(`Unable to infer a linear HDR format from "${path}". Use a .exr or .hdr extension.`);
19
20
  }
21
+ /** Resolves the container family from the file extension. */
22
+ export function resolveContainerKind(path) {
23
+ const extension = extname(path).replace(/^\./, "").toLowerCase();
24
+ if (extension === "exr" || extension === "hdr" || extension === "pic")
25
+ return "linear";
26
+ if (extension === "jpg" || extension === "jpeg")
27
+ return "ultrahdr";
28
+ if (extension === "avif")
29
+ return "avif";
30
+ throw new Error(`Unsupported image extension for "${path}". Use .exr, .hdr, .jpg, .jpeg or .avif.`);
31
+ }
20
32
  function decodeLinearHdr(buffer, format) {
21
33
  return format === "exr" ? readExr(buffer) : readHdr(buffer);
22
34
  }
@@ -33,26 +45,41 @@ async function decodeRgb(jpeg) {
33
45
  .removeAlpha()
34
46
  .raw()
35
47
  .toBuffer({ resolveWithObject: true });
36
- return { data, width: info.width, height: info.height };
48
+ return { width: info.width, height: info.height, data };
49
+ }
50
+ async function encodeRgbJpeg(image, quality) {
51
+ return sharp(image.data, { raw: { width: image.width, height: image.height, channels: 3 } })
52
+ .jpeg({ quality })
53
+ .toBuffer();
54
+ }
55
+ async function readSource(path, kind, inputFormat) {
56
+ const buffer = await readFile(path);
57
+ if (kind === "linear")
58
+ return {
59
+ kind: "linear",
60
+ image: decodeLinearHdr(buffer, resolveLinearHdrFormat(inputFormat, path)),
61
+ };
62
+ if (kind === "ultrahdr") {
63
+ const extracted = extractUltraHdrBuffers(buffer);
64
+ const [sdr, gain] = await Promise.all([decodeRgb(extracted.sdr), decodeRgb(extracted.gainMap)]);
65
+ return { kind: "gain", pair: { sdr, gain, config: extracted.config } };
66
+ }
67
+ const content = await readAvif(buffer);
68
+ if (content.kind === "gainmap")
69
+ return { kind: "gain", pair: content.pair };
70
+ return { kind: "linear", image: content.image };
37
71
  }
38
72
  /**
39
- * Reconstructs a linear-light HDR image from an Ultra HDR JPEG and writes it as
40
- * a linear float EXR or Radiance HDR file (chosen by the output extension).
41
- *
42
- * Applies the Adobe/Android gain map recovery per channel:
43
- * logBoost = lerp(log2(min), log2(max), gain^(1/gamma))
73
+ * Reconstructs linear light from an SDR base and gain map (ISO 21496-1 / Ultra
74
+ * HDR recovery, per channel):
75
+ * logBoost = lerp(log2(min), log2(max), gain^(1/gamma)) * weight
44
76
  * hdr = (sdr_linear + offsetSdr) * 2^logBoost - offsetHdr
45
- * at full display headroom (weight = 1), so the output captures the complete HDR
46
- * intent rather than a headroom-limited rendition.
77
+ * `weight` is the fraction of the content's boost to apply. 1 gives the full HDR
78
+ * intent. Lower values scale highlights down to a display's headroom.
47
79
  */
48
- export async function ultraHdrToLinearHdr(options) {
49
- const format = resolveLinearHdrFormat(options.format, options.output);
50
- const extracted = extractUltraHdrBuffers(await readFile(options.input));
51
- const config = normalizeGainMapConfig(extracted.config);
52
- const sdr = await decodeRgb(extracted.sdr);
53
- const gain = await decodeRgb(extracted.gainMap);
54
- const width = sdr.width;
55
- const height = sdr.height;
80
+ function reconstructLinear(pair, weight) {
81
+ const { sdr, gain, config } = pair;
82
+ const { width, height } = sdr;
56
83
  const output = new Float32Array(width * height * 3);
57
84
  const logMin = Math.log2(config.minContentBoost);
58
85
  const logMax = Math.log2(config.maxContentBoost);
@@ -71,23 +98,30 @@ export async function ultraHdrToLinearHdr(options) {
71
98
  const gainValue = gain.data[gainIndex + channel] / 255;
72
99
  const logRecovery = gainValue ** inverseGamma;
73
100
  const logBoost = logMin + (logMax - logMin) * logRecovery;
74
- const hdr = (sdrLinear + config.offsetSdr) * 2 ** logBoost - config.offsetHdr;
75
- output[sdrIndex + channel] = hdr;
101
+ output[sdrIndex + channel] =
102
+ (sdrLinear + config.offsetSdr) * 2 ** (logBoost * weight) - config.offsetHdr;
76
103
  }
77
104
  }
78
105
  }
79
- await mkdir(dirname(options.output), { recursive: true });
80
- await writeFile(options.output, encodeLinearHdr({ width, height, data: output }, format));
106
+ return { width, height, data: output };
81
107
  }
82
108
  /**
83
- * Builds an Ultra HDR JPEG from a linear float EXR or Radiance HDR file (chosen
84
- * by the input extension). Tone maps the HDR data to an SDR base, derives a gain
85
- * map as the per-pixel quotient between HDR and SDR, and composes the three into
86
- * an Ultra HDR container.
109
+ * Fraction of the content's boost that a PQ display can show. Limits highlights
110
+ * to the 10000-nit PQ peak instead of clipping them.
87
111
  */
88
- export async function linearHdrToUltraHdr(options) {
89
- const format = resolveLinearHdrFormat(options.format, options.input);
90
- const { width, height, data } = decodeLinearHdr(await readFile(options.input), format);
112
+ function pqBoostWeight(config) {
113
+ const logMax = Math.log2(config.maxContentBoost);
114
+ if (logMax <= 0)
115
+ return 1;
116
+ return Math.min(1, Math.log2(Math.min(config.maxContentBoost, PQ_PEAK_LINEAR)) / logMax);
117
+ }
118
+ /**
119
+ * Builds an SDR base and gain map from linear HDR. The base is the tone-mapped
120
+ * image quantised to 8-bit sRGB. The gain map is the HDR-to-base ratio, derived
121
+ * from the quantised base so reconstruction matches what is stored.
122
+ */
123
+ function buildGainMapPair(image, options) {
124
+ const { width, height, data } = image;
91
125
  // Determine the HDR headroom from the brightest linear value so the gain map
92
126
  // range covers the content without clipping.
93
127
  let peak = 1;
@@ -97,9 +131,6 @@ export async function linearHdrToUltraHdr(options) {
97
131
  }
98
132
  const maxContentBoost = Math.max(1.0001, options.maxContentBoost ?? Math.min(peak, 2 ** 14));
99
133
  const logMax = Math.log2(maxContentBoost);
100
- // Build the SDR base with the chosen tone map. Both operators return
101
- // interleaved 8-bit sRGB; the gain map is then derived from this quantised
102
- // base so HDR reconstruction stays consistent with what actually ships.
103
134
  const toneMap = options.toneMap ?? "fusion";
104
135
  const sdrPixels = toneMap === "reinhard"
105
136
  ? reinhardSdr(data, width, height)
@@ -126,16 +157,6 @@ export async function linearHdrToUltraHdr(options) {
126
157
  gainPixels[base + channel] = Math.round(normalized * 255);
127
158
  }
128
159
  }
129
- const sdrQuality = options.sdrQuality ?? 95;
130
- const gainMapQuality = options.gainMapQuality ?? 95;
131
- const [sdrJpeg, gainMapJpeg] = await Promise.all([
132
- sharp(sdrPixels, { raw: { width, height, channels: 3 } })
133
- .jpeg({ quality: sdrQuality })
134
- .toBuffer(),
135
- sharp(gainPixels, { raw: { width, height, channels: 3 } })
136
- .jpeg({ quality: gainMapQuality })
137
- .toBuffer(),
138
- ]);
139
160
  const config = {
140
161
  maxContentBoost,
141
162
  minContentBoost: 1,
@@ -146,9 +167,96 @@ export async function linearHdrToUltraHdr(options) {
146
167
  hdrCapacityMax: maxContentBoost,
147
168
  useBaseColorSpace: true,
148
169
  };
149
- const container = await composeUltraHdrBuffers(sdrJpeg, gainMapJpeg, config);
150
- await mkdir(dirname(options.output), { recursive: true });
151
- await writeFile(options.output, container);
170
+ return {
171
+ sdr: { width, height, data: sdrPixels },
172
+ gain: { width, height, data: gainPixels },
173
+ config,
174
+ };
175
+ }
176
+ function toLinear(source, weight) {
177
+ return source.kind === "linear" ? source.image : reconstructLinear(source.pair, weight);
178
+ }
179
+ function toGainPair(source, options) {
180
+ return source.kind === "gain" ? source.pair : buildGainMapPair(source.image, options);
181
+ }
182
+ async function writeLinear(path, image, format) {
183
+ await mkdir(dirname(path), { recursive: true });
184
+ await writeFile(path, encodeLinearHdr(image, format));
185
+ }
186
+ async function writeUltraHdr(path, pair, options) {
187
+ const [sdrJpeg, gainJpeg] = await Promise.all([
188
+ encodeRgbJpeg(pair.sdr, options.sdrQuality ?? 95),
189
+ encodeRgbJpeg(pair.gain, options.gainMapQuality ?? 95),
190
+ ]);
191
+ const container = await composeUltraHdrBuffers(sdrJpeg, gainJpeg, pair.config);
192
+ await mkdir(dirname(path), { recursive: true });
193
+ await writeFile(path, container);
194
+ }
195
+ /** Checks AVIF output options. Called before any input is read. */
196
+ function validateAvifOptions(options) {
197
+ const quality = options.avifQuality ?? defaultAvifQuality;
198
+ if (!Number.isFinite(quality) || quality < 0 || quality > 100)
199
+ throw new Error("AVIF quality must be between 0 and 100.");
200
+ const mode = options.avifMode ?? "gainmap";
201
+ if (mode !== "gainmap" && mode !== "hdr10")
202
+ throw new Error(`Unsupported AVIF mode "${mode}". Use "gainmap" or "hdr10".`);
203
+ }
204
+ async function writeAvif(path, source, options) {
205
+ const quality = options.avifQuality ?? defaultAvifQuality;
206
+ const mode = options.avifMode ?? "gainmap";
207
+ let encoded;
208
+ if (mode === "gainmap") {
209
+ encoded = await encodeAvifGainMap(toGainPair(source, options), { quality });
210
+ }
211
+ else {
212
+ // Gain maps are reconstructed only up to the PQ peak, so highlights are not clipped.
213
+ const weight = source.kind === "gain" ? pqBoostWeight(source.pair.config) : 1;
214
+ encoded = await encodeAvifHdr10(toLinear(source, weight), { quality });
215
+ }
216
+ await mkdir(dirname(path), { recursive: true });
217
+ await writeFile(path, encoded);
218
+ }
219
+ /**
220
+ * Converts between linear HDR (EXR, Radiance HDR), Ultra HDR JPEG and AVIF. The
221
+ * input and output formats come from their extensions.
222
+ *
223
+ * - Linear HDR input is tone-mapped into an SDR base and gain map when the
224
+ * output needs one. The tone-map options apply to that step.
225
+ * - Gain map input (Ultra HDR JPEG or gain map AVIF) is reconstructed to linear
226
+ * light for linear output. For 10-bit PQ AVIF output it is limited to the PQ
227
+ * peak. For Ultra HDR and gain map AVIF output it is passed through.
228
+ * - 10-bit PQ AVIF input is decoded to linear light.
229
+ */
230
+ export async function convertHdrImage(options) {
231
+ const inputKind = resolveContainerKind(options.input);
232
+ const outputKind = resolveContainerKind(options.output);
233
+ if (outputKind === "avif")
234
+ validateAvifOptions(options);
235
+ const source = await readSource(options.input, inputKind, options.inputFormat);
236
+ if (outputKind === "linear") {
237
+ const format = resolveLinearHdrFormat(options.format, options.output);
238
+ await writeLinear(options.output, toLinear(source, 1), format);
239
+ }
240
+ else if (outputKind === "ultrahdr") {
241
+ await writeUltraHdr(options.output, toGainPair(source, options), options);
242
+ }
243
+ else {
244
+ await writeAvif(options.output, source, options);
245
+ }
246
+ }
247
+ /** Reconstructs a linear-light HDR image from an Ultra HDR JPEG at full headroom. */
248
+ export async function ultraHdrToLinearHdr(options) {
249
+ await convertHdrImage(options);
250
+ }
251
+ /**
252
+ * Builds an Ultra HDR JPEG from a linear float EXR or Radiance HDR file (chosen
253
+ * by the input extension). Tone maps the HDR data to an SDR base, derives a gain
254
+ * map as the per-pixel quotient between HDR and SDR, and composes the three into
255
+ * an Ultra HDR container.
256
+ */
257
+ export async function linearHdrToUltraHdr(options) {
258
+ const { format, ...rest } = options;
259
+ await convertHdrImage({ ...rest, inputFormat: format });
152
260
  }
153
261
  /** @deprecated Use {@link ultraHdrToLinearHdr}; retained for compatibility. */
154
262
  export const ultraHdrToExr = ultraHdrToLinearHdr;
@@ -1 +1 @@
1
- {"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AA8ClD,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CACpC,QAAqC,EACrC,IAAY;IAEZ,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC7D,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,kCAAkC,CACpF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,MAAuB;IAC9D,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,eAAe,CAAC,KAAqB,EAAE,MAAuB;IACrE,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,gEAAgE;AAChE,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;SACrC,YAAY,CAAC,MAAM,CAAC;SACpB,WAAW,EAAE;SACb,GAAG,EAAE;SACL,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAmC;IAC3E,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IACtC,2EAA2E;IAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACnD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;gBACnE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC;gBACvD,MAAM,WAAW,GAAG,SAAS,IAAI,YAAY,CAAC;gBAC9C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,WAAW,CAAC;gBAC1D,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC9E,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAmC;IAC3E,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAEvF,6EAA6E;IAC7E,6CAA6C;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE1C,qEAAqE;IACrE,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC5C,MAAM,SAAS,GACb,OAAO,KAAK,UAAU;QACpB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;QAClC,CAAC,CAAC,OAAO,KAAK,MAAM;YAClB,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;YAC9B,CAAC,CAAC,OAAO,KAAK,KAAK;gBACjB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;gBAC7B,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;oBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,aAAa,EAAE,OAAO,CAAC,aAAa;iBACrC,CAAC,CAAC;IAEb,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC;IAExB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;QACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;YAChE,mEAAmE;YACnE,oDAAoD;YACpD,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;aACtD,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;aAC7B,QAAQ,EAAE;QACb,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;aACvD,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;aACjC,QAAQ,EAAE;KACd,CAAC,CAAC;IAEH,MAAM,MAAM,GAAkB;QAC5B,eAAe;QACf,eAAe,EAAE,CAAC;QAClB,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,eAAe;QAC/B,iBAAiB,EAAE,IAAI;KACxB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7E,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AACjD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC"}
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * HDR transfer functions and colour conversion for AVIF code values.
3
+ *
4
+ * Decoding (PQ or HLG code values to linear light) and encoding (linear light
5
+ * to PQ code values) both use the convention shared with the rest of this
6
+ * package: linear 1.0 is SDR diffuse white, which is 203 nits (BT.2408).
7
+ *
8
+ * Primaries: BT.709 for the linear pipeline, BT.2020 for AVIF PQ output.
9
+ */
10
+ /** SDR diffuse white in nits (BT.2408 reference white). */
11
+ export declare const SDR_WHITE_NITS = 203;
12
+ /** PQ peak in linear units (SDR white = 1), about 49.3. */
13
+ export declare const PQ_PEAK_LINEAR: number;
14
+ /** CICP primaries and transfer codes (ITU-T H.273) handled here. */
15
+ export declare const CICP_PRIMARIES_BT709 = 1;
16
+ export declare const CICP_PRIMARIES_BT2020 = 9;
17
+ export declare const CICP_TRANSFER_SRGB = 13;
18
+ export declare const CICP_TRANSFER_PQ = 16;
19
+ export declare const CICP_TRANSFER_HLG = 18;
20
+ /** CICP matrix code 6 is BT.601, the matrix libavif uses for unspecified YUV. */
21
+ export declare const CICP_MATRIX_BT601 = 6;
22
+ /** PQ EOTF: normalised code in [0,1] to nits. */
23
+ export declare function pqToNits(code: number): number;
24
+ /** PQ inverse EOTF: nits to normalised code in [0,1]. */
25
+ export declare function nitsToPq(nits: number): number;
26
+ /** HLG inverse OETF: signal in [0,1] to scene-linear in [0,1]. */
27
+ export declare function hlgToScene(signal: number): number;
28
+ export interface LinearRgb {
29
+ width: number;
30
+ height: number;
31
+ /** Interleaved linear RGB, BT.709 primaries, SDR white = 1. */
32
+ data: Float32Array;
33
+ }
34
+ /**
35
+ * Convert decoded PQ or HLG code values (interleaved RGBA, as returned by
36
+ * `@jsquash/avif`) to interleaved linear RGB in BT.709 primaries.
37
+ *
38
+ * HLG applies the BT.2100 OOTF for a 1000-nit display, scaled so that diffuse
39
+ * white (signal 0.75) lands on 1.0. The OOTF uses one luminance-derived factor
40
+ * per pixel, so hue is preserved. Out-of-gamut negatives are clipped; highlights
41
+ * above 1.0 are kept.
42
+ */
43
+ export declare function codeValuesToLinear(codes: Uint16Array, width: number, height: number, depth: number, transfer: number, primaries: number): LinearRgb;
44
+ /**
45
+ * Encode linear BT.709 RGB (SDR white = 1) as 10-bit PQ BT.2020 code values in
46
+ * interleaved RGBA. Values above the PQ peak (10000 nits, about 49.3 in linear
47
+ * units) are clipped. Alpha is set to the maximum code.
48
+ */
49
+ export declare function linearToPqCodes(linear: LinearRgb, depth: number): Uint16Array;
50
+ //# sourceMappingURL=hdr-transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hdr-transfer.d.ts","sourceRoot":"","sources":["../src/hdr-transfer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,2DAA2D;AAC3D,eAAO,MAAM,cAAc,MAAM,CAAC;AAGlC,2DAA2D;AAC3D,eAAO,MAAM,cAAc,QAAgC,CAAC;AAK5D,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAYnC,iDAAiD;AACjD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AA0CD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,SAAS,CA8BX;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAoB7E"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * HDR transfer functions and colour conversion for AVIF code values.
3
+ *
4
+ * Decoding (PQ or HLG code values to linear light) and encoding (linear light
5
+ * to PQ code values) both use the convention shared with the rest of this
6
+ * package: linear 1.0 is SDR diffuse white, which is 203 nits (BT.2408).
7
+ *
8
+ * Primaries: BT.709 for the linear pipeline, BT.2020 for AVIF PQ output.
9
+ */
10
+ /** SDR diffuse white in nits (BT.2408 reference white). */
11
+ export const SDR_WHITE_NITS = 203;
12
+ /** Absolute peak of the PQ signal in nits. */
13
+ const PQ_PEAK_NITS = 10000;
14
+ /** PQ peak in linear units (SDR white = 1), about 49.3. */
15
+ export const PQ_PEAK_LINEAR = PQ_PEAK_NITS / SDR_WHITE_NITS;
16
+ /** HLG nominal display peak used by the BT.2100 OOTF. */
17
+ const HLG_PEAK_NITS = 1000;
18
+ const HLG_SYSTEM_GAMMA = 1.2;
19
+ /** CICP primaries and transfer codes (ITU-T H.273) handled here. */
20
+ export const CICP_PRIMARIES_BT709 = 1;
21
+ export const CICP_PRIMARIES_BT2020 = 9;
22
+ export const CICP_TRANSFER_SRGB = 13;
23
+ export const CICP_TRANSFER_PQ = 16;
24
+ export const CICP_TRANSFER_HLG = 18;
25
+ /** CICP matrix code 6 is BT.601, the matrix libavif uses for unspecified YUV. */
26
+ export const CICP_MATRIX_BT601 = 6;
27
+ const PQ_M1 = 2610 / 16384;
28
+ const PQ_M2 = (2523 / 4096) * 128;
29
+ const PQ_C1 = 3424 / 4096;
30
+ const PQ_C2 = (2413 / 4096) * 32;
31
+ const PQ_C3 = (2392 / 4096) * 32;
32
+ const HLG_A = 0.17883277;
33
+ const HLG_B = 1 - 4 * HLG_A;
34
+ const HLG_C = 0.5 - HLG_A * Math.log(4 * HLG_A);
35
+ /** PQ EOTF: normalised code in [0,1] to nits. */
36
+ export function pqToNits(code) {
37
+ const power = Math.pow(Math.max(code, 0), 1 / PQ_M2);
38
+ const numerator = Math.max(power - PQ_C1, 0);
39
+ const denominator = PQ_C2 - PQ_C3 * power;
40
+ return PQ_PEAK_NITS * Math.pow(denominator > 0 ? numerator / denominator : 0, 1 / PQ_M1);
41
+ }
42
+ /** PQ inverse EOTF: nits to normalised code in [0,1]. */
43
+ export function nitsToPq(nits) {
44
+ const scaled = Math.pow(Math.min(Math.max(nits, 0), PQ_PEAK_NITS) / PQ_PEAK_NITS, PQ_M1);
45
+ return Math.pow((PQ_C1 + PQ_C2 * scaled) / (1 + PQ_C3 * scaled), PQ_M2);
46
+ }
47
+ /** HLG inverse OETF: signal in [0,1] to scene-linear in [0,1]. */
48
+ export function hlgToScene(signal) {
49
+ if (signal <= 0.5)
50
+ return (signal * signal) / 3;
51
+ return (Math.exp((signal - HLG_C) / HLG_A) + HLG_B) / 12;
52
+ }
53
+ /** Linear BT.2020 to linear BT.709 (D65). */
54
+ const BT2020_TO_BT709 = [
55
+ [1.6605, -0.5876, -0.0728],
56
+ [-0.1246, 1.1329, -0.0083],
57
+ [-0.0182, -0.1006, 1.1187],
58
+ ];
59
+ /** Linear BT.709 to linear BT.2020 (D65). Inverse of {@link BT2020_TO_BT709}. */
60
+ const BT709_TO_BT2020 = [
61
+ [0.6274, 0.3293, 0.0433],
62
+ [0.0691, 0.9195, 0.0114],
63
+ [0.0164, 0.088, 0.8956],
64
+ ];
65
+ function applyMatrix(matrix, r, g, b) {
66
+ return [
67
+ matrix[0][0] * r + matrix[0][1] * g + matrix[0][2] * b,
68
+ matrix[1][0] * r + matrix[1][1] * g + matrix[1][2] * b,
69
+ matrix[2][0] * r + matrix[2][1] * g + matrix[2][2] * b,
70
+ ];
71
+ }
72
+ /** Lookup table from integer code value to the transfer's linear output. */
73
+ function transferLookup(transfer, depth) {
74
+ const size = 1 << depth;
75
+ const max = size - 1;
76
+ const lut = new Float32Array(size);
77
+ for (let code = 0; code < size; code++) {
78
+ const signal = code / max;
79
+ lut[code] =
80
+ transfer === CICP_TRANSFER_PQ ? pqToNits(signal) / SDR_WHITE_NITS : hlgToScene(signal);
81
+ }
82
+ return lut;
83
+ }
84
+ /**
85
+ * Convert decoded PQ or HLG code values (interleaved RGBA, as returned by
86
+ * `@jsquash/avif`) to interleaved linear RGB in BT.709 primaries.
87
+ *
88
+ * HLG applies the BT.2100 OOTF for a 1000-nit display, scaled so that diffuse
89
+ * white (signal 0.75) lands on 1.0. The OOTF uses one luminance-derived factor
90
+ * per pixel, so hue is preserved. Out-of-gamut negatives are clipped; highlights
91
+ * above 1.0 are kept.
92
+ */
93
+ export function codeValuesToLinear(codes, width, height, depth, transfer, primaries) {
94
+ const lut = transferLookup(transfer, depth);
95
+ const isBt2020 = primaries === CICP_PRIMARIES_BT2020;
96
+ const [kr, kg, kb] = isBt2020 ? [0.2627, 0.678, 0.0593] : [0.2126, 0.7152, 0.0722];
97
+ const hlgScale = HLG_PEAK_NITS / SDR_WHITE_NITS;
98
+ const pixels = width * height;
99
+ const data = new Float32Array(pixels * 3);
100
+ for (let pixel = 0; pixel < pixels; pixel++) {
101
+ const src = pixel * 4;
102
+ let r = lut[codes[src]];
103
+ let g = lut[codes[src + 1]];
104
+ let b = lut[codes[src + 2]];
105
+ if (transfer === CICP_TRANSFER_HLG) {
106
+ const luminance = kr * r + kg * g + kb * b;
107
+ const factor = luminance > 0 ? hlgScale * Math.pow(luminance, HLG_SYSTEM_GAMMA - 1) : 0;
108
+ r *= factor;
109
+ g *= factor;
110
+ b *= factor;
111
+ }
112
+ if (isBt2020)
113
+ [r, g, b] = applyMatrix(BT2020_TO_BT709, r, g, b);
114
+ const dst = pixel * 3;
115
+ data[dst] = Math.max(0, r);
116
+ data[dst + 1] = Math.max(0, g);
117
+ data[dst + 2] = Math.max(0, b);
118
+ }
119
+ return { width, height, data };
120
+ }
121
+ /**
122
+ * Encode linear BT.709 RGB (SDR white = 1) as 10-bit PQ BT.2020 code values in
123
+ * interleaved RGBA. Values above the PQ peak (10000 nits, about 49.3 in linear
124
+ * units) are clipped. Alpha is set to the maximum code.
125
+ */
126
+ export function linearToPqCodes(linear, depth) {
127
+ const max = (1 << depth) - 1;
128
+ const pixels = linear.width * linear.height;
129
+ const out = new Uint16Array(pixels * 4);
130
+ const peak = PQ_PEAK_NITS / SDR_WHITE_NITS;
131
+ for (let pixel = 0; pixel < pixels; pixel++) {
132
+ const src = pixel * 3;
133
+ const [r2020, g2020, b2020] = applyMatrix(BT709_TO_BT2020, clampLinear(linear.data[src], peak), clampLinear(linear.data[src + 1], peak), clampLinear(linear.data[src + 2], peak));
134
+ const dst = pixel * 4;
135
+ out[dst] = Math.round(nitsToPq(r2020 * SDR_WHITE_NITS) * max);
136
+ out[dst + 1] = Math.round(nitsToPq(g2020 * SDR_WHITE_NITS) * max);
137
+ out[dst + 2] = Math.round(nitsToPq(b2020 * SDR_WHITE_NITS) * max);
138
+ out[dst + 3] = max;
139
+ }
140
+ return out;
141
+ }
142
+ function clampLinear(value, peak) {
143
+ if (!(value > 0))
144
+ return 0;
145
+ return value > peak ? peak : value;
146
+ }
147
+ //# sourceMappingURL=hdr-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hdr-transfer.js","sourceRoot":"","sources":["../src/hdr-transfer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
+ export type { AvifContent, GainMapPair, RgbImage } from "./avif.js";
2
+ export { defaultAvifQuality, encodeAvifGainMap, encodeAvifHdr10, readAvif } from "./avif.js";
1
3
  export type { ComposeUltraHdrOptions, ExtractUltraHdrOptions } from "./ultrahdr.js";
2
4
  export { composeUltraHdr, composeUltraHdrBuffers, extractUltraHdr, extractUltraHdrBuffers, } from "./ultrahdr.js";
3
- export type { ExrToUltraHdrOptions, LinearHdrFormat, LinearHdrToUltraHdrOptions, ToneMapOperator, UltraHdrToExrOptions, UltraHdrToLinearHdrOptions, } from "./convert.js";
4
- export { exrToUltraHdr, linearHdrToUltraHdr, resolveLinearHdrFormat, ultraHdrToExr, ultraHdrToLinearHdr, } from "./convert.js";
5
+ export type { AvifMode, ConvertOptions, ContainerKind, ExrToUltraHdrOptions, LinearHdrFormat, LinearHdrToUltraHdrOptions, ToneMapOperator, UltraHdrToExrOptions, UltraHdrToLinearHdrOptions, } from "./convert.js";
6
+ export { convertHdrImage, exrToUltraHdr, linearHdrToUltraHdr, resolveContainerKind, resolveLinearHdrFormat, ultraHdrToExr, ultraHdrToLinearHdr, } from "./convert.js";
5
7
  export type { ExrImage, LinearHdrImage } from "./exr.js";
6
8
  export { readExr, writeExr } from "./exr.js";
7
9
  export { readHdr, writeHdr } from "./hdr.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7F,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
+ export { defaultAvifQuality, encodeAvifGainMap, encodeAvifHdr10, readAvif } from "./avif.js";
1
2
  export { composeUltraHdr, composeUltraHdrBuffers, extractUltraHdr, extractUltraHdrBuffers, } from "./ultrahdr.js";
2
- export { exrToUltraHdr, linearHdrToUltraHdr, resolveLinearHdrFormat, ultraHdrToExr, ultraHdrToLinearHdr, } from "./convert.js";
3
+ export { convertHdrImage, exrToUltraHdr, linearHdrToUltraHdr, resolveContainerKind, resolveLinearHdrFormat, ultraHdrToExr, ultraHdrToLinearHdr, } from "./convert.js";
3
4
  export { readExr, writeExr } from "./exr.js";
4
5
  export { readHdr, writeHdr } from "./hdr.js";
5
6
  export { acesSdr, agxSdr, exposureFusion, reinhardSdr } from "./tonemap.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,sBAAsB,GACvB,MAAM,eAAe,CAAC;AASvB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE7F,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAYvB,OAAO,EACL,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,21 @@
1
1
  {
2
2
  "name": "@realsee/hdr-toolbox",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "Compose, extract, and convert Android Ultra HDR JPEG images",
5
5
  "keywords": [
6
+ "avif",
6
7
  "cli",
7
8
  "exr",
8
9
  "gain map",
9
10
  "gainmap",
10
11
  "hdr",
12
+ "hdr10",
13
+ "iso 21496-1",
14
+ "jpeg",
15
+ "openexr",
16
+ "pq",
17
+ "radiance",
18
+ "tone mapping",
11
19
  "ultra hdr"
12
20
  ],
13
21
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -42,6 +50,7 @@
42
50
  "prepack": "npm run build"
43
51
  },
44
52
  "dependencies": {
53
+ "@jsquash/avif": "^2.1.1",
45
54
  "@realsee/equirect-toolbox": "^1.0.7",
46
55
  "commander": "^15.0.0",
47
56
  "sharp": "^0.35.4"