@realsee/hdr-toolbox 1.1.2 → 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.
@@ -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.2",
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"