@kubohiroya/turbowarp-realtime-motion-capture 0.2.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 (62) hide show
  1. package/LICENSE +373 -0
  2. package/README.ja.md +89 -0
  3. package/README.md +113 -0
  4. package/THIRD_PARTY_NOTICES.md +31 -0
  5. package/config/feature-flags.ts +28 -0
  6. package/config/qr-config.ts +19 -0
  7. package/dist/extension-manifest.json +664 -0
  8. package/dist/turbowarp-realtime-motion-capture.js +82631 -0
  9. package/docs/architecture.ja.md +256 -0
  10. package/docs/architecture.md +294 -0
  11. package/docs/index.html +83 -0
  12. package/docs/turbowarp-extension-api.ja.md +157 -0
  13. package/docs/turbowarp-extension-api.md +1033 -0
  14. package/package.json +105 -0
  15. package/schemas/camera-calibration-v1.json +209 -0
  16. package/schemas/extension-manifest.schema.json +49 -0
  17. package/schemas/performance-dsl-v1.json +72 -0
  18. package/schemas/pose-frame-2d-v1.json +626 -0
  19. package/schemas/pose-frame-2d-v2.json +723 -0
  20. package/schemas/pose-frame-3d-v1.json +714 -0
  21. package/schemas/session-policy-v1.json +138 -0
  22. package/src/avatar/aframe-port.ts +39 -0
  23. package/src/avatar/controller.ts +541 -0
  24. package/src/avatar/kalidokit-adapter.ts +193 -0
  25. package/src/avatar/types.ts +119 -0
  26. package/src/block-definitions.json +810 -0
  27. package/src/calibration/controller.ts +564 -0
  28. package/src/calibration/opencv-backend.ts +347 -0
  29. package/src/calibration/types.ts +53 -0
  30. package/src/config.ts +13 -0
  31. package/src/extension-manifest.ts +182 -0
  32. package/src/extension.ts +913 -0
  33. package/src/frame-sync/controller.ts +416 -0
  34. package/src/frame-sync/detector.ts +278 -0
  35. package/src/frame-sync/pattern-display.ts +161 -0
  36. package/src/frame-sync/pattern.ts +88 -0
  37. package/src/frame-sync/time-source.ts +36 -0
  38. package/src/frame-sync/types.ts +39 -0
  39. package/src/frame-sync/video-frame-pump.ts +116 -0
  40. package/src/fusion/controller.ts +554 -0
  41. package/src/fusion/fuse.ts +385 -0
  42. package/src/fusion/geometry.ts +474 -0
  43. package/src/fusion/glow-stick.ts +173 -0
  44. package/src/fusion/identity.ts +112 -0
  45. package/src/fusion/jitter-buffer.ts +439 -0
  46. package/src/fusion/types.ts +103 -0
  47. package/src/globals.d.ts +57 -0
  48. package/src/index.ts +8 -0
  49. package/src/markers/canvas-sampler.ts +59 -0
  50. package/src/markers/color.ts +53 -0
  51. package/src/markers/sampler.ts +185 -0
  52. package/src/markers/types.ts +49 -0
  53. package/src/pose/controller.ts +388 -0
  54. package/src/pose/pose-frame.ts +128 -0
  55. package/src/pose/tfjs-movenet.ts +34 -0
  56. package/src/pose/types.ts +116 -0
  57. package/src/protocol/codec.ts +248 -0
  58. package/src/protocol/schemas.ts +283 -0
  59. package/src/qr-courier.ts +289 -0
  60. package/src/qr-svg.ts +39 -0
  61. package/src/sprite-skin.ts +112 -0
  62. package/src/webrtc-capability.ts +38 -0
@@ -0,0 +1,664 @@
1
+ {
2
+ "formatVersion": 1,
3
+ "id": "kubohiroyarealtimemotioncapture",
4
+ "blocks": [
5
+ {
6
+ "opcode": "addCameraCalibrationSample",
7
+ "blockType": "COMMAND",
8
+ "arguments": []
9
+ },
10
+ {
11
+ "opcode": "applyPoseFrame3DToAvatars",
12
+ "blockType": "COMMAND",
13
+ "arguments": [
14
+ {
15
+ "id": "POSE2D_JSON",
16
+ "type": "STRING"
17
+ },
18
+ {
19
+ "id": "POSE3D_JSON",
20
+ "type": "STRING"
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "opcode": "avatarBindingCount",
26
+ "blockType": "REPORTER",
27
+ "arguments": []
28
+ },
29
+ {
30
+ "opcode": "avatarRetargetError",
31
+ "blockType": "REPORTER",
32
+ "arguments": []
33
+ },
34
+ {
35
+ "opcode": "avatarRetargetState",
36
+ "blockType": "REPORTER",
37
+ "arguments": []
38
+ },
39
+ {
40
+ "opcode": "avatarUpdatedCount",
41
+ "blockType": "REPORTER",
42
+ "arguments": []
43
+ },
44
+ {
45
+ "opcode": "bindAvatarPerson",
46
+ "blockType": "COMMAND",
47
+ "arguments": [
48
+ {
49
+ "id": "ASSET_ID",
50
+ "type": "STRING"
51
+ },
52
+ {
53
+ "id": "CONFIDENCE",
54
+ "type": "NUMBER"
55
+ },
56
+ {
57
+ "id": "INSTANCE_ID",
58
+ "type": "STRING"
59
+ },
60
+ {
61
+ "id": "PARENT",
62
+ "type": "STRING"
63
+ },
64
+ {
65
+ "id": "PERSON_ID",
66
+ "type": "STRING"
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ "opcode": "bufferPoseFrame2D",
72
+ "blockType": "COMMAND",
73
+ "arguments": [
74
+ {
75
+ "id": "JSON",
76
+ "type": "STRING"
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "opcode": "calibrateFrameSyncDecoder",
82
+ "blockType": "COMMAND",
83
+ "arguments": [
84
+ {
85
+ "id": "SECONDS",
86
+ "type": "NUMBER"
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ "opcode": "cameraCalibrationBackend",
92
+ "blockType": "REPORTER",
93
+ "arguments": []
94
+ },
95
+ {
96
+ "opcode": "cameraCalibrationError",
97
+ "blockType": "REPORTER",
98
+ "arguments": []
99
+ },
100
+ {
101
+ "opcode": "cameraCalibrationErrorCode",
102
+ "blockType": "REPORTER",
103
+ "arguments": []
104
+ },
105
+ {
106
+ "opcode": "cameraCalibrationJson",
107
+ "blockType": "REPORTER",
108
+ "arguments": []
109
+ },
110
+ {
111
+ "opcode": "cameraCalibrationJsonValid",
112
+ "blockType": "BOOLEAN",
113
+ "arguments": [
114
+ {
115
+ "id": "JSON",
116
+ "type": "STRING"
117
+ }
118
+ ]
119
+ },
120
+ {
121
+ "opcode": "cameraCalibrationReady",
122
+ "blockType": "BOOLEAN",
123
+ "arguments": []
124
+ },
125
+ {
126
+ "opcode": "cameraCalibrationReprojectionError",
127
+ "blockType": "REPORTER",
128
+ "arguments": []
129
+ },
130
+ {
131
+ "opcode": "cameraCalibrationSampleCount",
132
+ "blockType": "REPORTER",
133
+ "arguments": []
134
+ },
135
+ {
136
+ "opcode": "cameraCalibrationSampleQuality",
137
+ "blockType": "REPORTER",
138
+ "arguments": []
139
+ },
140
+ {
141
+ "opcode": "cameraCalibrationState",
142
+ "blockType": "REPORTER",
143
+ "arguments": []
144
+ },
145
+ {
146
+ "opcode": "cancelCameraCalibration",
147
+ "blockType": "COMMAND",
148
+ "arguments": []
149
+ },
150
+ {
151
+ "opcode": "cleanupCameraCalibration",
152
+ "blockType": "COMMAND",
153
+ "arguments": []
154
+ },
155
+ {
156
+ "opcode": "cleanupPoseFusion",
157
+ "blockType": "COMMAND",
158
+ "arguments": []
159
+ },
160
+ {
161
+ "opcode": "createAndShowOfferQr",
162
+ "blockType": "COMMAND",
163
+ "arguments": [
164
+ {
165
+ "id": "PEER",
166
+ "type": "STRING"
167
+ }
168
+ ]
169
+ },
170
+ {
171
+ "opcode": "decodeProtocolJson",
172
+ "blockType": "COMMAND",
173
+ "arguments": [
174
+ {
175
+ "id": "JSON",
176
+ "type": "STRING"
177
+ }
178
+ ]
179
+ },
180
+ {
181
+ "opcode": "decodedProtocolJson",
182
+ "blockType": "REPORTER",
183
+ "arguments": []
184
+ },
185
+ {
186
+ "opcode": "disableGlowStickMarkers",
187
+ "blockType": "COMMAND",
188
+ "arguments": []
189
+ },
190
+ {
191
+ "opcode": "enableGlowStickMarkers",
192
+ "blockType": "COMMAND",
193
+ "arguments": [
194
+ {
195
+ "id": "KEYPOINTS",
196
+ "type": "STRING"
197
+ }
198
+ ]
199
+ },
200
+ {
201
+ "opcode": "encodeProtocolJson",
202
+ "blockType": "REPORTER",
203
+ "arguments": [
204
+ {
205
+ "id": "JSON",
206
+ "type": "STRING"
207
+ }
208
+ ]
209
+ },
210
+ {
211
+ "opcode": "endOfferQrDisplay",
212
+ "blockType": "COMMAND",
213
+ "arguments": []
214
+ },
215
+ {
216
+ "opcode": "frameSyncDecodeRate",
217
+ "blockType": "REPORTER",
218
+ "arguments": []
219
+ },
220
+ {
221
+ "opcode": "frameSyncDecoderError",
222
+ "blockType": "REPORTER",
223
+ "arguments": []
224
+ },
225
+ {
226
+ "opcode": "frameSyncDecoderState",
227
+ "blockType": "REPORTER",
228
+ "arguments": []
229
+ },
230
+ {
231
+ "opcode": "frameSyncFrameAgeUs",
232
+ "blockType": "REPORTER",
233
+ "arguments": []
234
+ },
235
+ {
236
+ "opcode": "frameSyncFrameTimestampUs",
237
+ "blockType": "REPORTER",
238
+ "arguments": []
239
+ },
240
+ {
241
+ "opcode": "frameSyncObservationAvailable",
242
+ "blockType": "BOOLEAN",
243
+ "arguments": []
244
+ },
245
+ {
246
+ "opcode": "frameSyncPatternShown",
247
+ "blockType": "BOOLEAN",
248
+ "arguments": []
249
+ },
250
+ {
251
+ "opcode": "frameSyncPatternTimestampUs",
252
+ "blockType": "REPORTER",
253
+ "arguments": []
254
+ },
255
+ {
256
+ "opcode": "frameSyncPatternWrapUs",
257
+ "blockType": "REPORTER",
258
+ "arguments": []
259
+ },
260
+ {
261
+ "opcode": "fuseBufferedPoseFrame3D",
262
+ "blockType": "COMMAND",
263
+ "arguments": []
264
+ },
265
+ {
266
+ "opcode": "fusePoseFrame3DAt",
267
+ "blockType": "COMMAND",
268
+ "arguments": [
269
+ {
270
+ "id": "TIMESTAMP_US",
271
+ "type": "NUMBER"
272
+ }
273
+ ]
274
+ },
275
+ {
276
+ "opcode": "glowStickMarkerCount",
277
+ "blockType": "REPORTER",
278
+ "arguments": []
279
+ },
280
+ {
281
+ "opcode": "glowStickPaletteSize",
282
+ "blockType": "REPORTER",
283
+ "arguments": []
284
+ },
285
+ {
286
+ "opcode": "hideFrameSyncPattern",
287
+ "blockType": "COMMAND",
288
+ "arguments": []
289
+ },
290
+ {
291
+ "opcode": "identifiedPerformerCount",
292
+ "blockType": "REPORTER",
293
+ "arguments": []
294
+ },
295
+ {
296
+ "opcode": "importCameraCalibration",
297
+ "blockType": "COMMAND",
298
+ "arguments": [
299
+ {
300
+ "id": "JSON",
301
+ "type": "STRING"
302
+ }
303
+ ]
304
+ },
305
+ {
306
+ "opcode": "inferNextPoseFrame",
307
+ "blockType": "COMMAND",
308
+ "arguments": [
309
+ {
310
+ "id": "CAPTURE_TIMESTAMP_US",
311
+ "type": "NUMBER"
312
+ }
313
+ ]
314
+ },
315
+ {
316
+ "opcode": "latestPoseFrame2D",
317
+ "blockType": "REPORTER",
318
+ "arguments": []
319
+ },
320
+ {
321
+ "opcode": "latestPoseFrame3D",
322
+ "blockType": "REPORTER",
323
+ "arguments": []
324
+ },
325
+ {
326
+ "opcode": "loadFusionCameraCalibration",
327
+ "blockType": "COMMAND",
328
+ "arguments": [
329
+ {
330
+ "id": "JSON",
331
+ "type": "STRING"
332
+ }
333
+ ]
334
+ },
335
+ {
336
+ "opcode": "loadGlowStickPalette",
337
+ "blockType": "COMMAND",
338
+ "arguments": [
339
+ {
340
+ "id": "JSON",
341
+ "type": "STRING"
342
+ }
343
+ ]
344
+ },
345
+ {
346
+ "opcode": "mirrorCorrectedViewCount",
347
+ "blockType": "REPORTER",
348
+ "arguments": []
349
+ },
350
+ {
351
+ "opcode": "offerQrCurrentPart",
352
+ "blockType": "REPORTER",
353
+ "arguments": []
354
+ },
355
+ {
356
+ "opcode": "offerQrError",
357
+ "blockType": "REPORTER",
358
+ "arguments": []
359
+ },
360
+ {
361
+ "opcode": "offerQrPartCount",
362
+ "blockType": "REPORTER",
363
+ "arguments": []
364
+ },
365
+ {
366
+ "opcode": "offerQrState",
367
+ "blockType": "REPORTER",
368
+ "arguments": []
369
+ },
370
+ {
371
+ "opcode": "poseBackend",
372
+ "blockType": "REPORTER",
373
+ "arguments": []
374
+ },
375
+ {
376
+ "opcode": "poseError",
377
+ "blockType": "REPORTER",
378
+ "arguments": []
379
+ },
380
+ {
381
+ "opcode": "poseErrorCode",
382
+ "blockType": "REPORTER",
383
+ "arguments": []
384
+ },
385
+ {
386
+ "opcode": "poseFusionBufferedFrameCount",
387
+ "blockType": "REPORTER",
388
+ "arguments": []
389
+ },
390
+ {
391
+ "opcode": "poseFusionCameraCount",
392
+ "blockType": "REPORTER",
393
+ "arguments": []
394
+ },
395
+ {
396
+ "opcode": "poseFusionDroppedFrameCount",
397
+ "blockType": "REPORTER",
398
+ "arguments": []
399
+ },
400
+ {
401
+ "opcode": "poseFusionError",
402
+ "blockType": "REPORTER",
403
+ "arguments": []
404
+ },
405
+ {
406
+ "opcode": "poseFusionErrorCode",
407
+ "blockType": "REPORTER",
408
+ "arguments": []
409
+ },
410
+ {
411
+ "opcode": "poseFusionPersonCount",
412
+ "blockType": "REPORTER",
413
+ "arguments": []
414
+ },
415
+ {
416
+ "opcode": "poseFusionReady",
417
+ "blockType": "BOOLEAN",
418
+ "arguments": []
419
+ },
420
+ {
421
+ "opcode": "poseFusionReprojectionErrorPx",
422
+ "blockType": "REPORTER",
423
+ "arguments": []
424
+ },
425
+ {
426
+ "opcode": "poseFusionState",
427
+ "blockType": "REPORTER",
428
+ "arguments": []
429
+ },
430
+ {
431
+ "opcode": "poseFusionTimestampUs",
432
+ "blockType": "REPORTER",
433
+ "arguments": []
434
+ },
435
+ {
436
+ "opcode": "posePipelineState",
437
+ "blockType": "REPORTER",
438
+ "arguments": []
439
+ },
440
+ {
441
+ "opcode": "prepareOfferQr",
442
+ "blockType": "COMMAND",
443
+ "arguments": [
444
+ {
445
+ "id": "PEER",
446
+ "type": "STRING"
447
+ }
448
+ ]
449
+ },
450
+ {
451
+ "opcode": "protocolErrorMessage",
452
+ "blockType": "REPORTER",
453
+ "arguments": []
454
+ },
455
+ {
456
+ "opcode": "protocolErrorPath",
457
+ "blockType": "REPORTER",
458
+ "arguments": []
459
+ },
460
+ {
461
+ "opcode": "protocolJsonValid",
462
+ "blockType": "BOOLEAN",
463
+ "arguments": [
464
+ {
465
+ "id": "JSON",
466
+ "type": "STRING"
467
+ }
468
+ ]
469
+ },
470
+ {
471
+ "opcode": "protocolSchema",
472
+ "blockType": "REPORTER",
473
+ "arguments": []
474
+ },
475
+ {
476
+ "opcode": "protocolVersion",
477
+ "blockType": "REPORTER",
478
+ "arguments": []
479
+ },
480
+ {
481
+ "opcode": "registerAvatarAsset",
482
+ "blockType": "COMMAND",
483
+ "arguments": [
484
+ {
485
+ "id": "ASSET_ID",
486
+ "type": "STRING"
487
+ },
488
+ {
489
+ "id": "RIG_JSON",
490
+ "type": "STRING"
491
+ },
492
+ {
493
+ "id": "TEMPLATE_JSON",
494
+ "type": "STRING"
495
+ }
496
+ ]
497
+ },
498
+ {
499
+ "opcode": "resetAvatarRetarget",
500
+ "blockType": "COMMAND",
501
+ "arguments": []
502
+ },
503
+ {
504
+ "opcode": "setPerformerGlowStick",
505
+ "blockType": "COMMAND",
506
+ "arguments": [
507
+ {
508
+ "id": "KEYPOINT",
509
+ "type": "STRING"
510
+ },
511
+ {
512
+ "id": "PERFORMER_ID",
513
+ "type": "STRING"
514
+ }
515
+ ]
516
+ },
517
+ {
518
+ "opcode": "showFrameSyncPattern",
519
+ "blockType": "COMMAND",
520
+ "arguments": []
521
+ },
522
+ {
523
+ "opcode": "showNextOfferQrPart",
524
+ "blockType": "COMMAND",
525
+ "arguments": []
526
+ },
527
+ {
528
+ "opcode": "showOfferQrPart",
529
+ "blockType": "COMMAND",
530
+ "arguments": [
531
+ {
532
+ "id": "INDEX",
533
+ "type": "NUMBER"
534
+ }
535
+ ]
536
+ },
537
+ {
538
+ "opcode": "solveCameraCalibration",
539
+ "blockType": "COMMAND",
540
+ "arguments": []
541
+ },
542
+ {
543
+ "opcode": "startCameraCalibration",
544
+ "blockType": "COMMAND",
545
+ "arguments": [
546
+ {
547
+ "id": "CALIBRATION_ID",
548
+ "type": "STRING"
549
+ },
550
+ {
551
+ "id": "CAMERA_ID",
552
+ "type": "STRING"
553
+ },
554
+ {
555
+ "id": "COLUMNS",
556
+ "type": "NUMBER"
557
+ },
558
+ {
559
+ "id": "MAX_ERROR_PX",
560
+ "type": "NUMBER"
561
+ },
562
+ {
563
+ "id": "ROWS",
564
+ "type": "NUMBER"
565
+ },
566
+ {
567
+ "id": "SQUARE_METERS",
568
+ "type": "NUMBER"
569
+ }
570
+ ]
571
+ },
572
+ {
573
+ "opcode": "startFrameSyncDecoder",
574
+ "blockType": "COMMAND",
575
+ "arguments": [
576
+ {
577
+ "id": "CAMERA_ID",
578
+ "type": "STRING"
579
+ },
580
+ {
581
+ "id": "SECONDS",
582
+ "type": "NUMBER"
583
+ }
584
+ ]
585
+ },
586
+ {
587
+ "opcode": "startPoseFusion",
588
+ "blockType": "COMMAND",
589
+ "arguments": [
590
+ {
591
+ "id": "DELAY_MS",
592
+ "type": "NUMBER"
593
+ },
594
+ {
595
+ "id": "JITTER_MS",
596
+ "type": "NUMBER"
597
+ },
598
+ {
599
+ "id": "MIN_SCORE",
600
+ "type": "NUMBER"
601
+ }
602
+ ]
603
+ },
604
+ {
605
+ "opcode": "startWebGpuMoveNetMultiPose",
606
+ "blockType": "COMMAND",
607
+ "arguments": [
608
+ {
609
+ "id": "CALIBRATION_ID",
610
+ "type": "STRING"
611
+ },
612
+ {
613
+ "id": "CAMERA_ID",
614
+ "type": "STRING"
615
+ },
616
+ {
617
+ "id": "PEER_ID",
618
+ "type": "STRING"
619
+ }
620
+ ]
621
+ },
622
+ {
623
+ "opcode": "stopFrameSyncDecoder",
624
+ "blockType": "COMMAND",
625
+ "arguments": []
626
+ },
627
+ {
628
+ "opcode": "stopPoseFusion",
629
+ "blockType": "COMMAND",
630
+ "arguments": []
631
+ },
632
+ {
633
+ "opcode": "stopWebGpuMoveNetMultiPose",
634
+ "blockType": "COMMAND",
635
+ "arguments": []
636
+ },
637
+ {
638
+ "opcode": "synchronizedPoseSet2D",
639
+ "blockType": "REPORTER",
640
+ "arguments": []
641
+ },
642
+ {
643
+ "opcode": "takeFrameSyncObservation",
644
+ "blockType": "COMMAND",
645
+ "arguments": []
646
+ },
647
+ {
648
+ "opcode": "unbindAvatarPerson",
649
+ "blockType": "COMMAND",
650
+ "arguments": [
651
+ {
652
+ "id": "PERSON_ID",
653
+ "type": "STRING"
654
+ }
655
+ ]
656
+ },
657
+ {
658
+ "opcode": "webGpuMoveNetReady",
659
+ "blockType": "BOOLEAN",
660
+ "arguments": []
661
+ }
662
+ ],
663
+ "menus": []
664
+ }