oidn-web 0.4.0 → 0.5.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 (106) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +83 -19
  3. package/dist/oidn.js +3239 -2642
  4. package/dist/oidn.umd.cjs +512 -296
  5. package/lib/UNet.d.ts +54 -20
  6. package/lib/UNet.js +194 -118
  7. package/lib/UNet.js.map +1 -1
  8. package/lib/backend.d.ts +1 -8
  9. package/lib/backend.js +1 -9
  10. package/lib/backend.js.map +1 -1
  11. package/lib/finalRgbShader.d.ts +13 -0
  12. package/lib/finalRgbShader.js +160 -0
  13. package/lib/finalRgbShader.js.map +1 -0
  14. package/lib/graphOptimizer.js +1 -2
  15. package/lib/graphOptimizer.js.map +1 -1
  16. package/lib/hdrTransfer.d.ts +14 -0
  17. package/lib/hdrTransfer.js +61 -0
  18. package/lib/hdrTransfer.js.map +1 -0
  19. package/lib/main.d.ts +16 -7
  20. package/lib/main.js +4 -5
  21. package/lib/main.js.map +1 -1
  22. package/lib/nativeUNet.d.ts +39 -3
  23. package/lib/nativeUNet.js +449 -120
  24. package/lib/nativeUNet.js.map +1 -1
  25. package/lib/process.d.ts +5 -11
  26. package/lib/process.js +35 -49
  27. package/lib/process.js.map +1 -1
  28. package/lib/tileScheduler.d.ts +32 -4
  29. package/lib/tileScheduler.js +133 -20
  30. package/lib/tileScheduler.js.map +1 -1
  31. package/package.json +9 -2
  32. package/src/UNet.ts +287 -158
  33. package/src/backend.ts +1 -14
  34. package/src/finalRgbShader.ts +186 -0
  35. package/src/graphOptimizer.ts +1 -2
  36. package/src/hdrTransfer.ts +88 -0
  37. package/src/main.ts +28 -13
  38. package/src/nativeUNet.ts +515 -116
  39. package/src/process.ts +43 -70
  40. package/src/tileScheduler.ts +216 -24
  41. package/benchmarks/compare.mjs +0 -651
  42. package/benchmarks/leak.mjs +0 -255
  43. package/benchmarks/results/before-spatial.json +0 -391
  44. package/benchmarks/results/before-spatial.md +0 -47
  45. package/benchmarks/results/int8-scan.json +0 -2007
  46. package/benchmarks/results/int8-scan.md +0 -160
  47. package/benchmarks/results/int8-w8a8-scan.json +0 -2007
  48. package/benchmarks/results/int8-w8a8-scan.md +0 -160
  49. package/benchmarks/results/int8-weight-channel.json +0 -1413
  50. package/benchmarks/results/int8-weight-channel.md +0 -118
  51. package/benchmarks/results/int8-weight-only.json +0 -1437
  52. package/benchmarks/results/int8-weight-only.md +0 -118
  53. package/benchmarks/results/kernel-webnn-final.json +0 -1115
  54. package/benchmarks/results/kernel-webnn-final.md +0 -104
  55. package/benchmarks/results/latest-optimized.json +0 -375
  56. package/benchmarks/results/latest-optimized.md +0 -47
  57. package/benchmarks/results/latest.json +0 -391
  58. package/benchmarks/results/latest.md +0 -47
  59. package/benchmarks/results/profile-baseline.json +0 -331
  60. package/benchmarks/results/profile-baseline.md +0 -12
  61. package/benchmarks/results/profile-conv2x.json +0 -331
  62. package/benchmarks/results/profile-conv2x.md +0 -12
  63. package/benchmarks/results/profile-fast-init.json +0 -385
  64. package/benchmarks/results/profile-fast-init.md +0 -47
  65. package/benchmarks/results/profile-fp16-fma.json +0 -369
  66. package/benchmarks/results/profile-fp16-fma.md +0 -47
  67. package/benchmarks/results/profile-fp16-tiled-decoder.json +0 -369
  68. package/benchmarks/results/profile-fp16-tiled-decoder.md +0 -47
  69. package/benchmarks/results/profile-fp16-tiled-encoder.json +0 -369
  70. package/benchmarks/results/profile-fp16-tiled-encoder.md +0 -47
  71. package/benchmarks/results/profile-fp16-unfused-pool.json +0 -385
  72. package/benchmarks/results/profile-fp16-unfused-pool.md +0 -47
  73. package/benchmarks/results/profile-input-major.json +0 -347
  74. package/benchmarks/results/profile-input-major.md +0 -12
  75. package/benchmarks/results/profile-k16.json +0 -347
  76. package/benchmarks/results/profile-k16.md +0 -12
  77. package/benchmarks/results/profile-k4.json +0 -347
  78. package/benchmarks/results/profile-k4.md +0 -12
  79. package/benchmarks/results/profile-pool-reuse.json +0 -331
  80. package/benchmarks/results/profile-pool-reuse.md +0 -12
  81. package/benchmarks/results/profile-precompiled.json +0 -385
  82. package/benchmarks/results/profile-precompiled.md +0 -47
  83. package/benchmarks/results/profile-static-channels.json +0 -385
  84. package/benchmarks/results/profile-static-channels.md +0 -47
  85. package/benchmarks/results/profile-static-io.json +0 -385
  86. package/benchmarks/results/profile-static-io.md +0 -47
  87. package/benchmarks/results/profile-tiled-conv.json +0 -331
  88. package/benchmarks/results/profile-tiled-conv.md +0 -12
  89. package/benchmarks/results/profile-tiled-decoder.json +0 -347
  90. package/benchmarks/results/profile-tiled-decoder.md +0 -12
  91. package/benchmarks/results/profile-tiled-matmul.json +0 -331
  92. package/benchmarks/results/profile-tiled-matmul.md +0 -12
  93. package/benchmarks/results/profile-unfused-decoder.json +0 -379
  94. package/benchmarks/results/profile-unfused-decoder.md +0 -12
  95. package/benchmarks/results/profile-unfused-pool.json +0 -347
  96. package/benchmarks/results/profile-unfused-pool.md +0 -12
  97. package/benchmarks/results/spatial-auto.json +0 -575
  98. package/benchmarks/results/spatial-auto.md +0 -61
  99. package/benchmarks/results/subgroup-smoke.json +0 -1094
  100. package/benchmarks/results/subgroup-smoke.md +0 -104
  101. package/benchmarks/results/webnn-smoke.json +0 -739
  102. package/benchmarks/results/webnn-smoke.md +0 -76
  103. package/scripts/inspect-model.mjs +0 -64
  104. package/tests/modelSpec.test.mjs +0 -128
  105. package/tests/resourceLifecycle.test.mjs +0 -383
  106. package/tests/tileScheduler.test.mjs +0 -90
@@ -1,385 +0,0 @@
1
- {
2
- "generatedAt": "2026-08-20T04:09:47.409Z",
3
- "currentCommit": "5d9c1c8771e2a03c90bfadafec4b5dd28fada446",
4
- "baselineCommit": "136c00c34aa5cf4561b4137034dbd643177f0a5f",
5
- "settings": {
6
- "width": 512,
7
- "height": 512,
8
- "tileSize": 512,
9
- "warmup": 1,
10
- "runs": 3,
11
- "model": "rt_hdr_calb_cnrm_large.tza",
12
- "gpuQueueCompletionIncluded": true
13
- },
14
- "browser": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
15
- "adapter": {
16
- "vendor": "apple",
17
- "architecture": "metal-3",
18
- "device": "",
19
- "description": ""
20
- },
21
- "results": [
22
- {
23
- "label": "TFJS (136c00c)",
24
- "bundle": "baseline",
25
- "baseline": true,
26
- "initializationMs": 9.100000001490116,
27
- "timesMs": [
28
- 34.79999999701977,
29
- 34.899999998509884,
30
- 34.80000000447035
31
- ],
32
- "supportsFP16": true,
33
- "adapter": {
34
- "vendor": "apple",
35
- "architecture": "metal-3",
36
- "device": "",
37
- "description": ""
38
- },
39
- "summary": {
40
- "minMs": 34.79999999701977,
41
- "medianMs": 34.80000000447035,
42
- "meanMs": 34.833333333333336,
43
- "p95Ms": 34.899999998509884,
44
- "maxMs": 34.899999998509884
45
- },
46
- "messages": []
47
- },
48
- {
49
- "label": "WGSL FP32",
50
- "bundle": "current",
51
- "baseline": false,
52
- "precision": "fp32",
53
- "initializationMs": 354.3999999985099,
54
- "timesMs": [
55
- 36.100000001490116,
56
- 35.79999999701977,
57
- 35.80000000447035
58
- ],
59
- "executionProfile": {
60
- "totalMs": 35.21059700000001,
61
- "layers": [
62
- {
63
- "id": "input-pack",
64
- "durationMs": 0.051164
65
- },
66
- {
67
- "id": "enc_conv1a",
68
- "durationMs": 0.838628
69
- },
70
- {
71
- "id": "enc_conv1b",
72
- "durationMs": 3.831159
73
- },
74
- {
75
- "id": "pool1",
76
- "durationMs": 0.411522
77
- },
78
- {
79
- "id": "enc_conv2a",
80
- "durationMs": 1.401186
81
- },
82
- {
83
- "id": "enc_conv2b",
84
- "durationMs": 2.240147
85
- },
86
- {
87
- "id": "pool2",
88
- "durationMs": 0.054913
89
- },
90
- {
91
- "id": "enc_conv3a",
92
- "durationMs": 0.771757
93
- },
94
- {
95
- "id": "enc_conv3b",
96
- "durationMs": 0.988955
97
- },
98
- {
99
- "id": "pool3",
100
- "durationMs": 0.017832
101
- },
102
- {
103
- "id": "enc_conv4a",
104
- "durationMs": 0.399856
105
- },
106
- {
107
- "id": "enc_conv4b",
108
- "durationMs": 0.610347
109
- },
110
- {
111
- "id": "pool4",
112
- "durationMs": 0.011542
113
- },
114
- {
115
- "id": "enc_conv5a",
116
- "durationMs": 0.257988
117
- },
118
- {
119
- "id": "enc_conv5b",
120
- "durationMs": 0.340025
121
- },
122
- {
123
- "id": "dec_conv4a",
124
- "durationMs": 1.244735
125
- },
126
- {
127
- "id": "dec_conv4b",
128
- "durationMs": 0.610265
129
- },
130
- {
131
- "id": "dec_conv3a",
132
- "durationMs": 2.369433
133
- },
134
- {
135
- "id": "dec_conv3b",
136
- "durationMs": 0.987289
137
- },
138
- {
139
- "id": "dec_conv2a",
140
- "durationMs": 4.370217
141
- },
142
- {
143
- "id": "dec_conv2b",
144
- "durationMs": 2.157109
145
- },
146
- {
147
- "id": "dec_conv1a",
148
- "durationMs": 6.941183
149
- },
150
- {
151
- "id": "dec_conv1b",
152
- "durationMs": 3.809076
153
- },
154
- {
155
- "id": "dec_conv1c",
156
- "durationMs": 0.494269
157
- }
158
- ]
159
- },
160
- "runtimeInfo": {
161
- "configuredEngine": "wgsl",
162
- "gpuEngine": "wgsl",
163
- "precision": "fp32",
164
- "model": "oidn-unet-large-v1",
165
- "modelFamily": "oidn-unet-large",
166
- "inputChannels": 9,
167
- "dynamicTile": {
168
- "enabled": false,
169
- "currentTileSize": 512,
170
- "minTileSize": 256,
171
- "maxTileSize": 512,
172
- "targetTileTimeMs": 16
173
- },
174
- "lastExecution": {
175
- "width": 512,
176
- "height": 512,
177
- "tileWidth": 512,
178
- "tileHeight": 512,
179
- "tileCount": 1,
180
- "durationMs": 36.899999998509884,
181
- "tileTimeMs": {
182
- "min": 36.899999998509884,
183
- "median": 36.899999998509884,
184
- "mean": 36.899999998509884,
185
- "max": 36.899999998509884
186
- }
187
- }
188
- },
189
- "supportsFP16": true,
190
- "adapter": {
191
- "vendor": "apple",
192
- "architecture": "metal-3",
193
- "device": "",
194
- "description": ""
195
- },
196
- "summary": {
197
- "minMs": 35.79999999701977,
198
- "medianMs": 35.80000000447035,
199
- "meanMs": 35.90000000099341,
200
- "p95Ms": 36.100000001490116,
201
- "maxMs": 36.100000001490116
202
- },
203
- "messages": [],
204
- "validation": {
205
- "sampleCount": 6144,
206
- "meanAbsoluteError": 0.0000011096847932397698,
207
- "rootMeanSquaredError": 0.0000018071588418628667,
208
- "maxAbsoluteError": 0.000013589859008789062,
209
- "passed": true,
210
- "thresholds": {
211
- "maxMeanError": 0.0001,
212
- "maxAbsoluteError": 0.001
213
- }
214
- }
215
- },
216
- {
217
- "label": "WGSL FP16",
218
- "bundle": "current",
219
- "baseline": false,
220
- "precision": "fp16",
221
- "initializationMs": 23.399999998509884,
222
- "timesMs": [
223
- 27.899999998509884,
224
- 27.700000002980232,
225
- 27.69999999552965
226
- ],
227
- "executionProfile": {
228
- "totalMs": 27.053387999999998,
229
- "layers": [
230
- {
231
- "id": "input-pack",
232
- "durationMs": 0.045747
233
- },
234
- {
235
- "id": "enc_conv1a",
236
- "durationMs": 0.617088
237
- },
238
- {
239
- "id": "enc_conv1b",
240
- "durationMs": 3.108226
241
- },
242
- {
243
- "id": "pool1",
244
- "durationMs": 0.340812
245
- },
246
- {
247
- "id": "enc_conv2a",
248
- "durationMs": 1.19301
249
- },
250
- {
251
- "id": "enc_conv2b",
252
- "durationMs": 1.97388
253
- },
254
- {
255
- "id": "pool2",
256
- "durationMs": 0.052455
257
- },
258
- {
259
- "id": "enc_conv3a",
260
- "durationMs": 0.679334
261
- },
262
- {
263
- "id": "enc_conv3b",
264
- "durationMs": 0.891821
265
- },
266
- {
267
- "id": "pool3",
268
- "durationMs": 0.017706
269
- },
270
- {
271
- "id": "enc_conv4a",
272
- "durationMs": 0.343812
273
- },
274
- {
275
- "id": "enc_conv4b",
276
- "durationMs": 0.528134
277
- },
278
- {
279
- "id": "pool4",
280
- "durationMs": 0.013957
281
- },
282
- {
283
- "id": "enc_conv5a",
284
- "durationMs": 0.184739
285
- },
286
- {
287
- "id": "enc_conv5b",
288
- "durationMs": 0.234819
289
- },
290
- {
291
- "id": "dec_conv4a",
292
- "durationMs": 0.956941
293
- },
294
- {
295
- "id": "dec_conv4b",
296
- "durationMs": 0.535468
297
- },
298
- {
299
- "id": "dec_conv3a",
300
- "durationMs": 1.712687
301
- },
302
- {
303
- "id": "dec_conv3b",
304
- "durationMs": 0.838949
305
- },
306
- {
307
- "id": "dec_conv2a",
308
- "durationMs": 3.020898
309
- },
310
- {
311
- "id": "dec_conv2b",
312
- "durationMs": 1.96588
313
- },
314
- {
315
- "id": "dec_conv1a",
316
- "durationMs": 4.427439
317
- },
318
- {
319
- "id": "dec_conv1b",
320
- "durationMs": 3.176181
321
- },
322
- {
323
- "id": "dec_conv1c",
324
- "durationMs": 0.193405
325
- }
326
- ]
327
- },
328
- "runtimeInfo": {
329
- "configuredEngine": "wgsl",
330
- "gpuEngine": "wgsl",
331
- "precision": "fp16",
332
- "model": "oidn-unet-large-v1",
333
- "modelFamily": "oidn-unet-large",
334
- "inputChannels": 9,
335
- "dynamicTile": {
336
- "enabled": false,
337
- "currentTileSize": 512,
338
- "minTileSize": 256,
339
- "maxTileSize": 512,
340
- "targetTileTimeMs": 16
341
- },
342
- "lastExecution": {
343
- "width": 512,
344
- "height": 512,
345
- "tileWidth": 512,
346
- "tileHeight": 512,
347
- "tileCount": 1,
348
- "durationMs": 28.600000001490116,
349
- "tileTimeMs": {
350
- "min": 28.600000001490116,
351
- "median": 28.600000001490116,
352
- "mean": 28.600000001490116,
353
- "max": 28.600000001490116
354
- }
355
- }
356
- },
357
- "supportsFP16": true,
358
- "adapter": {
359
- "vendor": "apple",
360
- "architecture": "metal-3",
361
- "device": "",
362
- "description": ""
363
- },
364
- "summary": {
365
- "minMs": 27.69999999552965,
366
- "medianMs": 27.700000002980232,
367
- "meanMs": 27.766666665673256,
368
- "p95Ms": 27.899999998509884,
369
- "maxMs": 27.899999998509884
370
- },
371
- "messages": [],
372
- "validation": {
373
- "sampleCount": 6144,
374
- "meanAbsoluteError": 0.0010210334021394374,
375
- "rootMeanSquaredError": 0.001609680379854656,
376
- "maxAbsoluteError": 0.012395620346069336,
377
- "passed": true,
378
- "thresholds": {
379
- "maxMeanError": 0.005,
380
- "maxAbsoluteError": 0.05
381
- }
382
- }
383
- }
384
- ]
385
- }
@@ -1,47 +0,0 @@
1
- # oidn-web benchmark
2
-
3
- - Current: `5d9c1c8771e2a03c90bfadafec4b5dd28fada446`
4
- - TFJS baseline: `136c00c34aa5cf4561b4137034dbd643177f0a5f`
5
- - Input: 512x512, fixed tile 512, 3 runs after 1 warmup(s)
6
- - Adapter: apple
7
-
8
- | Runtime | Init ms | Median ms | P95 ms | Speedup | Precision |
9
- | --- | ---: | ---: | ---: | ---: | --- |
10
- | TFJS (136c00c) | 9.10 | 34.80 | 34.90 | 1.00x | fp32 |
11
- | WGSL FP32 | 354.40 | 35.80 | 36.10 | 0.97x | fp32 |
12
- | WGSL FP16 | 23.40 | 27.70 | 27.90 | 1.26x | fp16 |
13
-
14
- ## Output validation
15
-
16
- Compared against sampled TFJS FP32 output.
17
-
18
- | Runtime | Status | MAE | RMSE | Max error | Samples |
19
- | --- | --- | ---: | ---: | ---: | ---: |
20
- | WGSL FP32 | pass | 1.11e-6 | 1.81e-6 | 1.36e-5 | 6144 |
21
- | WGSL FP16 | pass | 1.02e-3 | 1.61e-3 | 1.24e-2 | 6144 |
22
-
23
- ## GPU hot layers
24
-
25
- ### WGSL FP32
26
-
27
- Profiled GPU total: 35.21 ms
28
-
29
- | Node | GPU ms |
30
- | --- | ---: |
31
- | dec_conv1a | 6.94 |
32
- | dec_conv2a | 4.37 |
33
- | enc_conv1b | 3.83 |
34
- | dec_conv1b | 3.81 |
35
- | dec_conv3a | 2.37 |
36
-
37
- ### WGSL FP16
38
-
39
- Profiled GPU total: 27.05 ms
40
-
41
- | Node | GPU ms |
42
- | --- | ---: |
43
- | dec_conv1a | 4.43 |
44
- | dec_conv1b | 3.18 |
45
- | enc_conv1b | 3.11 |
46
- | dec_conv2a | 3.02 |
47
- | enc_conv2b | 1.97 |