@plasius/gpu-demo-viewer 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,28 @@
1
+ /** Delivery metadata only: this does not grant runtime access or mark a render qualified. */
2
+ const statuses = new Set(['researched', 'awaiting-source', 'acquired', 'imported', 'held', 'qualified', 'production', 'excluded']);
3
+
4
+ export function selectBatch(entries, batch) {
5
+ if (!Number.isInteger(batch) || batch < 0 || batch > 7) throw new Error('Invalid catalogue batch.');
6
+ return entries.filter(entry => entry.batch === batch);
7
+ }
8
+
9
+ export function validateRollout(assets, entries) {
10
+ const identities = new Set(assets.map(asset => asset.key));
11
+ if (identities.size !== assets.length || entries.length !== assets.length
12
+ || new Set(entries.map(entry => entry.key)).size !== identities.size
13
+ || entries.some(entry => !identities.has(entry.key))) {
14
+ throw new Error('Catalogue identity mismatch.');
15
+ }
16
+ const first = assets.filter(asset => asset.priority === 'First 12');
17
+ const remaining = assets.filter(asset => asset.priority !== 'First 12');
18
+ const expected = new Map([
19
+ ...first.map(asset => [asset.key, 0]),
20
+ ...remaining.map((asset, index) => [asset.key, 1 + Math.floor(index / 9)]),
21
+ ]);
22
+ for (const entry of entries) {
23
+ if (!statuses.has(entry.status)) throw new Error('Invalid catalogue status.');
24
+ if (entry.batch !== expected.get(entry.key)) throw new Error('Catalogue batch mismatch.');
25
+ }
26
+ return {total: assets.length, first: first.length, remaining: remaining.length,
27
+ batches: Math.ceil(remaining.length / 9)};
28
+ }
@@ -0,0 +1,461 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "updated": "2026-10-18",
4
+ "story": "https://github.com/Plasius-LTD/plasius-ltd-site/issues/2308",
5
+ "flag": "gpu-demo.scene-fidelity.enabled",
6
+ "phase": "original-models",
7
+ "voxelPhase": "after-original-production-qualification",
8
+ "entries": [
9
+ {
10
+ "key": "large_castle_door",
11
+ "batch": 0,
12
+ "status": "production",
13
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
14
+ },
15
+ {
16
+ "key": "sf-house",
17
+ "batch": 0,
18
+ "status": "production",
19
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
20
+ },
21
+ {
22
+ "key": "fern_02",
23
+ "batch": 0,
24
+ "status": "production",
25
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
26
+ },
27
+ {
28
+ "key": "quiver_tree_01",
29
+ "batch": 0,
30
+ "status": "production",
31
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
32
+ },
33
+ {
34
+ "key": "rock_moss_set_01",
35
+ "batch": 0,
36
+ "status": "production",
37
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
38
+ },
39
+ {
40
+ "key": "garden_gloves_01",
41
+ "batch": 0,
42
+ "status": "production",
43
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
44
+ },
45
+ {
46
+ "key": "wooden_crate_02",
47
+ "batch": 0,
48
+ "status": "production",
49
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
50
+ },
51
+ {
52
+ "key": "bronze_whale_statue",
53
+ "batch": 0,
54
+ "status": "production",
55
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
56
+ },
57
+ {
58
+ "key": "sf-gem",
59
+ "batch": 0,
60
+ "status": "excluded",
61
+ "note": "User explicitly excluded Gem on 2026-10-18 because its source download is unavailable."
62
+ },
63
+ {
64
+ "key": "antique_ceramic_vase_01",
65
+ "batch": 0,
66
+ "status": "production",
67
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
68
+ },
69
+ {
70
+ "key": "MosquitoInAmber",
71
+ "batch": 0,
72
+ "status": "qualified",
73
+ "note": "Original-material fixed256 and native UHD1 checks passed with renderer correction ad52d112; production deployment verification remains pending."
74
+ },
75
+ {
76
+ "key": "Fox",
77
+ "batch": 0,
78
+ "status": "production",
79
+ "note": "Fixed-sampling production release 1b17dba6dca47003e41ad01974b92c887098c3ea; animation/material limits remain documented."
80
+ },
81
+ {
82
+ "key": "sf-castle",
83
+ "batch": 1,
84
+ "status": "held",
85
+ "note": "Original source not acquired; upstream scan credits must be resolved before public redistribution."
86
+ },
87
+ {
88
+ "key": "large_iron_gate",
89
+ "batch": 1,
90
+ "status": "qualified",
91
+ "note": "Original source fixed64 and native UHD1 render checks passed with material reuse correction 3d119868. Registry consumption and production verification pending."
92
+ },
93
+ {
94
+ "key": "modular_factory_facade",
95
+ "batch": 1,
96
+ "status": "qualified",
97
+ "note": "Original source fixed64 and native UHD1 render checks passed with material reuse correction 3d119868. Registry consumption and production verification pending."
98
+ },
99
+ {
100
+ "key": "modular_fort_01",
101
+ "batch": 1,
102
+ "status": "qualified",
103
+ "note": "Original source fixed64 and native UHD1 render checks passed with material reuse correction 3d119868. Registry consumption and production verification pending."
104
+ },
105
+ {
106
+ "key": "modular_urban_apartments_facade",
107
+ "batch": 1,
108
+ "status": "qualified",
109
+ "note": "Original source fixed64 and native UHD1 render checks passed with material reuse correction 3d119868. Registry consumption and production verification pending."
110
+ },
111
+ {
112
+ "key": "modular_wooden_pier",
113
+ "batch": 1,
114
+ "status": "qualified",
115
+ "note": "Original source fixed64 and native UHD1 render checks passed with material reuse correction 3d119868. Registry consumption and production verification pending."
116
+ },
117
+ {
118
+ "key": "sf-cottage",
119
+ "batch": 1,
120
+ "status": "held",
121
+ "note": "Original Sketchfab source has not been acquired; no substitute is included."
122
+ },
123
+ {
124
+ "key": "dandelion_01",
125
+ "batch": 1,
126
+ "status": "qualified",
127
+ "note": "Original source fixed64 and native UHD1 render checks passed with material reuse correction 3d119868. Registry consumption and production verification pending."
128
+ },
129
+ {
130
+ "key": "DiffuseTransmissionPlant",
131
+ "batch": 1,
132
+ "status": "held",
133
+ "note": "Required diffuse-transmission material support is not implemented in the released loader; source has not been admitted."
134
+ },
135
+ {
136
+ "key": "fir_tree_01",
137
+ "batch": 2,
138
+ "status": "held",
139
+ "note": "Source LOD0 has 6,982,937 triangles, above the unchanged 500,000-triangle inspection budget. Requires suitable LOD preparation; original asset not substituted."
140
+ },
141
+ {
142
+ "key": "grass_medium_01",
143
+ "batch": 2,
144
+ "status": "qualified",
145
+ "note": "Original-source fixed64, camera reset/refinement and native UHD1 checks passed. Released renderer 0.2.51 and shared 1.1.8 are required; production verification pending."
146
+ },
147
+ {
148
+ "key": "island_tree_01",
149
+ "batch": 2,
150
+ "status": "held",
151
+ "note": "Source LOD0 has 1,599,403 triangles, above the unchanged 500,000-triangle inspection budget. Requires suitable LOD preparation; original asset not substituted."
152
+ },
153
+ {
154
+ "key": "jacaranda_tree",
155
+ "batch": 2,
156
+ "status": "held",
157
+ "note": "Source LOD0 has 3,863,832 triangles, above the unchanged 500,000-triangle inspection budget. Requires suitable LOD preparation; original asset not substituted."
158
+ },
159
+ {
160
+ "key": "pine_tree_01",
161
+ "batch": 2,
162
+ "status": "held",
163
+ "note": "Source LOD0 has 17,182,252 triangles, above the unchanged 500,000-triangle inspection budget. Requires suitable LOD preparation; original asset not substituted."
164
+ },
165
+ {
166
+ "key": "searsia_lucida",
167
+ "batch": 2,
168
+ "status": "qualified",
169
+ "note": "Original-source fixed64, camera reset/refinement and native UHD1 checks passed. Released renderer 0.2.51 and shared 1.1.8 are required; production verification pending."
170
+ },
171
+ {
172
+ "key": "boulder_01",
173
+ "batch": 2,
174
+ "status": "qualified",
175
+ "note": "Original-source fixed64, camera reset/refinement and native UHD1 checks passed. Released renderer 0.2.51 and shared 1.1.8 are required; production verification pending."
176
+ },
177
+ {
178
+ "key": "coastal_cliff_01",
179
+ "batch": 2,
180
+ "status": "qualified",
181
+ "note": "Original-source fixed64, camera reset/refinement and native UHD1 checks passed. Released renderer 0.2.51 and shared 1.1.8 are required; production verification pending."
182
+ },
183
+ {
184
+ "key": "dead_tree_trunk",
185
+ "batch": 2,
186
+ "status": "qualified",
187
+ "note": "Original-source fixed64, camera reset/refinement and native UHD1 checks passed. Released renderer 0.2.51 and shared 1.1.8 are required; production verification pending."
188
+ },
189
+ {
190
+ "key": "food_pomegranate_01",
191
+ "batch": 3,
192
+ "status": "researched",
193
+ "note": "Awaiting acquisition and Plasius visual qualification."
194
+ },
195
+ {
196
+ "key": "lambis_shell",
197
+ "batch": 3,
198
+ "status": "researched",
199
+ "note": "Awaiting acquisition and Plasius visual qualification."
200
+ },
201
+ {
202
+ "key": "rock_face_01",
203
+ "batch": 3,
204
+ "status": "researched",
205
+ "note": "Awaiting acquisition and Plasius visual qualification."
206
+ },
207
+ {
208
+ "key": "tree_stump_01",
209
+ "batch": 3,
210
+ "status": "researched",
211
+ "note": "Awaiting acquisition and Plasius visual qualification."
212
+ },
213
+ {
214
+ "key": "ArmChair_01",
215
+ "batch": 3,
216
+ "status": "researched",
217
+ "note": "Awaiting acquisition and Plasius visual qualification."
218
+ },
219
+ {
220
+ "key": "fishermans_hat",
221
+ "batch": 3,
222
+ "status": "researched",
223
+ "note": "Awaiting acquisition and Plasius visual qualification."
224
+ },
225
+ {
226
+ "key": "rubber_boots",
227
+ "batch": 3,
228
+ "status": "researched",
229
+ "note": "Awaiting acquisition and Plasius visual qualification."
230
+ },
231
+ {
232
+ "key": "SheenChair",
233
+ "batch": 3,
234
+ "status": "researched",
235
+ "note": "Awaiting acquisition and Plasius visual qualification."
236
+ },
237
+ {
238
+ "key": "SheenCloth",
239
+ "batch": 3,
240
+ "status": "researched",
241
+ "note": "Awaiting acquisition and Plasius visual qualification."
242
+ },
243
+ {
244
+ "key": "SheenWoodLeatherSofa",
245
+ "batch": 4,
246
+ "status": "researched",
247
+ "note": "Awaiting acquisition and Plasius visual qualification."
248
+ },
249
+ {
250
+ "key": "SpecularSilkPouf",
251
+ "batch": 4,
252
+ "status": "researched",
253
+ "note": "Awaiting acquisition and Plasius visual qualification."
254
+ },
255
+ {
256
+ "key": "spinning_wheel_01",
257
+ "batch": 4,
258
+ "status": "researched",
259
+ "note": "Awaiting acquisition and Plasius visual qualification."
260
+ },
261
+ {
262
+ "key": "vintage_cabinet_01",
263
+ "batch": 4,
264
+ "status": "researched",
265
+ "note": "Awaiting acquisition and Plasius visual qualification."
266
+ },
267
+ {
268
+ "key": "wicker_basket_01",
269
+ "batch": 4,
270
+ "status": "researched",
271
+ "note": "Awaiting acquisition and Plasius visual qualification."
272
+ },
273
+ {
274
+ "key": "wine_barrel_01",
275
+ "batch": 4,
276
+ "status": "researched",
277
+ "note": "Awaiting acquisition and Plasius visual qualification."
278
+ },
279
+ {
280
+ "key": "bench_vice_01",
281
+ "batch": 4,
282
+ "status": "researched",
283
+ "note": "Awaiting acquisition and Plasius visual qualification."
284
+ },
285
+ {
286
+ "key": "brass_blowtorch",
287
+ "batch": 4,
288
+ "status": "researched",
289
+ "note": "Awaiting acquisition and Plasius visual qualification."
290
+ },
291
+ {
292
+ "key": "Camera_01",
293
+ "batch": 4,
294
+ "status": "researched",
295
+ "note": "Awaiting acquisition and Plasius visual qualification."
296
+ },
297
+ {
298
+ "key": "can_rusted",
299
+ "batch": 5,
300
+ "status": "researched",
301
+ "note": "Awaiting acquisition and Plasius visual qualification."
302
+ },
303
+ {
304
+ "key": "circuit_board",
305
+ "batch": 5,
306
+ "status": "researched",
307
+ "note": "Awaiting acquisition and Plasius visual qualification."
308
+ },
309
+ {
310
+ "key": "FlightHelmet",
311
+ "batch": 5,
312
+ "status": "researched",
313
+ "note": "Awaiting acquisition and Plasius visual qualification."
314
+ },
315
+ {
316
+ "key": "hand_plane_no4",
317
+ "batch": 5,
318
+ "status": "researched",
319
+ "note": "Awaiting acquisition and Plasius visual qualification."
320
+ },
321
+ {
322
+ "key": "metal_tool_chest",
323
+ "batch": 5,
324
+ "status": "researched",
325
+ "note": "Awaiting acquisition and Plasius visual qualification."
326
+ },
327
+ {
328
+ "key": "rusted_spade_01",
329
+ "batch": 5,
330
+ "status": "researched",
331
+ "note": "Awaiting acquisition and Plasius visual qualification."
332
+ },
333
+ {
334
+ "key": "vintage_hand_drill",
335
+ "batch": 5,
336
+ "status": "researched",
337
+ "note": "Awaiting acquisition and Plasius visual qualification."
338
+ },
339
+ {
340
+ "key": "WaterBottle",
341
+ "batch": 5,
342
+ "status": "researched",
343
+ "note": "Awaiting acquisition and Plasius visual qualification."
344
+ },
345
+ {
346
+ "key": "antique_estoc",
347
+ "batch": 5,
348
+ "status": "researched",
349
+ "note": "Awaiting acquisition and Plasius visual qualification."
350
+ },
351
+ {
352
+ "key": "chess_set",
353
+ "batch": 6,
354
+ "status": "researched",
355
+ "note": "Awaiting acquisition and Plasius visual qualification."
356
+ },
357
+ {
358
+ "key": "sf-crystal",
359
+ "batch": 6,
360
+ "status": "researched",
361
+ "note": "Awaiting acquisition and Plasius visual qualification."
362
+ },
363
+ {
364
+ "key": "gothic_statue",
365
+ "batch": 6,
366
+ "status": "researched",
367
+ "note": "Awaiting acquisition and Plasius visual qualification."
368
+ },
369
+ {
370
+ "key": "kite_shield",
371
+ "batch": 6,
372
+ "status": "researched",
373
+ "note": "Awaiting acquisition and Plasius visual qualification."
374
+ },
375
+ {
376
+ "key": "marble_bust_01",
377
+ "batch": 6,
378
+ "status": "researched",
379
+ "note": "Awaiting acquisition and Plasius visual qualification."
380
+ },
381
+ {
382
+ "key": "ABeautifulGame",
383
+ "batch": 6,
384
+ "status": "researched",
385
+ "note": "Awaiting acquisition and Plasius visual qualification."
386
+ },
387
+ {
388
+ "key": "AnisotropyBarnLamp",
389
+ "batch": 6,
390
+ "status": "researched",
391
+ "note": "Awaiting acquisition and Plasius visual qualification."
392
+ },
393
+ {
394
+ "key": "brass_diya_lantern",
395
+ "batch": 6,
396
+ "status": "researched",
397
+ "note": "Awaiting acquisition and Plasius visual qualification."
398
+ },
399
+ {
400
+ "key": "CommercialRefrigerator",
401
+ "batch": 6,
402
+ "status": "researched",
403
+ "note": "Awaiting acquisition and Plasius visual qualification."
404
+ },
405
+ {
406
+ "key": "IridescenceLamp",
407
+ "batch": 7,
408
+ "status": "researched",
409
+ "note": "Awaiting acquisition and Plasius visual qualification."
410
+ },
411
+ {
412
+ "key": "IridescentDishWithOlives",
413
+ "batch": 7,
414
+ "status": "researched",
415
+ "note": "Awaiting acquisition and Plasius visual qualification."
416
+ },
417
+ {
418
+ "key": "magnifying_glass_01",
419
+ "batch": 7,
420
+ "status": "researched",
421
+ "note": "Awaiting acquisition and Plasius visual qualification."
422
+ },
423
+ {
424
+ "key": "StainedGlassLamp",
425
+ "batch": 7,
426
+ "status": "researched",
427
+ "note": "Awaiting acquisition and Plasius visual qualification."
428
+ },
429
+ {
430
+ "key": "wine_bottles_01",
431
+ "batch": 7,
432
+ "status": "researched",
433
+ "note": "Awaiting acquisition and Plasius visual qualification."
434
+ },
435
+ {
436
+ "key": "BarramundiFish",
437
+ "batch": 7,
438
+ "status": "researched",
439
+ "note": "Awaiting acquisition and Plasius visual qualification."
440
+ },
441
+ {
442
+ "key": "MaterialsVariantsShoe",
443
+ "batch": 7,
444
+ "status": "researched",
445
+ "note": "Awaiting acquisition and Plasius visual qualification."
446
+ },
447
+ {
448
+ "key": "ship_pinnace",
449
+ "batch": 7,
450
+ "status": "researched",
451
+ "note": "Awaiting acquisition and Plasius visual qualification."
452
+ },
453
+ {
454
+ "key": "ToyCar",
455
+ "batch": 7,
456
+ "status": "researched",
457
+ "note": "Awaiting acquisition and Plasius visual qualification."
458
+ }
459
+ ],
460
+ "productionTarget": 74
461
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plasius/gpu-demo-viewer",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "type": "module",
5
5
  "description": "Root validation viewer for Plasius gpu-* demos.",
6
6
  "license": "Apache-2.0",
@@ -18,7 +18,8 @@
18
18
  "exports": {
19
19
  ".": "./viewer-manifest.js",
20
20
  "./viewer-manifest": "./viewer-manifest.js",
21
- "./package.json": "./package.json"
21
+ "./package.json": "./package.json",
22
+ "./model-library/acquire": "./model-library/acquire.js"
22
23
  },
23
24
  "files": [
24
25
  "assets/",
@@ -46,15 +47,15 @@
46
47
  "lint": "npm run typecheck",
47
48
  "pack:check": "node scripts/verify-public-package.cjs",
48
49
  "prepublishOnly": "npm run build && npm run pack:check",
49
- "typecheck": "node --check index.js && node --check main.js && node --check viewer-manifest.js && node --check showcase/index.js && node --check showcase/main.js && node --check wavefront/main.js && node --check model-library/main.js && node --check model-library/controller.js && node --check model-library/acquire.js",
50
+ "typecheck": "node --check index.js && node --check main.js && node --check viewer-manifest.js && node --check showcase/index.js && node --check showcase/main.js && node --check wavefront/main.js && node --check model-library/main.js && node --check model-library/controller.js && node --check model-library/acquire.js && node --check model-library/rollout.js",
50
51
  "test": "node --test",
51
52
  "models:download": "node scripts/acquire-model-library.mjs",
52
53
  "models:dev": "vite --config model-library/vite.config.js",
53
54
  "test:coverage": "c8 --reporter=lcov --reporter=text node --test"
54
55
  },
55
56
  "dependencies": {
56
- "@plasius/gpu-renderer": "^0.2.49",
57
- "@plasius/gpu-shared": "^1.1.7"
57
+ "@plasius/gpu-renderer": "^0.2.51",
58
+ "@plasius/gpu-shared": "^1.1.8"
58
59
  },
59
60
  "devDependencies": {
60
61
  "c8": "^11.0.0",
@@ -1,8 +1,11 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import { acquireFixtures } from '../model-library/acquire.js';
4
- export async function run(acquire=acquireFixtures) {
4
+ import { selectBatch } from '../model-library/rollout.js';
5
+ export async function run(acquire=acquireFixtures,batch=0) {
5
6
  const {assets}=JSON.parse(await readFile(new URL('../model-library/catalogue.json',import.meta.url),'utf8'));
6
- return acquire({assets,root:fileURLToPath(new URL('../model-library/assets/',import.meta.url))});
7
+ const {entries}=JSON.parse(await readFile(new URL('../model-library/rollout.json',import.meta.url),'utf8'));
8
+ const keys=new Set(selectBatch(entries,batch).map(entry=>entry.key));
9
+ return acquire({assets:assets.filter(asset=>keys.has(asset.key)),root:fileURLToPath(new URL('../model-library/assets/',import.meta.url))});
7
10
  }
8
- if(process.argv[1]===fileURLToPath(import.meta.url))console.log(await run());
11
+ if(process.argv[1]===fileURLToPath(import.meta.url))console.log(await run(undefined,process.argv[2]===undefined?0:Number(process.argv[2])));
@@ -11,7 +11,7 @@ export const demos = [
11
11
  docsPath: "./docs/model-library-review.md",
12
12
  command: "npm run models:download && npm run models:dev",
13
13
  summary: "Inspect eleven acquired models with original materials, source credits and explicit rendering findings.",
14
- notes: ["Requires the released shared model-inspection entrypoint, or the documented local source override.", "Gem remains deferred. Fox is static; amber has a recorded material defect."],
14
+ notes: ["Requires the released shared model-inspection entrypoint, or the documented local source override.", "Gem is excluded from this rollout by request. Fox is static; Amber requires renderer 0.2.50 or later for corrected fixed transmission."],
15
15
  tags: ["browser", "3d", "experimental"]
16
16
  },
17
17
  {