@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/README.md +56 -29
- package/dist/avif-codec.d.ts +43 -0
- package/dist/avif-codec.d.ts.map +1 -0
- package/dist/avif-codec.js +91 -0
- package/dist/avif-codec.js.map +1 -0
- package/dist/avif-container.d.ts +83 -0
- package/dist/avif-container.d.ts.map +1 -0
- package/dist/avif-container.js +368 -0
- package/dist/avif-container.js.map +1 -0
- package/dist/avif-gainmap.d.ts +31 -0
- package/dist/avif-gainmap.d.ts.map +1 -0
- package/dist/avif-gainmap.js +124 -0
- package/dist/avif-gainmap.js.map +1 -0
- package/dist/avif.d.ts +50 -0
- package/dist/avif.d.ts.map +1 -0
- package/dist/avif.js +206 -0
- package/dist/avif.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +32 -37
- package/dist/cli.js.map +1 -1
- package/dist/convert.d.ts +36 -17
- package/dist/convert.d.ts.map +1 -1
- package/dist/convert.js +152 -44
- package/dist/convert.js.map +1 -1
- package/dist/hdr-transfer.d.ts +50 -0
- package/dist/hdr-transfer.d.ts.map +1 -0
- package/dist/hdr-transfer.js +147 -0
- package/dist/hdr-transfer.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +10 -1
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 {
|
|
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
|
|
40
|
-
*
|
|
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
|
-
*
|
|
46
|
-
* intent
|
|
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
|
-
|
|
49
|
-
const
|
|
50
|
-
const
|
|
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
|
-
|
|
75
|
-
|
|
101
|
+
output[sdrIndex + channel] =
|
|
102
|
+
(sdrLinear + config.offsetSdr) * 2 ** (logBoost * weight) - config.offsetHdr;
|
|
76
103
|
}
|
|
77
104
|
}
|
|
78
105
|
}
|
|
79
|
-
|
|
80
|
-
await writeFile(options.output, encodeLinearHdr({ width, height, data: output }, format));
|
|
106
|
+
return { width, height, data: output };
|
|
81
107
|
}
|
|
82
108
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
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
|
-
|
|
89
|
-
const
|
|
90
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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;
|
package/dist/convert.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
+
"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"
|