oidn-webgpu 0.0.0-stage → 0.6.0

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.
Files changed (95) hide show
  1. package/CHANGELOG.md +182 -0
  2. package/LICENSE +21 -0
  3. package/README.md +89 -2
  4. package/dist/oidn.js +6140 -0
  5. package/dist/oidn.umd.cjs +1513 -0
  6. package/lib/UNet.d.ts +161 -0
  7. package/lib/UNet.js +536 -0
  8. package/lib/UNet.js.map +1 -0
  9. package/lib/WGPUComputePass.d.ts +62 -0
  10. package/lib/WGPUComputePass.js +278 -0
  11. package/lib/WGPUComputePass.js.map +1 -0
  12. package/lib/WGPUFullQuadPass.d.ts +50 -0
  13. package/lib/WGPUFullQuadPass.js +261 -0
  14. package/lib/WGPUFullQuadPass.js.map +1 -0
  15. package/lib/backend.d.ts +1 -0
  16. package/lib/backend.js +39 -0
  17. package/lib/backend.js.map +1 -0
  18. package/lib/finalRgbShader.d.ts +13 -0
  19. package/lib/finalRgbShader.js +160 -0
  20. package/lib/finalRgbShader.js.map +1 -0
  21. package/lib/gpuTypes.d.ts +158 -0
  22. package/lib/gpuTypes.js +27 -0
  23. package/lib/gpuTypes.js.map +1 -0
  24. package/lib/graphOptimizer.d.ts +54 -0
  25. package/lib/graphOptimizer.js +216 -0
  26. package/lib/graphOptimizer.js.map +1 -0
  27. package/lib/hdr.d.ts +31 -0
  28. package/lib/hdr.js +340 -0
  29. package/lib/hdr.js.map +1 -0
  30. package/lib/hdrTransfer.d.ts +22 -0
  31. package/lib/hdrTransfer.js +128 -0
  32. package/lib/hdrTransfer.js.map +1 -0
  33. package/lib/main.d.ts +57 -0
  34. package/lib/main.js +24 -0
  35. package/lib/main.js.map +1 -0
  36. package/lib/modelSpec.d.ts +80 -0
  37. package/lib/modelSpec.js +270 -0
  38. package/lib/modelSpec.js.map +1 -0
  39. package/lib/native/denoise.d.ts +25 -0
  40. package/lib/native/denoise.js +223 -0
  41. package/lib/native/denoise.js.map +1 -0
  42. package/lib/native/program.d.ts +53 -0
  43. package/lib/native/program.js +310 -0
  44. package/lib/native/program.js.map +1 -0
  45. package/lib/native/recordingDevice.d.ts +125 -0
  46. package/lib/native/recordingDevice.js +247 -0
  47. package/lib/native/recordingDevice.js.map +1 -0
  48. package/lib/nativeUNet.d.ts +25 -0
  49. package/lib/nativeUNet.js +184 -0
  50. package/lib/nativeUNet.js.map +1 -0
  51. package/lib/nativeUNetCore.d.ts +202 -0
  52. package/lib/nativeUNetCore.js +2945 -0
  53. package/lib/nativeUNetCore.js.map +1 -0
  54. package/lib/process.d.ts +37 -0
  55. package/lib/process.js +328 -0
  56. package/lib/process.js.map +1 -0
  57. package/lib/resourceTracker.d.ts +26 -0
  58. package/lib/resourceTracker.js +65 -0
  59. package/lib/resourceTracker.js.map +1 -0
  60. package/lib/sanitize.d.ts +15 -0
  61. package/lib/sanitize.js +28 -0
  62. package/lib/sanitize.js.map +1 -0
  63. package/lib/tileScheduler.d.ts +61 -0
  64. package/lib/tileScheduler.js +199 -0
  65. package/lib/tileScheduler.js.map +1 -0
  66. package/lib/tza.d.ts +15 -0
  67. package/lib/tza.js +114 -0
  68. package/lib/tza.js.map +1 -0
  69. package/lib/webnnUNet.d.ts +52 -0
  70. package/lib/webnnUNet.js +535 -0
  71. package/lib/webnnUNet.js.map +1 -0
  72. package/package.json +43 -4
  73. package/src/UNet.ts +861 -0
  74. package/src/WGPUComputePass.ts +382 -0
  75. package/src/WGPUFullQuadPass.ts +348 -0
  76. package/src/backend.ts +42 -0
  77. package/src/finalRgbShader.ts +186 -0
  78. package/src/gpuTypes.ts +179 -0
  79. package/src/graphOptimizer.ts +301 -0
  80. package/src/hdr.ts +398 -0
  81. package/src/hdrTransfer.ts +169 -0
  82. package/src/main.ts +126 -0
  83. package/src/modelSpec.ts +414 -0
  84. package/src/native/core-profile.json +40 -0
  85. package/src/native/denoise.ts +268 -0
  86. package/src/native/program.ts +326 -0
  87. package/src/native/recordingDevice.ts +341 -0
  88. package/src/nativeUNet.ts +269 -0
  89. package/src/nativeUNetCore.ts +3735 -0
  90. package/src/process.ts +368 -0
  91. package/src/resourceTracker.ts +94 -0
  92. package/src/sanitize.ts +29 -0
  93. package/src/tileScheduler.ts +330 -0
  94. package/src/tza.ts +136 -0
  95. package/src/webnnUNet.ts +812 -0
package/lib/hdr.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hdr.js","sourceRoot":"","sources":["../src/hdr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /** HDR transfer functions used by the OIDN input and output processing passes. */
2
+ export type HDRTransfer = 'pu' | 'log';
3
+ export declare function hdrTransferFuncCPU({ data, channels, inputScale, transfer }: {
4
+ data: Float32Array;
5
+ channels: number;
6
+ inputScale: number;
7
+ transfer?: HDRTransfer;
8
+ }): Float32Array<ArrayBuffer>;
9
+ export declare function hdrTransferFuncInverseCPU({ data, channels, inputScale, transfer }: {
10
+ data: Float32Array;
11
+ channels: number;
12
+ inputScale: number;
13
+ transfer?: HDRTransfer;
14
+ }): Float32Array<ArrayBuffer>;
15
+ export declare function avgLogLum({ data, channels }: {
16
+ data: Float32Array;
17
+ channels: number;
18
+ }): number;
19
+ /** WGSL declarations of `fn HDRForward(y: f32) -> f32` for the input pass. */
20
+ export declare function hdrForwardWGSL(transfer: HDRTransfer): string;
21
+ /** WGSL declarations of `fn HDRInverse(x: f32) -> f32` for the output pass. */
22
+ export declare function hdrInverseWGSL(transfer: HDRTransfer): string;
@@ -0,0 +1,128 @@
1
+ import { FLT_MAX, sanitize } from './sanitize.js';
2
+ const a = 1.41283765e3;
3
+ const b = 1.64593172;
4
+ const c = 4.31384981e-1;
5
+ const d = -2.94139609e-3;
6
+ const e = 1.92653254e-1;
7
+ const f = 6.26026094e-3;
8
+ const g = 9.98620152e-1;
9
+ const y0 = 1.5794576e-6;
10
+ const y1 = 3.22087631e-2;
11
+ const x0 = 2.23151711e-3;
12
+ const x1 = 3.70974749e-1;
13
+ const yMax = 65504;
14
+ const puXMax = puForward(yMax);
15
+ const puNormScale = 1 / puXMax;
16
+ const puRcpNormScale = puXMax;
17
+ const logXMax = Math.log(yMax + 1);
18
+ const logNormScale = 1 / logXMax;
19
+ function puForward(y) {
20
+ if (y <= y0)
21
+ return a * y;
22
+ if (y <= y1)
23
+ return b * Math.pow(y, c) + d;
24
+ return e * Math.log(y + f) + g;
25
+ }
26
+ function puInverse(x) {
27
+ if (x <= x0)
28
+ return x / a;
29
+ if (x <= x1)
30
+ return Math.pow((x - d) / b, 1 / c);
31
+ return Math.exp((x - g) / e) - f;
32
+ }
33
+ function forward(y, transfer) {
34
+ return transfer === 'log'
35
+ ? Math.log(y + 1) * logNormScale
36
+ : puForward(y) * puNormScale;
37
+ }
38
+ function inverse(x, transfer) {
39
+ return transfer === 'log'
40
+ ? Math.exp(x * logXMax) - 1
41
+ : puInverse(x * puRcpNormScale);
42
+ }
43
+ export function hdrTransferFuncCPU({ data, channels, inputScale, transfer = 'pu' }) {
44
+ const newData = new Float32Array(data);
45
+ for (let i = 0; i < newData.length; i += channels) {
46
+ for (let channel = 0; channel < 3; channel++) {
47
+ newData[i + channel] = forward(sanitize(newData[i + channel] * inputScale, 0, FLT_MAX), transfer);
48
+ }
49
+ }
50
+ return newData;
51
+ }
52
+ export function hdrTransferFuncInverseCPU({ data, channels, inputScale, transfer = 'pu' }) {
53
+ const newData = new Float32Array(data);
54
+ const outputScale = 1 / inputScale;
55
+ for (let i = 0; i < newData.length; i += channels) {
56
+ for (let channel = 0; channel < 3; channel++) {
57
+ // The network output may contain negative values or NaNs.
58
+ newData[i + channel] = inverse(sanitize(newData[i + channel], 0, FLT_MAX), transfer) * outputScale;
59
+ }
60
+ }
61
+ return newData;
62
+ }
63
+ // TODO put in gpu
64
+ export function avgLogLum({ data, channels }) {
65
+ let totalLuminance = 0;
66
+ for (let i = 0; i < data.length; i += channels) {
67
+ const r = sanitize(data[i], 0, FLT_MAX);
68
+ const g = sanitize(data[i + 1], 0, FLT_MAX);
69
+ const b = sanitize(data[i + 2], 0, FLT_MAX);
70
+ const lum = 0.212671 * r + 0.71516 * g + 0.072169 * b;
71
+ // TODO performance
72
+ // https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/devices/cpu/cpu_autoexposure.cpp#L43
73
+ totalLuminance += Math.log2(lum + 0.0001);
74
+ }
75
+ const numPixels = data.length / channels;
76
+ const averageLuminance = totalLuminance / numPixels;
77
+ const key = 0.18;
78
+ // https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/training/color.py#L173
79
+ return key / Math.pow(2, averageLuminance);
80
+ }
81
+ const transferConstantsWGSL = `
82
+ const a = ${a};
83
+ const b = ${b};
84
+ const c = ${c};
85
+ const d = ${d};
86
+ const e = ${e};
87
+ const f = ${f};
88
+ const g = ${g};
89
+ const y0 =${y0};
90
+ const y1 =${y1};
91
+ const x0 =${x0};
92
+ const x1 =${x1};
93
+
94
+ const normScale = ${puNormScale};
95
+ const rcpNormScale = ${puRcpNormScale};
96
+ `;
97
+ /** WGSL declarations of `fn HDRForward(y: f32) -> f32` for the input pass. */
98
+ export function hdrForwardWGSL(transfer) {
99
+ const forwardCode = transfer === 'log'
100
+ ? `fn HDRForward(y: f32) -> f32 { return log(y + 1.0) * logNormScale; }`
101
+ : `fn HDRForward(y: f32) -> f32 {
102
+ if (y <= y0) { return a * y * normScale; }
103
+ else if (y <= y1) { return (b * pow(y, c) + d) * normScale; }
104
+ else { return (e * log(y + f) + g) * normScale; }
105
+ }`;
106
+ return /* wgsl */ `
107
+ ${transferConstantsWGSL}
108
+ const logXMax = ${logXMax};
109
+ const logNormScale = ${logNormScale};
110
+ ${forwardCode}`;
111
+ }
112
+ /** WGSL declarations of `fn HDRInverse(x: f32) -> f32` for the output pass. */
113
+ export function hdrInverseWGSL(transfer) {
114
+ const inverseCode = transfer === 'log'
115
+ ? `fn HDRInverse(x: f32) -> f32 { return exp(x * logXMax) - 1.0; }`
116
+ : `fn HDRInverse(x: f32) -> f32 {
117
+ let y = x * rcpNormScale;
118
+ if (y <= x0) { return y / a; }
119
+ else if (y <= x1) { return pow((y - d) / b, 1 / c); }
120
+ else { return exp((y - g) / e) - f; }
121
+ }`;
122
+ return /* wgsl */ `
123
+ ${transferConstantsWGSL}
124
+ const logXMax = ${logXMax};
125
+ ${inverseCode}
126
+ `;
127
+ }
128
+ //# sourceMappingURL=hdrTransfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hdrTransfer.js","sourceRoot":"","sources":["../src/hdrTransfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKlD,MAAM,CAAC,GAAG,YAAY,CAAC;AACvB,MAAM,CAAC,GAAG,UAAU,CAAC;AACrB,MAAM,CAAC,GAAG,aAAa,CAAC;AACxB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;AACzB,MAAM,CAAC,GAAG,aAAa,CAAC;AACxB,MAAM,CAAC,GAAG,aAAa,CAAC;AACxB,MAAM,CAAC,GAAG,aAAa,CAAC;AACxB,MAAM,EAAE,GAAG,YAAY,CAAC;AACxB,MAAM,EAAE,GAAG,aAAa,CAAC;AACzB,MAAM,EAAE,GAAG,aAAa,CAAC;AACzB,MAAM,EAAE,GAAG,aAAa,CAAC;AACzB,MAAM,IAAI,GAAG,KAAK,CAAC;AACnB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/B,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC;AAC/B,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AACnC,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC;AAEjC,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,QAAqB;IAC/C,OAAO,QAAQ,KAAK,KAAK;QACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY;QAChC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,QAAqB;IAC/C,OAAO,QAAQ,KAAK,KAAK;QACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;QAC3B,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,QAAQ,GAAG,IAAI,EAMhB;IACC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;QAClD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,OAAO,CAAC,EACvD,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EACxC,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,QAAQ,GAAG,IAAI,EAMhB;IACC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;QAClD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7C,0DAA0D;YAC1D,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC;QACrG,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,QAAQ,EAIT;IACC,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QAEtD,mBAAmB;QACnB,uHAAuH;QACvH,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzC,MAAM,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC;IAEjB,yGAAyG;IACzG,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,qBAAqB,GAAG;YAClB,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;;oBAEM,WAAW;uBACR,cAAc;CACpC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,QAAqB;IAClD,MAAM,WAAW,GAAG,QAAQ,KAAK,KAAK;QACpC,CAAC,CAAC,sEAAsE;QACxE,CAAC,CAAC;;;;EAIJ,CAAC;IACD,OAAO,UAAU,CAAC;EAClB,qBAAqB;kBACL,OAAO;uBACF,YAAY;EACjC,WAAW,EAAE,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,QAAqB;IAClD,MAAM,WAAW,GAAG,QAAQ,KAAK,KAAK;QACpC,CAAC,CAAC,iEAAiE;QACnE,CAAC,CAAC;;;;;EAKJ,CAAC;IACD,OAAO,UAAU,CAAC;EAClB,qBAAqB;kBACL,OAAO;EACvB,WAAW;CACZ,CAAC;AACF,CAAC"}
package/lib/main.d.ts ADDED
@@ -0,0 +1,57 @@
1
+ import { parseTZA } from './tza';
2
+ import UNet from './UNet';
3
+ import type { UNetEngineSetting } from './UNet';
4
+ import type { DynamicTileSetting } from './tileScheduler';
5
+ import type { UNetModelSpec } from './modelSpec';
6
+ import type { NativeSubgroupMatrixOptions, NativeUNetGemmOptions, NativeUNetKernelSetting, NativeUNetPrecisionSetting } from './nativeUNet';
7
+ import type { HDRTransfer } from './process';
8
+ export { parseTZA, UNet };
9
+ export { planTileGrid } from './tileScheduler';
10
+ export type { DynamicTileOptions, DynamicTileSetting, PlannedTile, TilePlan, TileRect } from './tileScheduler';
11
+ export { detectUNetModelSpec, OIDN_UNET_LARGE_SPEC, OIDN_UNET_SMALL_SPEC, validateUNetModel } from './modelSpec';
12
+ export type { ModelNodeSpec, UNetModelGraph, UNetModelSpec, ValidatedUNetModel } from './modelSpec';
13
+ export { optimizeModelGraph, planModelExecution } from './graphOptimizer';
14
+ export type { ExecutableModelNode, GraphOptimizationOptions, ModelExecutionPlan, ModelValueShape, OptimizedModelGraph } from './graphOptimizer';
15
+ export { NativeUNetExecutor, resolveNativeUNetPrecision, selectSubgroupMatrixConfig } from './nativeUNet';
16
+ export type { NativeSubgroupMatrixConfig, NativeSubgroupMatrixOptions, NativeUNetGemmWorkgroup, NativeUNetGemmOptions, NativeUNetExecutionProfile, NativeUNetKernel, NativeUNetKernelSetting, NativeUNetLayerTiming, NativeUNetOptions, NativeUNetPrecision, NativeUNetPrecisionSetting } from './nativeUNet';
17
+ export interface UNetOptions {
18
+ aux?: boolean;
19
+ hdr?: boolean;
20
+ /** HDR transfer function expected by the trained model. Defaults to PU. */
21
+ hdrTransfer?: HDRTransfer;
22
+ /** Hard upper bound for an output tile edge. Defaults to 512. */
23
+ maxTileSize?: number;
24
+ /** Adaptive GPU-time-based tile sizing. Enabled by default. */
25
+ dynamicTile?: DynamicTileSetting;
26
+ /** `auto` uses native WGSL; `webnn` opts into the WebNN backend. */
27
+ engine?: UNetEngineSetting;
28
+ /** `auto` selects FP16 when shader-f16 was enabled on the GPUDevice. */
29
+ precision?: NativeUNetPrecisionSetting;
30
+ /** `auto` uses implicit GEMM for FP16/FP32 convolutions, except the direct output layer. */
31
+ kernel?: NativeUNetKernelSetting;
32
+ /**
33
+ * Experimental implicit-GEMM tuning for native WGSL execution. These knobs
34
+ * exist for benchmarking and may change or be removed in any release.
35
+ * @experimental
36
+ */
37
+ gemm?: NativeUNetGemmOptions;
38
+ /**
39
+ * Experimental `kernel: 'subgroup-matrix'` tuning. The kernel needs a
40
+ * GPUDevice created with `subgroups` and `chromium-experimental-subgroup-matrix`.
41
+ * @experimental
42
+ */
43
+ subgroupMatrix?: NativeSubgroupMatrixOptions;
44
+ /** Versioned topology descriptor for future/custom OIDN TZA models. */
45
+ modelSpec?: UNetModelSpec;
46
+ }
47
+ export type { UNetEngineSetting, UNetExecutionStats } from './UNet';
48
+ export type { HDRTransfer } from './process';
49
+ export { WebNNUNetExecutor } from './webnnUNet';
50
+ export type { WebNNRuntimeSupport, WebNNUNetOptions } from './webnnUNet';
51
+ export type { OIDNResourceKind, OIDNResourceSnapshot, OIDNResourceStats } from './resourceTracker';
52
+ export declare function initUNetFromBuffer(tzaBuffer: ArrayBuffer, backendParams?: {
53
+ device: GPUDevice;
54
+ }, opts?: UNetOptions): Promise<UNet>;
55
+ export declare function initUNetFromURL(modelPath: string, backendParams?: {
56
+ device: GPUDevice;
57
+ }, opts?: UNetOptions): Promise<UNet>;
package/lib/main.js ADDED
@@ -0,0 +1,24 @@
1
+ import { parseTZA } from './tza';
2
+ import UNet from './UNet';
3
+ import { initWebGPUBackend } from './backend';
4
+ export { parseTZA, UNet };
5
+ export { planTileGrid } from './tileScheduler';
6
+ export { detectUNetModelSpec, OIDN_UNET_LARGE_SPEC, OIDN_UNET_SMALL_SPEC, validateUNetModel } from './modelSpec';
7
+ export { optimizeModelGraph, planModelExecution } from './graphOptimizer';
8
+ export { NativeUNetExecutor, resolveNativeUNetPrecision, selectSubgroupMatrixConfig } from './nativeUNet';
9
+ export { WebNNUNetExecutor } from './webnnUNet';
10
+ export async function initUNetFromBuffer(tzaBuffer, backendParams, opts) {
11
+ const device = backendParams?.device ?? await initWebGPUBackend();
12
+ const tensors = parseTZA(tzaBuffer);
13
+ const unet = new UNet(tensors, device, opts);
14
+ await unet.prepare();
15
+ return unet;
16
+ }
17
+ export async function initUNetFromURL(modelPath, backendParams, opts) {
18
+ return fetch(modelPath)
19
+ .then((res) => res.arrayBuffer())
20
+ .then((ab) => {
21
+ return initUNetFromBuffer(ab, backendParams, opts);
22
+ });
23
+ }
24
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAW9C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQ1E,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAgDtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQhD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAsB,EACtB,aAAqC,EACrC,IAAkB;IAElB,MAAM,MAAM,GAAG,aAAa,EAAE,MAAM,IAAI,MAAM,iBAAiB,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,aAAqC,EACrC,IAAkB;IAElB,OAAO,KAAK,CAAC,SAAS,CAAC;SACpB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SAChC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;QACX,OAAO,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { HostTensor } from './tza.js';
2
+ /**
3
+ * Versioned, runtime-independent description of an OIDN network.
4
+ *
5
+ * TZA contains named tensors but no executable graph. Keeping the graph in a
6
+ * small declarative descriptor makes model upgrades independent from the WGSL
7
+ * kernels: a new OIDN topology only needs a new descriptor and validation
8
+ * fixture unless it introduces a genuinely new operation.
9
+ */
10
+ export interface UNetModelSpec {
11
+ schemaVersion: 1;
12
+ id: string;
13
+ family: 'oidn-unet-small' | 'oidn-unet-large' | (string & {});
14
+ input: string;
15
+ output: string;
16
+ receptiveField: number;
17
+ nodes: readonly ModelNodeSpec[];
18
+ /** Reject unrecognised tensors so an upstream topology change is explicit. */
19
+ allowAdditionalTensors?: boolean;
20
+ }
21
+ export type ModelActivation = 'identity' | 'relu';
22
+ export interface Conv2DNodeSpec {
23
+ op: 'conv2d';
24
+ id: string;
25
+ input: string;
26
+ weight: string;
27
+ bias: string;
28
+ activation: ModelActivation;
29
+ padding: 'same';
30
+ }
31
+ export interface MaxPool2DNodeSpec {
32
+ op: 'maxPool2d';
33
+ id: string;
34
+ input: string;
35
+ size: 2;
36
+ stride: 2;
37
+ padding: 'same';
38
+ }
39
+ export interface Upsample2DNodeSpec {
40
+ op: 'upsample2d';
41
+ id: string;
42
+ input: string;
43
+ scale: 2;
44
+ mode: 'nearest';
45
+ }
46
+ export interface ConcatNodeSpec {
47
+ op: 'concat';
48
+ id: string;
49
+ inputs: readonly string[];
50
+ axis: 'channels';
51
+ }
52
+ export type ModelNodeSpec = Conv2DNodeSpec | MaxPool2DNodeSpec | Upsample2DNodeSpec | ConcatNodeSpec;
53
+ export interface ValidatedConvTensor {
54
+ weight: HostTensor;
55
+ bias: HostTensor;
56
+ inputChannels: number;
57
+ outputChannels: number;
58
+ kernelHeight: number;
59
+ kernelWidth: number;
60
+ }
61
+ export interface ModelConvChannels {
62
+ inputChannels: number;
63
+ outputChannels: number;
64
+ }
65
+ export interface UNetModelGraph {
66
+ spec: UNetModelSpec;
67
+ inputChannels: number;
68
+ outputChannels: number;
69
+ channelsByValue: ReadonlyMap<string, number>;
70
+ convChannels: ReadonlyMap<string, ModelConvChannels>;
71
+ }
72
+ export interface ValidatedUNetModel extends UNetModelGraph {
73
+ tensorDataType: HostTensor['desc']['dataType'];
74
+ convTensors: ReadonlyMap<string, ValidatedConvTensor>;
75
+ }
76
+ export declare const OIDN_UNET_SMALL_SPEC: UNetModelSpec;
77
+ export declare const OIDN_UNET_LARGE_SPEC: UNetModelSpec;
78
+ export declare function detectUNetModelSpec(tensors: ReadonlyMap<string, HostTensor>, specs?: readonly UNetModelSpec[]): UNetModelSpec;
79
+ /** Validate tensor layout, shapes, dtypes, graph order, and channel flow. */
80
+ export declare function validateUNetModel(tensors: ReadonlyMap<string, HostTensor>, spec?: UNetModelSpec): ValidatedUNetModel;
@@ -0,0 +1,270 @@
1
+ function conv(id, input) {
2
+ return {
3
+ op: 'conv2d',
4
+ id,
5
+ input,
6
+ weight: `${id}.weight`,
7
+ bias: `${id}.bias`,
8
+ activation: 'relu',
9
+ padding: 'same'
10
+ };
11
+ }
12
+ function pool(id, input) {
13
+ return {
14
+ op: 'maxPool2d',
15
+ id,
16
+ input,
17
+ size: 2,
18
+ stride: 2,
19
+ padding: 'same'
20
+ };
21
+ }
22
+ function upsample(id, input) {
23
+ return {
24
+ op: 'upsample2d',
25
+ id,
26
+ input,
27
+ scale: 2,
28
+ mode: 'nearest'
29
+ };
30
+ }
31
+ function concat(id, first, second) {
32
+ return {
33
+ op: 'concat',
34
+ id,
35
+ inputs: [first, second],
36
+ axis: 'channels'
37
+ };
38
+ }
39
+ export const OIDN_UNET_SMALL_SPEC = {
40
+ schemaVersion: 1,
41
+ id: 'oidn-unet-small-v1',
42
+ family: 'oidn-unet-small',
43
+ input: 'input',
44
+ output: 'dec_conv0',
45
+ receptiveField: 174,
46
+ nodes: [
47
+ conv('enc_conv0', 'input'),
48
+ conv('enc_conv1', 'enc_conv0'),
49
+ pool('pool1', 'enc_conv1'),
50
+ conv('enc_conv2', 'pool1'),
51
+ pool('pool2', 'enc_conv2'),
52
+ conv('enc_conv3', 'pool2'),
53
+ pool('pool3', 'enc_conv3'),
54
+ conv('enc_conv4', 'pool3'),
55
+ pool('pool4', 'enc_conv4'),
56
+ conv('enc_conv5a', 'pool4'),
57
+ conv('enc_conv5b', 'enc_conv5a'),
58
+ upsample('up4', 'enc_conv5b'),
59
+ concat('concat4', 'up4', 'pool3'),
60
+ conv('dec_conv4a', 'concat4'),
61
+ conv('dec_conv4b', 'dec_conv4a'),
62
+ upsample('up3', 'dec_conv4b'),
63
+ concat('concat3', 'up3', 'pool2'),
64
+ conv('dec_conv3a', 'concat3'),
65
+ conv('dec_conv3b', 'dec_conv3a'),
66
+ upsample('up2', 'dec_conv3b'),
67
+ concat('concat2', 'up2', 'pool1'),
68
+ conv('dec_conv2a', 'concat2'),
69
+ conv('dec_conv2b', 'dec_conv2a'),
70
+ upsample('up1', 'dec_conv2b'),
71
+ concat('concat1', 'up1', 'input'),
72
+ conv('dec_conv1a', 'concat1'),
73
+ conv('dec_conv1b', 'dec_conv1a'),
74
+ conv('dec_conv0', 'dec_conv1b')
75
+ ]
76
+ };
77
+ export const OIDN_UNET_LARGE_SPEC = {
78
+ schemaVersion: 1,
79
+ id: 'oidn-unet-large-v1',
80
+ family: 'oidn-unet-large',
81
+ input: 'input',
82
+ output: 'dec_conv1c',
83
+ receptiveField: 202,
84
+ nodes: [
85
+ conv('enc_conv1a', 'input'),
86
+ conv('enc_conv1b', 'enc_conv1a'),
87
+ pool('pool1', 'enc_conv1b'),
88
+ conv('enc_conv2a', 'pool1'),
89
+ conv('enc_conv2b', 'enc_conv2a'),
90
+ pool('pool2', 'enc_conv2b'),
91
+ conv('enc_conv3a', 'pool2'),
92
+ conv('enc_conv3b', 'enc_conv3a'),
93
+ pool('pool3', 'enc_conv3b'),
94
+ conv('enc_conv4a', 'pool3'),
95
+ conv('enc_conv4b', 'enc_conv4a'),
96
+ pool('pool4', 'enc_conv4b'),
97
+ conv('enc_conv5a', 'pool4'),
98
+ conv('enc_conv5b', 'enc_conv5a'),
99
+ upsample('up4', 'enc_conv5b'),
100
+ concat('concat4', 'up4', 'pool3'),
101
+ conv('dec_conv4a', 'concat4'),
102
+ conv('dec_conv4b', 'dec_conv4a'),
103
+ upsample('up3', 'dec_conv4b'),
104
+ concat('concat3', 'up3', 'pool2'),
105
+ conv('dec_conv3a', 'concat3'),
106
+ conv('dec_conv3b', 'dec_conv3a'),
107
+ upsample('up2', 'dec_conv3b'),
108
+ concat('concat2', 'up2', 'pool1'),
109
+ conv('dec_conv2a', 'concat2'),
110
+ conv('dec_conv2b', 'dec_conv2a'),
111
+ upsample('up1', 'dec_conv2b'),
112
+ concat('concat1', 'up1', 'input'),
113
+ conv('dec_conv1a', 'concat1'),
114
+ conv('dec_conv1b', 'dec_conv1a'),
115
+ conv('dec_conv1c', 'dec_conv1b')
116
+ ]
117
+ };
118
+ const BUILTIN_MODEL_SPECS = [
119
+ OIDN_UNET_SMALL_SPEC,
120
+ OIDN_UNET_LARGE_SPEC
121
+ ];
122
+ function expectedTensorNames(spec) {
123
+ const names = new Set();
124
+ for (const node of spec.nodes) {
125
+ if (node.op === 'conv2d') {
126
+ names.add(node.weight);
127
+ names.add(node.bias);
128
+ }
129
+ }
130
+ return names;
131
+ }
132
+ function tensorByteSize(tensor) {
133
+ return tensor.desc.getByteSize();
134
+ }
135
+ function describeNames(names) {
136
+ return [...names].sort().join(', ');
137
+ }
138
+ export function detectUNetModelSpec(tensors, specs = BUILTIN_MODEL_SPECS) {
139
+ const matches = specs.filter((spec) => {
140
+ const expected = expectedTensorNames(spec);
141
+ if ([...expected].some((name) => !tensors.has(name)))
142
+ return false;
143
+ return (spec.allowAdditionalTensors === true ||
144
+ [...tensors.keys()].every((name) => expected.has(name)));
145
+ });
146
+ if (matches.length === 1)
147
+ return matches[0];
148
+ if (matches.length > 1) {
149
+ throw new Error(`Ambiguous OIDN model topology: ${matches.map((spec) => spec.id).join(', ')}`);
150
+ }
151
+ throw new Error(`Unsupported OIDN model topology. TZA tensors: ${describeNames([...tensors.keys()])}`);
152
+ }
153
+ function requireTensor(tensors, name, modelId) {
154
+ const tensor = tensors.get(name);
155
+ if (!tensor) {
156
+ throw new Error(`Model ${modelId} is missing tensor ${name}`);
157
+ }
158
+ if (tensor.data.byteLength !== tensorByteSize(tensor)) {
159
+ throw new Error(`Tensor ${name} has ${tensor.data.byteLength} bytes, expected ${tensorByteSize(tensor)}`);
160
+ }
161
+ return tensor;
162
+ }
163
+ /** Validate tensor layout, shapes, dtypes, graph order, and channel flow. */
164
+ export function validateUNetModel(tensors, spec = detectUNetModelSpec(tensors)) {
165
+ if (spec.schemaVersion !== 1) {
166
+ throw new Error(`Unsupported model descriptor schema ${spec.schemaVersion}`);
167
+ }
168
+ const expected = expectedTensorNames(spec);
169
+ if (!spec.allowAdditionalTensors) {
170
+ const additional = [...tensors.keys()].filter((name) => !expected.has(name));
171
+ if (additional.length > 0) {
172
+ throw new Error(`Model ${spec.id} has unexpected tensors: ${describeNames(additional)}`);
173
+ }
174
+ }
175
+ const channelsByValue = new Map();
176
+ const convTensors = new Map();
177
+ const convChannels = new Map();
178
+ const producedValues = new Set([spec.input]);
179
+ let inputChannels;
180
+ let commonDataType;
181
+ const getChannels = (value, nodeId) => {
182
+ const channels = channelsByValue.get(value);
183
+ if (channels === undefined) {
184
+ throw new Error(`Model ${spec.id} node ${nodeId} reads unknown or forward value ${value}`);
185
+ }
186
+ return channels;
187
+ };
188
+ for (const node of spec.nodes) {
189
+ if (producedValues.has(node.id)) {
190
+ throw new Error(`Model ${spec.id} produces duplicate value ${node.id}`);
191
+ }
192
+ if (node.op === 'conv2d') {
193
+ const weight = requireTensor(tensors, node.weight, spec.id);
194
+ const bias = requireTensor(tensors, node.bias, spec.id);
195
+ const dims = weight.desc.dims;
196
+ if (weight.desc.layout !== 'oihw' || dims.length !== 4) {
197
+ throw new Error(`Tensor ${node.weight} must use OIHW layout`);
198
+ }
199
+ if (dims[2] !== 3 || dims[3] !== 3) {
200
+ throw new Error(`Tensor ${node.weight} must use a 3x3 kernel`);
201
+ }
202
+ if (bias.desc.layout !== 'x' || bias.desc.dims.length !== 1) {
203
+ throw new Error(`Tensor ${node.bias} must be a one-dimensional bias`);
204
+ }
205
+ if (bias.desc.dims[0] !== dims[0]) {
206
+ throw new Error(`Tensor ${node.bias} has ${bias.desc.dims[0]} channels, expected ${dims[0]}`);
207
+ }
208
+ if (weight.desc.dataType !== bias.desc.dataType) {
209
+ throw new Error(`Weight and bias dtype differ for ${node.id}`);
210
+ }
211
+ if (commonDataType && commonDataType !== weight.desc.dataType) {
212
+ throw new Error(`Mixed tensor dtypes are not supported by model ${spec.id}`);
213
+ }
214
+ commonDataType = weight.desc.dataType;
215
+ if (node.input === spec.input && inputChannels === undefined) {
216
+ inputChannels = dims[1];
217
+ channelsByValue.set(spec.input, inputChannels);
218
+ }
219
+ const actualInputChannels = getChannels(node.input, node.id);
220
+ if (actualInputChannels !== dims[1]) {
221
+ throw new Error(`Tensor ${node.weight} expects ${dims[1]} input channels, ` +
222
+ `but ${node.input} provides ${actualInputChannels}`);
223
+ }
224
+ channelsByValue.set(node.id, dims[0]);
225
+ convTensors.set(node.id, {
226
+ weight,
227
+ bias,
228
+ inputChannels: dims[1],
229
+ outputChannels: dims[0],
230
+ kernelHeight: dims[2],
231
+ kernelWidth: dims[3]
232
+ });
233
+ convChannels.set(node.id, {
234
+ inputChannels: dims[1],
235
+ outputChannels: dims[0]
236
+ });
237
+ }
238
+ else if (node.op === 'concat') {
239
+ if (node.inputs.length < 2) {
240
+ throw new Error(`Concat ${node.id} requires at least two inputs`);
241
+ }
242
+ const channels = node.inputs.reduce((sum, value) => sum + getChannels(value, node.id), 0);
243
+ channelsByValue.set(node.id, channels);
244
+ }
245
+ else {
246
+ channelsByValue.set(node.id, getChannels(node.input, node.id));
247
+ }
248
+ producedValues.add(node.id);
249
+ }
250
+ if (inputChannels === undefined || commonDataType === undefined) {
251
+ throw new Error(`Model ${spec.id} has no convolution reading its input`);
252
+ }
253
+ const outputChannels = channelsByValue.get(spec.output);
254
+ if (outputChannels === undefined) {
255
+ throw new Error(`Model ${spec.id} output ${spec.output} is not produced`);
256
+ }
257
+ if (outputChannels !== 3) {
258
+ throw new Error(`Model ${spec.id} must produce 3 channels, got ${outputChannels}`);
259
+ }
260
+ return {
261
+ spec,
262
+ inputChannels,
263
+ outputChannels,
264
+ tensorDataType: commonDataType,
265
+ channelsByValue,
266
+ convChannels,
267
+ convTensors
268
+ };
269
+ }
270
+ //# sourceMappingURL=modelSpec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelSpec.js","sourceRoot":"","sources":["../src/modelSpec.ts"],"names":[],"mappings":"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"}