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:06:25.590Z",
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": 8.300000004470348,
27
- "timesMs": [
28
- 34.69999999552965,
29
- 34.600000001490116,
30
- 34.70000000298023
31
- ],
32
- "supportsFP16": true,
33
- "adapter": {
34
- "vendor": "apple",
35
- "architecture": "metal-3",
36
- "device": "",
37
- "description": ""
38
- },
39
- "summary": {
40
- "minMs": 34.600000001490116,
41
- "medianMs": 34.69999999552965,
42
- "meanMs": 34.666666666666664,
43
- "p95Ms": 34.70000000298023,
44
- "maxMs": 34.70000000298023
45
- },
46
- "messages": []
47
- },
48
- {
49
- "label": "WGSL FP32",
50
- "bundle": "current",
51
- "baseline": false,
52
- "precision": "fp32",
53
- "initializationMs": 349.90000000596046,
54
- "timesMs": [
55
- 41,
56
- 41.100000001490116,
57
- 41.20000000298023
58
- ],
59
- "executionProfile": {
60
- "totalMs": 40.630814,
61
- "layers": [
62
- {
63
- "id": "input-pack",
64
- "durationMs": 0.050205
65
- },
66
- {
67
- "id": "enc_conv1a",
68
- "durationMs": 0.957234
69
- },
70
- {
71
- "id": "enc_conv1b",
72
- "durationMs": 4.513224
73
- },
74
- {
75
- "id": "pool1",
76
- "durationMs": 0.408767
77
- },
78
- {
79
- "id": "enc_conv2a",
80
- "durationMs": 1.669064
81
- },
82
- {
83
- "id": "enc_conv2b",
84
- "durationMs": 2.523179
85
- },
86
- {
87
- "id": "pool2",
88
- "durationMs": 0.054997
89
- },
90
- {
91
- "id": "enc_conv3a",
92
- "durationMs": 0.87678
93
- },
94
- {
95
- "id": "enc_conv3b",
96
- "durationMs": 1.251299
97
- },
98
- {
99
- "id": "pool3",
100
- "durationMs": 0.018124
101
- },
102
- {
103
- "id": "enc_conv4a",
104
- "durationMs": 0.480971
105
- },
106
- {
107
- "id": "enc_conv4b",
108
- "durationMs": 0.716665
109
- },
110
- {
111
- "id": "pool4",
112
- "durationMs": 0.008416
113
- },
114
- {
115
- "id": "enc_conv5a",
116
- "durationMs": 0.290942
117
- },
118
- {
119
- "id": "enc_conv5b",
120
- "durationMs": 0.386601
121
- },
122
- {
123
- "id": "dec_conv4a",
124
- "durationMs": 1.461411
125
- },
126
- {
127
- "id": "dec_conv4b",
128
- "durationMs": 0.714623
129
- },
130
- {
131
- "id": "dec_conv3a",
132
- "durationMs": 2.739875
133
- },
134
- {
135
- "id": "dec_conv3b",
136
- "durationMs": 1.162346
137
- },
138
- {
139
- "id": "dec_conv2a",
140
- "durationMs": 5.078732
141
- },
142
- {
143
- "id": "dec_conv2b",
144
- "durationMs": 2.493431
145
- },
146
- {
147
- "id": "dec_conv1a",
148
- "durationMs": 7.843271
149
- },
150
- {
151
- "id": "dec_conv1b",
152
- "durationMs": 4.45502
153
- },
154
- {
155
- "id": "dec_conv1c",
156
- "durationMs": 0.475637
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": 42.600000001490116,
181
- "tileTimeMs": {
182
- "min": 42.600000001490116,
183
- "median": 42.600000001490116,
184
- "mean": 42.600000001490116,
185
- "max": 42.600000001490116
186
- }
187
- }
188
- },
189
- "supportsFP16": true,
190
- "adapter": {
191
- "vendor": "apple",
192
- "architecture": "metal-3",
193
- "device": "",
194
- "description": ""
195
- },
196
- "summary": {
197
- "minMs": 41,
198
- "medianMs": 41.100000001490116,
199
- "meanMs": 41.100000001490116,
200
- "p95Ms": 41.20000000298023,
201
- "maxMs": 41.20000000298023
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": 22.700000002980232,
222
- "timesMs": [
223
- 30.400000005960464,
224
- 30.299999997019768,
225
- 30.5
226
- ],
227
- "executionProfile": {
228
- "totalMs": 29.698353,
229
- "layers": [
230
- {
231
- "id": "input-pack",
232
- "durationMs": 0.043914
233
- },
234
- {
235
- "id": "enc_conv1a",
236
- "durationMs": 0.679791
237
- },
238
- {
239
- "id": "enc_conv1b",
240
- "durationMs": 3.891304
241
- },
242
- {
243
- "id": "pool1",
244
- "durationMs": 0.33973
245
- },
246
- {
247
- "id": "enc_conv2a",
248
- "durationMs": 1.531323
249
- },
250
- {
251
- "id": "enc_conv2b",
252
- "durationMs": 2.29611
253
- },
254
- {
255
- "id": "pool2",
256
- "durationMs": 0.049831
257
- },
258
- {
259
- "id": "enc_conv3a",
260
- "durationMs": 0.738288
261
- },
262
- {
263
- "id": "enc_conv3b",
264
- "durationMs": 0.938109
265
- },
266
- {
267
- "id": "pool3",
268
- "durationMs": 0.016207
269
- },
270
- {
271
- "id": "enc_conv4a",
272
- "durationMs": 0.337562
273
- },
274
- {
275
- "id": "enc_conv4b",
276
- "durationMs": 0.531051
277
- },
278
- {
279
- "id": "pool4",
280
- "durationMs": 0.010999
281
- },
282
- {
283
- "id": "enc_conv5a",
284
- "durationMs": 0.189031
285
- },
286
- {
287
- "id": "enc_conv5b",
288
- "durationMs": 0.246777
289
- },
290
- {
291
- "id": "dec_conv4a",
292
- "durationMs": 0.948942
293
- },
294
- {
295
- "id": "dec_conv4b",
296
- "durationMs": 0.522844
297
- },
298
- {
299
- "id": "dec_conv3a",
300
- "durationMs": 1.705478
301
- },
302
- {
303
- "id": "dec_conv3b",
304
- "durationMs": 0.932276
305
- },
306
- {
307
- "id": "dec_conv2a",
308
- "durationMs": 2.966486
309
- },
310
- {
311
- "id": "dec_conv2b",
312
- "durationMs": 2.300068
313
- },
314
- {
315
- "id": "dec_conv1a",
316
- "durationMs": 4.382315
317
- },
318
- {
319
- "id": "dec_conv1b",
320
- "durationMs": 3.866681
321
- },
322
- {
323
- "id": "dec_conv1c",
324
- "durationMs": 0.233236
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": 31.19999999552965,
349
- "tileTimeMs": {
350
- "min": 31.19999999552965,
351
- "median": 31.19999999552965,
352
- "mean": 31.19999999552965,
353
- "max": 31.19999999552965
354
- }
355
- }
356
- },
357
- "supportsFP16": true,
358
- "adapter": {
359
- "vendor": "apple",
360
- "architecture": "metal-3",
361
- "device": "",
362
- "description": ""
363
- },
364
- "summary": {
365
- "minMs": 30.299999997019768,
366
- "medianMs": 30.400000005960464,
367
- "meanMs": 30.400000000993412,
368
- "p95Ms": 30.5,
369
- "maxMs": 30.5
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) | 8.30 | 34.70 | 34.70 | 1.00x | fp32 |
11
- | WGSL FP32 | 349.90 | 41.10 | 41.20 | 0.84x | fp32 |
12
- | WGSL FP16 | 22.70 | 30.40 | 30.50 | 1.14x | 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: 40.63 ms
28
-
29
- | Node | GPU ms |
30
- | --- | ---: |
31
- | dec_conv1a | 7.84 |
32
- | dec_conv2a | 5.08 |
33
- | enc_conv1b | 4.51 |
34
- | dec_conv1b | 4.46 |
35
- | dec_conv3a | 2.74 |
36
-
37
- ### WGSL FP16
38
-
39
- Profiled GPU total: 29.70 ms
40
-
41
- | Node | GPU ms |
42
- | --- | ---: |
43
- | dec_conv1a | 4.38 |
44
- | enc_conv1b | 3.89 |
45
- | dec_conv1b | 3.87 |
46
- | dec_conv2a | 2.97 |
47
- | dec_conv2b | 2.30 |